Ansible Automation Platformのサーベイその2

SIOS Blog

Ansible Automation Platformにてインストールするミドルウエアのバージョンを選ぶことができSurveyを作成します。
今回はMySQLのインストールバージョンを5.7か8.0で指定します。
MariaDBはMariaDBでバージョンごとにインストールが若干異なるようなので
別途ワークフローを用意するほうがコードの再利用性は高くなるかと存じます。

また、重要なこととしてAnsibleのMySQL CommunityコレクションはAnsible Automation Platform上でうまく動作しないためShellなどで構成していきます。

ロールの作成と登録

まずMySQL8.0のインストールのロールを作ります。
厳密にはRHELなどのバージョンで最初のインストールするものは異なります。
OSのバージョンの分岐は最初だけですので一つのプレイブックにすることを勧めます。
今回はRHEL8用になります。

---
- name: rpm install
  ansible.builtin.rpm_key:
    key: 'https://repo.mysql.com/RPM-GPG-KEY-mysql-2022'
    state: present
  when: MYSQL_VER == '8.0'

# tasks file for mysql57
- name: Install the mysql rpm from a remote repo
  ansible.builtin.dnf:
    name: 'https://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm'
    state: present
    disable_gpg_check: yes
  when: MYSQL_VER == '8.0'

- name: default disable
  shell: dnf module disable -y mysql mariadb
  when: MYSQL_VER == '8.0'

- name: dnf cache clear
  shell: dnf clean all
  when: MYSQL_VER == '8.0'

- name: Install the latest version of mysql
  ansible.builtin.dnf:
    name: mysql-community-server
    state: latest
  when: MYSQL_VER == '8.0'

- name: Make sure a service unit is running
  ansible.builtin.systemd:
    state: restarted
    name: mysqld
  when: MYSQL_VER == '8.0'

#- name: reset setting
#  shell: echo skip-grant-tables >> /etc/my.cnf

- name: get root password
  shell: "grep 'A temporary password is generated for root@localhost' /var/log/mysqld.log | awk -F ' ' '{print $(NF)}'"
  register: root_password
  when: MYSQL_VER == '8.0'

- name: update expired root user password
  command: mysql --user root --password={{ root_password.stdout }} --connect-expired-password --execute="ALTER USER 'root'@'localhost' IDENTIFIED BY 'Do_you_love_MYSQL80?';"
  when: MYSQL_VER == '8.0'

次にMySQL5.7のインストールのロールを作ります。
こちらもRHELなどのバージョンで最初のインストールするものは異なります。
OSのバージョンの分岐は最初だけですので一つのプレイブックにすることを勧めます。

---
- name: rpm install
  ansible.builtin.rpm_key:
    key: 'https://repo.mysql.com/RPM-GPG-KEY-mysql-2022'
    state: present
  when: MYSQL_VER == '5.7'

# tasks file for mysql57
- name: Install the mysql rpm from a remote repo
  ansible.builtin.dnf:
    name: 'https://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm'
    state: present
    disable_gpg_check: yes
  when: MYSQL_VER == '5.7'

- name: default disable
  shell: dnf module disable -y mysql mariadb
  when: MYSQL_VER == '5.7'

- name: dnf cache clear
  shell: dnf clean all
  when: MYSQL_VER == '5.7'

- name: Install the latest version of mysql
  ansible.builtin.dnf:
    name: mysql-community-server
    state: latest
  when: MYSQL_VER == '5.7'

- name: Make sure a service unit is running
  ansible.builtin.systemd:
    state: restarted
    name: mysqld
  when: MYSQL_VER == '5.7'

#- name: reset setting
#  shell: echo skip-grant-tables >> /etc/my.cnf

- name: get root password
  shell: "grep 'A temporary password is generated for root@localhost' /var/log/mysqld.log | awk -F ' ' '{print $(NF)}'"
  register: root_password
  when: MYSQL_VER == '5.7'

それぞれをプロジェクト、テンプレート登録していきます。

Surveyでバージョンを選択できるようにします。
なお、5.7や8.0を指定したところwhenでの一致には’5.7’や’8.0’とシングルコーテートが必要でした。
ワークフローテンプレートを作成し、そこからSurveyを選び、新規作成をします。
回答タイプに多項目選択肢(単一の選択可)を選んで項目を入力していきます。

後はサーベイを無効化から有効化をするだけとなります。

起動時このように聞かれます。

ワークフローの組み方ですが下記のように並列で実行し、
片方はスキップする形になるのでしょうか。

以上となります。
Surveyでバージョンを指定することで利用者の操作を誘導することができ、
よりAnsibleが使いやすくなると思います。