RHCE Ansible 系列 #5:Ansible 循环

您有时可能想多次重复一项任务。 为了 example,您可能想要创建多个用户、启动/停止多个服务,或更改托管主机上多个文件的所有权。

在本教程中,您将学习如何使用 Ansible 循环多次重复任务,而无需一遍又一遍地重写整个任务。

在您查看 Ansible 中的循环之前,我希望您已经阅读了本 Ansible 教程系列的其他章节。 您应该了解 Ansible 剧本的概念,了解临时命令并了解与 Ansible 相关的基本术语,例如列表、字典等。

了解 YAML 的基础知识也值得赞赏。

循环列表

Ansible 使用关键字 环形 迭代列表的元素。 为了演示,让我们创建一个非常简单的剧本,名为 打印列表.yml 这向您展示了如何打印列表中的元素:

[[email protected] plays]$ cat print-list.yml 
---
- name: print list
  hosts: node1
  vars:
    prime: [2,3,5,7,11]
  tasks:
    - name: Show first five prime numbers
      debug:
        msg: "{{ item }}"
      loop: "{{ prime }}"

请注意,我使用 物品 带有 Ansible 循环的变量。 该任务将运行五次,等于 主要 列表。

在第一次运行中, 物品 变量将设置为素数数组 (2) 中的第一个元素。 在第二次运行时,item 变量将被设置为素数数组 (3) 中的第二个元素,依此类推。

继续运行剧本以查看所有元素 主要 列表显示:

[[email protected] plays]$ ansible-playbook print-list.yml 

PLAY [print list] **************************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [Show first five prime numbers] *******************************************
ok: [node1] => (item=2) => {
    "msg": 2
}
ok: [node1] => (item=3) => {
    "msg": 3
}
ok: [node1] => (item=5) => {
    "msg": 5
}
ok: [node1] => (item=7) => {
    "msg": 7
}
ok: [node1] => (item=11) => {
    "msg": 11
}

PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0

现在您将循环应用到现实生活中的应用程序。 为了 example你可以创建一个 添加用户.yml 将在所有主机上添加多个用户的剧本 数据库服务器 团体:

[[email protected] plays]$ cat add-users.yml 
---
- name: Add multiple users
  hosts: dbservers
  vars:
    dbusers:
      - username: brad
        pass: pass1
      - username: david
        pass: pass2
      - username: jason
        pass: pass3
  tasks: 
    - name: Add users
      user:
        name: "{{ item.username }}"
        password: "{{ item.pass | password_hash('sha512') }}"
      loop: "{{ dbusers }}"

我首先创建了一个 用户 list 基本上是哈希/字典的列表。 然后我用 用户 模块连同一个 环形 添加用户并为所有用户设置密码 用户 列表。

请注意,我还使用了虚线表示法 项目.用户名 和我临时通行证 访问哈希/字典中的键值 用户 列表。

还值得注意的是,我使用了 密码哈希(’sha512’) 过滤器以加密用户密码 sha512 哈希算法作为 用户 模块不允许设置未加密的用户密码。

RHCE 考试提示:您可以在考试中访问 docs.ansible.com 页面。 这是一个非常有价值的资源,尤其是在“常见问题”部分; 您会发现许多带有答案和解释的操作方法问题。

现在让我们运行 添加用户.yml 剧本:

阅读全文

本文的其余部分仅供 LHB 会员使用。 您现在可以免费注册以阅读本文的其余部分以及访问所有仅限会员的帖子。 您还可以订阅我们的双周 Linux 通讯。

订阅

已经有一个帐户?
登入