Create an Ansible playbook that will retrieve container IP and update the inventory. So that further Configuration of the Webserver could be done inside that Container.
2 min readMar 27, 2021
Prerequisite :
Docker Installed.
Step-1)Make one Docker image, add user, configure the password, and enable ssh
- To make it simple I am using Docker file.
FROM ubuntu:latest
RUN apt update && apt install openssh-server sudo -y
RUN useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo -u 1000 test
RUN echo "test:test"| chpasswd
RUN service ssh start
RUN echo "test ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
- Here I am using ubuntu:latest
- For changing the pass of the user use chpasswd command.
- After that also need to give power to this user, we need to add, USER_NAME ALL=(ALL) NOPASSWD:ALL in the /etc/sudoers.
- Build the Dockerfile.
docker build -t NAME_OF_IMAGE .
- After this launch one container .
docker run -dit --name NAME_OF_CONTAINER -p 21:22 4444:80 NAME_OF_CONTAINER
Step-2)Retrieve the name and Ip of the container.
tasks:
- name: Retrive Name of Docker Container
shell: "docker ps --format '{% raw %}{{ .Names }}{% endraw %}'"
register: Name - name: Retreive Ip of Docker Container
shell: "docker inspect --format '{%raw %}{{ .NetworkSettings.IPAddress }}{% endraw %}' $(docker ps --format '{% raw %}{{ .Names }}{% endraw %}')"
register: IP
- Here I have used jinja because we need to retrieve the name and IP.
- We need to register also because by using these vars we can update the inventory.
Step-3)Updating inventory
blockinfile:
path: /mydb/inventory.txt
block: |
{% raw %}[{% endraw %}{{ Name.stdout }}{%raw %}]{% endraw %}
{{ IP.stdout }} ansible_ssh_user=test ansible_ssh_pass=test
- Here I have used the black in file module for configuring inventory.
- I have also used jinja here because we need to write group name with [] brackets, for passing [] brackets as string in inventory, and {{ Name. stdout}}, {{ IP.stdout }} as variable .
Step-4)Configuring Webserver in the Docker container.
- hosts: NAME_OF_Container
become: yes
become_user: root
become_method: sudotasks:
- name: Installing webserver(apache2)
apt:
name: apache2
state: present- name: Starting service
service:
name: apache2
state: started
- I have used ubuntu:latest , so for ubuntu, I have installed apache2
- Use privilege escalation for sudo.
Output
- Inventory updated
- Use IP:4444(port)