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】

广告
将在 10 秒后关闭
bannerAds