2017-10-05 1 views
0

Ich versuche Ansible und Ansible-Vault zu verwenden, um Benutzer bereitzustellen. Dies ist meine aktuelle Verzeichnisstruktur:Ansible-Vault wird nicht korrekt an das Playbook übergeben

|-- ansible-test.out 
|-- group_vars 
|-- inventory 
|-- roles 
| |-- bsd_sudoers 
| | |-- tasks 
| | |-- templates 
| | | `-- cde-admins 
| | `-- vars 
| `-- bsd_users 
|  |-- files 
|  |-- tasks 
|  | `-- main.yml 
|  |-- templates 
|  `-- vars 
|   `-- all.yml 
|-- site.retry 
|-- site.yml 
`-- vars 
    `-- all.yml 

Dies ist, was ich für mein Textbuch haben bisher:

--- 
- name: Creating Users 
    user: 
    name: "{{ item.name }}" 
    system : "{{ item.sudoer }}" 
    shell: /bin/bash 
    password: "{{ item.password }}" 
    uid: "{{ item.uid }}" 
    home: "{{ item.home }}" 
    with_items: users 

Hier ist ein Beispiel von dem, was ich habe in ansible Gewölbe:

--- 
    vars: 
    users: 
     - name: 'foo' 
     home: '/home/foo' 
     key: 'ssh-rsa ....' 
     password: '!!' 
     bash: '/bin/bash' 
     sudoer: yes 
     uid: "2049" 
     guid: '2049' 
     group: admin 

Wenn ich das Playbook starte, wird diese Fehlermeldung immer generiert:

fatal: [ansible-test]: FAILED! => {"failed": true, "msg": "The task includes an option with an undefined variable. The error was: 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'uid'\n\nThe error appears to have been in '/Users/ansible/playbooks/roles/bsd_users/tasks/main.yml': line 2, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n---\n- name: Creating Users\n^here\n\nexception type: <class 'ansible.errors.AnsibleUndefinedVariable'>\nexception: 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'uid'"} 
    to retry, use: --limit @/Users/ansible/playbooks/site.retry 

Warum passiert das immer? Ich hatte den Eindruck, dass Ansible die verschlüsselten Variablen natürlich an mein Playbook weitergeben würde, aber das scheint nicht der Fall zu sein.

Antwort

1

Erstens:

with_items: users sollte with_items: "{{ users }}" sein.
Bare variables werden nicht mehr unterstützt.

Zweitens:

gibt es keine Notwendigkeit Top-Level-vars dict in gewölbten Dateien zu definieren, zu verwenden:

--- 
users: 
    - name: foo 
    home: /home/foo 
    - name: bar 
    home: /home/bar 
+0

Ich gebe das einen Wirbel – ryekayo

+0

Jetzt bekomme ich Benutzer ist nicht definiert – ryekayo

+0

Wo befindet sich Ihre Vars-Datei Vaults? –

1

Wie Konstantin bereits erwähnt, müssen Sie die Variable-Datei aufgenommen wird entweder als -e @vars/all.yml über die Befehlszeile oder durch Hinzufügen von vars_files in das Playbook. Sie können auch die all.yml Datei in das Verzeichnis group_vars hinzufügen, und sie wird automatisch übernommen.

In Bezug auf die zweite Fehlermeldung, die Sie erhalten, beginnend mit Ansible 2.4 ist die empfohlene Methode zur Bereitstellung des Passworts in der Befehlszeile --vault-id. Dies kann alles sein, von einem Pfad zur ID-Datei, bis zu @prompt für Ansible, um Sie nach einem Passwort zu fragen, oder auch den Pfad zu einem Skript, das das Passwort zurückgibt.

Vor Ansible 2.4 müssen Sie --ask-vault-pass oder --vault-password-file verwenden.

Sie können auch eine Variable in ansible.cfgvault_password_file Namen hinzufügen, wo Sie den Speicherort der Gewölbe Kennwortdatei (zB vault_password_file = /path/to/.vault_password_file) definieren können, so dass Sie es nicht jedes Mal, wenn Sie ansible-playbook laufen angeben. Ab Ansible 1.7 kann dieser Pfad auch auf ein Skript verweisen, das das Passwort als stdout zurückgibt.

Wenn dies hilft, Ihre Frage zu beantworten, würde ich es begrüßen, wenn Sie es als die akzeptierte Antwort markieren könnten.

Verwandte Themen