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 root@192.168.92.139:/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
本文来自博客园,作者:IT老登,转载请注明原文链接:https://www.cnblogs.com/nb-blog/p/10565658.html