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