From af2def550700f4cceee9aedaf61d4515c0c35b2e Mon Sep 17 00:00:00 2001 From: Sam Doran Date: Tue, 12 Nov 2019 22:01:19 -0500 Subject: [PATCH] [stable-2.9] Cleanup after MySQL integration tests (#63641) (#63863) Add handlers to setup_mysql_db and setup_mysql8 to remove installed packages.. (cherry picked from commit 3e4ae4225688c02190a00cd1818136d8e09f3a16) Co-authored-by: Sam Doran --- .../targets/setup_mysql8/defaults/main.yml | 14 +++++ .../targets/setup_mysql8/handlers/main.yml | 24 ++++++++ .../targets/setup_mysql8/tasks/main.yml | 18 ++++++ .../setup_mysql8/tasks/setup_mysql8.yml | 59 +++++++++++++++++++ .../targets/setup_mysql8/vars/Debian.yml | 3 + .../targets/setup_mysql8/vars/RedHat.yml | 3 + .../targets/setup_mysql8/vars/default.yml | 0 .../targets/setup_mysql_db/defaults/main.yml | 12 ++++ .../targets/setup_mysql_db/handlers/main.yml | 25 ++++++++ .../targets/setup_mysql_db/tasks/main.yml | 58 ++++++++++-------- .../targets/setup_mysql_db/vars/Debian.yml | 10 ++++ .../setup_mysql_db/vars/Ubuntu-py3.yml | 10 ++++ .../setup_mysql_db/vars/default-py3.yml | 0 .../targets/setup_mysql_db/vars/default.yml | 0 14 files changed, 212 insertions(+), 24 deletions(-) create mode 100644 test/integration/targets/setup_mysql8/defaults/main.yml create mode 100644 test/integration/targets/setup_mysql8/handlers/main.yml create mode 100644 test/integration/targets/setup_mysql8/tasks/main.yml create mode 100644 test/integration/targets/setup_mysql8/tasks/setup_mysql8.yml create mode 100644 test/integration/targets/setup_mysql8/vars/Debian.yml create mode 100644 test/integration/targets/setup_mysql8/vars/RedHat.yml create mode 100644 test/integration/targets/setup_mysql8/vars/default.yml create mode 100644 test/integration/targets/setup_mysql_db/handlers/main.yml create mode 100644 test/integration/targets/setup_mysql_db/vars/default-py3.yml create mode 100644 test/integration/targets/setup_mysql_db/vars/default.yml diff --git a/test/integration/targets/setup_mysql8/defaults/main.yml b/test/integration/targets/setup_mysql8/defaults/main.yml new file mode 100644 index 00000000000..ec14bb29181 --- /dev/null +++ b/test/integration/targets/setup_mysql8/defaults/main.yml @@ -0,0 +1,14 @@ +repo_link: https://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm +repo_name: mysql-community +my_cnf: /etc/my.cnf +mysql_packages: + - mysql-community-server + - MySQL-python + +mysql_cleanup_packages: + - mysql-community-client + - mysql-community-common + - mysql-community-libs + - mysql-community-libs-compat + - mysql-community-server + - mysql80-community-release diff --git a/test/integration/targets/setup_mysql8/handlers/main.yml b/test/integration/targets/setup_mysql8/handlers/main.yml new file mode 100644 index 00000000000..b3183dd7d94 --- /dev/null +++ b/test/integration/targets/setup_mysql8/handlers/main.yml @@ -0,0 +1,24 @@ +- name: stop mysql service + service: + name: mysqld + state: stopped + listen: cleanup mysql8 + +- name: remove repo + yum: + name: mysql80-community-release + state: absent + listen: cleanup mysql8 + +- name: remove mysql packages + yum: + name: '{{ mysql_packages | union(mysql_cleanup_packages) }}' + state: absent + listen: cleanup mysql8 + +- name: remove mysql data + file: + path: "{{ item }}" + state: absent + loop: "{{ mysql_data_dirs }}" + listen: cleanup mysql8 diff --git a/test/integration/targets/setup_mysql8/tasks/main.yml b/test/integration/targets/setup_mysql8/tasks/main.yml new file mode 100644 index 00000000000..86ea1f8e0fd --- /dev/null +++ b/test/integration/targets/setup_mysql8/tasks/main.yml @@ -0,0 +1,18 @@ +# Copyright: (c) 2019, Andrew Klychkov (@Andersson007) +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +# Setup MySQL 8: +- name: Include distribution specific variables + include_vars: "{{ lookup('first_found', params) }}" + vars: + params: + files: + - '{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml' + - '{{ ansible_facts.os_family }}.yml' + - 'default.yml' + paths: vars + +- import_tasks: setup_mysql8.yml + when: + - ansible_facts.distribution == 'CentOS' + - ansible_facts.distribution_major_version is version_compare('7', '>=') diff --git a/test/integration/targets/setup_mysql8/tasks/setup_mysql8.yml b/test/integration/targets/setup_mysql8/tasks/setup_mysql8.yml new file mode 100644 index 00000000000..2c747d7ca31 --- /dev/null +++ b/test/integration/targets/setup_mysql8/tasks/setup_mysql8.yml @@ -0,0 +1,59 @@ +# Copyright: (c) 2019, Andrew Klychkov (@Andersson007) +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +- name: Install MySQL repo + yum: + name: '{{ repo_link }}' + notify: cleanup mysql8 + +- name: Install MySQL community server + yum: + name: '{{ mysql_packages }}' + notify: cleanup mysql8 + +- name: Copy my.cnf + copy: + src: my.cnf + dest: '{{ my_cnf }}' + +- name: Start MySQL + service: + name: mysqld + state: started + +### Debug ####################### +#- name: Debug +# shell: cat /var/log/mysqld.log +################################# + +- name: Check connection to the server + shell: 'echo "SHOW DATABASES;" | mysql' + +- name: Check connection to the server + shell: "echo \"SHOW VARIABLES LIKE '%version%';\" | mysql" + +- name: Detect socket path + shell: 'echo "show variables like ''socket''\G" | mysql | grep ''Value: '' | sed ''s/[ ]\+Value: //''' + register: _socket_path + +- name: Set socket path + set_fact: + mysql_socket: '{{ _socket_path["stdout"] }}' + +- name: Set root pass + set_fact: + root_pass: "dlsafjlkjdsaK1#" + +- name: Set root password + shell: 'echo "flush privileges; ALTER USER ''root''@''localhost'' IDENTIFIED WITH mysql_native_password BY ''{{ root_pass }}'';" | mysql' + +- name: Change configuration + lineinfile: + path: '{{ my_cnf }}' + line: skip-grant-tables + state: absent + +- name: Restart MySQL + service: + name: mysqld + state: restarted diff --git a/test/integration/targets/setup_mysql8/vars/Debian.yml b/test/integration/targets/setup_mysql8/vars/Debian.yml new file mode 100644 index 00000000000..78323264f60 --- /dev/null +++ b/test/integration/targets/setup_mysql8/vars/Debian.yml @@ -0,0 +1,3 @@ +mysql_data_dirs: + - /var/lib/mysql + - /usr/share/mysql diff --git a/test/integration/targets/setup_mysql8/vars/RedHat.yml b/test/integration/targets/setup_mysql8/vars/RedHat.yml new file mode 100644 index 00000000000..498e7771e4c --- /dev/null +++ b/test/integration/targets/setup_mysql8/vars/RedHat.yml @@ -0,0 +1,3 @@ +mysql_data_dirs: + - /var/lib/mysql + - /usr/mysql diff --git a/test/integration/targets/setup_mysql8/vars/default.yml b/test/integration/targets/setup_mysql8/vars/default.yml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/integration/targets/setup_mysql_db/defaults/main.yml b/test/integration/targets/setup_mysql_db/defaults/main.yml index 83948901597..47712dc266b 100644 --- a/test/integration/targets/setup_mysql_db/defaults/main.yml +++ b/test/integration/targets/setup_mysql_db/defaults/main.yml @@ -4,3 +4,15 @@ mysql_packages: - mysql-server - MySQL-python - bzip2 + +mysql_cleanup_packages: + - mysql-community-client + - mysql-community-common + - mysql-community-libs + - mysql-community-libs-compat + - mysql-community-server + - mysql80-community-release + +mysql_data_dirs: + - /var/lib/mysql + - /usr/mysql diff --git a/test/integration/targets/setup_mysql_db/handlers/main.yml b/test/integration/targets/setup_mysql_db/handlers/main.yml new file mode 100644 index 00000000000..abcd488ef23 --- /dev/null +++ b/test/integration/targets/setup_mysql_db/handlers/main.yml @@ -0,0 +1,25 @@ +- name: stop mysql service + service: + name: "{{ mysql_service }}" + state: stopped + listen: cleanup mysql + +- name: remove mysql packages + action: '{{ ansible_pkg_mgr }}' + args: + name: "{{ item }}" + state: absent + loop: "{{ mysql_packages | union(mysql_cleanup_packages) }}" + listen: cleanup mysql + +- name: remove mysql data + file: + path: "{{ item }}" + state: absent + loop: "{{ mysql_data_dirs }}" + listen: cleanup mysql + +- name: remove pip packages + pip: + name: mysql-python + state: absent diff --git a/test/integration/targets/setup_mysql_db/tasks/main.yml b/test/integration/targets/setup_mysql_db/tasks/main.yml index 5d4ae3c8df5..f8473d98e7c 100644 --- a/test/integration/targets/setup_mysql_db/tasks/main.yml +++ b/test/integration/targets/setup_mysql_db/tasks/main.yml @@ -27,47 +27,56 @@ python_suffix: "-py3" when: ansible_python_version is version('3', '>=') -- include_vars: '{{ item }}' - with_first_found: - - files: - - '{{ ansible_distribution }}-{{ ansible_distribution_major_version }}{{ python_suffix }}.yml' - - '{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml' - - '{{ ansible_os_family }}-{{ ansible_distribution_major_version }}{{ python_suffix }}.yml' - - '{{ ansible_distribution }}{{ python_suffix }}.yml' - - '{{ ansible_os_family }}{{ python_suffix }}.yml' +- name: Include distribution specific variables + include_vars: "{{ lookup('first_found', params) }}" + vars: + params: + files: + - '{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}{{ python_suffix }}.yml' + - '{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml' + - '{{ ansible_facts.os_family }}-{{ ansible_facts.distribution_major_version }}{{ python_suffix }}.yml' + - '{{ ansible_facts.distribution }}{{ python_suffix }}.yml' + - '{{ ansible_facts.os_family }}{{ python_suffix }}.yml' - 'default{{ python_suffix }}.yml' - paths: '../vars' + paths: vars - name: install mysqldb_test rpm dependencies - yum: name={{ item }} state=latest - with_items: "{{mysql_packages}}" - when: ansible_pkg_mgr == 'yum' + yum: + name: "{{ mysql_packages }}" + state: latest + when: ansible_pkg_mgr == 'yum' + notify: cleanup mysql - name: install mysqldb_test rpm dependencies dnf: - name: '{{ item }}' + name: '{{ mysql_packages }}' state: latest install_weak_deps: False # mariadb-server has a weak dep on python2 which break Python 3 test environments - with_items: "{{mysql_packages}}" - when: ansible_pkg_mgr == 'dnf' + when: ansible_pkg_mgr == 'dnf' + notify: cleanup mysql - name: install mysqldb_test debian dependencies - apt: name={{ item }} state=latest - with_items: "{{mysql_packages}}" - when: ansible_pkg_mgr == 'apt' + apt: + name: "{{ mysql_packages }}" + state: latest + when: ansible_pkg_mgr == 'apt' + notify: cleanup mysql - name: install mysqldb_test FreeBSD dependencies pkgng: - name: "{{ item }}" + name: "{{ mysql_packages }}" state: present - with_items: "{{mysql_packages}}" when: ansible_os_family == "FreeBSD" + notify: cleanup mysql - name: install mysql-python package via pip (FreeBSD) pip: name: mysql-python state: present when: ansible_os_family == "FreeBSD" + notify: + - cleanup mysql + - remove pip packages - name: enable mysql-server service (FreeBSD) lineinfile: @@ -77,16 +86,17 @@ - name: apply work-around for OverlayFS issue # https://github.com/docker/for-linux/issues/72#issuecomment-319904698 - command: find /var/lib/mysql -type f -exec touch {} ; + command: find {{ mysql_data_dirs[0] }} -type f -exec touch {} ; # find will fail if mysql has never been started, as the directory won't exist ignore_errors: yes - name: restart mysql_db service - service: name={{ mysql_service }} state=restarted + service: + name: "{{ mysql_service }}" + state: restarted - name: Detect socket path - shell: > - echo "show variables like 'socket'\G" | mysql | grep 'Value: ' | sed 's/[ ]\+Value: //' + shell: 'echo "show variables like ''socket''\G" | mysql | grep ''Value: '' | sed ''s/[ ]\+Value: //''' register: _socket_path - name: Set socket path diff --git a/test/integration/targets/setup_mysql_db/vars/Debian.yml b/test/integration/targets/setup_mysql_db/vars/Debian.yml index 9029e550615..52062c703d5 100644 --- a/test/integration/targets/setup_mysql_db/vars/Debian.yml +++ b/test/integration/targets/setup_mysql_db/vars/Debian.yml @@ -4,3 +4,13 @@ mysql_packages: - mysql-server - python-mysqldb - bzip2 + +mysql_cleanup_packages: + - mysql-client* + - mysql-server* + - mysql-common + - mysql-sandbox + +mysql_data_dirs: + - /var/lib/mysql + - /usr/share/mysql diff --git a/test/integration/targets/setup_mysql_db/vars/Ubuntu-py3.yml b/test/integration/targets/setup_mysql_db/vars/Ubuntu-py3.yml index a3096ae2de2..77282442525 100644 --- a/test/integration/targets/setup_mysql_db/vars/Ubuntu-py3.yml +++ b/test/integration/targets/setup_mysql_db/vars/Ubuntu-py3.yml @@ -4,3 +4,13 @@ mysql_packages: - mysql-server - python3-pymysql - bzip2 + +mysql_cleanup_packages: + - mysql-client* + - mysql-server* + - mysql-common + - mysql-sandbox + +mysql_data_dirs: + - /var/lib/mysql + - /usr/share/mysql diff --git a/test/integration/targets/setup_mysql_db/vars/default-py3.yml b/test/integration/targets/setup_mysql_db/vars/default-py3.yml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/test/integration/targets/setup_mysql_db/vars/default.yml b/test/integration/targets/setup_mysql_db/vars/default.yml new file mode 100644 index 00000000000..e69de29bb2d