def upgrade_server(self, cluster_config, server_version_build, cbs_platform, target=None, toy_build=None): ansible_runner = AnsibleRunner(cluster_config) log_info(">>> Upgrading Couchbase Server") # Install Server if toy_build: # http://server.jenkins.couchbase.com/view/All/job/watson-toy/1770/artifact/couchbase-server-enterprise-5.0.0-9900-centos7.x86_64.rpm toy_build_url_parts = toy_build.split('/') toy_build_url_len = len(toy_build_url_parts) server_package_name = toy_build_url_parts[-1] server_baseurl = "/".join( toy_build_url_parts[0:(toy_build_url_len - 1)]) else: version_build = server_version_build.split("-") server_verion = version_build[0] if len(version_build) == 2: # Build number is included server_build = version_build[1] else: server_build = None if server_build is None: server_baseurl, server_package_name = self.resolve_cb_mobile_url( server_verion, cbs_platform) else: server_baseurl, server_package_name = self.resolve_cb_nas_url( server_verion, server_build, cbs_platform) if target is not None: target = hostname_for_url(cluster_config, target) log_info("Upgrading Couchbase server on {} ...".format(target)) status = ansible_runner.run_ansible_playbook( "upgrade-couchbase-server-package.yml", subset=target, extra_vars={ "couchbase_server_package_base_url": server_baseurl, "couchbase_server_package_name": server_package_name }) else: log_info("Upgrading Couchbase server on all nodes") status = ansible_runner.run_ansible_playbook( "upgrade-couchbase-server-package.yml", extra_vars={ "couchbase_server_package_base_url": server_baseurl, "couchbase_server_package_name": server_package_name }) if status != 0: raise ProvisioningError("Failed to install Couchbase Server") self.wait_for_ready_state()
def stop_sync_gateway(self, cluster_config, url): target = hostname_for_url(cluster_config, url) log_info("Shutting down sync_gateway on {} ...".format(target)) ansible_runner = AnsibleRunner(cluster_config) status = ansible_runner.run_ansible_playbook( "stop-sync-gateway.yml", subset=target ) if status != 0: raise ProvisioningError("Could not stop sync_gateway")
def start_sync_gateways(self, cluster_config, url=None, config=None): """ Start sync gateways in a cluster. If url is passed, start the sync gateway at that url """ if config is None: raise ProvisioningError( "Starting a Sync Gateway requires a config") ansible_runner = AnsibleRunner(cluster_config) config_path = os.path.abspath(config) couchbase_server_primary_node = add_cbs_to_sg_config_server_field( cluster_config) if is_cbs_ssl_enabled(cluster_config): self.server_port = 18091 self.server_scheme = "https" playbook_vars = { "sync_gateway_config_filepath": config_path, "server_port": self.server_port, "server_scheme": self.server_scheme, "autoimport": "", "xattrs": "", "no_conflicts": "", "revs_limit": "", "couchbase_server_primary_node": couchbase_server_primary_node } if is_xattrs_enabled(cluster_config): playbook_vars["autoimport"] = '"import_docs": "continuous",' playbook_vars["xattrs"] = '"enable_shared_bucket_access": true,' if no_conflicts_enabled(cluster_config): playbook_vars["no_conflicts"] = '"allow_conflicts": false,' try: revs_limit = get_revs_limit(cluster_config) playbook_vars["revs_limit"] = '"revs_limit": {},'.format( revs_limit) except KeyError as ex: log_info("Keyerror in getting revs_limit{}".format(ex.message)) if url is not None: target = hostname_for_url(cluster_config, url) log_info("Starting {} sync_gateway.".format(target)) status = ansible_runner.run_ansible_playbook( "start-sync-gateway.yml", extra_vars=playbook_vars, subset=target) else: log_info("Starting all sync_gateways.") status = ansible_runner.run_ansible_playbook( "start-sync-gateway.yml", extra_vars=playbook_vars) if status != 0: raise ProvisioningError("Could not start sync_gateway")
def start_sync_gateway(self, cluster_config, url, config): target = hostname_for_url(cluster_config, url) log_info("Starting sync_gateway on {} ...".format(target)) ansible_runner = AnsibleRunner(cluster_config) config_path = os.path.abspath(config) status = ansible_runner.run_ansible_playbook( "start-sync-gateway.yml", extra_vars={ "sync_gateway_config_filepath": config_path }, subset=target ) if status != 0: raise ProvisioningError("Could not start sync_gateway")
def upgrade_sync_gateways(self, cluster_config, sg_conf, sync_gateway_version, url=None): """ Upgrade sync gateways in a cluster. If url is passed, upgrade the sync gateway at that url """ ansible_runner = AnsibleRunner(cluster_config) from libraries.provision.install_sync_gateway import SyncGatewayConfig version, build = version_and_build(sync_gateway_version) sg_config = SyncGatewayConfig(commit=None, version_number=version, build_number=build, config_path=sg_conf, build_flags="", skip_bucketcreation=False) sg_conf = os.path.abspath(sg_config.config_path) # Shared vars playbook_vars = {} sync_gateway_base_url, sync_gateway_package_name, sg_accel_package_name = sg_config.sync_gateway_base_url_and_package( ) playbook_vars[ "couchbase_sync_gateway_package_base_url"] = sync_gateway_base_url playbook_vars[ "couchbase_sync_gateway_package"] = sync_gateway_package_name playbook_vars["couchbase_sg_accel_package"] = sg_accel_package_name if url is not None: target = hostname_for_url(cluster_config, url) log_info( "Upgrading sync_gateway/sg_accel on {} ...".format(target)) status = ansible_runner.run_ansible_playbook( "upgrade-sg-sgaccel-package.yml", subset=target, extra_vars=playbook_vars) log_info("Completed upgrading {}".format(url)) else: log_info("Upgrading all sync_gateways/sg_accels") status = ansible_runner.run_ansible_playbook( "upgrade-sg-sgaccel-package.yml", extra_vars=playbook_vars) log_info("Completed upgrading all sync_gateways/sg_accels") if status != 0: raise Exception("Could not upgrade sync_gateway/sg_accel")
def restart_sync_gateways(self, cluster_config, url=None): """ Restart sync gateways in a cluster. If url is passed, restart the sync gateway at that url """ ansible_runner = AnsibleRunner(cluster_config) if url is not None: target = hostname_for_url(cluster_config, url) log_info("Restarting sync_gateway on {} ...".format(target)) status = ansible_runner.run_ansible_playbook( "restart-sync-gateway.yml", subset=target) else: log_info("Restarting all sync_gateways") status = ansible_runner.run_ansible_playbook( "restart-sync-gateway.yml", ) if status != 0: raise ProvisioningError("Could not restart sync_gateway")
def enable_import_xattrs(self, cluster_config, sg_conf, url, enable_import=False): """Deploy an SG config with xattrs enabled Will also enable import if enable_import is set to True It is used to enable xattrs and import in the SG config""" ansible_runner = AnsibleRunner(cluster_config) server_port = 8091 server_scheme = "http" if is_cbs_ssl_enabled(cluster_config): server_port = 18091 server_scheme = "https" # Shared vars playbook_vars = { "sync_gateway_config_filepath": sg_conf, "server_port": server_port, "server_scheme": server_scheme, "autoimport": "", "xattrs": "" } if is_xattrs_enabled(cluster_config): playbook_vars["xattrs"] = '"enable_shared_bucket_access": true,' if is_xattrs_enabled(cluster_config) and enable_import: playbook_vars["autoimport"] = '"import_docs": "continuous",' # Deploy config if url is not None: target = hostname_for_url(cluster_config, url) log_info("Deploying sync_gateway config on {} ...".format(target)) status = ansible_runner.run_ansible_playbook( "deploy-sync-gateway-config.yml", subset=target, extra_vars=playbook_vars) else: log_info("Deploying config on all sync_gateways") status = ansible_runner.run_ansible_playbook( "deploy-sync-gateway-config.yml", extra_vars=playbook_vars) if status != 0: raise Exception("Could not deploy config to sync_gateway")