【備忘録】Ansibleでプロビジョニング playbook編
■はじめに
前回のエントリでinventory.iniでのAzureVM疎通(ping)まで確認しました。
本日はAnsibleの本丸、playbook編です。
■前提
①
前回のエントリで何となくなplaybookを書いていましたが、あれだと全く動かないので(じゃあ載せるなと。。)こちらが本物です。
前回のは要らぬ誤解を与えるのでplaybook.ymlの中身は消しておきます。はい。。
②
ansible.cfgファイルが必要です。
GitHubにexampleがあるので、こちらをそのまま拾って任意のパスを通しておきます。
https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg
■playbook.yml準備
早速ですが以下となります。
--- # targetセクション # hosts allにするとinventoryのターゲットがそのまま使用される - name: selenoid_VM hosts: all become: yes # varsセクション # 引数として設定値があれば定義しておく # vars: # # tasksオプション # 構成管理の本体 tasks: - name: アーカイブキー取得 # wgetからのapt-key addはこれ apt_key: url: https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg state: present - name: 非公式リポジトリ取得 # wgetからのapt-key addはこれ apt_key: url: https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg state: present - name: ダウンロード # wgetはこれ get_url: url: https://www.ubuntulinux.jp/sources.list.d/bionic.list dest: /etc/apt/sources.list.d/ubuntu-ja.list mode: '0640' - name: 推奨インストール # apt-get installはこれ apt: name: - linux-generic-hwe-18.04 install_recommends: yes - name: Upgrade # apt-get updateはこれ apt: name: "*" state: latest - name: 基本インストール # apt-get installはこれ apt: name: - apt-transport-https - ca-certificates - curl - gnupg-agent - software-properties-common force: yes - name: タイムゾーンを日本時間に変更 # timedatectlはこれ timezone: name: Asia/Tokyo - name: docker関連の削除 # apt-get removeはこれ apt: name: - docker - docker-engine - docker.io - containerd - runc state: absent - name: docker取得 # curlも恐らくapt-key addはこれ apt_key: url: https://download.docker.com/linux/ubuntu/gpg state: present - name: リポジトリの追加 # add-apt-repository debはこんな感じ apt_repository: repo: deb [arch=amd64] https://download.docker.com/linux/{{ansible_distribution|lower}} {{ansible_distribution_release}} stable - name: docker再インストール # apt-get install 再び apt: name: - docker-ce=5:19.03.11~3-0~ubuntu-bionic - docker-ce-cli=5:19.03.11~3-0~ubuntu-bionic - containerd.io - name: docker-composeダウンロード # curl及びchmodを実行 get_url: url: https://github.com/docker/compose/releases/download/1.25.4/docker-compose-{{ ansible_system }}-{{ ansible_architecture }} dest: /usr/local/bin/docker-compose mode: '655' - name: docker-composeの権限変更 # chmodがこれ file: path: /usr/local/bin/docker-compose owner: qa group: qa mode: '0755'
少し前のエントリでubuntuにdockerのプロビジョニングをする回があったかと思います。
実はあの記述をplayhbookのお作法に書き換えたのが上記です。
そう、CentOSでもUbuntuでもそうなのですが、全部コマンドがansibleではモジュールと言う処理で代替されています。
慣れ親しんだコマンドは使えません(いや厳密には使えますが、話がややこしくなるためここでは割愛)。
なのでubuntuで叩いていたコマンドをansibleのモジュールからまず探す旅が始まります。
これが最初感覚的に分からなくて結構大変だった。
ちなみにモジュール一覧は以下に列挙されています。
docs.ansible.com
とんでもない量ある。。でも眺めてるとAzureContainerInstances専用モジュールあるじゃん!とか面白い発見もあります。
この中から、例えばapt-getならpackaging moduleかなとか、wgetとかならfile moduleかなとか当たりをつけてゆきます。
...ゆくんですが、はっきり言ってそんな事してられないのでここは素直にドキュメントトップ画面から検索してみましょう(aptとかchmodとか)。
どのコマンドがどのモジュールに対応していそうかに関しては、playbook.yml内にコメントを残しておきました。
参考にしてみてください。
さて、このplaybookを実行します。
% ansible-playbook -i inventory.ini playbook.yml PLAY [selenoid_VM] *********************************************************************************************************************************************************** TASK [Gathering Facts] ******************************************************************************************************************************************************* Enter passphrase for key '/Users/ユーザ名/.ssh/id_rsa': [DEPRECATION WARNING]: Distribution Ubuntu 18.04 on host FQDN should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. ok: [FQDN] TASK [アーカイブキー取得] ************************************************************************************************************************************************************* ok: [FQDN] TASK [非公式リポジトリ取得] ************************************************************************************************************************************************************ ok: [FQDN] TASK [ダウンロード] **************************************************************************************************************************************************************** ok: [FQDN] TASK [推奨インストール] ************************************************************************************************************************************************************** ok: [FQDN] TASK [Upgrade] *************************************************************************************************************************************************************** ok: [FQDN] TASK [基本インストール] ************************************************************************************************************************************************************** ok: [FQDN] TASK [タイムゾーンを日本時間に変更] ******************************************************************************************************************************************************** ok: [FQDN] TASK [docker関連の削除] *********************************************************************************************************************************************************** ok: [FQDN] TASK [docker取得] ************************************************************************************************************************************************************** ok: [FQDN] TASK [リポジトリの追加] ************************************************************************************************************************************************************** ok: [FQDN] TASK [docker再インストール] ********************************************************************************************************************************************************* ok: [FQDN] TASK [docker-composeダウンロード] ************************************************************************************************************************************************** ok: [FQDN] TASK [docker-composeの権限変更] *************************************************************************************************************************************************** changed: [FQDN] PLAY RECAP ******************************************************************************************************************************************************************* FQDN : ok=14 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
この標準出力は、結構試行錯誤したあとの物なのでほとんどがok(前回と構成変わってないよ)と出ていますが、本当の初回実行時はchenged(構成変えたよ!)と出力されます。
では実際に変更がかかったのか、みてみましょう。
ssh -i パスフレーズ user@FQDN Warning: Identity file *** not accessible: No such file or directory. Enter passphrase for key '/Users/ユーザ名/.ssh/id_rsa': Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 5.3.0-1022-azure x86_64) (機微情報が多いので中略) Your Hardware Enablement Stack (HWE) is supported until April 2023. *** System restart required *** Last login: Tue Jun 2 22:58:13 2020 from 106.73.175.224 user@FQDN:~$ docker -v Docker version 19.03.11, build 42e35e61f3 user@FQDN:~$ cd /usr/local/bin/ user@FQDN:/usr/local/bin$ docker-compose -v docker-compose version 1.25.4, build 8d51620a user@FQDN:/usr/local/bin$
無事インストールできているようですね。
さて、次回はやっとですがここからGgr〜selenoid環境構築につなげます。
ではでは。
(参考ページ)
docker-ceリポジトリが追加できず途方にくれていた時に大変参考になった。
Install Docker CE on Ubuntu using Ansible · GitHub
docker-ceのインストール時にdegradedだとすげー怒られて(冪等性とは。。?)仕方なく最新バージョンを入れました。
https://ubuntu.pkgs.org/18.04/docker-ce-test-amd64/docker-ce-cli_18.09.3~3-0~ubuntu-bionic_amd64.deb.html