A razão pela qual isso está falhando é que o plug-in atual é chamado with_items e não com_item. Você esqueceu o s.
Estou tentando criar novos usuários e preencher o arquivo ~ / .ssh / authorized_keys usando o Ansible. Aqui está minha tarefa:
- name: Create user account
user: name="{{ item.username }}-ns" comment="{{ item.realname }}"
groups=adm,sudo, append=yes
password="{{ item.password }}"
with_items: "{{ ssh_users }}"
- name: copy ssh keys to authorized_keys
authorized_key: user="{{ item.username }}-ns"
key="{{ sshkey_path }}/{{ item.username }}.pub"
with_item: "{{ ssh_users }}"
e meu arquivo de variáveis é assim:
ssh_users:
- username: "jdoe"
realname: "jrow"
password: "$6$FWhXrnkizCqwKJcM$y55ETlvthHA49NuzwYgKAmOTnsBDRzfXE1OiOuJ.HHwVuI4P/BQrR/eKgYOioevIrgYYw.HpeP/sxCR3M38SW/"
- username: "jroe"
realname: "Jane Roe"
password: "$6$wQhvxq3C.egKzrGi$na0M4jn3bi1lM2dz2YvdbAvvJBvbg4iGH1K6j7sHnZZt7mZggexHPvxOT799pfaDKmU6xDrbtbrLsxviGyABA0"
- username: "testuser"
realname: "Test User"
password: "$6$U24oz4dsfdYD/LZ$fuziBEkc2q/POHSEvfcuTaD6wFTF.49RbU8z8JLQk3oki/He87cYqpSZtL16A11EBaG6VdemXdy6\V/"
Configurei as chaves ssh públicas de vários usuários em um diretório de teclas públicas que coloquei na variável chamada "sshkey_path". Existe um arquivo de chave pública para cada usuário (por exemplo, jdoe.pub).
Quando eu executo o playbook, a criação da conta de usuário corre bem, mas a parte authorized_keys diz:
ERROR! 'with_item' is not a valid attribute for a Task
The error appears to have been in 'user-add.yaml': line 29, column 7, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: copy ssh keys to authorized_keys
^ here
Alguma idéia do que poderia estar dando errado? Em princípio, ele deve funcionar, pois há exemplos semelhantes encontrados on-line. Eu já joguei com o formato, mas não consigo fazer funcionar. Seus ponteiros são apreciados.
A razão pela qual isso está falhando é que o plug-in atual é chamado with_items e não com_item. Você esqueceu o s.
Para a posteridade:
Junto com o erro apontado por "linuxdynasty" em relação a with_items
, houve mais um erro na maneira como eu estava fazendo referência ao arquivo-chave.
Eu tentei usar a seguinte sintaxe:
key="{{ sshkey_path }}/{{ item.username }}.pub"
Mas isso não funcionará nesse caso porque authroized_key
espera um arquivo. É preciso usar "with_files" ou pesquisas para obter isso.
Para fazê-lo funcionar na minha situação, tive que concatenar várias variáveis juntas, o que fiz com a ajuda deste StackOverflow postar. A sintaxe final que eu encontrei foi:
key="{{ lookup('file', sshkey_path+item.username+'.pub') }}"
e funcionou bem.