ラック
Home > ブログ > 記事 > 2017年9月 > Ansible入門(導入からテスト動作まで)

Ansible入門(導入からテスト動作まで)

カテゴリ: サーバ

オープンソースカンファレンス Tokyo 2017/Fallでデモを見てイメージが掴めたので、熱が冷めないうちにAnsibleに実際に触ってみることにしました。

構成

  • サーバA: Ansibleコントローラ
    • OS: CentOS release 6.9 (Final)
    • Python: Python 2.6.6
    • IP: xxx.xxx.xxx.xxx
  • サーバB: Ansibleクライアント
    • OS: CentOS Linux release 7.3.1611 (Core)
    • Python 2.7.5
    • IP: yyy.yyy.yyy.yyy
    • 最小限構成でインストール、IP・DNSなどネットワークのみ設定

今回はこのようなテスト環境を用意してテストしてみます。

サーバAにAnsibleをインストール

# yum install epel-release
読み込んだプラグイン:fastestmirror, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.yz.yamagata-u.ac.jp
 * extras: ftp.iij.ad.jp
 * remi-safe: mirror.innosol.asia
 * updates: ftp.iij.ad.jp
パッケージ epel-release-6-8.noarch はインストール済みか最新バージョンです
何もしません
#

とのことなので早速インストール

# yum install ansible

## 略

完了しました!

Ansibleのバージョン確認。

# ansible --version
ansible 2.3.1.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]

OK、入りました。

サーバBにSSHで入れるように公開鍵を渡す

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

## パスフレーズなし
## テストなのでrootに送っていますがセキュリティ的によろしくないのでお察し

# ssh-copy-id root@yyy.yyy.yyy.yyy
root@yyy.yyy.yyy.yyy's password:
Now try logging into the machine, with "ssh 'root@yyy.yyy.yyy.yyy'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

# ssh yyy.yyy.yyy.yyy
Last login: Tue Sep 12 16:55:29 2017 from xxx.xxx.xxx.xxx
# exit

OK。パスワードなしでSSHログインできるようになりました。

Ansibleのテスト

# mkdir /ansible
# cd /ansible
# mkdir inventory
# vi inventory/hosts

[targets]
yyy.yyy.yyy.yyy

/ansible/inventory/hostsファイルで、targetsグループにyyy.yyy.yyy.yyyつまりサーバBを所属させる、というグループ分け。

これでAnsibleからサーバBが指定できるようになったはずなので、pingで疎通確認してみます。

# ansible all -i inventory/hosts -m ping
yyy.yyy.yyy.yyy | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
#

OKです。サーバA(Ansibleコントローラ)からサーバB(Ansibleクライアント)へ疎通確認できました。

# mkdir group_vars
# vi group_vars/targets.yml

message: "Hello Ansible !"

fruits:
  apples:
    amount: 10
  bananas:
    amount: 20
  oranges:
    amount: 30

# vi test.yml

- hosts: targets
  user: root
  tasks:
    - name: output message.
      debug: msg=""

    - name: output fruits
      debug: msg="We want   !" 
      with_dict: ""

# ansible-playbook -i inventory/hosts test.yml

PLAY [targets] *****************************************************************

TASK [Gathering Facts] *********************************************************
ok: [yyy.yyy.yyy.yyy]

TASK [output message.] *********************************************************
ok: [yyy.yyy.yyy.yyy] => {
    "msg": "Hello Ansible !"
}

TASK [output fruits] ***********************************************************
ok: [yyy.yyy.yyy.yyy] => (item={'key': u'apples', 'value': {u'amount': 10}}) => {
    "item": {
        "key": "apples",
        "value": {
            "amount": 10
        }
    },
    "msg": "We want 10 apples !"
}
ok: [yyy.yyy.yyy.yyy] => (item={'key': u'oranges', 'value': {u'amount': 30}}) => {
    "item": {
        "key": "oranges",
        "value": {
            "amount": 30
        }
    },
    "msg": "We want 30 oranges !"
}
ok: [yyy.yyy.yyy.yyy] => (item={'key': u'bananas', 'value': {u'amount': 20}}) => {
    "item": {
        "key": "bananas",
        "value": {
            "amount": 20
        }
    },
    "msg": "We want 20 bananas !"
}

PLAY RECAP *********************************************************************
yyy.yyy.yyy.yyy              : ok=3    changed=0    unreachable=0    failed=0
#

元記事ではtest.ymlのwith_dictの値にダブルクォーテーションがなく、自分の環境ではここでエラーで引っかかったので、付け足しました。すると、上記のようにデバッグをパスしました。

とりあえずここまで。実際の環境構築は後でやる予定。

参考

タグ: サーバ環境・構築,構成管理ツール

 



関連する記事一覧