1- set_fact: 2 db_to_create: testdb1 3 config_file: "/root/.my1.cnf" 4 fake_port: 9999 5 fake_host: "blahblah.local" 6 include_dir: "/root/mycnf.d" 7 8- name: Create custom config file 9 shell: 'echo "[client]" > {{ config_file }}' 10 11- name: Add fake port to config file 12 shell: 'echo "port = {{ fake_port }}" >> {{ config_file }}' 13 14- name: Get pymysql version 15 shell: pip show pymysql | awk '/Version/ {print $2}' 16 register: pymysql_version 17 18- name: Add blank line 19 shell: 'echo "" >> {{ config_file }}' 20 when: (pymysql_version.stdout | default('1000', true)) is version('0.9.3', '>=') 21 22- name: Create include_dir 23 file: 24 path: '{{ include_dir }}' 25 state: directory 26 mode: '0777' 27 when: (pymysql_version.stdout | default('1000', true)) is version('0.9.3', '>=') 28 29- name: Add include_dir 30 lineinfile: 31 path: '{{ config_file }}' 32 line: '!includedir {{ include_dir }}' 33 insertafter: EOF 34 when: (pymysql_version.stdout | default('1000', true)) is version('0.9.3', '>=') 35 36- name: Create database using fake port to connect to, must fail 37 mysql_db: 38 login_user: '{{ mysql_user }}' 39 login_password: '{{ mysql_password }}' 40 login_host: 127.0.0.1 41 login_port: '{{ mysql_primary_port }}' 42 name: '{{ db_to_create }}' 43 state: present 44 check_implicit_admin: yes 45 config_file: '{{ config_file }}' 46 config_overrides_defaults: yes 47 ignore_errors: yes 48 register: result 49 50- name: Must fail because login_port default has beed overriden by wrong value from config file 51 assert: 52 that: 53 - result is failed 54 - result.msg is search("unable to connect to database") 55 56- name: Create database using default port 57 mysql_db: 58 login_user: '{{ mysql_user }}' 59 login_password: '{{ mysql_password }}' 60 login_host: 127.0.0.1 61 login_port: '{{ mysql_primary_port }}' 62 name: '{{ db_to_create }}' 63 state: present 64 check_implicit_admin: yes 65 config_file: '{{ config_file }}' 66 config_overrides_defaults: no 67 register: result 68 69- name: Must not fail because of the default of login_port is correct 70 assert: 71 that: 72 - result is changed 73 74- name: Reinit custom config file 75 shell: 'echo "[client]" > {{ config_file }}' 76 77- name: Add fake host to config file 78 shell: 'echo "host = {{ fake_host }}" >> {{ config_file }}' 79 80- name: Remove database using fake login_host 81 mysql_db: 82 login_user: '{{ mysql_user }}' 83 login_password: '{{ mysql_password }}' 84 login_host: 127.0.0.1 85 login_port: '{{ mysql_primary_port }}' 86 name: '{{ db_to_create }}' 87 state: absent 88 config_file: '{{ config_file }}' 89 config_overrides_defaults: yes 90 register: result 91 ignore_errors: yes 92 93- name: Must fail because login_host default has beed overriden by wrong value from config file 94 assert: 95 that: 96 - result is failed 97 - result.msg is search("Can't connect to MySQL server on '{{ fake_host }}'") or result.msg is search("Unknown MySQL server host '{{ fake_host }}'") 98 99# Clean up 100- name: Remove test db 101 mysql_db: 102 login_user: '{{ mysql_user }}' 103 login_password: '{{ mysql_password }}' 104 login_host: 127.0.0.1 105 login_port: '{{ mysql_primary_port }}' 106 name: '{{ db_to_create }}' 107 state: absent 108 check_implicit_admin: yes 109