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