使用Ansible和Docker来搭建Ansible的工作环境
准备Docker方面
创建 Docker 镜像
在这个例子中,我们按照以下条件来创建图像。
-
- pythonが使える ( Ansble の実行環境ため )
-
- sshで直接接続ができる
-
- ssh ユーザー: root
ssh パスワード: screencast
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:screencast' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
# FOR Ansible
RUN apt-get update && apt-get -y install python
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
$ docker build -t eg_sshd .
将SSH服务放入Docker容器中(参考 Docker文档)
运行Docker容器
$ docker run -d -p 30000:22 --name test_sshd eg_sshd
执行Ansible
创建文件
使用 Docker 构建环境来创建手头的库存文件。(连接的 IP 取决于 Docker 的配置环境。)
[example]
127.0.0.1
[example:vars]
ansible_ssh_user=root
ansible_ssh_port=30000
注意: Ansible 2.0 及更高版本推荐使用简短的写法,如 ansible_user。
設置環境變數
请在初次访问时禁用问题(在known_inventory中记录指纹的过程)。
$ export ANSIBLE_HOST_KEY_CHECKING=False
执行命令 (Zhí
尝试在Docker容器中创建一个适当的文件。
$ ansible -i inventory example -m shell -a 'touch example.txt' --ask-pass
-i inventory
インベントリファイルの指定
-m shell
「ansible の shell モジュールを実行する」という指定 (省略できる)
-a ‘touch example.txt’
モジュールに渡す引数 ( この例の場合は、実行するコマンドの内容 )
–ask-pass
パスワードを手入力するためのフラグ
执行命令时会要求输入密码,请输入您设置的密码(屏幕录像)。
确认
能够看到文件在Docker容器中被创建。
$ docker exec -it test_sshd /bin/bash
root@91625cd5dda0:/# ls ~/
example.txt
如果想避免被要求输入密码。
在主机上安装sshpass。
(适用于 Mac 的情况下)
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
(安装SSHPass)
在手边通过SSH访问容器并创建一个指纹进行预留。
ssh root@127.0.0.1 -p 30000
回答“是”并退出。
在存货文件中写入密码
也许不太推荐。(如果要做得好的话,可以考虑换锁之类的措施。)
[example]
127.0.0.1
[example:vars]
ansible_ssh_user=root
ansible_ssh_port=30000
+ ansible_ssh_pass=screencast
执行Ansible命令
ansible -i inventory example -m shell -a 'touch example.txt'
环境
-
- ansible 1.9.6
-
- Docker version 17.03.1-ce, build c6d412e
- Mac OS Sierra 10.12.4
Docker容器集线器
- yumainaura/ansible-ssh – Docker Hub
相关
- Ansible | ssh のキャッシュを無効にする – Qiita
请对以下内容进行汉语表达:
参考
- ansible – to use the ‘ssh’ connection type with passwords, you must install the sshpass program” – Stack Overflow
招募聊天室成员
如果您有任何问题、烦恼或需要咨询的事情,请使用LINE开放聊天进行交流。
推特