ansible playbook无法使用正则表达式

ansible playbook无法使用正则表达式,ansible,Ansible,我使用的是ansible 2.7版。我在练习一项任务,其中我必须添加用户名和uid存储在名为/home/automation/plays/vars/user_list.yml的var文件中的用户,并且密码存储在secrets.yml中,内容正确。我也可以用with_项从中添加用户,但根据任务的下一个要求,我需要在指定的主机组上添加uid stats为1*的用户,该主机组使用“group_names”调用,我尝试匹配regex,但出现错误 我的要求是将udi以^1开头的用户添加到主机组“webse

我使用的是ansible 2.7版。我在练习一项任务,其中我必须添加用户名和uid存储在名为/home/automation/plays/vars/user_list.yml的var文件中的用户,并且密码存储在secrets.yml中,内容正确。我也可以用with_项从中添加用户,但根据任务的下一个要求,我需要在指定的主机组上添加uid stats为1*的用户,该主机组使用“group_names”调用,我尝试匹配regex,但出现错误

我的要求是将udi以^1开头的用户添加到主机组“webserver”

我使用过解释性UID,例如1201/1201,它可以工作,但不能与正则表达式一起工作

- hosts: all
  become: yes
  gather_facts: no
  vars_files:
     - /home/automation/plays/vars/user_list.yml    
     - secrets.yml
  tasks:
     - debug:
         msg: "{{users | type_debug}},{{user_password}}"
       with_items: "{{ users }}"  
     - name: Adding Users to webserver groupwith List
       user:
        name: "{{item.username}}"
        uid:   "{{item.uid}}"
        state: absent
        remove: yes  
        password: "{{ user_password }}" 
        shell: /bin/bash
        groups: wheel
        generate_ssh_key: yes
        ssh_key_bits: 2048
        ssh_key_file: .ssh/id_rsa
       when:  item.uid  is regex("1.*")
       with_items: "{{users}}"  

假设已经创建了用户,并且 “
要求将uid以“1”开头的用户添加到组“webserver”

下面的任务完成了这项工作

- name: Adding users to webserver group
  user:
    name: "{{ item.username }}"
    groups: webserver
  loop: "{{ users }}"
  when:  item.uid|string|first == '1'
Regex

1) 以下条件是等效条件

  when: item.uid|string is match('^1.*$')
2) 要匹配用户“
,其中userid以5结尾,请使用

,没有对
regex
过滤器的引用。它只出现在中,因此我假设它是该版本的新添加

根据同一文档,
regex(“1.*”)
将不匹配以“1”开头的UID,而是所有包含“1”的UID。您将希望使用
match(“1.*”)
,这应该与您的Ansible版本配合使用。

用于此任务

tasks:
- name: Create users
  user:
    name: "{{ item.username }}"
    group: wheel
    password: "{{ user_password | password_hash('sha512') }}"
    shell: /bin/bash
    update_password: on_create
  with_items: "{{ users }}"
  when:
    - ansible_fqdn in groups['webservers']
    - "item.uid|string|first == '1'"

谢谢Vladimir,但我最初的问题是关于regex的使用,在这个例子中如何使用它,比如我还有一个任务,其中userid以5结尾,这是怎么回事!感谢第行下方的Vladimir帮助mywhen:(“组名称和项.uid”中的“Web服务器”是搜索(^1.*))感谢第行下方的@kevin为我工作过我们需要在求值之前将变量转换为字符串When:(“组名称和项.uid”中的“Web服务器”是搜索(^1.*))
  when: item.uid|string is match('^.*5$')
tasks:
- name: Create users
  user:
    name: "{{ item.username }}"
    group: wheel
    password: "{{ user_password | password_hash('sha512') }}"
    shell: /bin/bash
    update_password: on_create
  with_items: "{{ users }}"
  when:
    - ansible_fqdn in groups['webservers']
    - "item.uid|string|first == '1'"