Ansible中的任务执行控制

循环

简单循环

复制代码
{{item}} 迭代变量名称
loop:
- value1
- value2
- ...                 //赋值列表


{{item}}        //迭代变量名称

循环散列或字典列表

复制代码
- name: create file
  hosts: host1
  tasks:
  - name: file moudle
    service:
      name: "{{ item.name }}"
      state: "{{ item.state }}"
    loop:
    - name: httpd
      state: started
    - name: vsftpd
      state: stopped
~

条件

复制代码
when:
 - 条件1
 - 条件2

条件判断

复制代码
=	        //value == "字符串",value == 数字	解释
<	        //value < 数字	
>	        //value > 数字	
<=	        //value <= 数字	
>=	        //value >= 数字	
!=	        //value != 数字	
is defined value	        //value is defined	变量存在
is not defined	            //value is not defined	变量不存在
in	            //value is in value	变量为
not in	            //value is not in value	变量不为
bool变量 为true	    value	    //value的值为true
bool变量 false	    not value	//value的值为false

多条条件组合

复制代码
when:
 条件1 and 条件2
 - 条件1
 - 条件2            //当条件1和条件2都为真

when:
 条件1 or 条件2        //满足其中一个

when: >
 条件1
 or
 条件2                //满足其中一个

创建两个用户 user1user2user1 的 UID 是 6666,注释是 user1 commentuser2 的 UID 是 7777,没有注释。

复制代码
vim userlist.yml
userlist:
  - name: user1
    id: 6666
    comment: user1 comment
  - name: user2
    id: 7777

vim usercreate.yml
- name: create user
  hosts: all
  vars_files: ./userlist.yml
  tasks:
    - name: create user with comment
      user:
        name: "{{item.name}}"
        uid: "{{item.id}}"
        comment: "{{item.comment}}"
        state: present
      when: item.comment is defined
      loop:
        "{{userlist}}"

    - name: create user without comment
      user:
        name: "{{item.name}}"
        uid: "{{item.id}}"
        state: present
      when: item.comment is not defined
      loop:
        "{{userlist}}"

触发器

复制代码
notify:         //触发器当遇到更改是触发handlers
handlers:             //触发器触发后执行的动作

在指定的服务器上部署网站,并创建一个简单的主页

复制代码
vim webs.yml
webs:
  - name: bbs.westos.org
    doc: /var/www/virtual/westos.org/bbs/html
    index: "bbs.westos.org's page"

  - name: login.westos.org
    doc: /var/www/virtual/westos.org/login/html
    index: "login.westos.org's page"

  - name: www.westos.org
    doc: /var/www/html
    index: "www.westos.org's page"
复制代码
vim html.j2
{% for web in webs %}
{% if web.name is not defined %}
<VirtualHost _default_:80>
{% elif web.name is defined %}
<VirtualHost *:80>
        ServerName {{web.name}}
{% endif %}
        DocumentRoot {{web.doc}}
</VirtualHost>
{% endfor %}
复制代码
vim web.yml
- name: Create website index page
  hosts: all
  vars_files: ./webs.yml

  tasks:
    - name: install httpd
      yum:
        name: httpd
        state: present

    - name: service
      service:
        name: httpd
        state: started
        enabled: no

    - name: Create index.html for each website
      template:
        src: ./html.j2
        dest: "/etc/httpd/conf.d/vhost.conf"
      notify: restart httpd

    - name: create directory
      lineinfile:
        path: "{{item.doc}}/index.html"
        line: "{{ item.index }}"
        create: yes
      loop: "{{webs}}"

  handlers:
    - name: restarted httpd
      service:
        name: httpd
        state: restarted
相关推荐
sky北城39 分钟前
ansible进阶02
ansible
重启就好8 小时前
【Ansible】之inventory主机清单
运维·ansible
xmweisi0210 小时前
Ansible内置模块之 group
linux·运维·ansible·rhce·rhca·红帽认证
一直奔跑在路上1 天前
【Ansible】基于windows主机,采用NTLM+HTTPS 认证部署
windows·https·ansible
遇见火星2 天前
Ansible模块——从控制节点向目标主机复制文件!
java·服务器·ansible
重启就好3 天前
【Ansible】模块详解
linux·服务器·ansible
是垚不是土3 天前
Kolla-Ansible搭建与扩容OpenStack私有云平台
linux·运维·服务器·云计算·ansible·openstack
xmweisi025 天前
Ansible内置模块之package
linux·ansible·rhce·rhca·红帽认证·it培训
xmweisi025 天前
Ansible内置模块之service
linux·ansible·rhce·rhca·红帽认证
企鹅侠客5 天前
Ansible 流程控制
ansible·ansible流程控制