terraform docker container
Dockerfile
From centos:centos8
ARG VERSION=0.12.25
RUN yum install -y unzip python2-pip openssh-clients && \
yum clean all && \
curl -s https://releases.hashicorp.com/terraform/${VERSION}/terraform_${VERSION}_linux_amd64.zip -o terraform.zip && \
unzip terraform.zip && \
rm terraform.zip && \
mv terraform /usr/local/bin && \
pip2 install ansible boto boto3 awscli && \
ln -s /usr/bin/python2.7 /usr/bin/python && \
mkdir /tmp/terraform && \
useradd -m docker
VOLUME ["/tmp/terraform"]
USER "docker"
WORKDIR "/tmp/terraform"
CMD ["/bin/bash"]
build an image
$ sudo docker build --build-arg VERSION=0.12.25 -t terraform:0.12.25 .
$ sudo docker tag terraform:0.12.25 terraform:latest
test the image
$ sudo docker run -v /mylocal/terraform:/tmp/terraform --rm -it terraform:latest terraform --version
$ sudo docker run -v /mylocal/terraform:/tmp/terraform --rm -it terraform:latest ansible --version
$ sudo docker run -v /mylocal/terraform:/tmp/terraform --rm -it terraform:latest bash
create variable file /mydir/credentials
AWS_ACCESS_KEY_ID=xxxx
AWS_SECRET_ACCESS_KEY=xxxx
AWS_DEFAULT_REGION=xxxx
create wrapper script infradeploy.sh
docker run -v /mylocal/terraform:/tmp/terraform --env-file /mydir/credentials --rm -it terraform:latest $*
test terraform and ansible work
$ sudo sh infradeploy.sh terraform show
$ sudo sh infradeploy.sh ./ec2.py --list
$ sudo sh infradeploy.sh ansible -i ec2.py -u admin ec2 -m ping --private-key id_rsa.mykey
$ sudo sh infradeploy.sh ansible-playbook --check -e @extravars.json playbook.yml
As described at this site we can use ec2.py and ec2.ini(optional) for dynamic inventory
When I ran ec2.py I got ImportError: No module named ansible.module_utils in the case I installed ansible from ubuntu repository.
It seems ansible should be installed with pip if you want to use ec2.py
playbook sample
- name: test playbook
hosts: tag_Name_tagname
remote_user: admin
become: yes
vars:
ansible_ssh_private_key_file: "./id_rsa.mykey"
tasks:
- name: install some packages
apt:
name: ['make','screen']
state: present
install_recommends: no
when: ansible_pkg_mgr == 'apt'
tags: packages
- name: create a directory
file:
path: /my/direcoty
state: directory
owner: admin
mode: '0755'
$ sudo sh infradeploy.sh ansible-playbook --check --diff -i ec2.py playbook.yml
$ sudo sh infradeploy.sh ansible-playbook --diff -i ec2.py playbook.yml