ansible真好吃吗?
比起Chef来说,使用Provisioning工具更加简单易用。
Shellshock目前是一个热门话题,这个漏洞真让人头痛。虽然我启动了很多虚拟机,但是检查漏洞并更新很麻烦(因为我并不是全天候运营,所以不能自动更新)。
因此,为了方便起见,我安装并尝试了备受关注的ansible来进行Provisioning,免得忘记了,我记下来了。
服务器端的设置
如果安装了Python,那就可以了。然后使用EPEL进行ansible安装。
如果想要安装最新版本,我认为参考这里是最好的选择。
# EPEL 有効化
$ sudo rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
# Ansible インストール
$ sudo yum install ansible
只要客户端的设置中安装了Python,那就可以了。
只要客户端中安装了Python,就可以了,这样很方便。
只需确保可以从Ansible服务器通过SSH登录。
先用SSH命令进行通信测试确认一下
$ ssh vagrant@192.168.11.106 -i /home/vagrant/.ssh/id_rsa
数个困扰点
基本上,在使用上述配置後,您已經可以使用Ansible,但在那之前我遇到了一些問題。
没有符合条件的主机
由于没有指定连接的主机(甚至只指定了IP),所以无法指定文件。
$ ansible 192.168.11.102 -m ping
No hosts matched
失败:ssh
我为这个错误烦恼了两天。是因为Vagrant环境不好吗?结果只是因为我没有指定ssh的路径。只需添加’-k’选项就可以了。顺便说一下,如果添加’-vvv’选项,可以了解详细的操作状态。
$ ansible -i hosts 192.168.11.102 -m ping -vvv
<192.168.11.102> ESTABLISH CONNECTION FOR USER: vagrant on PORT 22 TO 192.168.11.102
192.168.11.102 | FAILED => FAILED: ssh vagrant@192.168.11.102:22 : Private key file is encrypted
To connect as a different user, use -u <username>.
如果要明确指定ssh密钥对的私钥,请使用以下方法。
$ cat hosts
192.168.11.102 ansible_ssh_private_key_file=/home/vagrant/.ssh/ansible102 ansible_ssh_user=vagrant
192.168.11.104 ansible_ssh_private_key_file=/home/vagrant/.ssh/ansible104 ansible_ssh_user=vagrant
执行需要root权限的命令并被训斥时
只需添加“–sudo”选项即可确保需要root权限。
$ ansible -i hosts 192.168.11.106 -i hosts -m shell -a "yum -y update" -k
192.168.11.106 | FAILED | rc=1 >>
Loaded plugins: fastestmirror, versionlockYou need to be root to perform this command.
暂时
通过命令行可以做任何事情。这是ansible的优点。
确认bash版本
我认为只有CentOS可以使用”rpm -qa bash”命令来执行,其他操作系统可能不行。
$ ansible -i hosts 192.168.11.106 -i hosts --sudo -m shell -a "cat /etc/redhat-release" -k
SSH password:
192.168.11.106 | success | rc=0 >>
CentOS release 6.6 (Final)
更新软件
$ ansible -i hosts 192.168.11.106 -i hosts --sudo -m shell -a "yum -y update" -k
更高级的使用方法
在厨师的术语中,可以将操作以类似于这个食谱的方式写入一个名为Playbook的yml(YAML)文件中。
玩法指南
我认为这个结构非常亲切易懂。虽然有很多模板可供选择,但我会试着运行我随便创建的Playbook。只需要在客户端的/tmp目录中创建一个以自己IP地址命名的文件,非常简单的配方呢,哈哈。
$ cat test.yml
- hosts: all
user: vagrant
gather_facts: yes
vars:
user_name: vagrant
dest_home_path: /home/{{user_name}}
tasks:
- name: run command and ignore the result
command: /bin/echo {{ ansible_eth0["ipv4"]["address"] }}
register: hello
command: /bin/touch /tmp/{{ ansible_eth0["ipv4"]["address"] }}
- debug: var=hello.stdout
ignore_errors: True
让我试试看。
不用担心警告,哈哈。
$ ansible-playbook -i hosts test.yml -k
[WARNING]: The version of gmp you have installed has a known issue regarding
timing vulnerabilities when used with pycrypto. If possible, you should update
it (ie. yum update gmp).
SSH password:
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.11.104]
ok: [192.168.11.106]
ok: [192.168.11.102]
TASK: [run command and ignore the result] *************************************
changed: [192.168.11.104]
changed: [192.168.11.102]
changed: [192.168.11.106]
TASK: [debug var=hello.stdout] ************************************************
ok: [192.168.11.106] => {
"hello.stdout": ""
}
ok: [192.168.11.104] => {
"hello.stdout": ""
}
ok: [192.168.11.102] => {
"hello.stdout": ""
}
PLAY RECAP ********************************************************************
192.168.11.102 : ok=3 changed=1 unreachable=0 failed=0
192.168.11.104 : ok=3 changed=1 unreachable=0 failed=0
192.168.11.106 : ok=3 changed=1 unreachable=0 failed=0
只要在客户端的 /tmp 文件夹中有文件,就可以了。很简单吧?
请提供有用的网站参考
安装Ansible等等
使用无代理的简单配置管理工具”Ansible”入门
Ansible备忘录
Ansible注释
初次使用Ansible的人需要了解的7个模块
yteraoka/ansible教程
技巧
在这种情况下使用Ansible
所有模块
使用Ansible来管理Vagrant的Guest OS配置【Playbook:jenkins, node.js】