Ansible-playbook循环学习

循环语句简介

我们在编写playbook的时候,不可避免的要执行一些重复性操作,比如指安装软件包,批量创建用户,操作某个目录下的所有文件等。正如我们所说,ansible一门简单的自动化语言,所以流程控制循环语句这些编程语言的基本元素它同样都具备。

loop关键字说明
在playbook中使用循环,直接使用loop关键字即可。
示例1:
启动httpd和postfix服务
item调用loop中的变量

vim test.yml
---
- hosts: web
  tasks: 
    - name: postfix and httpd are running
      service:
        name: "{{item}}"
        state: started
      loop:
        - postfix
        - httpd
[root@tdm2 playbook]# ansible-playbook test1.yml 

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [182.92.243.89]

TASK [postfix and httpd are running] ***********************************************************************************changed: [182.92.243.89] => (item=postfix)
changed: [182.92.243.89] => (item=httpd)

PLAY RECAP *************************************************************************************************************182.92.243.89              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

在这里插入图片描述

示例2:
也可以将loop循环的列表提前赋值给一个变量,然后在循环语句中调用

[root@tdm2 playbook]# cat test_service.yml 
test_service:
  - httpd
  - postfix
vim test.yml
---
- hosts: web
  vars_files:
    - test_service.yml
  tasks:
    - name: postfix and httpd are running
      service:
        name: "{{item}}"
        state: started
      loop: "{{test_service}}"
[root@tdm2 playbook]# ansible-playbook test.yml 

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [182.92.243.89]

TASK [postfix and httpd are running] ***********************************************************************************changed: [182.92.243.89] => (item=httpd)
changed: [182.92.243.89] => (item=postfix)

PLAY RECAP *************************************************************************************************************182.92.243.89              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

在这里插入图片描述

示例3

vim test.yml
---
- hosts: web
  tasks:
  - name: add www group
    group:
      name: www
  - name: add  users
    user:
      name: "{{ item.name }}"
      state: present
      groups: "{{ item.groups }}"
    loop:
      - { name: 'test1', groups: 'wheel' }
      - { name: 'test2', groups: 'www' }
[root@tdm2 playbook]# ansible-playbook  test3.yml 

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [182.92.243.89]

TASK [add www group] ***************************************************************************************************ok: [182.92.243.89]

TASK [add  users] ******************************************************************************************************ok: [182.92.243.89] => (item={u'name': u'test1', u'groups': u'wheel'})
ok: [182.92.243.89] => (item={u'name': u'test2', u'groups': u'www'})

PLAY RECAP *************************************************************************************************************182.92.243.89              : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

在这里插入图片描述

好的,让我来回答你的问题。 首先,你可以编写一个 Ansible playbook 来启动或停止多个 SysV 服务。你可以使用 `service` 模块来实现这一点。以下是一个基本的 playbook: ``` - name: Manage SysV services hosts: node2:node3 gather_facts: false tasks: - name: Start services service: name: "{{ item }}" state: started loop: - service1 - service2 - service3 when: inventory_hostname == 'node2' - name: Stop services service: name: "{{ item }}" state: stopped loop: - service1 - service2 - service3 when: inventory_hostname == 'node3' ``` 在这个 playbook 中,我们定义了两个任务:一个任务用来启动服务,另一个任务用来停止服务。我们使用了 `loop` 来遍历服务列表,并使用 `when` 条件判断来确定在哪些主机上运行这些任务。 此外,我们还使用了 `gather_facts: false` 来禁用 Ansible 的事实收集功能。这是因为我们已经知道了我们要管理的节点,所以不需要额外的信息。 最后,如果你还想在节点上安装服务,可以使用 `yum` 或 `apt` 模块来安装剩余的服务。你可以使用 `with_items` 循环来安装多个服务。以下是一个示例: ``` - name: Install additional services hosts: node2:node3 gather_facts: false tasks: - name: Install services yum: name: "{{ item }}" state: present with_items: - service4 - service5 when: inventory_hostname == 'node2' ``` 在这个 playbook 中,我们使用 `yum` 模块安装了两个服务。我们使用了 `with_items` 循环来遍历服务列表,并使用 `when` 条件判断来确定在哪些主机上运行这些任务。 希望这可以回答你的问题。如果你有任何其他问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值