mirror of
				https://github.com/ansible-collections/community.mysql.git
				synced 2025-10-26 21:59:43 -07:00 
			
		
		
		
	* initial commit * removed remaining references to community.general * enabled integration pipeline * switched from preconfigured replication topology to simple multinode install * updated version from 1.0.0 to 0.1.0
		
			
				
	
	
		
			96 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| # Copyright: (c) 2019, Andrew Klychkov (@Andersson007) <aaklychkov@mail.ru>
 | |
| # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
 | |
| 
 | |
| # Preparation:
 | |
| - name: Create user for replication
 | |
|   shell: "echo \"GRANT REPLICATION SLAVE ON *.* TO '{{ replication_user }}'@'localhost' IDENTIFIED BY '{{ replication_pass }}'; FLUSH PRIVILEGES;\" | mysql -P {{ primary_db.port }} -h 127.0.0.1"
 | |
| 
 | |
| - name: Create test database
 | |
|   mysql_db:
 | |
|     login_host: 127.0.0.1
 | |
|     login_port: '{{ primary_db.port }}'
 | |
|     state: present
 | |
|     name: '{{ test_db }}'
 | |
| 
 | |
| - name: Dump all databases from the master
 | |
|   shell: 'mysqldump -P {{ primary_db.port }} -h 127.0.01 --all-databases --master-data=2 > {{ dump_path }}'
 | |
| 
 | |
| - name: Restore the dump to the replica
 | |
|   shell: 'mysql -P {{ replica_db.port }} -h 127.0.0.1 < {{ dump_path }}'
 | |
| 
 | |
| # Test getmaster mode:
 | |
| - name: Get master status
 | |
|   mysql_replication:
 | |
|     login_host: 127.0.0.1
 | |
|     login_port: "{{ primary_db.port }}"
 | |
|     mode: getmaster
 | |
|   register: master_status
 | |
| 
 | |
| - assert:
 | |
|     that:
 | |
|     - master_status.Is_Master == true
 | |
|     - master_status.Position != 0
 | |
|     - master_status is not changed
 | |
| 
 | |
| # Test changemaster mode:
 | |
| - name: Run replication
 | |
|   mysql_replication:
 | |
|     login_host: 127.0.0.1
 | |
|     login_port: "{{ replica_db.port }}"
 | |
|     mode: changemaster
 | |
|     master_host: 127.0.0.1
 | |
|     master_port: "{{ primary_db.port }}"
 | |
|     master_user: "{{ replication_user }}"
 | |
|     master_password: "{{ replication_pass }}"
 | |
|     master_log_file: mysql-bin.000001
 | |
|     master_log_pos: '{{ master_status.Position }}'
 | |
|   register: result
 | |
| 
 | |
| - assert:
 | |
|     that:
 | |
|     - result is changed
 | |
|     - result.queries[0] is match("CHANGE MASTER ('\S+' )?TO MASTER_HOST='[0-9.]+',MASTER_USER='\w+',MASTER_PASSWORD='[*]{8}',MASTER_PORT=\d+,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=\d+")
 | |
| 
 | |
| # Test startslave mode:
 | |
| - name: Start slave
 | |
|   mysql_replication:
 | |
|     login_host: 127.0.0.1
 | |
|     login_port: "{{ replica_db.port }}"
 | |
|     mode: startslave
 | |
|   register: result
 | |
| 
 | |
| - assert:
 | |
|     that:
 | |
|     - result is changed
 | |
|     - result.queries == ["START SLAVE"]
 | |
| 
 | |
| # Test getslave mode:
 | |
| - name: Get replica status
 | |
|   mysql_replication:
 | |
|     login_host: 127.0.0.1
 | |
|     login_port: "{{ replica_db.port }}"
 | |
|     mode: getslave
 | |
|   register: slave_status
 | |
| 
 | |
| - assert:
 | |
|     that:
 | |
|     - slave_status.Is_Slave == true
 | |
|     - slave_status.Master_Host == '127.0.0.1'
 | |
|     - slave_status.Exec_Master_Log_Pos == master_status.Position
 | |
|     - slave_status.Master_Port == {{ primary_db.port }}
 | |
|     - slave_status.Last_IO_Errno == 0
 | |
|     - slave_status.Last_IO_Error == ''
 | |
|     - slave_status is not changed
 | |
| 
 | |
| # Test stopslave mode:
 | |
| - name: Stop slave
 | |
|   mysql_replication:
 | |
|     login_host: 127.0.0.1
 | |
|     login_port: "{{ replica_db.port }}"
 | |
|     mode: stopslave
 | |
|   register: result
 | |
| 
 | |
| - assert:
 | |
|     that:
 | |
|     - result is changed
 | |
|     - result.queries == ["STOP SLAVE"]
 |