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が使いやすくなると思います。