Quantcast
Channel: VMware Communities : Blog List - All Communities
Viewing all articles
Browse latest Browse all 3135

VMware Photon OS 2.0 で Ansible を実行してみる。

$
0
0

最近 GA になった Photon OS 2.0 に、ansible をインストールしてみました。

 

GA のときの投稿はこちらをどうぞ・・・

VMware Photon OS 2.0 が GA になりました。

 

今回はダウンロードサイトにある OVA with virtual hardware v13 (ESX 6.5 and above) を利用しています。

 

Ansible 実行サーバへの ansible インストール。

まず、root / changeme でログイン&パスワード変更をして、

わかりやすくホスト名(今回は ph20-ansible)を変更しておきます。

You are required to change your password immediately (administrator enforced)

Last login: Fri Nov  3 01:04:03 2017 from 192.168.1.XXX

Changing password for root.

Current password: ★デフォルトはchangeme

New password:  ★変更するパスワードを入力。

Retype new password:

01:04:23 up 35 min,  0 users,  load average: 0.00, 0.00, 0.00

tdnf update info not available yet!

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# cat /etc/photon-release

VMware Photon OS 2.0

PHOTON_BUILD_NUMBER=304b817

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# hostnamectl set-hostname ph20-ansible

root@photon-machine [ ~ ]# su -

root@ph20-ansible [ ~ ]#

 

Photon OS のリポジトリに、ansible が用意されています。

root@ph20-ansible [ ~ ]# tdnf list ansible

ansible.noarch                              2.4.0.0-1.ph2             photon

 

インストールしてみると、依存関係により python2 もインストールされます。

ちなみに、デフォルトだと Python 3 だけがインストールされています。

root@ph20-ansible [ ~ ]# tdnf install -y ansible

 

Installing:

python2-libs             x86_64       2.7.13-10.ph2    photon        15.49M 16239329

python2                  x86_64       2.7.13-10.ph2    photon         1.85M 1936323

ansible                  noarch       2.4.0.0-1.ph2    photon        54.13M 56762546

 

Total installed size:  71.47M 74938198

 

Downloading:

ansible                                9680670    100%

python2                                 779030    100%

python2-libs                           5952811    100%

Testing transaction

Running transaction

Installing/Updating: python2-libs-2.7.13-10.ph2.x86_64

Installing/Updating: python2-2.7.13-10.ph2.x86_64

Installing/Updating: ansible-2.4.0.0-1.ph2.noarch

 

Complete!

root@ph20-ansible [ ~ ]#

 

しかし、これだけでは Ansible 関連のコマンドを実行できませんでした。

root@ph20-ansible [ ~ ]# ansible --version

Traceback (most recent call last):

  File "/bin/ansible", line 40, in <module>

    import ansible.constants as C

  File "/usr/lib/python2.7/site-packages/ansible/constants.py", line 15, in <module>

    from ansible.config.manager import ConfigManager, ensure_type

  File "/usr/lib/python2.7/site-packages/ansible/config/manager.py", line 11, in <module>

    import yaml

ImportError: No module named yaml

root@ph20-ansible [ ~ ]#

 

Photon OS 2.0 の RPM の依存関係が十分でないためか、さらに RPM の追加が必要です。

すくなくとも YAML、jinja2 が不足しているようなので追加インストールします。

Python3 ではなく Python2 で利用するため、PyYAML と python-jinja2 をインストールします。

root@ph20-ansible [ ~ ]# tdnf install -y PyYAML python-jinja2

 

Installing:

python-markupsafe        x86_64       1.0-3.ph2        photon        61.48k 62953

python-jinja2            noarch       2.9.5-6.ph2      photon         1.95M 2044146

PyYAML                   x86_64       3.12-2.ph2       photon       622.06k 636988

 

Total installed size:   2.62M 2744087

 

Downloading:

PyYAML                                  198440    100%

python-jinja2                           697669    100%

python-markupsafe                        29704    100%

Testing transaction

Running transaction

Installing/Updating: python-markupsafe-1.0-3.ph2.x86_64

Installing/Updating: python-jinja2-2.9.5-6.ph2.noarch

Installing/Updating: PyYAML-3.12-2.ph2.x86_64

 

Complete!

root@ph20-ansible [ ~ ]#

 

これで ansible コマンドは実行できるようになりました。

root@ph20-ansible [ ~ ]# ansible --version

ansible 2.4.0.0

  config file = None

  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']

  ansible python module location = /usr/lib/python2.7/site-packages/ansible

  executable location = /bin/ansible

  python version = 2.7.13 (default, Oct 26 2017, 01:54:36) [GCC 6.3.0]

root@ph20-ansible [ ~ ]#

 

ということで、ansible をインストールする場合は、すくなくとも下記のパッケージが必要そうです。

# tdnf install -y ansible PyYAML python-jinja2

 

Ansible を別の Photon OS に実行してみる。

それでは、別の Photon OS に Ansible でコマンド実行してみます。

 

まず、SSH の鍵ファイルを作成しておきます。

root@ph20-ansible [ ~ ]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

Generating public/private rsa key pair.

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

 

Ansible でコマンド実行する Photon(今回は 192.168.12.205)に公開鍵をコピーしておきます。

今回は、初回の root パスワード変更も一緒に実施しています。

root@ph20-ansible [ ~ ]# ssh-copy-id root@192.168.12.205

/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"

The authenticity of host '192.168.12.205 (192.168.12.205)' can't be established.

ECDSA key fingerprint is SHA256:gnXBYqCxVbxQ6VlSExsLIi+tFkAB6YlIU6KxYqrKtoY.

Are you sure you want to continue connecting (yes/no)? yes

/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Password: ★changeme

You are required to change your password immediately (administrator enforced)

Changing password for root.

Current password: ★changeme

New password: ★新パスワードを入力。

Retype new password: ★新パスワードを再入力。

 

Number of key(s) added: 1

 

Now try logging into the machine, with:   "ssh 'root@192.168.12.205'"

and check to make sure that only the key(s) you wanted were added.

 

root@ph20-ansible [ ~ ]#

 

Ansible のインベントリファイルを作成しておきます。

今回は、下記の内容だけ記載しています。

[targets]

192.168.12.205

 

下記のように作成しました。

root@ph20-ansible [ ~ ]# cat << EOF > hosts

> [targets]

> 192.168.12.205

> EOF

root@ph20-ansible [ ~ ]# cat ./hosts

[targets]

192.168.12.205

 

接続確認してみると、相手の Photon にパスの通った python がなくて失敗しました。

root@ph20-ansible [ ~ ]# ansible -i ./hosts -m ping 192.168.12.205

192.168.12.205 | FAILED! => {

    "changed": false,

    "failed": true,

    "module_stderr": "Shared connection to 192.168.12.205 closed.\r\n",

    "module_stdout": "/bin/sh: /usr/bin/python: No such file or directory\r\n",

    "msg": "MODULE FAILURE",

    "rc": 0

}

 

たしかに、相手の Photon(192.168.12.205)にはまだ python2 をインストールしておらず

デフォルトでは python 3 しかないので・・・

root@photon-machine [ ~ ]# ip a | grep 192

    inet 192.168.12.205/24 brd 192.168.12.255 scope global dynamic eth0

root@photon-machine [ ~ ]# rpm -qa | grep python

python3-libs-3.6.1-9.ph2.x86_64

python3-six-1.10.0-8.ph2.noarch

python3-jinja2-2.9.5-6.ph2.noarch

python3-prettytable-0.7.2-6.ph2.noarch

python3-jsonpatch-1.15-4.ph2.noarch

python3-requests-2.13.0-3.ph2.noarch

python3-PyYAML-3.12-2.ph2.x86_64

python3-3.6.1-9.ph2.x86_64

python3-markupsafe-1.0-3.ph2.x86_64

python3-configobj-5.0.6-4.ph2.noarch

python3-xml-3.6.1-9.ph2.x86_64

python3-jsonpointer-1.10-6.ph2.noarch

python3-oauthlib-2.0.2-3.ph2.noarch

python3-setuptools-3.6.1-9.ph2.noarch

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# python

-bash: python: command not found

root@photon-machine [ ~ ]# python3 -V

Python 3.6.1

 

実行先に python2 をインストールしてしまいます。

 

実は Photon OS 2.0 では、yum コマンドが tdnf の RPM に含まれていて

デフォルトで yum コマンドも実行できるようになっています。

root@photon-machine [ ~ ]# which yum

/usr/bin/yum

root@photon-machine [ ~ ]# rpm -qf /usr/bin/yum

tdnf-1.2.2-2.ph2.x86_64

 

ということで、yum で python2 をインストールしておきます。

root@photon-machine [ ~ ]# yum install -y python2

Refreshing metadata for: 'VMware Photon Linux 2.0(x86_64)'

Refreshing metadata for: 'VMware Photon Linux 2.0(x86_64) Updates'

Refreshing metadata for: 'VMware Photon Extras 2.0(x86_64)'

photon-extras                              106    100%

Installing:

python2-libs             x86_64       2.7.13-10.ph2    photon        15.49M 16239329

python2                  x86_64       2.7.13-10.ph2    photon         1.85M 1936323

 

Total installed size:  17.33M 18175652

 

Downloading:

python2                                 779030    100%

python2-libs                           5952811    100%

Testing transaction

Running transaction

Installing/Updating: python2-libs-2.7.13-10.ph2.x86_64

Installing/Updating: python2-2.7.13-10.ph2.x86_64

 

Complete!

root@photon-machine [ ~ ]#

root@photon-machine [ ~ ]# which python

/usr/bin/python

 

これで Ansible で接続テストがとおりるようになります。

root@ph20-ansible [ ~ ]# ansible -i ./hosts -m ping 192.168.12.205

192.168.12.205 | SUCCESS => {

    "changed": false,

    "failed": false,

    "ping": "pong"

}

 

ためしに、下記のような Ansible Playbook を実行してみました。

※最初にお伝えしておくと、これは yum が微妙なことになります。

root@ph20-ansible [ ~ ]# cat docker-host.yml

---

- name: setup Docker host.

  hosts: targets

  remote_user: root

  tasks:

 

  - name: install Docker package.

    yum:

      name: docker

      state: latest

 

  - name: start docker service.

    service:

      name: docker

      state: started

      enabled: yes

 

しかし Ansible で yum モジュールを利用しようとすると、
Python2 むけの「yum」モジュール不足になりました。

root@ph20-ansible [ ~ ]# ansible-playbook -i hosts docker-host.yml

 

PLAY [setup Docker host.] ******************************************************

 

TASK [Gathering Facts] *********************************************************

ok: [192.168.12.205]

 

TASK [install Docker package.] *************************************************

fatal: [192.168.12.205]: FAILED! => {"changed": false, "failed": true, "msg": "python2 bindings for rpm are needed for this module. python2 yum module is needed for this  module"}

        to retry, use: --limit @/root/docker-host.retry

 

PLAY RECAP *********************************************************************

192.168.12.205             : ok=1    changed=0    unreachable=0    failed=1

 

root@ph20-ansible [ ~ ]#

 

ちなみに Photon 2.0 では yum と tdnf の RPM が競合しています。

tdnf が保護されているので、yum の RPM のインストールは難しそうです。

root@photon-machine [ ~ ]# tdnf install -y yum

Error(1030) : The operation would result in removing the protected package : tdnf

 

かわりに command モジュールなどで yum コマンドを実行する感じになってしまうかもしれません。

毎回 changed になってしまう雑な感じですが・・・

root@ph20-ansible [ ~ ]# cat docker-host.yml

---

- name: setup Docker host.

  hosts: targets

  remote_user: root

  tasks:

 

  - name: docker RPM install.

    command: bash -c "rpm -q {{ item }} || tdnf install -y {{ item }}"

    with_items:

    - docker

 

  - name: start docker service.

    service:

      name: docker

      state: started

      enabled: yes

 

root@ph20-ansible [ ~ ]# ansible-playbook -i hosts docker-host.yml

 

PLAY [setup Docker host.] ******************************************************

 

TASK [Gathering Facts] *********************************************************

ok: [192.168.12.205]

 

TASK [docker RPM install.] *****************************************************

changed: [192.168.12.205] => (item=docker)

 

TASK [start docker service.] ***************************************************

ok: [192.168.12.205]

 

PLAY RECAP *********************************************************************

192.168.12.205             : ok=3    changed=1    unreachable=0    failed=0

 

root@ph20-ansible [ ~ ]#

 

簡単にここまで気づいた Photon OS 2.0 + ansible をまとめると・・・

  • Ansible 実行サーバには、ansible だけでなく PyYAML python-jinja2 など、他にも RPM が必要。
    python2 は、ansible の依存関係でインストールされる。
  • Ansible のターゲットになるサーバには、少なくとも python2 がいるので、
    VM のテンプレートなどに入れておいた方がよさそう。
  • デフォルトで yum コマンドは利用できるが、ansible からは利用が困難そうで、
    rpm インストールには工夫が必要そう。

 

何となく Photon OS 2.0 でのパッケージ管理については ansible より

PMD / pmd-cli や cloud-init を利用したほうがよいのかもしれないとも思えました。

 

以上、Photon OS 2.0 で ansible を利用してみる話でした。


Viewing all articles
Browse latest Browse all 3135

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>