我想在docker实例中进行ansible-playbook测试是不可能的,这些测试在依赖依赖运行的init系统的“启用服务”测试时,在这种情况下,这将是systemd。使用docker中的systemd服务测试ansible playbook
要清楚:测试的目的在于证明在一组给定的操作系统实例上,正确的操作系统能够正常工作,它必须支持,并且将在裸机/虚拟机上部署可执行的脚本。
因此,例如,测试这个简单的nginx yaml片段合并了一个service: state: started
声明。
# ./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
使用Dockerfile给出:
$ cat Dockerfile
FROM ansible/centos7-ansible:stable
WORKDIR /provision
COPY hosts /etc/ansible/
COPY ansible-nginx /provision
CMD ["ansible-playbook", "deploy.yml"]
失败,出现错误的位置:
$ 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
会是一个什么方式来测试使用systemd(因为它们将被执行ansible脚本在baremetal/VM)在不同的操作系统版本上使用码头?
绝对应该只有一个'CMD'指令,它应该是'CMD [“/ usr/sbin/init”]'。通过这个docker映像,你可以尝试'docker run -d -name foo foo && sleep 10 && docker exec -ti foo ansible-playbook/provision/deploy.yml'来启动剧本。 –
谢谢,这似乎是合理的。我编辑了我的答案。 –