"msg": "|結合には辞書が必要ですが、AnsibleUndefoundがあります。"

私のユーザーの役割を開始する際に問題があります。誰かを助けることができます。

「ユーザー」という次のAnsibleロールがあります。

    - name: Create required groups.
      become: yes
      group:
        name: "{{ item.1 }}"
        state: present
      loop: "{{ lookup('subelements', all_required_users|combine(required_users), 'groups', {'skip_missing': True}, wantlist=True) }}"
    
    - name: Create required users.
      become: yes
      user:
        name: "{{ item.key }}"
        state: "{{ item.value.state | default('present') }}"
        append: yes
        create_home: yes
        groups: "{{ item.value.groups | default([]) }}"
        password: "{{ item.value.password }}"
        shell: "{{ item.value.shell | default('/bin/bash') }}"
      loop: "{{ all_required_users | combine(required_users) | dict2items }}"
      when: "'state' not in item.value or item.value.state == 'present'"
    
    - name: Add ssh public key for required users.
      become: yes
      authorized_key:
        user: "{{ item.key }}"
        key: "{{ item.value.ssh_public_key }}"
        state: "{{ item.value.state | default('present') }}"
      loop: "{{ all_required_users | combine(required_users) | dict2items }}"
      when: "'state' not in item.value or item.value.state == 'present'"
    
    - name: Remove unwanted users.
      become: yes
      user:
        name: "{{ item.key }}"
        state: "{{ item.value.state | default('absent') }}"
        remove: true
      loop: "{{ all_required_users | combine(required_users) | dict2items }}"
      when: "'state' in item.value and item.value.state == 'absent'"

そして次のスクリプト:

    - name: install users
      hosts: 192.168.70.22
      become: true
      roles: 
        - role: users

)がプレイブックの実行を開始すると、次のメッセージが表示されます。

fatal: [192.168.70.22]: FAILED! => {"msg": "|combine expects dictionaries, got AnsibleUndefined"}

スクリプトが機能するにはどうすればよいですか?

ベストアンサー1

エラーメッセージ

|combine expects dictionaries, got AnsibleUndefined

報告した変わりやすいはい限定されないだからできない結合された。これは次のテストで再現できます。

---
- hosts: localhost
  become: false
  gather_facts: false

  vars:

    # all_required_users: ""
    # required_users: ""

  tasks:

  - name: Create error message
    debug:
      msg: "{{ item.1 }}"
    loop: "{{ lookup('subelements', all_required_users | combine(required_users), 'groups', {'skip_missing': True}, wantlist=True) }}"

出力を生成する

TASK [Create error message] ********************************
fatal: [localhost]: FAILED! =>
  msg: '|combine expects dictionaries, got AnsibleUndefined'

スクリプトが機能するにはどうすればよいですか?

これは、その部品を作成して参照する部品へのall_required_users入力を提供して確認する必要があることを意味します。required_users

おすすめ記事