【问题标题】:Ansible playbook target patternsAnsible 剧本目标模式
【发布时间】:2022-10-24 18:02:18
【问题描述】:

我想问您是否可以使用与库存本身内部变量相关的模式来过滤库存文件。 例如:

我有这个库存

groupA:
  hosts:
   host1A:
     env: pre
   host2A:
     env: prod
groupB:
  hosts:
    host1B:
      env: pre
    host2B:
      env: prod

这是剧本:

- name: test
  hosts: **only hosts that contain env:pre??**
  role: backend

有可能实现吗?可以使用正则表达式吗? 请帮帮我。 提前致谢。

【问题讨论】:

  • 您正在覆盖host1Benv 值。先解决这个问题。

标签: ansible ansible-inventory ansible-template


【解决方案1】:

鉴于库存

shell> cat hosts
groupA:
  hosts:
    host1A:
      env: pre
    host1B:
      env: prod
groupB:
  hosts:
    host1B:
      env: pre
    host1C:
      env: prod

最简单的选择是使用模块group_by。例如,

- hosts: all
  gather_facts: false
  tasks:
    - group_by:
        key: group_{{ env }}
    - debug:
        var: groups
      run_once: true

PLAY [all] ************************************************************************************

TASK [group_by] *******************************************************************************
changed: [host1A]
changed: [host1B]
changed: [host1C]

TASK [debug] **********************************************************************************
ok: [host1A] => 
  groups:
    all:
    - host1A
    - host1B
    - host1C
    groupA:
    - host1A
    - host1B
    groupB:
    - host1B
    - host1C
    group_pre:
    - host1A
    - host1B
    group_prod:
    - host1C
    ungrouped: []

PLAY RECAP ************************************************************************************
host1A: ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
host1B: ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
host1C: ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

这可能不是你想要的。主人主机1B不是产品分组,因为变量环境评估为'预'.

您可以通过将所有选项放入逗号分隔的列表中轻松修复它。例如,

shell> cat hosts
groupA:
  hosts:
    host1A:
      env: pre
    host1B:
      env: prod,pre
groupB:
  hosts:
    host1B:
    host1C:
      env: prod

和剧本

- hosts: all
  gather_facts: false
  tasks:
    - group_by:
        key: "group_{{ item }}"
      loop: "{{ env.split(',') }}"
    - debug:
        var: groups
      run_once: true

给你想要的

PLAY [all] ************************************************************************************

TASK [group_by] *******************************************************************************
ok: [host1A] => (item=pre)
ok: [host1B] => (item=prod)
ok: [host1C] => (item=prod)
ok: [host1B] => (item=pre)

TASK [debug] **********************************************************************************
ok: [host1A] => 
  groups:
    all:
    - host1A
    - host1B
    - host1C
    groupA:
    - host1A
    - host1B
    groupB:
    - host1B
    - host1C
    group_pre:
    - host1A
    - host1B
    group_prod:
    - host1C
    - host1B
    ungrouped: []

PLAY RECAP ************************************************************************************
host1A: ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
host1B: ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
host1C: ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

【讨论】:

  • 抱歉,库存文件有问题
猜你喜欢
  • 2020-05-08
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2022-10-24
相关资源
最近更新 更多