4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AnsibleAdvent Calendar 2017

Day 24

Ansible Oneviewの実践!! -AnsibleでBear-metal as a Serviceを創る-

Last updated at Posted at 2017-12-23

クリスマスイブですね-。今年はサンタがAnsibleでプレゼントデプロイ自動化するみたいなので、楽しみにしています。我が家はちゃんとSanta_Inventory.iniの19131行目に登録されています。oO(なにそれ

さて。今年はなんかAnsibleが浸透した1年でしたねー。もぅ世の中のセットアップは全部Ansibleでアプリデプロイはk8sで良いんじゃないかという感じです。CNCF万歳!!

というところで、自分の番なのでガシガシと書きたいところなのですが、クリスマス執筆祭りに追われており、ちょっとお待ち下さい…。クソ長いのでアジャイル的に公開更新していきます。暇がある時に読んで下さい。

【宣伝.1】GitLab実践ガイド
2018/2/1にでるよー。よかったら書店で御覧ください。

【宣伝.2】Ansible実践ガイド
Kindle版いまなら半額!! 1,728円!!(2017/12/27まで)
※キャンペーン終わりました。購入いただいた方ありがとうございます!

#1. 本記事の概要
今回は何度となく外部登壇で紹介だけしているAnsible Tower & HPE Synergyのセットアップ方法をご紹介したいなとおもいます。(誰得…
HPE Synergyってなんぞや?って方は以下を御覧ください。
Red Hat Forum 2017: Ansible Towerの実践!!エンタープライズのInfrastructure as Codeの現在

P00000263.JPG

要はAnsible TowerからHWのAPIをキックして、Bear-metal as a Serviceを実現しようジャマイカというお話です。と、ここまで話すと「あー。HWの紹介ね。」って感じの方もいらっしゃるかもしれないんですが、どちらかというと、Ansibleの3rd Party製モジュールを色々触る上での知識やTipsなんかを中心に紹介していきます。ということで、Bear-metal as a Serviceの世界をご堪能くだしぁ。

#2. 構成に関して
今回の構成は以下のとおり。

  • Synergy with Image Streamer x1
  • Ansible Tower on VMware x1

Synergyとは別のサーバー上にAnsible Towerをセットアップし、外からOneView APIに対してOSのデプロイを司令します。もちろんPlaybookでAPIを呼ぶため、今回は「oneview-ansible」モジュールというCertifiedモジュールを利用します。

P00000264.JPG

2.1 セットアップの流れ

今回は大きく以下の流れでセットアップを行っていきます。

  1. Ansible Towerのセットアップ
  2. Oneview Ansible Moduleのセットアップ
  3. HPE Synergyのセットアップ
  4. Ansible Towerの設定と実装

2.2 構成のバージョン

今回は以下のバージョンを用いてセットアップを行いました。ここは少し注意して導入を行ってください。AnsibleのバージョンやPythonのバージョンが異なると動かないことがありますので、適宜調整いただければと思います。

対象 プロダクト バージョン
Ansible Towerサーバー RHEL 7.4
Python 2.7.14
oneview-anible 4.0.0
Ansible 2.4.1
Ansible Tower 3.2.1
HPE Synergy OneView 3.10

2.3 oneview-ansible moduleについて

oneview-ansibleモジュールのアップストリーム版は以下で展開されています。
■ oneview-ansible module
https://github.com/HewlettPackard/oneview-ansible

ただし、Ansibleのバージョン2.4以降、oneview-ansibleモジュールのいくつかがAnsibleパッケージ標準のRemote Management Modules群にはいっており、すぐに利用することができます。すでにAnsible標準に対応しているOneviewモジュールは以下です。

Oneviewモジュール 内容
oneview_ethernet_network Manage OneView Ethernet Network resources
oneview_ethernet_network_facts Retrieve the facts about one or more of the OneView Ethernet Networks
oneview_fc_network Manage OneView Fibre Channel Network resources.
oneview_fc_network_facts Retrieve the facts about one or more of the OneView Fibre Channel Networks
oneview_fcoe_network Manage OneView FCoE Network resources
oneview_fcoe_network_facts Retrieve the facts about one or more of the OneView FCoE Networks
oneview_network_set Manage HPE OneView Network Set resources
oneview_network_set_facts Retrieve facts about the OneView Network Sets
oneview_san_manager Manage OneView SAN Manager resources

#3. Ansible Towerのセットアップ手順
なにはともあれ、Ansible Towerをインストールしましょう。今回はVM上のRHELにTowerをインストールします。ドキュメントが充実しているので、公式ページをなぞっていけばできるのですが、RHELだったら何するんだっけ?って時のために記載しておきます。

##3.1 RHEL(RedHat Enterprise Linux)の初期セットアップ
まずはRHELの初期セットアップです。このあたりは環境によってそれぞれ異なるので、適宜設定をしてください。自分はこれらを設定してますというメモ。
###3.1.1 OSの基本設定
IPv6って大事ですよね。はい。

ipv6_disabled
$ sudo vi /etc/sysctl.d/disable_ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

$ sudo sysctl -p /etc/sysctl.d/disable_ipv6.conf

企業だとProxyを使われていることがほとんどだと思いますので、Proxyを設定します。

env_setting
$ sudo vi /etc/environment
http_proxy="http://proxy.ansible.example.com:8080"
https_proxy="http://proxy.ansible.example.com:8080"
ftp_proxy="http://proxy.ansible.example.com:8080"
no_proxy="192.168.*,10.*,*.local,*.net"

$ sudo vi /etc/yum.conf
(追加)
proxy=http://proxy.ansible.example.com:8080

$ sudo vi /etc/rhsm/rhsm.conf
(追加)
# an http proxy server to use
proxy_hostname = proxy.ansible.example.com
# port for http proxy server
proxy_port = 8080

あとは環境に合わせてOSに必要な設定を

hostname_setting
$ sudo hostnamectl set-hostname --static ansible-tower01

$ sudo visudo
(追加)
Defaults    timestamp_timeout = 300

###3.1.2 サブスクリプションの登録
RHEL使うときはサブスクライブしましょ。これ大事。

rhel_subscribe
$ sudo subscription-manager register \
--username \<username\> \
--password \<password\> \
--autosubscribe

## 登録解除はこちら
$ sudo subscription-manager unregister

##3.2 RHEL Ansible Towerのインストール
それでは早速Ansible Towerをインストールしていきます。

###3.2.1 Towerの前提条件
構成の前提条件は、公式ドキュメントが一番なので、こちらをご確認ください。
http://docs.ansible.com/ansible-tower/latest/html/quickinstall/prepare.html#prerequisites-and-requirements

サポートOSは以下です。

  • Red Hat Enterprise Linux 7.2 or later 64-bit
  • CentOS 7.2 or later 64-bit
  • Ubuntu 14.04 LTS 64-bit
  • Ubuntu 16.04 LTS 64-bit

###3.2.2 Yumのリポジトリ登録
TowerのインストールはYumを利用します。そのため、必要なリポジトリをあらかじめ登録し、アップデートしておきましょう。

yum_updated
$ sudo subscription-manager repos --list-enabled |grep extra
$ sudo subscription-manager repos --enable=rhel-7-server-extras-rpms
$ sudo subscription-manager repos --list-enabled |grep extra
$ sudo yum -y install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo yum -y update

###3.2.3 Ansibleのインストール
Towerの前にAnsibleをインストールしておきます。Ansible単体でインストールしておくとvirtualenvやpyenvを利用して入れることもありますが、TowerではOSにインストールされたAnsibleを利用するためYumで入れておきます。また、Ansible実行ユーザーの配下に「ansible.cfg」だけ設定しておきましょ。

ansible_install
$ sudo yum -y install ansible
$ ansible --version
ansible 2.4.1.0
  config file = $HOME/.ansible.cfg
$ vi $HOME/.ansible.cfg

Configの内容は以下みたいな感じ

$HOME/.ansible.cfg
[defaults]
forks = 15
retry_files_enabled = false
log_path = $HOME/.ansible/ansible.log
host_key_checking = false

###3.2.4 Towerのインストール
やっとTowerをインストールできる所まで来ましたので、Towerをインストールします。今回はバージョン3.2.1のTowerを使用していますが、適宜更新してください。

tower_setup
$ mkdir -v ~/src && cd ~/src
$ curl -O https://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-latest.tar.gz
$ tar zxvf ./ansible-tower-setup-latest.tar.gz
$ cd ./ansible-tower-setup-3.2.1/
$ vi ./inventry

Towerのインストールはインベントリの設定を行うだけです。ローカルホストにインストールする場合に変更しなければいけないのが以下のパラメーターです。

  • admin_password (Towerの管理者パスワード)
  • pg_password (PostgreSQLの管理者パスワード)
  • rabbitmq_password (RabbitMQの管理者パスワード)
inventory
[tower]
localhost ansible_connection=local

[database]

[all:vars]
admin_password='password'

pg_host=''
pg_port=''

pg_database='awx'
pg_username='awx'
pg_password='password'

rabbitmq_port=5672
rabbitmq_vhost=tower
rabbitmq_username=tower
rabbitmq_password='password'
rabbitmq_cookie=cookiemonster

# Needs to be true for fqdns and ip addresses
rabbitmq_use_long_name=false

Towerのインストールはとても簡単。シェルというなのAnsibleコマンドの羅列をキックするだけ

tower_install
$ sudo ./serup.sh

無事インストールスクリプトが終わったら、Ansible Towerサーバーにブラウザからアクセスし、先程「admin_password」に登録したパスワードでログインしてみましょう。

P00000265.JPG

ほら素敵。Ansible Towerがインストールできましたー。初回時のログイン時にサブスクリプション登録が聞かれるので、入れておきましょう。
サブスクリプション無いよって方は、Trial版も利用できます。Towerのライセンスに関する詳細はこちらから。
http://docs.ansible.com/ansible-tower/3.1.4/html_ja/installandreference/updates_support.html

と。ここまでは誰でもできるインストール。ここからが本題です。

#4. Oneview Ansible Moduleのセットアップ

ここからが意外とハマりどころ。そもそもAnsible TowerのではOSのパッケージに含まれるAnsibleを利用することが前提とされているため、Pythonのライブラリなどはシステムに入っているPythonが利用されます。ところが、3rd Partyのモジュールを利用すると、Pythonのバージョンや必要なライブラリが指定されていることもちらほら。
今回利用する「oneview-ansible」もその一つで、必須要件はこちら。

  • Ansible >= 2.1
  • Python >= 2.7.9
  • HPE OneView Python SDK (Install HPE OneView Python SDK)

ところが、RHEL7.4でAnsibleを入れると、こちら。はい。惜しいですね。

  • Ansible = 2.4
  • Python = 2.7.5

ということで、Tower上からoneview-ansibleモジュールが利用できるように設定していきます。

##4.1 Python(2.7.14)のインストール
まずは2.7.14のPythonをインストールしましょう。通常であればpyenvなどを利用すると便利なのですが、Ansible Towerなので、漢は黙ってコンパイル。ということでソースコードからインストールします。

4.1.1 事前にライブラリをインストール

Pythonをコンパイルするときは、これを忘れると大変なことになります。Ansibleを実行するたびに、あのライブラリがないとか、このライブラリが無いとか怒られるので、入れておきます。

library_install
$ sudo yum -y install zlib-devel openssl-devel libselinux-python

4.1.2 Pythonのコンパイル

今回はコンパイルして「/usr/local/bin/python」にランタイムを配備しておきます。更にAnsible内で利用するPythonはこの最新版を利用するよう設定します。

python_install
$ cd ~/src
$ curl -O https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tar.xz
$ tar xvf ./Python-2.7.14.tar.xz
$ cd ./Python-2.7.14/
$ ./configure --enable-optimizations
$ make
$ make test
$ sudo make install
$ /usr/local/bin/python --version
Python 2.7.14

##4.2 HPE OneView Python SDKのセットアップ
次に、OneViewで必要なPythonのSDKをインストールし、OneView接続用のクレデンシャル情報を設定します。

4.2.1 SDKのインストール

SDKはpipからインストールしても、ソースからインストールしても構いませんが、メンテナンス性を考えるとpipからがオヌヌメ。

sdk_install
$ cd ~/src
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ sudo /usr/local/bin/python ./get-pip.py
$ pip install dnspython  ##必要なパッケージを事前にインストール

## pipからインストール
$ pip install hpOneView

## ソースからインストール
$ cd ~/src
$ git clone https://github.com/HewlettPackard/python-hpOneView.git
$ cd ./python-hpOneView/
$ sudo /usr/local/bin/pip install .

4.2.2 クレデンシャルの設定

またこの時点で、Oneviewへの接続情報(クレデンシャル情報)を設定しておきます。Oneview専用モジュールをPlaybook内で利用する際は、常にこのファイルのパスを指定する必要があります。

credential_deploy
$ sudo mkdir -v /usr/local/etc/oneview
$ sudo vi /usr/local/etc/oneview/oneview_config.json

Credentialの書き方はこちらを参照。特にOneViewのバージョン情報を正しく設定する必要があるので注意です。

OneView APIバージョン 設定
2.0 API version 200
3.0 API version 300
3.10 API version 500
oneview_config.json
{
  "ip": "<Synergy OneView IP Address>",
  "image_streamer_ip": "<Synergy ImageStreamer IP Address>",
  "credentials": {
    "userName": "Administrator",
    "authLoginDomain": "",
    "password": "password"
  },
  "api_version": 500
}

##4.3 oneview-ansible moduleの配置
SDKをPythonにロードできた次は、3rd Party製のモジュールライブラリを展開します。通常3rd Party製のモジュールは、Ansible実行時のカレントディレクトリ直下のlibraryというディレクトリ内、もしくは「/usr/share/ansible」に配置しておきます。すると、Ansible実行時に勝手にロードされて利用できます。
もしモジュールライブラリのパスを変えたいというときは、以下のように環境変数で切り替えることも可能です。

libpath_setting
export ANSIBLE_LIBRARY=/srv/modules/custom_modules:/srv/modules/vendor_modules

では、実際にモジュールライブラリを配備しましょう。ここで重要なのがAnsible Towerの場合プロジェクトごとにライブラリをlibraryに配置すると、どれを読み込んでいるかわからなくなるので、Ansible Tower上の「/usr/share/ansible」に配置することをおすすめします。

oneview-ansible_deploy
$ sudo mkdir -v /usr/share/ansible
$ cd /usr/share/ansible
$ sudo git clone https://github.com/HewlettPackard/oneview-ansible.git

##4.4 Ansible OneView 接続テスト
お待たせしました。やっと×3です!!
やっと、Ansible Oneviewが使えるようになったので、まずはAnsible Tower経由ではなく、ansible-playbookコマンドから接続してみましょう。今回利用するPlaybookは単純にServer情報(Server Profile Template:IS-RHEL7.3-SY480Gen9-Template-Ansible)を取得するものです。
ここで注意するのは、Ansible Python Interpreterに先程コンパイルした新しいPythonを指定しておくことです。これによって、OneView Python SDKが読み込まれモジュールを実行できます。

test.yaml
- name: Test OneView Connection
  hosts: localhost
  connection: local
  gather_facts: false

  vars:
    ansible_python_interpreter: "/usr/local/bin/python"
    oneview_config: "/usr/local/etc/oneview/oneview_config.json"

  tasks:
    - name: Gather facts about the Server Profile Template
      oneview_server_profile_template_facts:
        config: "{{ oneview_config }}"
        name: "IS-RHEL7.3-SY480Gen9-Template-Ansible"
      register: server_profile_template_results

    - name: Debug facts about the Server Profile Template
      debug:
        var: server_profile_template_results

そして、これらを実施する方法は以下。

shell:ansible_test
$ mkdir -v ~/test && cd ~/test
$ vi ./test.yaml ##Playbookを配置

もしoneview ansibleライブラリを、/usr/share/ansible以外の場所においた場合

$ ln -s /usr/local/lib/oneview-ansible/library library
$ ls -la
total 4
drwxrwxr-x. 2 shkitayama shkitayama 38 Dec 5 15:27 .
drwx------. 7 shkitayama shkitayama 148 Dec 5 15:10 ..
lrwxrwxrwx. 1 shkitayama shkitayama 38 Dec 5 15:25 library -> /usr/local/lib/oneview-ansible/library
-rw-rw-r--. 1 shkitayama shkitayama 627 Dec 5 15:21 test.yaml

実施

$ ansible-playbook ./test.yaml


あとは成功することを祈りましょう。

#5. Ansible Towerのセットアップ
いよいよTowerのセットアップを行います。その前にAnsible TowerがロードするPlaybookを配備しておきましょう。


$ sudo mkdir /var/lib/awx/projects/oneview
$ sudo ln -s /usr/local/lib/oneview-ansible/library /var/lib/awx/projects/oneview/library
$ sudo cp -vi ~/test/test.yaml /var/lib/awx/projects/oneview/
$ sudo chown -R awx:awx /var/lib/awx/projects/oneview

[設定]>[ユーザー]>[USERの作成]
ansible user
[設定]>[組織]>[HPE]
HPE

[プロジェクト   プロジェクトの作成
OneView Project
[プロジェクト]>[OneView Project]>[パーミッション]
Ansible Permission

インベントリー   インベントリーの作成
インベントリー]OneView   パーミッション
---------

テンプレート   ジョブテンプレートの作成
AnsibleOneview Demo Template
[設定]>[認証情報]>[認証情報の編集] @@@@
oneview


4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?