Problem scenario
You have installed Ansible and configured it to work with other servers (managed nodes). You want to write an Ansible playbook that will work with Linux managed nodes with three requirements:
1. Transfer a compressed file from a web sever without wget.
2. Uncompress a .zip file without unzip.
3. Work without passwordless SSH authentication to the managed nodes.
How do you accomplish this with using Ansible-supported features?
Solution
1. Have the playbook use the get_url command to transfer the file. You do not need to use wget on the managed nodes. Here is an example of how the syntax should appear:
get_url:
url: https://www.continualintegration.com/good.zip
dest: /tmp/good.zip
It can support cksum which is recommended for security reasons. If you want to learn more about this feature, see this posting.
2. Have the playbook use the "unarchive" command. You do not need to install unzip. Here is an example:
- name: Unzip a file on a remote server
unarchive:
src: /tmp/good.zip
dest: /usr/local/bin
remote_src: yes # This tells Ansible the source file is on the remote server. If the source file is elsewhere, remove this stanza.
To learn more about the unarchive feature, see this external link.
3. When running the "ansible-playbook" command, use the "--ask-pass" flag. For example if you want to run foo.yaml as the playbook, run a command like this:
ansible-playbook foo.yaml --ask-pass
This will prompt you for a password to SSH into the managed nodes.