2014-07-14 20 views
15

Sono nuovo ad ansible (e docker). Vorrei testare il mio ansible playbook prima di usarlo su qualsiasi server di staging/produzione.Come testare il playbook Ansible usando Docker

Poiché non ho accesso a un server remoto vuoto, ho pensato che il modo più semplice per testare sarebbe stato utilizzare il contenitore Docker e quindi eseguire il mio playbook con il contenitore Docker come host.

Ho un DockerFile di base che crea un contenitore ubuntu standard. Come configurare gli host ansible per eseguirlo sul container docker? Inoltre, ho il sospetto che avrei bisogno di "eseguire" il contenitore docker per consentire ad ansible di connettersi ad esso.

risposta

13

L'esecuzione del libro di gioco in un contenitore finestra mobile potrebbe non essere l'approccio migliore a meno che i server di stage e di produzione non siano anche contenitori Docker. L'immagine di ubuntu Docker è ridotta e presenta alcune differenze rispetto a un'installazione completa. Un'opzione migliore potrebbe essere quella di eseguire il playbook in una macchina virtuale Ubuntu che corrisponde alle installazioni di staging e produzione.

Detto questo, per eseguire il playbook ansible all'interno del contenitore è necessario scrivere un Dockerfile che esegue il proprio playbook. Ecco un Dockerfile campione:

# Start with the ubuntu image 
FROM ubuntu 
# Update apt cache 
RUN apt-get -y update 
# Install ansible dependencies 
RUN apt-get install -y python-yaml python-jinja2 git 
# Clone ansible repo (could also add the ansible PPA and do an apt-get install instead) 
RUN git clone http://github.com/ansible/ansible.git /tmp/ansible 

# Set variables for ansible 
WORKDIR /tmp/ansible 
ENV PATH /tmp/ansible/bin:/sbin:/usr/sbin:/usr/bin 
ENV ANSIBLE_LIBRARY /tmp/ansible/library 
ENV PYTHONPATH /tmp/ansible/lib:$PYTHON_PATH 

# add playbooks to the image. This might be a git repo instead 
ADD playbooks/ /etc/ansible/ 
ADD inventory /etc/ansible/hosts 
WORKDIR /etc/ansible 

# Run ansible using the site.yml playbook 
RUN ansible-playbook /etc/ansible/site.yml -c local 

Il file di inventario ansible sarebbe simile

[local] 
localhost 

allora si può solo docker build . (dove . è la radice della directory in cui i tuoi Playbook e Dockerfile vivono), poi docker run sull'immagine risultante.

Michael DeHaan, CTO di Ansible, ha un'informativa blog post on this topic.

+2

Grazie. Quindi, in pratica, si distribuisce "localmente" all'interno del contenitore docker, piuttosto che il contenitore è "host". Non ci ho pensato. Domani darò una scorsa a vedere come si inserisce nel mio caso d'uso. Anche grazie per l'idea che potrebbe non essere l'approccio migliore! Lo prenderà in considerazione. – Andre

+0

@Andre Hai ottenuto qualche risultato? –

12

C'è un esempio di lavoro per quanto riguarda questo: https://github.com/William-Yeh/docker-ansible

In primo luogo, scegliere l'immagine di base che desideri cominciare dalla seguente lista:

  • williamyeh/ansible:debian8-onbuild
  • williamyeh/ansible:debian7-onbuild
  • williamyeh/ansible:ubuntu14.04-onbuild
  • williamyeh/ansible:ubuntu12.04-onbuild
  • williamyeh/ansible:centos7-onbuild
  • williamyeh/ansible:centos6-onbuild

In secondo luogo, mettere il seguente Dockerfile insieme con la directory playbook:

FROM williamyeh/ansible:ubuntu14.04-onbuild 

# ==> Specify playbook filename; default = "playbook.yml" 
#ENV PLAYBOOK playbook.yml 

# ==> Specify inventory filename; default = "/etc/ansible/hosts" 
#ENV INVENTORY inventory.ini 

# ==> Executing Ansible... 
RUN ansible-playbook-wrapper 

In terzo luogo, docker build .

Per un utilizzo più avanzato, il ruolo in Ansible Galaxy williamyeh/nginx anche dimostra come eseguire un semplice test di integrazione per una varietà di distribuzioni Linux su Ubun Travis CI tu 12.04 istanze di lavoro.

Divulgazione: Sono l'autore dei progetti docker-ansible e wiliamyeh/nginx.

3

Ho creato un ruolo per questo scenario variabile: https://github.com/chrismeyersfsu/provision_docker. Avvia facilmente i contenitori Docker e utilizzali nel tuo ruolo o nel tuo playbook, come inventario, per testare.

Include:

  • A cura Dockerfile per Ubuntu 12.04 & 14.04 così come CentOS 6 & 7 che ha messo di nuovo nei sistemi di init distro-rimosso
  • inizio ssh

Da notare anche la tutti gli esempi hanno un file .travis.yml per formare una pipeline CI utilizzando Travis CI.

Esempi:

Problemi correlati