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
相关推荐
Hy行者勇哥2 天前
用Cursor智能编写Ansible/Terraform脚本,打通CI/CD链路
ci/cd·ansible·terraform
芷栀夏4 天前
飞牛NAS怎么部署Immich?家庭照片自动备份与远程访问教程
服务器·nginx·ansible
悠然南风14 天前
Ansible常见模块总结及LDAP Role 编写与调试
ansible
祺风挽楠23 天前
ansible编辑
网络·ansible
芳心粽伙饭23 天前
Ansible课后作业
ansible
烁34725 天前
Ansible初识
ansible
烁34725 天前
Ansible安装部署调试
ansible
烁34725 天前
Ansible命令
ansible
小义_25 天前
【Ansible】(三)基础配置与连接设置
云原生·ansible
炸炸鱼.1 个月前
Ansible 企业级实战:Playbook 与 Roles 完全指南
网络·ansible