IBM Cloud Virtual Server for Classic で Red Hat Enterprise Linux 8 に Ansible をインストールする


# Red Hat Enterprise Linux 8 確認
IBM Cloud Virtual Server for Classic で Red Hat Enterprise Linux 8 が 2020年7月26日にリリースされていました。

>https://cloud.ibm.com/gen1/infrastructure/image-templates
![Kobito.ur06oa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/9366dc54-b299-f256-8290-997438f94bdb.png "Kobito.ur06oa.png")

プロビジョニングしたところ、上記の通り、バージョンは 8.2 だと確認できました。

```shell:

[root@khayama-control ~]# cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.2 (Ootpa)
```



# Python がない
8.x ではデフォルトで `python` コマンドが実行できない状態なのでインストールします。

```shell:

[root@khayama-control ~]# python
-bash: python: コマンドが見つかりません
[root@khayama-control ~]# python2
-bash: python2: コマンドが見つかりません
[root@khayama-control ~]# python3
-bash: python3: コマンドが見つかりません
```

# Python インストール

`yum` の代わりに `dnf` を使って `python` をインストールします。

```shell:

dnf install python38 -y
python3 -V
```

>パッケージ管理システムがDNFをベースとしたYum v4に変更されました。
yumコマンドはdnfコマンドに変更となります。今のところyumコマンドも後方互換として残されていますが、いずれは廃止となる予定です。
パッケージ管理に自前の運用スクリプトを使用している場合は、今後を見据えてdnfコマンドに対応させたほうがよいでしょう。
>
> 参考 : [個人的に気になったRHEL 8の変更点 | 電算星組](https://densan-hoshigumi.com/server/rhel8-release)


# `pip` インストール
今後はこのように `python3 -m pip` と実行するのが推奨のようです。

```shell:

python3 -m pip install --upgrade pip
python3 -m pip --version
```

# Ansible インストール
[`pip` を使用した Ansible のインストール](https://docs.ansible.com/ansible/2.9_ja//installation_guide/intro_installation.html#pip-ansible)を行います。

```shell:

python3 -m pip install ansible
```

最新版が導入できました。
リリースノートは [Release and maintenance](https://docs.ansible.com/ansible/devel/reference_appendices/release_and_maintenance.html) から確認できます。

```shell:

[root@khayama-control ~]# ansible --version
ansible 2.9.13
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.8.0 (default, Mar  9 2020, 18:02:46) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
```


# SSH 鍵の登録
引き続き、 Controle Node にて SSH 鍵を作成し、 Target Node に登録します。

```shell:

ssh-keygen

ssh-copy-id -i $HOME/.ssh/id_rsa.pub localhost

ssh-copy-id -i $HOME/.ssh/id_rsa.pub root@10.192.109.187 # target node ip address
```

>[Ansible トレイルマップ MOUNT YAML STEP3](https://www.redhat.com/ja/explore/ansible/trailmap/yaml-step3)
![Kobito.UtXF6S.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101361/f41db4ce-cf49-8912-0f03-508c7adbb983.png "Kobito.UtXF6S.png")

# ping 確認
`localhost` への ping 実行を確認できます。

```shell:

mkdir /etc/ansible/test1
cd /etc/ansible/test1

cat <<EOF > inventory.ini
[test_servers]
localhost
EOF
```

```shell:

[root@khayama-control test1]# ansible -i inventory.ini test_servers -m ping
localhost | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
```

# ディレクトリ作成 & ファイルコピー確認
Target Node へのディレクトリ作成 & ファイルコピーを確認できます。

```shell:

mkdir /etc/ansible/test2
cd /etc/ansible/test2

cat <<EOF > inventory.ini
[test_servers]
10.192.109.187
EOF

cat <<EOF > playbook.yml
---
- hosts: test_servers
  tasks:
  - name: create directory
    file:
       path: /root/tmp
       state: directory 
       owner: root
       mode: 0755

  - name: copy file
    copy:
       src: /etc/hosts
       dest: /root/tmp/hosts
       owner: root
       mode: 0644
EOF
```

```shell:

[root@khayama-control test2]# ansible-playbook -i inventory.ini playbook.yml 

PLAY [test_servers] **********************************************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************************************
ok: [10.192.109.187]

TASK [create directory] ******************************************************************************************************************************************************************************
changed: [10.192.109.187]

TASK [copy file] *************************************************************************************************************************************************************************************
changed: [10.192.109.187]

PLAY RECAP *******************************************************************************************************************************************************************************************
10.192.109.187             : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
```

# さいごに
これで IBM Cloud の Red Hat Enterprise Linux 8 で Ansible を使う準備が整いました。
IBM Cloud でも Ansible を使ってみてください。

# 参考
- [第9章 Python の使用 Red Hat Enterprise Linux 8 | Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/using-python3_configuring-basic-system-settings)
- [shkitayama / ansible_practical_guide · GitLab](https://gitlab.com/shkitayama/ansible_practical_guide/-/tree/master)