Je suppose qu'il n'est pas possible, respectivement utile, d'effectuer des tests ansible-playbook dans une instance de docker, lorsqu'ils intègrent des tests "service enabled" qui reposent sur un système init en cours, dans ce cas de centos 7 cela serait systemd. Pour être clair: Les tests visent à montrer que le playbook ansible fonctionne correctement sur un ensemble d'instances de système d'exploitation donné, qu'il doit prendre en charge, et que les scripts ansible seront déployés sur des machines virtuelles/bare metal. Par exemple, le test de cet extrait nginx yaml simple incorpore une déclaration service: state: started
.Test de lisibilité ansible avec les services systemd dans docker
# ./ansible-nginx/tasks/install_nginx.yml
- name: NGINX | Installing NGINX repo rpm
yum:
name: http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
- name: NGINX | Installing NGINX
yum:
name: nginx
state: latest
- name: NGINX | Starting NGINX
service:
name: nginx
state: started
en utilisant les Dockerfile donné:
$ cat Dockerfile
FROM ansible/centos7-ansible:stable
WORKDIR /provision
COPY hosts /etc/ansible/
COPY ansible-nginx /provision
CMD ["ansible-playbook", "deploy.yml"]
échoue avec l'erreur ici:
$ docker run -it foo
PLAY [localhost] ***************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [NGINX | Installing NGINX repo rpm] ***************************************
changed: [localhost]
TASK [NGINX | Installing NGINX] ************************************************
changed: [localhost]
TASK [NGINX | Starting NGINX] **************************************************
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "no service or tool found for: nginx"}
NO MORE HOSTS LEFT *************************************************************
[WARNING]: Could not create retry file 'deploy.retry'. [Errno 2] No such file or directory: ''
PLAY RECAP *********************************************************************
localhost : ok=3 changed=2 unreachable=0 failed=1
Quelle serait un moyen de tester les scripts Ansible qui utilisent systemd (parce qu'ils seront exécutés sur baremetal/vm) en utilisant docker sur différentes versions de l'OS?
Il ne devrait y avoir qu'une seule directive 'CMD' et devrait être' CMD ["/ usr/sbin/init"] '. Et avec cette image docker vous pouvez essayer 'docker run -d - nom foo foo && sleep 10 && docker exec -ti foo ansible-playbook/provision/deploy.yml' pour démarrer le playbook. –
Merci, cela semble plausible. J'ai édité ma réponse. –