Rocky LinuxでのAnsibleの使い方

本サイトは広告収入およびアフィリエイト収益を受けております。

スポンサーリンク
スポンサーリンク

お疲れ様です。きざきまるおです。

皆さんはAnsibleはご存じでしょうか?
こちらは冪等性のある環境を構築するために使われるソフトウェアで簡単に統一された環境を構築することが出来ます。
時代はパブリッククラウドのため、昔よりも重要度は少なくなりましたが、細かい設定を入れたい場合は今でも十分に使えるので、ぜひ学習してみてください。

それではどうぞ。

実行環境

今回はVirtualBox上にRoecky Linux2台を構築しました。
IPアドレスはそれぞれ以下になります。

  • 192.168.0.1 (Ansible マスター兼スレーブ)
  • 192.168.0.2 (Ansible スレーブ)

手順

インストール

マスター側で以下コマンドを用いてインストールしましょう。

dnf -y install epel-release
dnf -y install ansible

このコマンドだけでインストールできるからかなり簡単ですね。

次にスレーブ側にパスワードなしの接続ができるように鍵の設定をしましょう。
以下コマンドを順番に入力してください。

mkdir .ssh
chmod 700 .ssh
cd .ssh
ssh-keygen
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
ssh-copy-id 192.168.0.2

次にAnsibleで環境構築する対象ホストを設定しましょう。

vi /etc/ansible/hosts
----以下を末尾に追記----
192.168.0.1
192.168.0.2

そしてAnsibleの肝であるPlaybookを設定しましょう。
今回はapacheとpostgresqlをインストールします。

vi /etc/ansible/sample-playbook.yml
以下内容を追記
- name: package install
  hosts: all
  become: yes
  vars:
    apache: httpd
    postgres: postgresql-server
  tasks:
    - name: apache install
      dnf:
        name: "{{ apache }}"
        state: latest
      notify:
        - apache service
    - name: postgresql service
      dnf:
        name: "{{ postgres }}"
        state: latest
      notify:
        - postgresql service
  handlers:
    - name: apache service start
      service:
        name: "{{ apache }}"
        state: started
      listen: apache service
    - name: apache service enable
      service:
        name: "{{ apache }}"
        enabled: yes
      listen: apache service
    - name: postgres service start
      service:
        name: "{{ postgres }}"
        state: started
      listen: postgresql service
    - name: postgres service enable
      service:
        name: "{{ postgres }}"
        enabled: yes
      listen: postgresql service

パーツごとに説明していきます。
以下はこのプレイブックの定義をしています。
hostsではどのマシンに実行するかでbecomeはrootで実行するかを示しています。

- name: package install
  hosts: all
  become: yes

こちらは変数を定義しています。
定義した変数は{{}}で呼び出すことが出来ます。

  vars:
    apache: httpd
    postgres: postgresql-server

こちらはインストールの本体となります。上から順に実行し、dnfを用いてapacheとpostgresqlをインストールすることを記述しています。
また、notifyでインストール完了後に実行するコマンド郡をそれぞれ記載しています。

  tasks:
    - name: apache install
      dnf:
        name: "{{ apache }}"
        state: latest
      notify:
        - apache service
    - name: postgresql service
      dnf:
        name: "{{ postgres }}"
        state: latest
      notify:
        - postgresql service

こちらはtaskが実行された後に実行するコマンドを記載します。
それぞれのタスクごとに違う操作を分岐させたいときに利用できます。

  handlers:
    - name: apache service start
      service:
        name: "{{ apache }}"
        state: started
      listen: apache service
    - name: apache service enable
      service:
        name: "{{ apache }}"
        enabled: yes
      listen: apache service
    - name: postgres service start
      service:
        name: "{{ postgres }}"
        state: started
      listen: postgresql service
    - name: postgres service enable
      service:
        name: "{{ postgres }}"
        enabled: yes
      listen: postgresql service

実行しても問題ないか–chekオプションで確認します。

ansible-playbook -i hosts sample-playbook.yml --check

----実行結果----
PLAY [package install] *********************************************************

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

TASK [apache install] **********************************************************
changed: [192.168.0.2]

TASK [postgresql service] ******************************************************
changed: [192.168.0.2]

RUNNING HANDLER [apache service start] *****************************************
fatal: [192.168.0.2]: FAILED! => {"changed": false, "msg": "Could not find the requested service httpd: host"}

RUNNING HANDLER [apache service enable] ****************************************

RUNNING HANDLER [postgres service start] ***************************************

RUNNING HANDLER [postgres service enable] **************************************

NO MORE HOSTS LEFT *************************************************************

PLAY RECAP *********************************************************************
192.168.0.2                : ok=3    changed=2    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

apacheの起動で失敗しているのはおそらくすでに起動しているからでしょう。
そして以下コマンドで本実行です。エラーが起きなければインストールは完了です。

ansible-playbook -i hosts sample-playbook.yml

今回はここまでにします。
Playbookの中にループ処理などを入れることが出来るのでいつかまとめたいと思います。

それではまた。

タイトルとURLをコピーしました