如何选择库存组名称并通过ansible打破它?

时间:2016-06-06 12:36:53

标签: ansible ansible-playbook

我有一个库存文件,如下所示:

[database21]
syd01-opscpoo-shared.ce4l1e4wl3z.ap-southeast-2.rds.amazonaws.com
[database33]
syd01-desaasv-shared.re4l5of4bl3z.ap-southeast-2.rds.amazonaws.com

现在我需要实际阅读此库存文件并选择以下部分

syd01-opscpoo-shared

syd01-desaasv-shared

并将其保存在寄存器变量中,我不知道该怎么做。

2 个答案:

答案 0 :(得分:0)

打开读取文件并逐行迭代,使用带有“contains”的字符串搜索,在本例中我使用'amazonaws.com'假设其类似于需要拆分的行。在使用点作为分隔符将行拆分为数组后,第一个元素应该是您需要的字符串。

xcode

答案 1 :(得分:0)

您可以像这样获取主机名的第一部分:

{{ item.split('.', 1) | first }}

在您的任务中进行调整。希望这对你有帮助。

以下是您如何实现目标的示例:

<强>主机

[local]
localhost

[database21]
syd01-opscpoo-shared.ce4l1e4wl3z.ap-southeast-2.rds.amazonaws.com

[database33]
syd01-desaasv-shared.re4l5of4bl3z.ap-southeast-2.rds.amazonaws.com

<强> playbook.yml

---
- hosts: local
  connection: local
  gather_facts: no
  tasks:
    - debug:
        msg: "{{ item.split('.', 1) | first }}"
      with_items: 
        - "{{ groups['database21'] }}"
        - "{{ groups['database33'] }}"

Playbook结果

ansible-playbook -i hosts test.yml 

PLAY [local] *******************************************************************

TASK [debug] *******************************************************************
ok: [localhost] => (item=syd01-opscpoo-shared.ce4l1e4wl3z.ap-southeast-2.rds.amazonaws.com) => {
    "item": "syd01-opscpoo-shared.ce4l1e4wl3z.ap-southeast-2.rds.amazonaws.com",
    "msg": "syd01-opscpoo-shared"
}
ok: [localhost] => (item=syd01-desaasv-shared.re4l5of4bl3z.ap-southeast-2.rds.amazonaws.com) => {
    "item": "syd01-desaasv-shared.re4l5of4bl3z.ap-southeast-2.rds.amazonaws.com",
    "msg": "syd01-desaasv-shared"
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0