警告
本文最后更新于 2022-10-21 20:41,文中内容可能已过时。
playbook配置项说明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| ---
- hosts: webservers # 执行任务的主机(all,组名称,ip...)
vars: # 定义变量。引用方式:{{变量名}}
http_port: 80
max_clients: 200
remote_user: root # 在远程主机上执行任务的用户
tasks: # 要执行的任务列表
- name: ensure apache is at the latest version # 任务名称(注释)
yum: pkg=httpd state=latest # 指定yum模块,并写入相应模块的使用语法
- name: copy config file
copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: restart apache # 触发handlers中定义的restart apache
- name: ensure apache is running
service: name=httpd state=started
handlers: # 任务,与tasks不同的是只有在接受到通知时才会被触发
- name: restart apache
service: name=httpd state=restarted
|
使用剧本:
ansible-playbook -C 02-cron.yml # 检查剧本,剧本中存在变量时检查会报错
ansible-playbook 02-cron.yml # 执行剧本
举例:
1
2
3
4
5
6
7
8
9
10
| ---
- hosts: web
tasks:
- name: show hostname
command: hostname
---
- hosts: web
tasks:
- name: add cron
cron: name="ansible test" minute=10 job="ntedate time.windows.com >/dev/null 2>&1" state=present
|
register类型变量:
1
2
3
4
5
6
7
8
| ---
- hosts: web
tasks:
- name: show ip address
shell: hostname -I | awk '{print $2}'
register: ip
- name: print ip var to file
shell: echo {{ip}} > /tmp/ip
|
上面的剧本首先执行查ip的命令,将执行结果通过register变量赋值给变量ip,然后在将变量ip中的内容追加到文件中。
执行结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
| {
stderr_lines: [],
uchanged: True,
uend: u2019-03-06 21:34:22.662536,
failed: False,
ustdout: u172.16.1.7,
ucmd: uhostname -I | awk '{print }',
urc: 0,
ustart: u2019-03-06 21:34:22.651661,
ustderr: u,
udelta: u0:00:00.010875,
stdout_lines: [u172.16.1.7]
}
|
我们想要的结果是ip,其他的内容不需要,所以在调用变量得时候使用ip.stdout,即:
1
2
3
4
5
6
7
8
| ---
- hosts: web
tasks:
- name: show ip address
shell: hostname -I | awk '{print $2}'
register: ip
- name: print ip var to file
shell: echo {{ip.stdout}} > /tmp/ip
|
在屏幕中显示剧本的执行结果:
1
2
3
4
5
6
7
8
| ---
- hosts: web
tasks:
- name: show hostname
command: hostname
register: name
- name: print hostname
debug: msg={{name.stdout}}
|
这里用到debug模块,msg表示打印自定义消息,内容就是我们获取到结果的变量。
循环:
1
2
3
4
5
6
7
8
9
| ---
- hosts: web
tasks:
- name: print loop debug
debug: msg={{item}}
with_items:
- 1
- 2
- 3
|
判断:
1
2
3
4
5
6
| ---
- hosts: all
tasks:
- name: yum install nfs-utils rpcbind
yum: name=nfs-utils,rpcbind state=present
when: ( ansible_hostname == "nfs01" ) or ( ansible_hostname == "backup" )
|
只有主机名是nfs01或backup时安装nfs-utils rpcbind
ansible_hostname等变量可以使用以下命令查询
ansilbe ip -m setup