
maxscale-system-test changed in order to control test environment by itself. Every test checks which machines are running, compare with list of needed machines and start new VMs is they are missing in the running machines list. Tests are executiong MDBCI commands, MDBCI executable should be in the PATH
261 lines
8.0 KiB
C++
261 lines
8.0 KiB
C++
#pragma once
|
|
|
|
#include <iostream>
|
|
#include <unistd.h>
|
|
#include "testconnections.h"
|
|
#include <jansson.h>
|
|
|
|
using namespace std;
|
|
|
|
class RDS
|
|
{
|
|
public:
|
|
/**
|
|
* @brief RDS Constructor
|
|
* @param cluster Name of cluster to create/destroy
|
|
*/
|
|
RDS(char* cluster);
|
|
|
|
const char* get_instance_name(json_t* instance);
|
|
|
|
/**
|
|
* @brief get_cluster Executes 'rds describe-bd-clusters' and creates json object with info on cluster
|
|
* Finds cluster with ID 'cluster_name_intern'.
|
|
* Does not set any internal variables
|
|
* @return JSON describption of cluster
|
|
*/
|
|
json_t* get_cluster();
|
|
|
|
/**
|
|
* @brief get_cluster_descr Creates JSON cluster describtion from string representation
|
|
* @param json String representation of cluster description
|
|
* Does not set any internal variables
|
|
* @return JSON describption of cluster
|
|
*/
|
|
json_t* get_cluster_descr(char* json);
|
|
|
|
/**
|
|
* @brief get_subnets_group_descr
|
|
* @param json String representation of subnets grop description
|
|
* Does not set any internal variables
|
|
* @return JSON description of subnets group
|
|
*/
|
|
json_t* get_subnets_group_descr(char* json);
|
|
|
|
/**
|
|
* @brief get_cluster_nodes Extract list of nodes names from cluster JSON description
|
|
* Uses 'cluster_intern'
|
|
* Does not set any internal variables
|
|
* @return JSON array of node names strings
|
|
*/
|
|
json_t* get_cluster_nodes();
|
|
|
|
|
|
/**
|
|
* @brief get_cluster_nodes Extract list of nodes names from cluster JSON description
|
|
* Does not set any internal variables
|
|
* @param cluster JSON cluster description
|
|
* @return JSON array of nodes names strings
|
|
*/
|
|
json_t* get_cluster_nodes(json_t* cluster);
|
|
|
|
/**
|
|
* @brief get_endpoints Gets list of endpoint (URLs) of cluster nodes
|
|
* Sets 'cluster_intern'
|
|
* @return JSON array of nodes endpoints (objects contaning Address and Port)
|
|
*/
|
|
json_t* get_endpoints();
|
|
|
|
/**
|
|
* @brief get_subnets Extracts subnets IDs from subnets group
|
|
* Uses 'subnets_group_name_intern'
|
|
* Sets 'vpc_id_intern' and 'subnets_intern'
|
|
* @return JSON array of node names strings
|
|
*/
|
|
json_t* get_subnets();
|
|
|
|
/**
|
|
* @brief get_subnetgroup_name Extracts subnets grop ID from cluster description
|
|
* Uses 'cluster_intern'
|
|
* Sets 'subnets_group_name_intern'
|
|
* If 'cluster_intern' is NULL function returns 'subnets_group_name_intern' value
|
|
* @return name of subnets group
|
|
*/
|
|
const char* get_subnetgroup_name();
|
|
|
|
/**
|
|
* @brief destroy_nodes Destroys nodes
|
|
* @param node_names JSON array with nodes names
|
|
* @return 0 in case of success
|
|
*/
|
|
int destroy_nodes(json_t* node_names);
|
|
|
|
/**
|
|
* @brief destroy_subnets Destoys subnets
|
|
* Uses 'subnets_intern' to get subnets list
|
|
* If 'subnets_intern' is not set it is needed to run:
|
|
* - clustr_intern=get_cluster()
|
|
* - get_subnetgroup_name()
|
|
* - get_subnets()
|
|
* @return 0 in case of success
|
|
*/
|
|
int destroy_subnets();
|
|
|
|
/**
|
|
* @brief destroy_subnets_group Destroys subnets group
|
|
* Uses 'subnets_group_name_intern'
|
|
* If 'subnets_group_name_intern' it is needed to run:
|
|
* - clustr_intern=get_cluster()
|
|
* - get_subnetgroup_name()
|
|
* @return 0 in case of success
|
|
*/
|
|
int destroy_subnets_group();
|
|
|
|
/**
|
|
* @brief destroy_route_tables Destroys route tabele
|
|
* Not needed to executed directly, route table is destroyed by destroy_vpc
|
|
* Uses 'vpc_id_intern'
|
|
* If 'vpc_id_intern' is not set it is needed to run:
|
|
* - clustr_intern=get_cluster()
|
|
* - get_subnetgroup_name()
|
|
* - get_subnets()
|
|
* @return 0 in case of success
|
|
*/
|
|
int destroy_route_tables(); // is needed?
|
|
|
|
/**
|
|
* @brief destroy_vpc Destroys VPC
|
|
* Uses 'vpc_id_intern'
|
|
* if 'vpc_id_intern' is not set it is needed to run:
|
|
* - clustr_intern=get_cluster()
|
|
* - get_subnetgroup_name()
|
|
* - get_subnets()
|
|
* @return 0 in case of success
|
|
*/
|
|
int destroy_vpc();
|
|
|
|
/**
|
|
* @brief destroy_cluster Destroys RDS cluster
|
|
* Uses 'cluster_name_intern'
|
|
* @return 0 in case of success
|
|
*/
|
|
int destroy_cluster();
|
|
|
|
/**
|
|
* @brief detach_and_destroy_gw Finds, detach and destroys internet gateways attached to VPC
|
|
* Uses 'vpc_id_intern'
|
|
* if 'vpc_id_intern' is not set it is needed to run:
|
|
* - clustr_intern=get_cluster()
|
|
* - get_subnetgroup_name()
|
|
* - get_subnets()
|
|
* @return 0 in case of success
|
|
*/
|
|
int detach_and_destroy_gw();
|
|
|
|
/**
|
|
* @brief create_vpc Creates VPC
|
|
* Sets 'vpc_id_intern'
|
|
* @param vpc_id Pointer to variable to place VpcID
|
|
* @return 0 in case of success
|
|
*/
|
|
int create_vpc(const char** vpc_id);
|
|
|
|
/**
|
|
* @brief create_subnet Creates subnet inside VPC
|
|
* Adds element to 'subnets_intern' JSON array (creates it if it does not exist)
|
|
* @param az Availability zone ID (e.g. 'eu-west-1a')
|
|
* @param cidr CIDR block (e.g. '172.30.1.0/24')
|
|
* @param subnet_id Pointer to variable to place SubnetID
|
|
* @return 0 in case of success
|
|
*/
|
|
int create_subnet(const char* az, const char* cidr, const char** subnet_id);
|
|
|
|
/**
|
|
* @brief create_subnet_group Creates subnets group for RDS
|
|
* Uses 'subnets_intern'
|
|
* Sets 'subnets_group_name_intern'
|
|
* @return 0 in case of success
|
|
*/
|
|
int create_subnet_group();
|
|
|
|
/**
|
|
* @brief create_gw Creates internet gateway for vpc_id_intern
|
|
* Uses 'vpc_id_intern'
|
|
* Sests 'gw_intern'
|
|
* @param gw_id Pointer to variable to place gateway ID
|
|
* @return 0 in case of success
|
|
*/
|
|
int create_gw(const char** gw_id);
|
|
|
|
/**
|
|
* @brief configure_route_table Adds route to route tabele attched to VPC
|
|
* Finds route table attached to VPC and adds route from internet to internet gateway
|
|
* Uses 'vpc_id_intern' and 'gw_intern'
|
|
* @param rt Pointer to variable to place route table ID which was found ond modified
|
|
* @return 0 in case of success
|
|
*/
|
|
int configure_route_table(const char** rt);
|
|
|
|
/**
|
|
* @brief create_cluster Creates RDS cluster and instances
|
|
* Also configures security group (opens port 3306)
|
|
* Uses 'cluster_name_intern', 'N_intern'
|
|
* Sets cluster_intern, sg_intern
|
|
* @return 0 in case of success
|
|
*/
|
|
int create_cluster();
|
|
|
|
/**
|
|
* @brief get_writer Find instance which have 'write' attribute
|
|
* Uses cluster_name_intern
|
|
* Calls 'aws rds describe-db-clusters' and does not use 'cluster_intern'
|
|
* (but does not update 'cluster_intern')
|
|
* @param writer_name Pointer to variable to place name of writer node
|
|
* @return 0 in case of success
|
|
*/
|
|
int get_writer(const char** writer_name);
|
|
|
|
/**
|
|
* @brief create_rds_db Creates RDS DB cluster and all needed stuff (vpc, subnets, gateway, route table,
|
|
*...)
|
|
* If case of error tries to destry all created stuff
|
|
* @param cluster_name Name of DB cluster
|
|
* @param N Number of nodes
|
|
* @return 0 in case if success
|
|
*/
|
|
int create_rds_db(int N);
|
|
|
|
/**
|
|
* @brief delete_rds_cluster Destroys RDS cluster, instances and VPC in which RDS cluster was located
|
|
* Uses 'cluster_name_intern'
|
|
* Tries to get all items IDs
|
|
* @return 0 in case if success
|
|
*/
|
|
int delete_rds_cluster();
|
|
|
|
/**
|
|
* @brief wait_for_nodes Waits until N nodes are in 'avalable' state
|
|
* Uses 'cluster_name_intern'
|
|
* Sets 'cluster_intern'
|
|
* @param N Number of nodes expected to be active (can be less than number of nodes in cluster)
|
|
* @return 0 in case if success
|
|
*/
|
|
int wait_for_nodes(size_t N);
|
|
|
|
/**
|
|
* @brief do_failover Does failover for RDS cluster
|
|
* @return 0 in case if success
|
|
*/
|
|
int do_failover();
|
|
|
|
const char* cluster_name_intern;
|
|
size_t N_intern;
|
|
json_t* cluster_intern;
|
|
const char* vpc_id_intern;
|
|
json_t* subnets_intern;
|
|
const char* subnets_group_name_intern;
|
|
const char* rt_intern;
|
|
const char* gw_intern;
|
|
const char* sg_intern;
|
|
};
|