繁体   English   中英

如何使用Docker测试Ansible playbook

[英]How to test Ansible playbook using Docker

我是ansible(和docker)的新手。 我想在任何临时/生产服务器上使用之前测试我的ansible playbook。

由于我无法访问空的远程服务器,我认为最简单的测试方法是使用Docker容器,然后以Docker容器作为主机运行我的playbook。

我有一个基本的DockerFile,可以创建一个标准的ubuntu容器。 我如何配置ansible主机以便在docker容器上运行它? 此外,我怀疑我需要“运行”docker容器以允许ansible连接到它。

关于这个有一个有效的例子: https//github.com/William-Yeh/docker-ansible

首先,从以下列表中选择您要开始的基本图像:

  • 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

其次,将以下Dockerfile与您的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

第三, docker build .

对于更高级的用法,Ansible Galaxy中的角色williamyeh/nginx还演示了如何对Travis CI的Ubuntu 12.04工作器实例上的各种Linux发行版进行简单的集成测试。

披露:我是wiliamyeh/nginx docker-ansible wiliamyeh/nginxwiliamyeh/nginx项目的作者。

除非您的阶段和生产服务器也是Docker容器,否则在docker容器中运行playbook实际上可能不是最好的方法。 Docker ubuntu映像被剥离,与完整安装有一些区别。 更好的选择可能是在与您的登台和生产安装相匹配的Ubuntu VM中运行playbook。

也就是说,为了在容器中运行ansible playbook,你应该编写一个运行你的playbook的Dockerfile。 这是一个示例Dockerfile:

 # 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

ansible库存文件看起来像

[local]
localhost

然后你就可以docker build . (其中.是您的Playbooks和Dockerfile所在目录的根目录),然后在生成的图像上docker run docker。

Ansible首席技术官迈克尔德哈恩(Michael DeHaan) 就此主题撰写了一篇内容丰富的博客文章

我为这种不同的场景创建了一个角色: https//github.com/chrismeyersfsu/provision_docker 轻松启动Docker容器并在您的角色或playbook中使用它们作为库存进行测试。

包括:

  • 针对Ubuntu 12.04和14.04以及CentOS 6和7的Curated Dockerfile,它们放回了发行版中删除的init系统
  • 开始ssh

另请注意,这些示例都有一个.travis.yml文件,用于使用Travis CI形成CI管道。

例子:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM