Anisble中的任务执行控制

一、循环

1、简单循环

使用loop赋值列表的格式:

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

2、循环散列或字典列表

  • 可以赋予不同的服务不同的状态

    • name: create file
      hosts: 172.25.0.254
      tasks:
    • name: file module
      service:
      name: "{{ item.name}}"
      state: "{{ item.state }}"
      loop:
    • name: httpd
      state: started
    • name: vsftpd
      state: stopped

二、条件判定

1、when条件语句

此条件代表两者都满足时

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

此条件代表两者满足一个即可

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

2、条件判断

= value == "字符串",value == 数字
< value < 数字
> value > 数字
<= value <= 数字
>= value >= 数字
!= value != 数字

|------------------|-------------------------------------------------------------|
| is defined | 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) value in value2(value的值在value2列表中) |

上述的应用实例:

使用loop when 创建用户

复制代码
vim user.yml

- name: create user
  hosts: all
  vars:
    userlist:
    - name: user1
      id: 6666
      comment: user1 comment
    - name: user2
      id: 7777
  tasks:
  - name: create user2
    user:
      name: "{{item.name}}"
      uid: "{{item.id}}"
      comment: "{{item.comment}}"
      state: present
    when:
      item.comment is defined
    loop:
      "{{userlist}}"
  - name: create user
    user:
      name: "{{item.name}}"
      uid: "{{item.id}}"
      state: present
    when:
      item.comment is not defined
    loop:
      "{{userlist}}"

ansible-playbook user.yml  -C

三、触发器

notify:触发器当遇到更改时触发handlers
handlers:触发器触发后执行的动作

示例:

使用触发器 j2 loop 安装httpd服务并运行虚拟主机

复制代码
vim web.yml

webs:
- doc: /var/www/html
  index: "www.westos.org's page"

- 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"
复制代码
vim vhosts.conf.j2

{% for web in webs %}
{% if web.name is defined %}
<VirtualHost *:80>
  ServerName {{web.name}}
{% endif %}
{% if web.name is not defined %}
<VirtualHost _default_:80>
{% endif %}
  DocumentRoot {{web.doc}}
</VirtualHost>
{% endfor %}
复制代码
vim httpd.yml

- name: create virtualhost
  hosts: all
  vars_files: ./web.yml
  tasks:
  - name: yum
    yum:
      name: httpd
      state: present

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

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

  - name: create vhosts.conf
    template:
      src: ./vhosts.conf.j2
      dest: /etc/httpd/conf.d/vhost.conf
    notify: restart httpd

  handlers:
  - name: restart httpd
    service:
      name: httpd
      state: restarted

触发器工作

因为没有文件修改触发器没有触发所以不进行重启服务

相关推荐
Wang's Blog1 小时前
Java 接入Redis: 服务启动停止与后台运行配置
java·服务器·redis
云运维笔记2 小时前
IP地址从入门到精通:网络通信的核心基石
运维·网络·计算机网络
码农学院3 小时前
企业官网改版后 AI 引用归零的复盘:301 重定向断层让爬虫索引掉线,修复方案与恢复数据
运维·geo优化·ai优化aio
kuroomi3 小时前
Ingress-Nginx与kubernetes 网络
linux·运维·网络·kubernetes
当下新鲜事3 小时前
空调机房冷冻泵与冷却泵技术分析:赛莱默B&G背包式智能变频管道泵的工程应用
运维·物联网·业界资讯
EasyGBS3 小时前
终结训推割裂!EasyGBS×EasyAIS×DLTM,实现AI算法训推一体闭环落地!
服务器·深度学习·安全
Doris__HE5 小时前
【元脑服务器NF5476G7-NF5476M7技术规格分享】
运维·服务器·网络·数据库·性能优化
爱喝热水的呀哈喽6 小时前
openroad make各个阶段
服务器
闲云野鹤在人间8 小时前
docker 入门 | 第7章 容器监控 和 第8章 容器日志 详解
运维·docker·容器·架构·云计算
亚川楼宇自控系统数据中心厂家8 小时前
IBMS 集成如何打通数据中心的子系统数据孤
运维