作成したVMをAnsibleで初期設定まで自動化してみたい(仮想化技術に触れてみよう)

# はじめに
<!-- 発端や概要を記載 -->
VM作成や初期設定を理解できるようになってきましたが、
もっと自動化して楽できるようになりたいなと考えていたところ、
`Ansible`という構成管理ツールがあることを知ったので実際に触っていきたいと思います。

今回は`コントロールノード`と呼ばれる遠隔操作をするサーバと
`管理対象ノード`と呼ばれる操作される側のサーバの２台を用意しています。

以降は下記の名称で呼称していきます。
`コントロールノード・・・HOSTSV (AlmaLinuxをインストール)`
`管理対象ノード・・・・・TRGTSV (AlmaLinuxをインストール)`

# 目次
<!-- タイトルとアンカー名を編集 -->
- [①Ansibleを動かすための前準備](#ansibleを動かすための前準備)
- [②Ansibleを動かしてみる](#ansibleを動かしてみる)
- [③Playbookを作成して動かす](#playbookを作成して動かす)
- [④さいごに](#さいごに)


# ①Ansibleを動かすための前準備

HOSTSVとTRGTSVにて、パッケージの更新を行います。
```bash
$ dnf upgrade
```

HOSTSVとTRGTSVにて、pythonのバージョン確認を行います。
```bash
$ python3 -V
Python 3.9.18
```

HOSTSVにて、pipをインストールする
```bash
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python3 get-pip.py
$ pip -V
pip 24.2 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
```

HOSTSVにて、Ansibleをインストールする
```bash
$ pip install ansible
$ ansible --version
ansible [ core 2.15.12 ]
・・・略
```

HOSTSVにて、SSHKey作成をして、TRGTSVにKeyのコピーを行います。
```bash
$ ssh-keygen　　　　　　#今回はパスフレーズなし
$ ssh-copy-id alma@192.168.0.***　　#TRGTSVのIPアドレス
Number of key(s) added : 1
・・・略
```

# ②Ansibleを動かしてみる
ここからは基本HOSTSV(コントロールノード)での作業になります。

まずは作業階層を作成して
インベントリファイル`inventory.ini`を作成、TRGTSVの情報を書き込みます。
```bash
$ mkdir ansible
$ cd ~/ansible
$ vi inventory.ini

[TRGTSV]
192.168.0.*** (TRGTSVのIPアドレス)

:wq
```

作成したインデントりファイルと`pingモジュール`でpingの疎通確認を行い、無事成功。
```bash
$ ansible -i inventory.ini TRGTSV -m ping

192.168.0.*** | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
```
初めてAnsibleを動かすことができました。

# ③Playbookを作成して動かす

次にPlaybookを作成し、任意のコマンドを実行できるようにしてみたいと思います。

手始めに、指定したディレクトリを作成するPlaybookを作成。
```bash
$vi playbook.yml

- hosts: TRGTSV
  tasks:
  - name: create direvtory
    file:
       path: /home/alma/ansible/DIR
       state: directory
       owner: alma
       mode: 0777
```
作成した`Playbook.yml`と前項で作成した`inventory.ini`を使って動かしまして、
無事Playbookを使ったコマンドを実行をすることに成功。
```bash
$ ansible-playbook -i inventory.ini playbook.yml

PLAY [TRGTSV] ***********************************************************************************************

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

TASK [create direvtory] *************************************************************************************
changed: [192.168.0.***]

PLAY RECAP **************************************************************************************************
192.168.0.***              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
```

試しにもう一度、同じコマンドを実行してみましたが、
冪等性を保つためにディレクトリを作成するコマンド自体は実行されませんでした。
（changedが0のため）
```bash
$ ansible-playbook -i inventory.ini playbook.yml

・・・略
PLAY RECAP **************************************************************************************************
192.168.0.***              : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
```
冪等性の働きを、実際に体験すると感動しますね。

# ④さいごに

今回は、構成自動化のためにAnsibleを触ってみましたが、
動かすところまでは比較的簡単にできることがわかりました。

ただしユーザ追加やNTP設定など、まだまだ自動化して~~楽したい~~初期設定作業を簡略化したい部分があるので、少しずつ理解を深めていきたいです。

少なくとも現時点では、ymlの書き方やモジュールへの理解が圧倒的に足りておらず、なかなか正解に辿り着くことが出来ませんでした。

なので次回からは細かく分けながら、ハンズオンしていきたいと思います。

ありがとうございました。