regex 有没有办法使用正则表达式来匹配ansible中的主机?

56lgkhnf  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(154)

我尝试使用正则表达式模式与ansible匹配主机,但它没有按预期工作。我的清单如下所示:

[group1]
hello1
world1
hello2
world2

[group2]
hello3

我的任务是:

- debug:
    msg: "{{ item }}"
  with_inventory_hostnames:
    - ~hello*

从他们的文档中:

Using regexes in patterns
You can specify a pattern as a regular expression by starting the pattern with ~:

~(web|db).*\.example\.com

当我执行这个任务时没有输出。我是一个使用正则表达式的n00b,所以有没有可能我的正则表达式是错误的?

yeotifhr

yeotifhr1#

问:"有没有可能我的正则表达式是错误的?"***
答:这是一个bug。请参见inventory_hostnames lookup doesn't support wildcards in patterns #17268。它可能是fixed in 2.10。但我认为您的模式不起作用,因为文档说:
"You can use wildcard patterns with FQDNs or IP addresses, as long as the hosts are named in your inventory by FQDN or IP address"。清单中的主机既不是FQDN,也不是IP。
问:
"有没有办法使用正则表达式来匹配ansible中的主机?"***
答:是的。一个非常方便的方法是使用add_host模块创建动态组。例如下面的行动手册

- hosts: localhost
  tasks:
    - add_host:
        name: "{{ item }}"
        groups: my_dynamic_group
      loop: "{{ groups.all|select('match', my_pattern)|list }}"
      vars:
        my_pattern: '^hello\d+$'

- hosts: my_dynamic_group
  tasks:
    - debug:
        var: inventory_hostname

给出(删节)

"inventory_hostname": "hello2"
    "inventory_hostname": "hello1"
    "inventory_hostname": "hello3"
    • 更新**

下一个选项是清单插件 * constructed *。

shall> ansible-doc -t inventory ansible.builtin.constructed

1.创建清单
一个一个三个一个一个一个一个一个四个一个一个一个一个一个五个一个
1.测试库存

shell> ansible-inventory -i inventory --graph
@all:
  |--@group1:
  |  |--hello1
  |  |--hello2
  |  |--world1
  |  |--world2
  |--@group2:
  |  |--hello3
  |--@hello_group:
  |  |--hello1
  |  |--hello2
  |  |--hello3
  |--@ungrouped:
  |--@world_group:
  |  |--world1
  |  |--world2

您可以看到插件创建了两个组:* 世界组 * 和 * 您好组 *。
1.使用组。例如,

shell> cat pb.yml
- hosts: hello_group
  tasks:
    - debug:
        var: ansible_play_hosts_all
      run_once: true

- hosts: world_group
  tasks:
    - debug:
        var: ansible_play_hosts_all
      run_once: true

给予

shell> ansible-playbook  -i inventory pb.yml 

PLAY [hello_group] ***************************************************************************

TASK [debug] *********************************************************************************
ok: [hello1] => 
  ansible_play_hosts_all:
  - hello1
  - hello2
  - hello3

PLAY [world_group] ***************************************************************************

TASK [debug] *********************************************************************************
ok: [world1] => 
  ansible_play_hosts_all:
  - world1
  - world2

PLAY RECAP ***********************************************************************************
hello1: ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
world1: ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

相关问题