ansible的剧本playbook
ansible的剧本playbook,目的是写ansible脚本用的,遵循的是yaml规范,一般用来写一些配置文件
playbook的建议:建议只有一个hosts,一个tasks
yaml有两种数据结构:
字典 K:V
列表 [ ]
yaml写列表到时候一般用-
比如:
- libai
- dufu
- baijuyi
- wanganshi
上面的-写出来的东西就是一个列表[libai,dufu,baijuyi,wanganshi]
yaml文件示例
vi job.yaml #打开并编写job.yaml文件
job.yaml的内容如下:
- hosts: web #-表示创建一个列表,hosts:web表示创建一个字典,并指明对应的主机
remote_user: root #表示使用playbook的用户
tasks: #tasks里面都是创建的任务
- name: createuser #name表示的是创建任务的注释
user: name=libai home=/opt/libai uid=4000 #user是ansible的user模块,
:后面的是user -a的“”里面写的内容
-name:copy_content
copy:src='源目标地址' desc = “目标地址” #这里的copy也是ansible的copy模块
playbook的使用格式
playbook使用的格式:
ansible-playbook [options] playbook.yml [playbook2 ...]
ansible-playbook 参数 yaml文件
options的参数
-C, --check #白跑,执行但是不会有结果
--list-hosts #列出符合的主机
-f FORKS, --forks=FORKS #做并发,默认为5
--syntax-check #检查语法
-k, --ask-pass #输入密码
playbook的传参(五种方式)
job.yml文件的格式:
- hosts: web
tasks:
- name: create{{user}}
user: name={{user}}
传参的第一种方式:
使用的是-e参数
ansible-playbook -e user=libai job.yml
传参的第二种方式
使用的是更改ansible的hosts文件,在分组的IP地址后面添加参数
[web]
192.168.226.[101:102] user=libai
192.168.226.104 user=dufu
执行是:ansible-playbook job.yml
传参的第三张方式
修改ansible的hosts文件,里面添加如下
[web:vars] #[组名:vars]
user=libai
执行是:ansible-playbook job.yml
传参的第四种方式
通过编写job.yml文件来传参
- hosts: web
vars:
- user: libai
tasks:
- name: create{{user}}
user: name={{user}}
执行是:ansible-playbook job.yml
传参的第五种方式
通过编写job.yml来传参,需要安装bc,yum install bc -y
- hosts: web
tasks:
- name: yum
yum: name=bc
- name: sum
shell: echo 11+22|bc #实现11+22
register: user #这里是注册
- name: echo
shell: echo {{user.stdout}} > /tmp/echo.txt
- name: create{{user.stdout}}
user: name=libai{{user.stdout}}
注:传参的优先级
-e > playbook > hosts
playbook的逻辑运算
判断 when
循环 with_items
when是判断
执行的的是when上面的模块
示例1:
- hosts: web
tasks:
- name: copyfile
copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt
when: ansible_distribution_major_version=="7" #centos7 的时候
- name: copyfile
copy: content="小弦切切如私语" dest=/tmp/a.txt
when: ansible_distribution_major_version=="6" #centos6 的时候
启动:ansible-playbook job.yml
示例2: 通过传值来判断
- hosts: web
tasks:
- name: copyfile
copy: content="大弦嘈嘈如急雨" dest=/tmp/a.txt
when: user=="4"
- name: copyfile
copy: content="小弦切切如私语" dest=/tmp/a.txt
when: user=="3"
启动:ansible-playbook -e user =4 job.yml # 执行when上面的模块
with_items执行循环
示例:
- hosts: web
tasks:
- name: createuser
user: name={{item}}
with_items:
- libai
- dufu
- wanganshi
- name: creategroup
group: name={{item}}
with_items:
- libai1
- dufu1
- wanganshi1
启动:ansible-playbook job.yml
示例2:嵌套循环
- hosts: web
tasks:
- name: crateuser
user: name={{item.name}} group={{item.group}}
with_items:
- {"name":libai,"group":libai1}
- {"name":dufu,"group":dufu1}
- {"name":wanganshi,"group":wanganshi1}
启动:ansible-playbook job.yml

浙公网安备 33010602011771号