From 6ba1758ab90568dc2c9f722fe1271f6713d45f0e Mon Sep 17 00:00:00 2001 From: Jeff Geerling Date: Mon, 26 Sep 2016 09:16:11 -0500 Subject: [PATCH] Update MySQL role to 2.4.0. --- provisioning/requirements.yml | 2 +- .../roles/geerlingguy.mysql/.travis.yml | 70 ++++++++----------- .../roles/geerlingguy.mysql/README.md | 13 +++- .../roles/geerlingguy.mysql/defaults/main.yml | 18 +++-- .../roles/geerlingguy.mysql/tasks/main.yml | 28 +------- .../geerlingguy.mysql/tasks/variables.yml | 59 ++++++++++++++++ .../roles/geerlingguy.mysql/vars/Debian.yml | 9 ++- .../roles/geerlingguy.mysql/vars/RedHat-6.yml | 9 ++- .../roles/geerlingguy.mysql/vars/RedHat-7.yml | 12 ++-- 9 files changed, 131 insertions(+), 89 deletions(-) create mode 100644 provisioning/roles/geerlingguy.mysql/tasks/variables.yml diff --git a/provisioning/requirements.yml b/provisioning/requirements.yml index 73f86511f..16663c8b5 100644 --- a/provisioning/requirements.yml +++ b/provisioning/requirements.yml @@ -32,7 +32,7 @@ - src: geerlingguy.memcached version: 1.0.7 - src: geerlingguy.mysql - version: 2.3.3 + version: 2.4.0 - src: geerlingguy.nginx version: 1.9.5 - src: geerlingguy.nodejs diff --git a/provisioning/roles/geerlingguy.mysql/.travis.yml b/provisioning/roles/geerlingguy.mysql/.travis.yml index 0edb87160..b8b941645 100644 --- a/provisioning/roles/geerlingguy.mysql/.travis.yml +++ b/provisioning/roles/geerlingguy.mysql/.travis.yml @@ -1,54 +1,45 @@ --- -sudo: required +services: docker env: - global: - # https://github.com/travis-ci/travis-ci/issues/6461#issuecomment-239577306 - DOCKER_VERSION: "1.9.1-0~trusty" - matrix: - - distro: centos7 - init: /usr/lib/systemd/systemd - run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" - playbook: centos-7-test.yml - - distro: centos6 - init: /sbin/init - run_opts: "" - playbook: test.yml - - distro: ubuntu1604 - init: /lib/systemd/systemd - run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" - playbook: test.yml - - distro: ubuntu1404 - init: /sbin/init - run_opts: "" - playbook: test.yml + - distro: centos7 + init: /usr/lib/systemd/systemd + run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" + playbook: centos-7-test.yml + - distro: centos6 + init: /sbin/init + run_opts: "" + playbook: test.yml + - distro: ubuntu1604 + init: /lib/systemd/systemd + run_opts: "--privileged --volume=/sys/fs/cgroup:/sys/fs/cgroup:ro" + playbook: test.yml + - distro: ubuntu1404 + init: /sbin/init + run_opts: "" + playbook: test.yml services: - docker before_install: - # Downgrade to older version of Docker engine. - - sudo apt-get update - - sudo apt-get remove docker-engine -yq - - sudo apt-get install docker-engine=$DOCKER_VERSION -yq --no-install-suggests --no-install-recommends --force-yes -o Dpkg::Options::="--force-confnew" - # Pull container - - 'sudo docker pull geerlingguy/docker-${distro}-ansible:latest' + - 'docker pull geerlingguy/docker-${distro}-ansible:latest' script: - container_id=$(mktemp) - # Run container in detached state - - 'sudo docker run --detach --volume="${PWD}":/etc/ansible/roles/role_under_test:ro ${run_opts} geerlingguy/docker-${distro}-ansible:latest "${init}" > "${container_id}"' + # Run container in detached state. + - 'docker run --detach --volume="${PWD}":/etc/ansible/roles/role_under_test:ro ${run_opts} geerlingguy/docker-${distro}-ansible:latest "${init}" > "${container_id}"' # Ansible syntax check. - - 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/${playbook} --syntax-check' + - 'docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/${playbook} --syntax-check' # Test role. - - 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ansible-playbook /etc/ansible/roles/role_under_test/tests/${playbook}' + - 'docker exec "$(cat ${container_id})" ansible-playbook /etc/ansible/roles/role_under_test/tests/${playbook}' # Test role idempotence. - idempotence=$(mktemp) - - sudo docker exec "$(cat ${container_id})" ansible-playbook /etc/ansible/roles/role_under_test/tests/${playbook} | tee -a ${idempotence} + - docker exec "$(cat ${container_id})" ansible-playbook /etc/ansible/roles/role_under_test/tests/${playbook} | tee -a ${idempotence} - > tail ${idempotence} | grep -q 'changed=0.*failed=0' @@ -56,9 +47,9 @@ script: || (echo 'Idempotence test: fail' && exit 1) # Some MySQL debugging (show all the logs). - - sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm ls -lah /var/log - - sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm cat /var/log/mysql/error.log || true - - sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm cat /var/log/mysql.err || true + - docker exec --tty "$(cat ${container_id})" env TERM=xterm ls -lah /var/log + - docker exec --tty "$(cat ${container_id})" env TERM=xterm cat /var/log/mysql/error.log || true + - docker exec --tty "$(cat ${container_id})" env TERM=xterm cat /var/log/mysql.err || true # Check to make sure we can connect to MySQL via Unix socket. - > @@ -74,14 +65,11 @@ script: && (echo 'MySQL running normally' && exit 0) || (echo 'MySQL not running' && exit 1) - # Clean up - - sudo docker stop "$(cat ${container_id})" - after_failure: # Check MySQL settings. - - 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm cat /var/log/mysql/error.log' - - 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm cat /var/log/mysql.err' - - 'sudo docker exec --tty "$(cat ${container_id})" env TERM=xterm cat /var/log/mysql.log' + - 'docker exec --tty "$(cat ${container_id})" env TERM=xterm cat /var/log/mysql/error.log' + - 'docker exec --tty "$(cat ${container_id})" env TERM=xterm cat /var/log/mysql.err' + - 'docker exec --tty "$(cat ${container_id})" env TERM=xterm cat /var/log/mysql.log' notifications: webhooks: https://galaxy.ansible.com/api/v1/notifications/ diff --git a/provisioning/roles/geerlingguy.mysql/README.md b/provisioning/roles/geerlingguy.mysql/README.md index 341c7f102..ddc5f03bc 100644 --- a/provisioning/roles/geerlingguy.mysql/README.md +++ b/provisioning/roles/geerlingguy.mysql/README.md @@ -35,6 +35,11 @@ Whether to force update the MySQL root user's password. By default, this role wi Whether MySQL should be enabled on startup. + mysql_config_file: *default value depends on OS* + mysql_config_include_dir: *default value depends on OS* + +The main my.cnf configuration file and include directory. + overwrite_global_mycnf: yes Whether the global my.cnf should be overwritten each time this role is run. Setting this to `no` tells Ansible to only create the `my.cnf` file if it doesn't exist. This should be left at its default value (`yes`) if you'd like to use this role's variables to configure MySQL. @@ -64,17 +69,19 @@ The MySQL users and their privileges. A user has the values `name`, `host` (defa mysql_port: "3306" mysql_bind_address: '0.0.0.0' mysql_datadir: /var/lib/mysql + mysql_socket: *default value depends on OS* + mysql_pid_file: *default value depends on OS* Default MySQL connection configuration. mysql_log: "" - mysql_log_error: /var/log/mysqld.log - mysql_syslog_tag: mysqld + mysql_log_error: *default value depends on OS* + mysql_syslog_tag: *default value depends on OS* MySQL logging configuration. Setting `mysql_log` (the general query log) or `mysql_log_error` to `syslog` will make MySQL log to syslog using the `mysql_syslog_tag`. mysql_slow_query_log_enabled: no - mysql_slow_query_log_file: /var/log/mysql-slow.log + mysql_slow_query_log_file: *default value depends on OS* mysql_slow_query_time: 2 Slow query log settings. Note that the log file will be created by this role, but if you're running on a server with SELinux or AppArmor, you may need to add this path to the allowed paths for MySQL, or disable the mysql profile. For example, on Debian/Ubuntu, you can run `sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/usr.sbin.mysqld && sudo service apparmor restart`. diff --git a/provisioning/roles/geerlingguy.mysql/defaults/main.yml b/provisioning/roles/geerlingguy.mysql/defaults/main.yml index 3bd78bbaa..46e58a8e2 100644 --- a/provisioning/roles/geerlingguy.mysql/defaults/main.yml +++ b/provisioning/roles/geerlingguy.mysql/defaults/main.yml @@ -11,6 +11,10 @@ mysql_enabled_on_startup: yes # update my.cnf. each time role is run? yes | no overwrite_global_mycnf: yes +# The following variables have a default value depending on operating system. +# mysql_config_file: /etc/my.cnf +# mysql_config_include_dir: /etc/my.cnf.d + # Pass in a comma-separated list of repos to use (e.g. "remi,epel"). Used only # for RedHat systems (and derivatives). mysql_enablerepo: "" @@ -25,14 +29,17 @@ mysql_enablerepo: "" # MySQL connection settings. mysql_port: "3306" mysql_bind_address: '0.0.0.0' -mysql_datadir: /var/lib/mysql -mysql_pid_file: /var/run/mysqld/mysqld.pid mysql_skip_name_resolve: no +mysql_datadir: /var/lib/mysql +# The following variables have a default value depending on operating system. +# mysql_pid_file: /var/run/mysqld/mysqld.pid +# mysql_socket: /var/lib/mysql/mysql.sock # Slow query log settings. mysql_slow_query_log_enabled: no -mysql_slow_query_log_file: /var/log/mysql-slow.log mysql_slow_query_time: "2" +# The following variable has a default value depending on operating system. +# mysql_slow_query_log_file: /var/log/mysql-slow.log # Memory settings (default values optimized ~512MB RAM). mysql_key_buffer_size: "256M" @@ -72,8 +79,9 @@ mysql_mysqldump_max_allowed_packet: "64M" # Logging settings. mysql_log: "" -mysql_log_error: /var/log/mysql.err -mysql_syslog_tag: mysql +# The following variables have a default value depending on operating system. +# mysql_log_error: /var/log/mysql.err +# mysql_syslog_tag: mysql mysql_config_include_files: [] # - src: path/relative/to/playbook/file.cnf diff --git a/provisioning/roles/geerlingguy.mysql/tasks/main.yml b/provisioning/roles/geerlingguy.mysql/tasks/main.yml index bb0669b02..6d3527796 100644 --- a/provisioning/roles/geerlingguy.mysql/tasks/main.yml +++ b/provisioning/roles/geerlingguy.mysql/tasks/main.yml @@ -1,32 +1,6 @@ --- # Variable configuration. -- name: Include OS-specific variables. - include_vars: "{{ ansible_os_family }}.yml" - when: ansible_os_family != "RedHat" - -- name: Include OS-specific variables (RedHat). - include_vars: "{{ ansible_os_family }}-{{ ansible_distribution_major_version }}.yml" - when: ansible_os_family == "RedHat" - -- name: Define mysql_packages. - set_fact: - mysql_packages: "{{ __mysql_packages | list }}" - when: mysql_packages is not defined - -- name: Define mysql_daemon. - set_fact: - mysql_daemon: "{{ __mysql_daemon }}" - when: mysql_daemon is not defined - -- name: Define mysql_slow_query_log_file. - set_fact: - mysql_slow_query_log_file: "{{ __mysql_slow_query_log_file }}" - when: mysql_slow_query_log_file is not defined - -- name: Define mysql_supports_innodb_large_prefix. - set_fact: - mysql_supports_innodb_large_prefix: "{{ __mysql_supports_innodb_large_prefix }}" - when: mysql_supports_innodb_large_prefix is not defined +- include: variables.yml # Setup/install tasks. - include: setup-RedHat.yml diff --git a/provisioning/roles/geerlingguy.mysql/tasks/variables.yml b/provisioning/roles/geerlingguy.mysql/tasks/variables.yml new file mode 100644 index 000000000..f03ee8c62 --- /dev/null +++ b/provisioning/roles/geerlingguy.mysql/tasks/variables.yml @@ -0,0 +1,59 @@ +--- +# Variable configuration. +- name: Include OS-specific variables. + include_vars: "{{ ansible_os_family }}.yml" + when: ansible_os_family != "RedHat" + +- name: Include OS-specific variables (RedHat). + include_vars: "{{ ansible_os_family }}-{{ ansible_distribution_major_version }}.yml" + when: ansible_os_family == "RedHat" + +- name: Define mysql_packages. + set_fact: + mysql_packages: "{{ __mysql_packages | list }}" + when: mysql_packages is not defined + +- name: Define mysql_daemon. + set_fact: + mysql_daemon: "{{ __mysql_daemon }}" + when: mysql_daemon is not defined + +- name: Define mysql_slow_query_log_file. + set_fact: + mysql_slow_query_log_file: "{{ __mysql_slow_query_log_file }}" + when: mysql_slow_query_log_file is not defined + +- name: Define mysql_log_error. + set_fact: + mysql_log_error: "{{ __mysql_log_error }}" + when: mysql_log_error is not defined + +- name: Define mysql_syslog_tag. + set_fact: + mysql_syslog_tag: "{{ __mysql_syslog_tag }}" + when: mysql_syslog_tag is not defined + +- name: Define mysql_pid_file. + set_fact: + mysql_pid_file: "{{ __mysql_pid_file }}" + when: mysql_pid_file is not defined + +- name: Define mysql_config_file. + set_fact: + mysql_config_file: "{{ __mysql_config_file }}" + when: mysql_config_file is not defined + +- name: Define mysql_config_include_dir. + set_fact: + mysql_config_include_dir: "{{ __mysql_config_include_dir }}" + when: mysql_config_include_dir is not defined + +- name: Define mysql_socket. + set_fact: + mysql_socket: "{{ __mysql_socket }}" + when: mysql_socket is not defined + +- name: Define mysql_supports_innodb_large_prefix. + set_fact: + mysql_supports_innodb_large_prefix: "{{ __mysql_supports_innodb_large_prefix }}" + when: mysql_supports_innodb_large_prefix is not defined diff --git a/provisioning/roles/geerlingguy.mysql/vars/Debian.yml b/provisioning/roles/geerlingguy.mysql/vars/Debian.yml index 354b22fd1..2ddf1e743 100644 --- a/provisioning/roles/geerlingguy.mysql/vars/Debian.yml +++ b/provisioning/roles/geerlingguy.mysql/vars/Debian.yml @@ -4,7 +4,10 @@ __mysql_packages: - mysql-common - mysql-server __mysql_slow_query_log_file: /var/log/mysql/mysql-slow.log -mysql_config_file: /etc/mysql/my.cnf -mysql_config_include_dir: /etc/mysql/conf.d -mysql_socket: /var/run/mysqld/mysqld.sock +__mysql_log_error: /var/log/mysql.err +__mysql_syslog_tag: mysql +__mysql_pid_file: /var/run/mysqld/mysqld.pid +__mysql_config_file: /etc/mysql/my.cnf +__mysql_config_include_dir: /etc/mysql/conf.d +__mysql_socket: /var/run/mysqld/mysqld.sock __mysql_supports_innodb_large_prefix: true diff --git a/provisioning/roles/geerlingguy.mysql/vars/RedHat-6.yml b/provisioning/roles/geerlingguy.mysql/vars/RedHat-6.yml index 34de34606..96af1ff04 100644 --- a/provisioning/roles/geerlingguy.mysql/vars/RedHat-6.yml +++ b/provisioning/roles/geerlingguy.mysql/vars/RedHat-6.yml @@ -4,7 +4,10 @@ __mysql_packages: - mysql - mysql-server __mysql_slow_query_log_file: /var/log/mysql-slow.log -mysql_config_file: /etc/my.cnf -mysql_config_include_dir: /etc/my.cnf.d -mysql_socket: /var/lib/mysql/mysql.sock +__mysql_log_error: /var/log/mysql.err +__mysql_syslog_tag: mysql +__mysql_pid_file: /var/run/mysqld/mysqld.pid +__mysql_config_file: /etc/my.cnf +__mysql_config_include_dir: /etc/my.cnf.d +__mysql_socket: /var/lib/mysql/mysql.sock __mysql_supports_innodb_large_prefix: false diff --git a/provisioning/roles/geerlingguy.mysql/vars/RedHat-7.yml b/provisioning/roles/geerlingguy.mysql/vars/RedHat-7.yml index 281c98a7e..6f989b3a4 100644 --- a/provisioning/roles/geerlingguy.mysql/vars/RedHat-7.yml +++ b/provisioning/roles/geerlingguy.mysql/vars/RedHat-7.yml @@ -7,10 +7,10 @@ __mysql_packages: - MySQL-python - perl-DBD-MySQL __mysql_slow_query_log_file: /var/log/mysql-slow.log -mysql_log_error: /var/log/mariadb/mariadb.log -mysql_syslog_tag: mariadb -mysql_pid_file: /var/run/mariadb/mariadb.pid -mysql_config_file: /etc/my.cnf -mysql_config_include_dir: /etc/my.cnf.d -mysql_socket: /var/lib/mysql/mysql.sock +__mysql_log_error: /var/log/mariadb/mariadb.log +__mysql_syslog_tag: mariadb +__mysql_pid_file: /var/run/mariadb/mariadb.pid +__mysql_config_file: /etc/my.cnf +__mysql_config_include_dir: /etc/my.cnf.d +__mysql_socket: /var/lib/mysql/mysql.sock __mysql_supports_innodb_large_prefix: true