ansible-plabook 之 when 判断

条件判断

  • when的值是一个条件表达式,如果条件判断成立,这个task就执行,如果判断不成立,则task不执行
  • 如果需要根据变量、facts(setup)或此前任务的执行结果来作为某task执行与否的前提时要用到条件测试,在Playbook中条件测试使用when子句。
  • 在task后添加when子句即可使用条件测试:when子句支持jinjia2表达式或语法,例如:
  • 1 - name: touch centos
    2   command: touch /home/123.test
    3   when:
    4     - ansible_distribution == "CentOS"
    5     - ansible_distribution_major_version == "7"
    6   tags:
    7   - touch_Cent
    • 条件一:为Centos 系统
    • 条件二:版本号为7
    • 满足这两个条件会在 /home/ 创建 123.test 文件
  • 组条件判断
  • - name: "CentOS 6 and Debian 7 systems"
      command: mkdir  /home/test_new/CentOS -p
      when: (ansible_distribution ==  "CentOS" and ansible_distribution_major_version == "7") or
            (ansible_distribution ==  "Debian" and ansible_distribution_major_version == "6")
      tags:
      - mkdir_Cent
  • 自定义条件判断
  • 迭代  
  • 有需要重性执行的任务时,可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语句指明迭代的元素列表即可。
  • 示例:  

  

- name: Install packages
  yum: name={{ item }} state=present
  with_items:
    - telnet
    - net-tools
    - perl-XML-DOM
    - perl-Switch
  tags:
  - yum

创建用户组:

- name: "Add groups"
  group: name={{ item.name }} state=present
  with_items:
    - { name: "zhang" }
    - { name: "zhao" }
  tags:
  - Add_group

创建用户:

- name: "Add Users"
  user: name={{ item.name }} state=present groups={{ item.groups }}
  with_items:
    - { name: "hu", groups: "zhang" }
    - { name: "zhi", groups: "zhao" }
  tags:
  - Add_users

删除用户:

- name: "userdel user"
  user: name={{ item.name }} state=absent  remove=yes
  with_items:
    - { name: "hu" }
    - { name: "zhi" }
    - { name: "zhangsan" }
    - { name: "lisi" }
    - { name: "zhaosi" }
    - { name: "zhangsi" }
    - { name: "test1" }
  tags:
  - Del_Users 

  • Templates介绍
  • Jinja是基于Python的模板引擎。template类是Jinja的另一个重要组件,可以看作一个编译过的模块文件,用来生产目标文本,传递Python的变量给模板去替换模板中的标记。

# scp [email protected]:/etc/httpd/conf/httpd.conf ./templates      //复制被管理端的配置文件到本地
# vim templates/httpd.conf      //在管理端讲配置文件要修改的地方定义变量
Listen {{http_port}}
ServerName {{server_name}}  
MaxClients {{access_num}}

  在/etc/ansible/hosts 添加变量

# vim /etc/ansible/hosts
[abc]
192.168.200.129 http_port=192.168.92.139:80 access_num=100 server_name="www.xxxxxx.com:80"
# vim apache.yml
# ansible-playbook twsdyxz.web.yml --tags=copy_httpd.conf.j2    #然后执行脚本  然后去abc组的主机上查看下配置文件是否已经改了
vim twsdyxz.web.yml
########################################################
- hosts: abc
  remote_user: root
  vars:
    - package: httpd
    - service: httpd
  become: yes                #2.6版本以后的参数,之前是sudo,意思为切换用户运行
  become_user: root          #指定sudo用户为mysql
  roles:
  - twsdyxz
  tags:
  - only0

vim tasks/main.yml
###########################################3
- name: "install configure file"
  template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
  tags:
  - copy_httpd.conf.j2

猜你喜欢

转载自www.cnblogs.com/nb-blog/p/10565658.html
今日推荐