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

  

   

 

 

 

 

 

 

 

posted @ 2022-05-25 09:35  QV  阅读(51)  评论(0编辑  收藏  举报