def create_xdcr_cluster(self, cluster_servers): num_hostname_add = 1 add_host_name = False if self.add_hostname_node_at_src: add_host_name = True if self.add_hostname_node_at_des: add_host_name = True shell = RemoteMachineShellConnection(cluster_servers[0]) services_in = self.alt_addr_services_in if "-" in services_in: set_services = services_in.split("-") else: set_services = services_in.split(",") for server in cluster_servers[1:]: add_node_IP = self.get_internal_IP(server) node_services = "kv" if len(set_services) == 1: node_services = set_services[0] elif len(set_services) > 1: if len(set_services) == len(cluster_servers): node_services = set_services[i] i += 1 if add_host_name and num_hostname_add <= self.num_hostname_add: add_node_IP = server.ip num_hostname_add += 1 try: shell.alt_addr_add_node(main_server=cluster_servers[0], internal_IP=add_node_IP, server_add=server, services=node_services, cmd_ext=self.cmd_ext) except Exception as e: if e: self.fail("Error: {0}".format(e)) rest = RestConnection(cluster_servers[0]) rest.rebalance(otpNodes=[node.id for node in rest.node_statuses()], ejectedNodes=[]) rest.monitorRebalance()
def test_setting_alternate_address(self): server1 = self.servers[0] url_format = "" secure_port = "" secure_conn = "" self.skip_set_alt_addr = False shell = RemoteMachineShellConnection(server1) if self.secure_conn: cacert = self.get_cluster_certificate_info(server1) secure_port = "1" url_format = "s" if not self.no_cacert: secure_conn = "--cacert {0}".format(cacert) if self.no_ssl_verify: secure_conn = "--no-ssl-verify" output = self.list_alt_address(server=server1, url_format=url_format, secure_port=secure_port, secure_conn=secure_conn) if self._check_output(server1.ip, output): output, _ = self.remove_alt_address_setting( server=server1, url_format=url_format, secure_port=secure_port, secure_conn=secure_conn) mesg = 'SUCCESS: Alternate address configuration deleted' if not self._check_output(mesg, output): self.fail("Fail to remove alternate address") output = self.list_alt_address(server=server1, url_format=url_format, secure_port=secure_port, secure_conn=secure_conn) if output and self._check_output(server1.ip, output): self.fail("Fail to remove alternate address with remove command") self.log.info("Start to set alternate address") internal_IP = self.get_internal_IP(server1) setting_cmd = "{0}couchbase-cli{1} {2}"\ .format(self.cli_command_path, self.cmd_ext, "setting-alternate-address") setting_cmd += " -c http{0}://{1}:{2}{3} --username {4} --password {5} {6}"\ .format(url_format, internal_IP , secure_port, server1.port, server1.rest_username, server1.rest_password, secure_conn) setting_cmd = setting_cmd + "--set --node {0} --hostname {1} "\ .format(internal_IP, server1.ip) shell.execute_command(setting_cmd) output = self.list_alt_address(server=server1, url_format=url_format, secure_port=secure_port, secure_conn=secure_conn) if output and output[2]: if not self._check_output(server1.ip, output): self.fail("Fail to set correct hostname") else: self.fail("Fail to set alternate address") self.log.info("Start to add node to cluster use internal IP") services_in = self.alt_addr_services_in if "-" in services_in: set_services = services_in.split("-") else: set_services = services_in.split(",") i = 0 num_hostname_add = 1 for server in self.servers[1:]: add_node_IP = self.get_internal_IP(server) node_services = "kv" if len(set_services) == 1: node_services = set_services[0] elif len(set_services) > 1: if len(set_services) == len(self.servers[1:]): node_services = set_services[i] i += 1 if self.add_hostname_node and num_hostname_add <= self.num_hostname_add: add_node_IP = server.ip num_hostname_add += 1 try: shell.alt_addr_add_node(main_server=server1, internal_IP=add_node_IP, server_add=server, services=node_services, cmd_ext=self.cmd_ext) except Exception as e: if e: self.fail("Error: {0}".format(e)) rest = RestConnection(self.master) rest.rebalance(otpNodes=[node.id for node in rest.node_statuses()], ejectedNodes=[]) rest.monitorRebalance() self.log.info("Create default bucket") self._create_default_bucket(self.master) buckets = rest.get_buckets() status = RestHelper(rest).vbucket_map_ready(buckets[0].name) if not status: self.fail("Failed to create bucket.") if self.run_alt_addr_loader: if self.alt_addr_kv_loader: self.kv_loader(server1, client_os=self.client_os) if self.alt_addr_n1ql_query: self.n1ql_query(server1.ip, self.client_os, create_travel_sample_bucket=True) if self.alt_addr_eventing_function: self.create_eventing_function(server1, self.client_os, create_travel_sample_bucket=True) self.skip_set_alt_addr = True alt_addr_status = [] if not self.skip_set_alt_addr: for server in self.servers[1:]: internal_IP = self.get_internal_IP(server) status = self.set_alternate_address(server, url_format=url_format, secure_port=secure_port, secure_conn=secure_conn, internal_IP=internal_IP) alt_addr_status.append(status) if False in alt_addr_status: self.fail("Fail to set alt address") else: self.all_alt_addr_set = True if self.run_alt_addr_loader: if self.alt_addr_kv_loader: self.kv_loader(server1, self.client_os) if self.alt_addr_n1ql_query: self.n1ql_query(server1.ip, self.client_os) remove_node = "" if self.alt_addr_rebalance_out: internal_IP = self.get_internal_IP(self.servers[-1]) reject_node = "ns_1@{0}".format(internal_IP) self.log.info("Rebalance out a node {0}".format(internal_IP)) rest.rebalance(otpNodes=[node.id for node in rest.node_statuses()],\ ejectedNodes=[reject_node]) reb_status = rest.monitorRebalance() self.assertTrue( reb_status, "Rebalance out node {0} failed".format(internal_IP)) remove_node = internal_IP if self.alt_addr_rebalance_in and self.alt_addr_rebalance_out: if remove_node: free_node = remove_node if self.add_hostname_node: free_node = self.get_external_IP(remove_node) cmd = 'curl -X POST -d "hostname={0}&user={1}&password={2}&services={3}" '\ .format(free_node, server1.rest_username, server1.rest_password, self.alt_addr_rebalance_in_services) cmd += '-u Administrator:password https://{0}:18091/controller/addNode'\ .format(server1.ip) shell.execute_command(cmd) rest.rebalance(otpNodes=[node.id for node in rest.node_statuses()],\ ejectedNodes=[]) reb_status = rest.monitorRebalance() self.assertTrue(reb_status, "Rebalance back in failed") status = self.set_alternate_address(self.servers[-1], url_format=url_format, secure_port=secure_port, secure_conn=secure_conn, internal_IP=free_node) if status: self.all_alt_addr_set = True else: self.all_alt_addr_set = False else: self.fail("We need a free node to add to cluster") if self.run_alt_addr_loader: if self.alt_addr_kv_loader: self.kv_loader(server1, self.client_os) if self.alt_addr_n1ql_query: self.n1ql_query(server1.ip, self.client_os) status = self.remove_all_alternate_address_settings() if not status: self.fail("Failed to remove all alternate address setting")