我这个新手在截止日期之前对Ansible掌握了多少
总结
在我正在寻找我还没有接触过的工具类 Advent Calendar 的时候,偶然间发现了 Ansible Advent Calendar 2014。
作为基础架构工程师,我一直想要尝试一下这个工具,但一直放置不理。现在正好是个好机会,我打算去尝试一下。
Ansible 是什么?
-
- Ansible とは Python で記述された構成管理ツール
- chef, puppet 等と同じ
嗯嗯,我有了一个想法。
Ansible的特点
通过阅读各种不同的文章,并收集大家的声音。
-
- シンプルなセットアップ
-
- 特に何もしなくても早くて並列処理可能
-
- sshd だけあれば動く
-
- モジュールの作成に言語の縛りはない
-
- api がある
-
- 一般ユーザでも使える
- 設定管理が簡単
在我进行调查时,我发现在 GitHub 上有关于 Ansible 的特点介绍。
并且还有详细的解释在2014年Ansible圣诞日历的第一天的文章里!
今年1年間でAnsible界隈ではどのような変化が起こったのか。
歓喜!
总之,我大致明白了。
Ansible 的基础术语
我们发现了两个主要的术语。
模块 (mó duó lè)
在处理的最小单位中,将在ansible命令和Playbook的任务中指定的模块传送到服务器并在服务器上执行。
策略手册
Playbook 是使用 Ansible 模块组合的方式来描述目标服务器配置的内容。
我明白了。 (I understood.)
Ansible 安装
Mac – 苹果电脑
看起來好像在 Mac 上可以透過 brew 提供。
$ brew install ansible
$ ansible --version
ansible 1.8.2
好的,看起来不错。
CentOS 6.5 -> CentOS 6.5 版
一开始就没有安装Python2.7。
$ sudo yum install bzip2-devel sqlite-devel
$ cd /var/tmp
$ git clone https://github.com/tagomoris/xbuild.git
$ sudo xbuild/python-install 2.7.6 /opt/python-2.7
$ sudo /opt/python-2.7/bin/pip install ansible
$ echo 'PATH=/opt/python-2.7/bin:$PATH' >> ~/.bashrc
升级到了 Ansible 1.8.2 版本。
尝试使用Ansible
好吧,既然说要试试看,那该从哪里开始呢?
哎呀,真巧,开发环境里居然有两台机器。
首先来试试同时操作这两台机器吧。
网络环境
没有经过踏板。
Local Mac <--> 開発環境マシン
这是一个构成。
Ansible 我来操作!
嗯,不太清楚。我要去查一下。
我想要同时操作两台设备。
如果能够执行 cat /etc/redhat-release 就好了。
模块编辑
先试着查一下。听说有一个ping模块。
我们来试试用一下。
由于将用户名直接粘贴可能会造成问题,所以我将全部以 “root” 写出来,请谅解。抱歉。
首先,创建一个hosts文件。这是想要操作的服务器列表。
[servers]
10.29.1.111
10.29.1.128
大概就是这样。由于[servers]好像什么都没问题,所以我认为一个易于管理的名字是好的。
那么,先试着对其中一台进行操作吧。
$ ansible -u root -i hosts 10.29.1.111 -m ping --ask-pass
SSH password:
10.29.1.111 | success >> {
"changed": false,
"ping": "pong"
}
乒乓球回来的时候看起来不错。总之,我们已经达到了先试试看的目的。
如果是钥匙认证的话肯定更方便吧,这是我的印象。
那么接下来我们一起来试试两台吧。
$ ansible -u root -i hosts servers -m ping --ask-pass
SSH password:
10.29.1.128 | success >> {
"changed": false,
"ping": "pong"
}
10.29.1.111 | success >> {
"changed": false,
"ping": "pong"
}
只需指定[servers],就可以将所有在其中列出的主机都作为目标。真方便啊。
那么,让我们尝试通过命令 cat /etc/redhat-release 来达到目标。
如果想要运行 shell 并获得结果,可以使用 -m shell -a “hogehoge”。
让我们试一试。
$ ansible -u root -i hosts servers -m shell -a "cat /etc/redhat-release" --ask-pass
SSH password:
10.29.1.128 | success | rc=0 >>
CentOS Linux release 7.0.1406 (Core)
10.29.1.111 | success | rc=0 >>
CentOS Linux release 7.0.1406 (Core)
办到了。哎呀,目标已经实现了。该怎么办呢?
暂且先参考下面关于模块的内容应该就可以。
-
- About Modules
- Module Index
玩法手册编排
因为只有这样确实有点无聊,所以我也想要试试玩一下 Playbook。
我将创建一个用于运行free -m命令的Playbook。
ansible -u root -i hosts servers -m shell -a "free -m" --ask-pass
不要说可以在那里实现。
我故意使用Playbook。为了记忆。
这里。。。
完成了。
$ cat playbook.yml
- hosts: servers
user: root
gather_facts: no
tasks:
- shell: free -m
register: output
- debug: var=output.stdout_lines
以下是结果↓
$ ansible-playbook playbook.yml -i hosts --ask-pass
SSH password:
PLAY [servers] ****************************************************************
TASK: [shell free -m] *********************************************************
changed: [10.29.1.111]
changed: [10.29.1.128]
TASK: [debug var=output.stdout_lines] *****************************************
ok: [10.29.1.128] => {
"output.stdout_lines": [
" total used free shared buffers cached",
"Mem: 32006 1186 30820 344 0 268",
"-/+ buffers/cache: 917 31089",
"Swap: 8191 0 8191"
]
}
ok: [10.29.1.111] => {
"output.stdout_lines": [
" total used free shared buffers cached",
"Mem: 15879 6487 9392 48 0 2217",
"-/+ buffers/cache: 4269 11610",
"Swap: 8191 0 8191"
]
}
PLAY RECAP ********************************************************************
10.29.1.111 : ok=2 changed=1 unreachable=0 failed=0
10.29.1.128 : ok=2 changed=1 unreachable=0 failed=0
调试代码:var=output.stdout_lines 如果不写这行代码,输出就不会以好的方式呈现出来。
所以,我們也能夠使用 Playbook。然後就這樣結束了,可以嗎?
可以啊,嗯,沒問題,應該可以的。
我累了,帕特拉什。
阅读以下页面可能会有所帮助。
- Playbooks
最后
最终,我所接触到的只是初学者的入门级别。一旦开始使用,就会得到一定程度的满足感,这并不好。使用Playbook后,我对其能够实现许多不同的事情印象深刻。然而,由此带来了学习成本的增加,所以需要权衡一下。这类工具最好至少掌握一种,这是我个人的观点。
还有一个我之前就有想法的事情,就是如果把错误的地方自动化了,反而会成为事故的源头。盲目地追求简便容易的地方,反倒是本末倒置的行为呢。
希望能够通过简单的操作和设置,有效地提高一些工作的效率,感觉还是挺不错的。
Ansible的网友们,非常感谢大家。信息很详尽,使用起来非常方便!
(只是碰到一下而已吧…)
(真正工作的时间只有4~5个小时…别说我偷懒)