STEPS ON REMOTE HOST (WHERE DOCKER WILL BE INTALLED)
1 – do the login by ssh on the remote host
ssh -o StrictHostKeyChecking=no user@192.168.0.7
2 – create an user on remote host to be used by ansible having sudo as additional group
useradd -g users -G sudo user01 -s /bin/bash
echo -e "123456\n123456" | passwd user01
3 – set sudo users to execute commands without password
sed -i '/^%sudo.*ALL:ALL/s/^/#/; //a %sudo ALL=(ALL) NOPASSWD: ALL' /etc/sudoers
STEPS ON ANSIBLE HOST
1 – Install ansible
apt install -y software-properties-common
apt-add-repository -y --update ppa:ansible/ansible
apt install -y ansible
2 – try to connect to localhost and verify a usable python on it*
ansible localhost, --connection=local -m ping
3 – configure remote host in the ansible hosts file
cat >> /etc/ansible/hosts <<'EOF'
srv01 ansible_host=192.168.0.7 ansible_user=user01 ansible_password=123456
EOF
4 – set config params in /etc/ansible/ansible.cfg file
sed -i '/gathering .*=/a gathering = explicit' /etc/ansible/ansible.cfg
sed -i '/host_key_checking .*=/a host_key_checking = false' /etc/ansible/ansible.cfg
sed -i '/ssh_args.*=/a ssh_args = -C -o ControlMaster=auto -o ControlPersist=300s' /etc/ansible/ansible.cfg
sed -i '/control_path .*=$/a control_path = /tmp/ansible-%%h-%%r' /etc/ansible/ansible.cfg
sed -i '/pipelining .*=/a pipelining = True' /etc/ansible/ansible.cfg
sed -i '/executable .*=/a executable = /bin/bash' /etc/ansible/ansible.cfg
5 – try to connect to remote host and verify a usable python on it
ansible srv01 -m ping
– use the command bellow to install python on remote machine if it not installed
ansible srv01 -b -m raw -a 'apt install -y python3'
ansible options used: |
-b will execute command as root |
-m module name to execute |
-a arguments passed to module |
6 – install docker and others packages on remote host***
cat > srv01-playbook.yml <<'EOF'
---
- hosts: srv01
become: true
become_user: root
tasks:
- name: install docker and other packages
apt:
name:
- docker.io
- curl
state: latest
update_cache: true
EOF
7 – run ansible-playbook command****
ansible-playbook srv01-playbook.yml
8 – Test if docker was installed*****
ansible srv01 -b -m shell -a 'docker -v'
Optionally you can add a new task to playbook file to get docker version
cat >> srv01-playbook.yml <<'EOF' && ansible-playbook srv01-playbook.yml
- name: show docker version
shell: docker -v | cut -d, -f1
register: result
- debug:
msg: "{{ result.stdout }}"
EOF
Documentation of commands or modules used in this post
* ping module: https://docs.ansible.com/ansible/latest/modules/ping_module.html
** ansible.cfg: https://docs.ansible.com/ansible/2.4/intro_configuration.html
*** apt module: https://docs.ansible.com/ansible/latest/modules/apt_module.html
**** ansible-playbook: https://docs.ansible.com/ansible/latest/user_guide/playbooks.html
***** shell module: https://docs.ansible.com/ansible/latest/modules/shell_module.html