我想在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'來啓動劇本。 –
謝謝,這似乎是合理的。我編輯了我的答案。 –