WSL2上で Ansible を使った STNS-Client のインストール方法
本記事はQiitaから移転したものです。
とある業務で触れるきっかけがあったので投稿します.
Asinble を使って STNS-Client をインストールする方法を説明していきます.
そもそもAnsibleとは?
一言で言えば「インフラ構築自動化ツール」です.
近年,構築・運用するシステムの規模が増大してきている中で,手動オペレーションによるヒューマンエラーや作業工数を削減することができます.また,冪等性が担保されているので,すべての管理対象で同じ結果を得ることができます.
構成管理ツールは他にもPuppet,Chefがありますが,Ansibleが人気なのはYAMLで記述できるため,学習コストが低いことが挙げられると思います.
実行環境
Ansibleホスト
- WSL (Ubuntu 20.04.5 LTS)
- asinble 6.4.0 (2022/10/11 現在)
- asinble-core 2.13.4 (2022/10/11 現在)
適用対象
- Ubuntu 20.04 の VM7台
1. Asinble のインストール
1-1. パッケージのインストール
Asinble を pip 経由でインストールします.
$ pip install --user ansible
Python環境の関係で特定のバージョンのインストールを行いたい場合は,下の例の通りにバージョンを明示的に指定することで可能です.
バージョンは ansible-build-data - GitHub から随時確認してください.
$ pip install --user ansible==6.4.0
1-2. Path を通す
インストール後,ansible --version
を実行して Command 'ansible' not found, but can be installed with: sudo apt install ansible
などと言われる場合は,パスを通します.
~/.bashrc
を開き,下のように追記します.
export PATH="~/.local/bin:$PATH"
その後,正常にバージョン表示がされることを確認します.
$ ansible --version
ansible [core 2.13.4]
config file = None
configured module search path = ['/home/<User>/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/<User>/.local/lib/python3.8/site-packages/ansible
ansible collection location = /home/<User>/.ansible/collections:/usr/share/ansible/collections
executable location = /home/<User>/.local/bin/ansible
python version = 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0]
jinja version = 3.1.2
libyaml = True
2. Ansible の設定
pip 版でのインストールのため,ansible.cfg
を下記のコマンドを生成します.
--disabled
オプションをつけることで,コメントアウトされた状態の設定ファイルを生成することができます.
$ ansible-config init --disabled > ansible.cfg
ansible-config
を実行することで,設定ファイルのパスが設定されます.
今回は特に設定せず,デフォルトでいきます.
$ ansible --version
ansible [core 2.13.4]
config file = /home/<User>/ansible.cfg
︙
3. playbookの作成
自動化したい操作を記述していきます.
今回はSTNSサーバの設定は既に完了しており,予めSTNSクライアントの設定ファイルは準備できているものとしました.
その他,各種ファイルのバックアップやサービス再起動も記述してあります.
- hosts: all
tasks:
- name: Get installer
ansible.builtin.uri:
url: https://repo.stns.jp/scripts/apt-repo.sh
return_content: true
register: stns_installer
- name: Run installer
become: true
ansible.builtin.shell:
cmd: "{{ stns_installer.content }}"
when: not ansible_check_mode
- name: Apt install
become: true
ansible.builtin.apt:
pkg:
- stns-v2
- libnss-stns-v2
- cache-stnsd
ignore_errors: "{{ ansible_check_mode }}"
- name: Backup /etc/stns/client/stns.conf
become: true
ansible.builtin.copy:
src: /etc/stns/client/stns.conf
dest: /etc/stns/client/stns.conf.bak
owner: root
group: root
mode: 0644
remote_src: true
- name: Copy stns.conf
become: true
ansible.builtin.copy:
src: config/stns.conf
dest: /etc/stns/client/stns.conf
owner: root
group: root
mode: 0644
- name: "Restart & Enabled service cache-stnsd"
become: true
ansible.builtin.service:
name: cache-stnsd
state: restarted
enabled: true
- name: Backup /etc/nsswitch.conf
become: true
ansible.builtin.copy:
src: /etc/nsswitch.conf
dest: /etc/nsswitch.conf.bak
owner: root
group: root
mode: 0644
remote_src: true
- name: Copy nsswitch.conf
become: true
ansible.builtin.copy:
src: config/nsswitch.conf
dest: /etc/nsswitch.conf
owner: root
group: root
mode: 0644
- name: Backup /etc/ssh/sshd_config
become: true
ansible.builtin.copy:
src: /etc/ssh/sshd_config
dest: /etc/ssh/sshd_config.bak
owner: root
group: root
mode: 0644
remote_src: true
- name: Copy sshd_config
become: true
ansible.builtin.copy:
src: config/sshd_config
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: 0644
- name: Restart service sshd
become: true
ansible.builtin.service:
name: sshd
state: restarted
4. インベントリファイル(管理先ホストを記述したファイル)の作成
操作したいマシンのホスト名または IP アドレスを記述したファイルを作成します.
[stns]
<実行するサーバのホスト名またはIP>
5. playbook を実行
いよいよ実行に移ります.
5-1. 文法のチェックを行う
$ ansible-playbook -i hosts ./stns-install.yaml --syntax-check
[Tips] SSH鍵認証ではなく,パスワード認証で実行する場合は以下のようにオプションを付加して実行します.
$ ansible-playbook --ask-pass -K -i hosts ./stns-install.yaml --syntax-check
5-2. DryRun を行う
$ ansible-playbook -i hosts ./stns-install.yaml --check
5-3. 本番実行
$ ansible-playbook -i hosts ./stns-install.yaml
6. 冪等性のチェック
すでに playbook を実行済みなので,何も行われないことを確認します.
$ ansible-playbook -i hosts ./stns-install.yaml
Ansible-Lint を使った playbook の品質向上
playbook は人によって書き方が異なることもあり,可読性が低くなることがあります.
ansible-lint
は playbook の品質を向上させるためのツールです.
playbook の書き方が一定のルールに沿っていない場合は,指摘されるのでその通り修正すると良いです.
$ ansible-lint stns-install.yaml
参考サイト・記事
この場をお借りして感謝申し上げます.
Discussion