playbook基本使用
相当于把模块写入到配置文件里面,例:
[root@geenk03 ~]# cat /etc/ansible/test.yml
---
- hosts: 192.168.1.204
remote_user: root
tasks:
- name: test_playbook
shell: touch /tmp/huansheng.txt
结果;在192.168.1.204上的tmp目录下创建一个huansheng.txt文件
说明: 第一行需要有三个杠,hosts参数指定了对哪些主机进行参作,如果是多台机器可以用逗号作为分隔,也可以使用主机组,在/etc/ansible/hosts里定义;
user参数指定了使用什么用户登录远程主机操作;
tasks指定了一个任务,其下面的name参数同样是对任务的描述,在执行过程中会打印出来,shell是ansible模块名字
执行:ansible-playbook /etc/ansible/test.yml
playbook中的变量使用
创建一个test用户
[root@geenk03 ~]# cat /etc/ansible/test_user.yml
---
- name: create_user
hosts: 192.168.1.204
user: root
# 能让gather_facts在前台不显示,可以减轻ansible压力
gather_facts: false
vars:
#声明变量
- user: "test"
tasks:
- name: create_user
#{{ user}} 相当于shell中的$
user: name="{{ user }}"
结果:在192.168.1.204上创建一个test用户
说明:name参数对该playbook实现的功能做一个概述,后面执行过程中,会打印 name变量的值 ,可以省略;gather_facts参数指定了在以下任务部分执行前,是否先执行setup模块获取主机相关信息,这在后面的task会使用到setup获取的信息时用到;vars参数,指定了变量,这里指字一个user变量,其值为test ,需要注意的是,变量值一定要用引号引住;user提定了调用user模块,name是user模块里的一个参数,而增加的用户名字调用了上面user变量的值。
playbook循环
[root@geenk03 ~]# cat /etc/ansible/test_while.yml
---
- hosts: 192.168.1.204
user: root
tasks:
- name: change mode for files
#{{ itme}} 可以理解为$item
file: path=/tmp/{{ item }} state=touch mode=600
#定义items变量
with_items:
- 1.txt
- 2.txt
- 3.txt
结果:在192.168.1.204上创建3个txt,并且授权为600
说明: with_items为循环的对象
Ansible playbook中的条件判断
[root@geenk03 ~]# cat /etc/ansible/when.yml
---
- hosts: testhost
user: root
gather_facts: True
tasks:
- name: use when
shell: touch /tmp/when.txt
#如果ip为192.168.1.204就创建文件
when: ansible_eth0.ipv4.address == "192.168.1.204"
结果:在192.168.1.204上创建了讴歌when.txt, 192.168.1.203上,没有创建
说明:ansible 192.168.1.204 -m setup 可以查看到所有的facter信息
playbook中的handlers
handlers 类似于shell中的 &&,前面执行成功了才会执行后面的
cat /etc/ansible/handlers.yml
---
- name: handlers test
hosts: 192.168.1.204
user: root
tasks:
- name: copy file
copy: src=/etc/passwd dest=/tmp/aaa.txt
#定义hangdler名字,让下面的hangler模块调用
notify: test handlers
handlers:
- name: test handlers
shell: echo "11111" >> /tmp/aaa.txt
结果:在192.168.1.204上拷贝了passwd文件,名为aaa.txt,并追加内容“11111”
说明:只有copy模块真正执行后,才会去调用下面的handlers相关的操作。反正则不会, 这种比较操作适合配置文件发生更改后,重启服务的操作。