From 1c0aaf29a06da0e408dc587065718f58f18c18ca Mon Sep 17 00:00:00 2001 From: dortega Date: Thu, 15 Mar 2018 13:05:49 +0100 Subject: [PATCH 1/3] #24 #25 #26 Migrating to molecule 2.10.1, fixing my.cnf file and adding the ability to configure SQL mode --- .flake8 | 2 - .gitignore | 2 + .travis.yml | 9 +- .yamllint | 13 +++ README.md | 12 ++- defaults/main.yml | 3 +- molecule.yml | 93 ------------------- molecule/default/Dockerfile.j2 | 13 +++ molecule/default/INSTALL.rst | 16 ++++ molecule/default/create.yml | 69 ++++++++++++++ molecule/default/destroy.yml | 33 +++++++ .../default}/group_vars/mysql_group.yml | 1 + molecule/default/molecule.yml | 28 ++++++ {tests => molecule/default}/playbook.yml | 4 +- molecule/default/prepare.yml | 5 + .../default/tests/test_default.yml | 15 ++- molecule/default/verifier.yml | 60 ++++++++++++ tasks/config.yml | 4 +- tasks/install.yml | 10 +- tasks/service.yml | 2 +- tasks/users.yml | 2 +- templates/my.cnf.j2 | 3 +- test-requirements.txt | 3 + tests/goss/verifier.yml | 32 ------- 24 files changed, 275 insertions(+), 159 deletions(-) delete mode 100644 .flake8 create mode 100644 .yamllint delete mode 100644 molecule.yml create mode 100644 molecule/default/Dockerfile.j2 create mode 100644 molecule/default/INSTALL.rst create mode 100644 molecule/default/create.yml create mode 100644 molecule/default/destroy.yml rename {tests => molecule/default}/group_vars/mysql_group.yml (97%) create mode 100644 molecule/default/molecule.yml rename {tests => molecule/default}/playbook.yml (54%) create mode 100644 molecule/default/prepare.yml rename tests/goss/specs/mysql.yml.j2 => molecule/default/tests/test_default.yml (77%) create mode 100644 molecule/default/verifier.yml create mode 100644 test-requirements.txt delete mode 100644 tests/goss/verifier.yml diff --git a/.flake8 b/.flake8 deleted file mode 100644 index e44b810..0000000 --- a/.flake8 +++ /dev/null @@ -1,2 +0,0 @@ -[flake8] -ignore = E501 diff --git a/.gitignore b/.gitignore index 9c6ac44..cfba56e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ tests/__pycache__ .molecule .vagrant .cache +Pipfile +Pipfile.lock diff --git a/.travis.yml b/.travis.yml index 067d33f..b539c7a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,16 +2,13 @@ language: python python: "2.7.13" sudo: required -language: python services: - docker install: - - pip install ansible==2.4.3.0 - - pip install molecule==1.25.0 - - pip install ansible-lint==3.4.20 - - pip install docker + - pip install pipenv + - pipenv install -r test-requirements.txt --python 2.7 script: - - molecule test --driver docker + - pipenv run molecule test notifications: webhooks: https://galaxy.ansible.com/api/v1/notifications/ diff --git a/.yamllint b/.yamllint new file mode 100644 index 0000000..3a2255e --- /dev/null +++ b/.yamllint @@ -0,0 +1,13 @@ +extends: default + +rules: + braces: + max-spaces-inside: 1 + level: error + brackets: + max-spaces-inside: 1 + level: error + line-length: disable + # NOTE(retr0h): Templates no longer fail this lint rule. + # Uncomment if running old Molecule templates. + # truthy: disable diff --git a/README.md b/README.md index 89bc5ac..457219a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![Logo](https://raw.githubusercontent.com/idealista/mysql-role/master/logo.gif) -# MySQL Ansible role +# MySQL Ansible role [![Build Status](https://travis-ci.org/idealista/mysql-role.png)](https://travis-ci.org/idealista/mysql-role) This ansible role installs a Prometheus Node Exporter in a debian environment. @@ -25,7 +25,7 @@ These instructions will get you a copy of the role for your Ansible playbook. On Ansible 2.4.3.0 version installed. Inventory destination should be a Debian environment. -For testing purposes, [Molecule](https://molecule.readthedocs.io/) with [Vagrant](https://www.vagrantup.com/) as driver (with [hostmanager](https://github.com/devopsgroup-io/vagrant-hostmanager) plugin) and [VirtualBox](https://www.virtualbox.org/) as provider. +For testing purposes, [Molecule](https://molecule.readthedocs.io/) with Docker as driver and [Goss](https://goss.rocks/) as verifier. ### Installing @@ -87,14 +87,14 @@ mysql_users: ## Testing ``` -$ molecule test +$ pipenv install -r test-requirements.txt -python 2.7 ``` To check the installation ```bash -$ molecule converge -$ molecule login --host mysql.vm +$ pipenv run molecule converge +$ pipenv run molecule login vagrant@mysql:~$ mysql -u root -ptesting @@ -113,6 +113,8 @@ mysql> show databases; ## Built With ![Ansible](https://img.shields.io/badge/ansible-2.4.3.0-green.svg) +![Molecule](https://img.shields.io/badge/molecule-2.10.1-green.svg) +![Goss](https://img.shields.io/badge/goss-0.3.5-green.svg) ## Versioning diff --git a/defaults/main.yml b/defaults/main.yml index f6bd780..f898e9b 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -7,7 +7,7 @@ mysql_group: mysql ## Service options # start on boot -mysql_service_enabled: True +mysql_service_enabled: true # current state: started, stopped mysql_service_state: started @@ -45,6 +45,7 @@ mysql_max_connections: 151 # Other settings. mysql_wait_timeout: 28800 +mysql_sql_mode: "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" # InnoDB settings. # Set .._buffer_pool_size up to 80% of RAM but beware of setting too high. diff --git a/molecule.yml b/molecule.yml deleted file mode 100644 index 6c00c04..0000000 --- a/molecule.yml +++ /dev/null @@ -1,93 +0,0 @@ ---- -molecule: - # directory in CWD to place all temp files, etc. - molecule_dir: .molecule - - # where temporary state will be stored (lives under molecule_dir) - state_file: state - - # name of temporary vagrantfile created during runs (lives under molecule_dir) - vagrantfile_file: vagrantfile - - # directories to ignore when doing trailing whitespace checks on files during verify command - ignore_paths: - - .git - - .vagrant - - .molecule - - # directory to look for goss tests - goss_dir: tests/goss - goss_playbook: verifier.yml - - test: - sequence: - - destroy - - syntax - - create - - converge - - idempotence - - verify - - destroy - - # directory to look for testinfra tests - testinfra_dir: tests - - # directory containing group_vars to use with ansible - group_vars: ../tests/group_vars - -# ansible related configuration -ansible: - playbook: tests/playbook.yml - -# configuration options for the internal call to vagrant -vagrant: - raw_config_args: - - "hostmanager.enabled = true" - # Enable for debug purpose - #- "hostmanager.manage_host = true" - - "hostmanager.manage_guest = true" - - "hostmanager.ignore_private_ip = false" - - "hostmanager.include_offline = true" - # molecule's --platform option will look for these names - platforms: - - name: Debian8 - box: debian/jessie64 - - name: Debian9 - box: debian/stretch64 - - providers: - - name: virtualbox - type: virtualbox - options: - memory: 512 - cpus: 1 - - instances: - - name: mysql - ansible_groups: - - mysql_group - interfaces: - - network_name: private_network - type: dhcp - auto_config: true - -docker: - containers: - - name: mysql - ansible_groups: - - mysql_group - image: geerlingguy/docker-debian9-ansible - image_version: latest - # All these parameters are needed for Docker testing with systemd - privileged: True - cap_add: - - SYS_ADMIN - volume_mounts: - - '/sys/fs/cgroup:/sys/fs/cgroup:ro' - command: '/lib/systemd/systemd' - -verifier: - name: goss - options: - connection: ansible - ansible-inventory: .molecule/ansible_inventory diff --git a/molecule/default/Dockerfile.j2 b/molecule/default/Dockerfile.j2 new file mode 100644 index 0000000..9f689d9 --- /dev/null +++ b/molecule/default/Dockerfile.j2 @@ -0,0 +1,13 @@ +# Molecule managed + +{% if item.registry is defined %} +FROM {{ item.registry.url }}/{{ item.image }} +{% else %} +FROM {{ item.image }} +{% endif %} + +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ + elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \ + elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ + elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \ + elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; fi diff --git a/molecule/default/INSTALL.rst b/molecule/default/INSTALL.rst new file mode 100644 index 0000000..e26493b --- /dev/null +++ b/molecule/default/INSTALL.rst @@ -0,0 +1,16 @@ +******* +Install +******* + +Requirements +============ + +* Docker Engine +* docker-py + +Install +======= + +.. code-block:: bash + + $ sudo pip install docker-py diff --git a/molecule/default/create.yml b/molecule/default/create.yml new file mode 100644 index 0000000..9cedc65 --- /dev/null +++ b/molecule/default/create.yml @@ -0,0 +1,69 @@ +--- +- name: Create + hosts: localhost + connection: local + gather_facts: false + no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}" + vars: + molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}" + molecule_ephemeral_directory: "{{ lookup('env', 'MOLECULE_EPHEMERAL_DIRECTORY') }}" + molecule_scenario_directory: "{{ lookup('env', 'MOLECULE_SCENARIO_DIRECTORY') }}" + molecule_yml: "{{ lookup('file', molecule_file) | molecule_from_yaml }}" + tasks: + - name: Create Dockerfiles from image names + template: + src: "{{ molecule_scenario_directory }}/Dockerfile.j2" + dest: "{{ molecule_ephemeral_directory }}/Dockerfile_{{ item.image | regex_replace('[^a-zA-Z0-9_]', '_') }}" + with_items: "{{ molecule_yml.platforms }}" + register: platforms + + - name: Discover local Docker images + docker_image_facts: + name: "molecule_local/{{ item.item.name }}" + with_items: "{{ platforms.results }}" + register: docker_images + + - name: Build an Ansible compatible image + docker_image: + path: "{{ molecule_ephemeral_directory }}" + name: "molecule_local/{{ item.item.image }}" + dockerfile: "{{ item.item.dockerfile | default(item.invocation.module_args.dest) }}" + force: "{{ item.item.force | default(true) }}" + with_items: "{{ platforms.results }}" + when: platforms.changed or docker_images.results | map(attribute='images') | select('equalto', []) | list | count >= 0 + + - name: Create docker network(s) + docker_network: + name: "{{ item }}" + state: present + with_items: "{{ molecule_yml.platforms | molecule_get_docker_networks }}" + + - name: Create molecule instance(s) + docker_container: + name: "{{ item.name }}" + hostname: "{{ item.name }}" + image: "molecule_local/{{ item.image }}" + state: started + recreate: false + log_driver: json-file + command: "{{ item.command | default('bash -c \"while true; do sleep 10000; done\"') }}" + privileged: "{{ item.privileged | default(omit) }}" + volumes: "{{ item.volumes | default(omit) }}" + capabilities: "{{ item.capabilities | default(omit) }}" + exposed_ports: "{{ item.exposed_ports | default(omit) }}" + published_ports: "{{ item.published_ports | default(omit) }}" + ulimits: "{{ item.ulimits | default(omit) }}" + networks: "{{ item.networks | default(omit) }}" + dns_servers: "{{ item.dns_servers | default(omit) }}" + register: server + with_items: "{{ molecule_yml.platforms }}" + async: 7200 + poll: 0 + + - name: Wait for instance(s) creation to complete + async_status: + jid: "{{ item.ansible_job_id }}" + register: docker_jobs + until: docker_jobs.finished + retries: 300 + with_items: "{{ server.results }}" diff --git a/molecule/default/destroy.yml b/molecule/default/destroy.yml new file mode 100644 index 0000000..ec4da49 --- /dev/null +++ b/molecule/default/destroy.yml @@ -0,0 +1,33 @@ +--- +- name: Destroy + hosts: localhost + connection: local + gather_facts: false + no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}" + vars: + molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}" + molecule_yml: "{{ lookup('file', molecule_file) | molecule_from_yaml }}" + tasks: + - name: Destroy molecule instance(s) + docker_container: + name: "{{ item.name }}" + state: absent + force_kill: "{{ item.force_kill | default(true) }}" + register: server + with_items: "{{ molecule_yml.platforms }}" + async: 7200 + poll: 0 + + - name: Wait for instance(s) deletion to complete + async_status: + jid: "{{ item.ansible_job_id }}" + register: docker_jobs + until: docker_jobs.finished + retries: 300 + with_items: "{{ server.results }}" + + - name: Delete docker network(s) + docker_network: + name: "{{ item }}" + state: absent + with_items: "{{ molecule_yml.platforms | molecule_get_docker_networks }}" diff --git a/tests/group_vars/mysql_group.yml b/molecule/default/group_vars/mysql_group.yml similarity index 97% rename from tests/group_vars/mysql_group.yml rename to molecule/default/group_vars/mysql_group.yml index deccbff..fe12551 100644 --- a/tests/group_vars/mysql_group.yml +++ b/molecule/default/group_vars/mysql_group.yml @@ -1,3 +1,4 @@ +--- mysql_databases: - name: test01 encoding: utf8 diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml new file mode 100644 index 0000000..8f2c9e6 --- /dev/null +++ b/molecule/default/molecule.yml @@ -0,0 +1,28 @@ +--- +dependency: + name: galaxy +driver: + name: docker +lint: + name: yamllint +platforms: + - name: mysql + groups: + - mysql_group + image: geerlingguy/docker-debian9-ansible:latest + privileged: true + capabilities: + - SYS_ADMIN + volumes: + - '/sys/fs/cgroup:/sys/fs/cgroup:ro' + command: '/lib/systemd/systemd' +provisioner: + name: ansible + lint: + name: ansible-lint +scenario: + name: default +verifier: + name: goss + lint: + name: flake8 diff --git a/tests/playbook.yml b/molecule/default/playbook.yml similarity index 54% rename from tests/playbook.yml rename to molecule/default/playbook.yml index 617ae14..326f3ad 100644 --- a/tests/playbook.yml +++ b/molecule/default/playbook.yml @@ -1,5 +1,5 @@ --- - -- hosts: all +- name: Converge + hosts: all roles: - role: mysql-role diff --git a/molecule/default/prepare.yml b/molecule/default/prepare.yml new file mode 100644 index 0000000..5358b3b --- /dev/null +++ b/molecule/default/prepare.yml @@ -0,0 +1,5 @@ +--- +- name: Prepare + hosts: all + gather_facts: false + tasks: [] diff --git a/tests/goss/specs/mysql.yml.j2 b/molecule/default/tests/test_default.yml similarity index 77% rename from tests/goss/specs/mysql.yml.j2 rename to molecule/default/tests/test_default.yml index 03bbc91..e1443dc 100644 --- a/tests/goss/specs/mysql.yml.j2 +++ b/molecule/default/tests/test_default.yml @@ -1,3 +1,4 @@ +--- group: {{ mysql_group }}: exists: true @@ -36,13 +37,11 @@ process: port: tcp:{{ mysql_port }}: listening: true - ip: - - {{ mysql_bind_address }} package: - python-mysqldb: - installed: true - mysql-common: - installed: true - mysql-server: - installed: true + python-mysqldb: + installed: true + mysql-common: + installed: true + mysql-server: + installed: true diff --git a/molecule/default/verifier.yml b/molecule/default/verifier.yml new file mode 100644 index 0000000..8e936ab --- /dev/null +++ b/molecule/default/verifier.yml @@ -0,0 +1,60 @@ +--- +# This is an example playbook to execute goss tests. +# Tests need distributed to the appropriate ansible host/groups +# prior to execution by `goss validate`. +# +# The goss ansible module is installed with molecule. The ANSIBLE_LIBRARY +# path is updated appropriately on `molecule verify`. + +# Details about ansible module: +# - https://github.com/indusbox/goss-ansible + +- name: Verify + hosts: all + vars: + goss_version: v0.3.5 + goss_arch: amd64 + goss_dst: /usr/local/bin/goss + goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-{{ goss_arch }}" + goss_test_directory: /tmp + goss_format: documentation + + vars_files: + - ../../defaults/main.yml + - ../../vars/main.yml + - ./group_vars/mysql_group.yml + + tasks: + - name: Download and install goss + get_url: + url: "{{ goss_url }}" + dest: "{{ goss_dst }}" + mode: 0755 + + - name: Copy tests to remote + template: + src: "{{ item }}" + dest: "{{ goss_test_directory }}/{{ item | basename }}" + with_fileglob: + - "{{ playbook_dir }}/tests/test_*.yml" + + - name: Register test files + shell: "ls {{ goss_test_directory }}/test_*.yml" + register: test_files + + - name: Execute Goss tests + command: "goss -g {{ item }} validate --format {{ goss_format }}" + register: test_results + with_items: "{{ test_files.stdout_lines }}" + ignore_errors: true + + - name: Display details about the goss results + debug: + msg: "{{ item.stdout_lines }}" + with_items: "{{ test_results.results }}" + + - name: Fail when tests fail + fail: + msg: "Goss failed to validate" + when: item.rc != 0 + with_items: "{{ test_results.results }}" diff --git a/tasks/config.yml b/tasks/config.yml index 3c6b334..0a6b73d 100644 --- a/tasks/config.yml +++ b/tasks/config.yml @@ -27,13 +27,13 @@ - name: MySQL | Trying to initialize datadir command: /usr/sbin/mysqld --initialize-insecure --user={{ mysql_user }} - ignore_errors: yes + ignore_errors: "yes" changed_when: false - name: MySQL | Ensure MySQL is started and enabled on boot service: name: mysql state: started - enabled: yes + enabled: "yes" - name: MySQL | Flush handlers to restart MySQL after previous initialization meta: flush_handlers diff --git a/tasks/install.yml b/tasks/install.yml index aa7fa07..da30833 100644 --- a/tasks/install.yml +++ b/tasks/install.yml @@ -12,7 +12,7 @@ get_url: url: "{{ mysql_deb_repo }}" dest: /tmp - validate_certs: no + validate_certs: "no" - name: MySQL | Install MySQL repo deb apt: @@ -20,14 +20,14 @@ - name: MySQL | Update cache apt: - update_cache: yes - allow_unauthenticated: yes + update_cache: "yes" + allow_unauthenticated: "yes" changed_when: false - name: MySQL | Check if MySQL is already installed shell: dpkg -s mysql-server | grep Status register: installed_mysql - ignore_errors: yes + ignore_errors: "yes" changed_when: false failed_when: false @@ -35,7 +35,7 @@ apt: package: "{{ item }}" state: present - allow_unauthenticated: yes + allow_unauthenticated: "yes" with_items: "{{ mysql_packages }}" register: install_mysql notify: upgrade schemas diff --git a/tasks/service.yml b/tasks/service.yml index e33a664..4209acf 100644 --- a/tasks/service.yml +++ b/tasks/service.yml @@ -12,4 +12,4 @@ name: mysql state: "{{ mysql_service_state }}" enabled: "{{ mysql_service_enabled }}" - daemon_reload: yes + daemon_reload: "yes" diff --git a/tasks/users.yml b/tasks/users.yml index a39b5af..7d68047 100644 --- a/tasks/users.yml +++ b/tasks/users.yml @@ -15,6 +15,6 @@ host: "{{ item.host | default('localhost') }}" password: "{{ item.password }}" priv: "{{ item.priv | default('*.*:USAGE') | join('/') }}" - append_privs: yes + append_privs: "yes" with_items: "{{ mysql_users }}" no_log: true diff --git a/templates/my.cnf.j2 b/templates/my.cnf.j2 index 71ec1ad..f2531a4 100644 --- a/templates/my.cnf.j2 +++ b/templates/my.cnf.j2 @@ -13,7 +13,8 @@ basedir = {{ mysql_basedir }} lc-messages-dir = {{ mysql_lc_messagesdir }} socket = {{ mysql_socket }} pid-file = {{ mysql_pid_file }} -explicit_defaults_for_timestamp +explicit_defaults_for_timestamp = 1 +sql_mode = "{{ mysql_sql_mode }}" # * IMPORTANT: Additional settings that can override those from this file! # The files must end with '.cnf', otherwise they'll be ignored. diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000..60285a2 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,3 @@ +ansible==2.4.3.0 +molecule==2.10.1 +docker-py==1.10.6 diff --git a/tests/goss/verifier.yml b/tests/goss/verifier.yml deleted file mode 100644 index 6399c62..0000000 --- a/tests/goss/verifier.yml +++ /dev/null @@ -1,32 +0,0 @@ -- name: Testing prerequisites - hosts: mysql - gather_facts: yes - - vars: - goss_version: "v0.3.5" - goss_url: "https://github.com/aelsabbahy/goss/releases/download/{{ goss_version }}/goss-linux-amd64" - goss_results: goss_results - - vars_files: - - ../../defaults/main.yml - - ../../vars/main.yml - - ../group_vars/mysql_group.yml - - tasks: - - name: Download and install Goss - get_url: - url: "{{ goss_url }}" - dest: "/usr/local/bin/goss" - mode: 0755 - - - name: Copy tests to remote - template: - src: "{{ playbook_dir }}/specs/{{ item }}.j2" - dest: "/tmp/{{ item }}" - with_items: - - mysql.yml - - - name: Goss tests - command: "goss -g /tmp/{{ item }} validate -format tap" - with_items: - - mysql.yml From 30205e1ef945f57d41930604aee52852a3773f7d Mon Sep 17 00:00:00 2001 From: dortega Date: Thu, 15 Mar 2018 13:09:32 +0100 Subject: [PATCH 2/3] #24 #25 #26 updating changelog :) --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a166fc..6f8d1ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,15 @@ This project adheres to [Semantic Versioning](http://semver.org/) and [Keep a ch ## [Unreleased](https://github.com/idealista-tech/mysql-role/tree/develop) +### Added +- [#26](https://github.com/idealista/mysql-role/issues/26) *Adding the ability to configure SQL mode* @dortegau + +### Changed +- [#25](https://github.com/idealista/mysql-role/issues/25) *Migrating to Molecule 2.10.1* @dortegau + +### Fixed +- [#24](https://github.com/idealista/mysql-role/issues/24) *Fixing my.cnf template (providing value to 'explicit_defaults_for_timestamp')* @dortegau + ## [1.2.3](https://github.com/idealista-tech/mysql-role/tree/1.2.3) (09/03/2018) [Full Changelog](https://github.com/idealista/mysql-role/compare/1.2.3...1.2.0) ### Fixed From cd7f7891659e298da291bc5d30192dc5a5997b91 Mon Sep 17 00:00:00 2001 From: Daniel Ortega Date: Thu, 15 Mar 2018 13:21:51 +0100 Subject: [PATCH 3/3] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f8d1ca..4c3e311 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ This project adheres to [Semantic Versioning](http://semver.org/) and [Keep a ch ## [Unreleased](https://github.com/idealista-tech/mysql-role/tree/develop) +## [1.3.0](https://github.com/idealista-tech/mysql-role/tree/1.3.0) (15/03/2018) +[Full Changelog](https://github.com/idealista/mysql-role/compare/1.3.0...1.2.3) ### Added - [#26](https://github.com/idealista/mysql-role/issues/26) *Adding the ability to configure SQL mode* @dortegau