2017-07-25 23 views
0

請與我聯繫。我從來沒有做過與Ansible這樣複雜的事情,我真的很努力將它拼湊在一起。總結一下,我已經有了一個詞典和一項任務,可以將我們員工的SSH帳號和公共密鑰部署到我們的服務器上。我想重新使用這個詞典也可以將某些員工密鑰部署到某些網站用戶帳戶。一個例子可能比我能解釋得更好。Ansible與子元素引用字典

employee_ssh_users: 
    user1: 'user1key' 
    user2: 'user2key' 
    user3: 'user3key' 
    user4: 'user4key' 

- name: Add employee SSH users 
    user: 
    name: "{{ item.key }}" 
    state: present 
    with_dict: "{{ employee_ssh_users }}" 

- name: Add employee public keys to employee accounts 
    authorized_key: 
    user: "{{ item.key }}" 
    state: present 
    key: "{{ item.value }}" 
    with_dict: "{{ employee_ssh_users }}" 

上述配置和任務對將我們的員工及其鑰匙添加到服務器中工作良好。現在,我想重新使用這些密鑰,以便我可以將某些員工添加到某些其他用戶,而無需複製和粘貼員工的密鑰。這裏是我想要做的事:

website_keys: 
    - name: site1 
    authorized: 
     - user1 
     - user3 
    - name: site2 
    authorized: 
     - user1 
     - user2 

- name: Add employee public keys to website accounts 
    authorized_key: 
    user: "{{ item.0.name }}" 
    key: "{{ hostvars[inventory_hostname]['employee_ssh_users'][' + item.1 '] }}" 
    with_subelements: 
    - "{{ website_keys }}" 
    - authorized 

基本上,我想不出到底是什麼,我需要做的子元素插值到關鍵變量,如果它甚至有可能的。

回答

2

這很簡單:

- name: Add employee public keys to website accounts 
    authorized_key: 
    user: "{{ item.0.name }}" 
    key: "{{ employee_ssh_users[item.1] }}" 
    with_subelements: 
    - "{{ website_keys }}" 
    - authorized 

您可以按名稱查詢employee_ssh_users和使用item.1不帶引號,因爲它是一個變量本身。