我这个新手在截止日期之前对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个小时…别说我偷懒)

广告
将在 10 秒后关闭
bannerAds