笔者:
把以前的手写笔记电子化吧,顺便当作复习。
基础命令
命令 | 参数 | 备注 |
ansible | --version | 查看版本号 |
ansible-doc | --help | 查看帮助信息 |
-l |--list | 查看所有模块 | |
-s | 查看模块摘要 | |
Ansible servers | -I |--list | 指定主机文件配置 |
-a | 指定模块所需要的参数 | |
-m | 指定模块 | |
Ansible-inventory | 用于管理主机配置文件 | |
-i | 指定文件配置 | |
--list | 以默认的json格式列出所有主机 | |
--graph | 以图形界面输出主机清单 |
主机清单文件
默认配置文件位于/etc/ansible/hosts
[servers] #定义一个主机组
192.168.1.1 #ip
node01 #主机名
192.168.1.2:23333 #23333为ssh的默认端口
node02:23333
192.168.2.[100:200] #ip 范围
mst[10:20] #主机名范围
192.168.3.[100:200]:23333 #IP范围内的所有主机,默认ssh口 23333
[t1]
169.254.1.1 http_port=808
# ~~~~~~~~~~~~~~
# 主机内的变量名=变量值
[uat]
node01
node02
[uat:vars]
ntp-server=ntp1.aliyun.com # uat组内公用同一个变量
[test]
controlplane env=prod
node01 env=dev
playbook.yaml基本格式
- name: helloworld #playbook名称
hosts: test
vars:
gather_facts: True #收集远程主机facts信息
become: False #是否切换用户
tasks:
- name: helloworld {{ ansible_date_time.iso8601_basic_short }}
copy:
src: /var/tmp/hello.tar.gz
dest: /opt/h.tar.gz
- name: Create the prod_engineer user
user:
name: prod_engineer
comment: Prod engineer
when: '"prod" in env' #只有在主机变量满足时才执行- name: Create the dev_engineer user and give admin
user:
name: dev_engineer
comment: Dev engineer
groups: admin
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_file: .ssh/id_rsa
when: '"dev" in env'- name: get shell result and set a variable
shell: uptime22
failed_when: false #执行失败时不执行后续的任务
register: uptime_r #将运行结果赋值给变量uptime_r
- name: ping #上一个任务失败, 本任务不执行
shell: ping baidu.com
jinja2 file
run_once: yes # 参数表示只运行一次
delegate_to: localhost # 任务只在ansible本机运行
- for循环
{% for host in ansible_play_hosts_all %}
{{ host }} #打印变量
{% endfor %}
- if判断:
{% if 'day' in hostvars[host].uptime.stdout %}
{{ hostvars[host].ansible_hostname }} - has not rebooted today
{% endif %}
模块清单
忘记了就看ansible-doc -s [模块名]
模块 | 参数 | 用途 |
uri | 用于测试到某站点到联通性,并返回结果 | |
url | 需要测试的地址 | |
return_content | 是否返回结果(yes) | |
Dest | 下载的文件放在指定的路径 | |
debug | 用于答应执行过程中的消息/变量 | |
msg | 基础消息 | |
Var | 变量 (register中定义的)或者 fasts收到的变量名 {{ ansible_date_time }} | |
group_by | 根据facts (gather_facts中获得)中的某个字段进行分组 | |
key | 某个指定的字段 | |
parents | 可选,父级所属组 | |
lineinfile | 管理txt中的行数据 | |
path | 指定的文件 | |
Regex | 使用正则选取指定的行 '^var’ | |
Line | 替换指定的值 | |
unarchive | 用于文件解压 | |
src | 指定压缩包 | |
dest | 解压的绝对路径 | |
archive | 用于文件压缩 | |
dest | 生成的压缩包路径 | |
path | 要压缩的文件路径或者列表 (绝对路径) | |
Template | 使用j2模版文件,并将特定文件传送到远程目录 | |
src | j2模版文件,文件中可以加入变量 | |
dest | 目的路径 | |
setup | 查看远程主机信息 | |
Filter | 查看指定的变量eg: ansible_date_time | |
shell | 执行shell脚本,命令用分号; 隔开 | |
ping | 测试到主机的联通性 | |
copy | 用于文件复制 | |
src | 源路径 | |
dest | 目的路径 | |
checksum | 检查文件的一致性,sha1 | |
file | 管理文件&文件属性,可以创建文件夹,调整文件权限等 | |
path | 必须, 指定路径 | |
state | touch 创建空文件,若已存在不处理 directory 创建目录,若已存在不处理 file 确保文件存在并具有指定属性 link 创建连接符号 src指定源路径 hard 创建应连接 src指定源路径 absent 删除文件或目录 | |
src | 指定源路径,搭配其他参数使用 | |
owner | 指定文件所有者 | |
group | 指定用户组 |