一、ansible playbook简单使用
相当于是把模块写入到配置文件里面
vim /etc/ansible/test.yml //写入如下内容:
--- - hosts: 127.0.0.1 remote_user: root tasks: - name: test_playbook shell: touch /tmp/test.txt
PS: 第一行是固定写法,hosts指定对哪些主机进行操作,如果是多台可以用逗号分隔,也可以使用主机组,如testhost
user参数指定使用什么用户登录远程机器
tasks指定一个任务,name为对任务的描述,执行过程中会打印出来,shell是ansible模块名字,执行test.yml
ansible-playbook test.yml
二、playbook设置变量
vim /etc/ansible/create_user.yml //创建一个用户:
--- - name: create_user hosts: 127.0.0.1 user: root gather_facts: false vars: - user: "test" tasks: - name: create user user: name="{{ user }}"
PS: name参数对该playbook做一个描述,可以省略;gather_facts参数指定在以下任务部分执行前,是否执行setup模块获取主机相关信息;vars参数,指定变量,这里指定一个user变量,值为test,值一定要用引号引住;
tasks里面的user为一个模块,下面的name为user模块的一个参数,增加的用户名字调用了上面user变量的值。
三、playbook循环
vim /etc/ansible/while.yml //创建文件以及修改权限:
--- - hosts: 127.0.0.1 user: root gather_facts: false tasks: - name: touch files and change mode for files file: path=/tmp/{{ item }} state=touch mode=600 with_items: - 1.txt - 2.txt - 3.txt
PS: with_items为循环的对象
四、playbook中的条件判断
vim /etc/ansible/when.yml //写入如下内容:
--- - hosts: testhost user: root gather_facts: True tasks: - name: user when shell: touch /tmp/when.txt when: ansible_eno16777736.ipv4.address=="192.168.1.99"
PS: 只有满足when里面的条件时,才会去执行shell里面的内容;ansible 127.0.0.1 -m setup可以查看所有facter信息,即when里面条件在这里面去设置。
五、playbook中的handlers(tasks满足条件之后才执行)
vim /etc/ansible/handlers //写入如下内容:
--- - name: handlers test hosts: 127.0.0.1 user: root tasks: - name: copy file copy: src=/etc/passwd dest=/tmp/aaa.txt notify: test handlers handlers: - name: test handlers shell: echo "1111" >> /tmp/aaa.txt
PS:只有当copy模块真正执行后,才会去调用下面handlers相关操作,copy与notify的顺序没有关系;如果aaa.txt与passwd内容是一样的,就不会去执行handlers里面的shell命令。适用于配置文件发生更改后重启服务的操作。