.
├── voxel│ └── voxel.pub├── pixel│ ├── pixelphone3.pub│ ├── pixel.pub│ └── revoked│ └── pixelphone2.pub└── root ├── voxel.pub └── pixel.pub
---- hosts: all tasks: - name: install ssh keys authorized_key: user=root key="{{ lookup('file',item) }}" with_fileglob: - ssh_keys/root/* - name: remove unwanted keys authorized_key: user=root state=absent key="{{ lookup('file',item) }}" with_fileglob: - ssh_keys/root/revoked/*
---- hosts: multiuser tasks: - name: install user user: name={{ item }} with_items: "{{ users }}" - name: install ssh keys authorized_key: user: "{{ item.0 }}" key: "{{ lookup('file',item.1) }}" with_nested: - "{{ users }}" - "{{ lookup('fileglob', 'public_keys/{{ item.0 }}/*').split(',') }}"
[DEPRECATION WARNING]: Skipping task due to undefined Error, in the future this will be a fatal error.: 'item' is undefined.This feature will be removed in a future release. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.fatal: [devla]: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'item' is undefined\n\nThe error appears to have been in '/home/pixel/hivecluster/users.yml': line 7, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n with_items: \"{{ users }}\"\n - name: install ssh keys\n ^ here\n"}
You could put this in it's own file, use include with with_items and
loop_control.
https://docs.ansible.com/ansible/playbooks_loops.html#loop-control