AristaをAnsibleのplaybookから設定してみる

f:id:komeiy:20140820203642j:plain

前回のChefとAristaで試してみてわかったのですが、devopsのextensionがまだ0.1.1でやれることが少なすぎて今後に期待という状況なので果たしてAnsibleで試してどうなのと思いつつ、一応動いたのでメモとして残しておきます。

使い分けが難しいです。むしろ使い分ける必要はないんですかね?

  • グローバルコンフィグをメーカー横断でChefで管理
  • VLAN設定やインタフェースの設定はAnsibleで設定

言語も違うしChef統一でいいかな少し違うかなと思いつつ、でも大規模環境でもストレスの少ない一括変更とかできてよいかなとも思います。プログラマブルトラフィックを制御したくはないですが、プログラマブルに設定をできるソフトウェアをメーカー横断で使いたいので、コントロールプレーンの分離と共通化はうまく進んでほしいです。devopsの最適化を求めて高価なメーカー既製品を購入するのは"個人的には"現時点で見送りしたいところです(数ヶ月後に違うこと言っているかもですが)

で、本題のAnsibleですがサラッと以下の通りです。

Ansibleインストール

epelリポジトリからインストールするので、epelが入ってない人は以下実行しておきます。

[root@localhost templates]#  sudo rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm を取得中
警告: /var/tmp/rpm-tmp.XIffL5: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
準備中...                ########################################### [100%]
   1:epel-release           ########################################### [100%]
[root@localhost ~]#  sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

今回はyumでインストールしますが、pip installの方がよいかもしれません

[root@localhost ~]# yum install ansible

hostsと実行結果はこんな感じです。

# vi /etc/ansible/hosts
[arista]
192.168.1.100 ansible_ssh_user=admin

[root@localhost ~]# ansible arista -m ping --ask-pass
SSH password:
192.168.1.100 | success >> {
    "changed": false,
    "ping": "pong"
}

devopsでVLAN一覧を確認してみます。

[root@localhost ~]# ansible all -a 'devops vlan list' -u admin --ask-pass
SSH password:

192.168.1.100 | success | rc=0 >>
{
    "message": "OK",
    "result": {
        "1": {
            "name": "default",
            "vlan_id": "1"
        },
        "10": {
            "name": "VLAN0010",
            "vlan_id": "10"
        }
    },
    "status": 200
}

PlaybookからVLANを設定する

Gitにサンプルがあがっているのでcloneして使います。

https://github.com/aristanetworks/ansible-eos

中身を見てみます。

[root@localhost playbooks]# cat vlan
---
- hosts: arista
  gather_facts: no
  tasks:
  - name: create vlan 999
    action: arista_vlan vlan_id=999 logging=true

  - name: edit vlan 999
    action: arista_vlan vlan_id=999 name=test logging=true

  - name: delete vlan 999
    action: arista_vlan vlan_id=999 state=absent logging=true

aristaグループのホストに対してplaybookを流します。作って、編集して、削除します。

[root@localhost playbooks]# ansible-playbook vlan --module-path=../modules/ --ask-pas
 [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 [arista] *****************************************************************

TASK: [create vlan 999] *******************************************************
changed: [192.168.1.100]

TASK: [edit vlan 999] *********************************************************
changed: [192.168.1.100]

TASK: [delete vlan 999] *******************************************************
changed: [192.168.1.100]

PLAY RECAP ********************************************************************
192.168.1.100                : ok=3    changed=3    unreachable=0    failed=0

流している最中にArista(EOS)側でVLANを見てみます。 Playbook通りに実行されていることがわかります。

arista-kensho#show vlan
VLAN  Name                             Status    Ports
----- -------------------------------- --------- -------------------------------
1     default                          active
10    VLAN0010                         active

arista-kensho#show vlan
VLAN  Name                             Status    Ports
----- -------------------------------- --------- -------------------------------
1     default                          active
10    VLAN0010                         active
999   VLAN0999                         active

arista-kensho#show vlan
VLAN  Name                             Status    Ports
----- -------------------------------- --------- -------------------------------
1     default                          active
10    VLAN0010                         active
999   test                             active

arista-kensho#show vlan
VLAN  Name                             Status    Ports
----- -------------------------------- --------- -------------------------------
1     default                          active
10    VLAN0010                         active

インタフェースの設定についても以下の通りです。見ればわかると思いますので貼り付けだけにします。

arista-kensho#show run
interface Ethernet1
   shutdown
!

[root@localhost playbooks]# cat interface
---
- hosts: arista
  tasks:

  - name: set description on Ethernet 1
    action: arista_interface interface_id=Ethernet1 description='test interface' logging=true

[root@localhost playbooks]# ansible-playbook interface --module-path=../modules/ --ask-pas
 [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 [arista] *****************************************************************

GATHERING FACTS ***************************************************************
ok: [192.168.1.100]

TASK: [set description on Ethernet 1] *****************************************
changed: [192.168.1.100]

PLAY RECAP ********************************************************************
192.168.1.100                : ok=2    changed=1    unreachable=0    failed=0

arista-kensho#show run
interface Ethernet1
   description test interface
   shutdown
!

冒頭にも書きましたが、devopsと共通化に期待ということろです。
一部の機種で対応してますとかだと正直厳しいですね。


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

入門Ansible

入門Ansible

Ansible Configuration Management

Ansible Configuration Management