def _exec_ambari_command(self, ambari_info, body, cmd_uri): LOG.debug('PUT URI: {0}'.format(cmd_uri)) result = self._put(cmd_uri, ambari_info, data=body) if result.status_code == 202: LOG.debug( 'PUT response: {0}'.format(result.text)) json_result = json.loads(result.text) href = json_result['href'] + '/tasks?fields=Tasks/status' success = self._wait_for_async_request(href, ambari_info) if success: LOG.info( _LI("Successfully changed state of Hadoop components ")) else: LOG.critical(_LC('Failed to change state of Hadoop ' 'components')) raise ex.HadoopProvisionError( _('Failed to change state of Hadoop components')) else: LOG.error( _LE('Command failed. Status: %(status)s, response: ' '%(response)s'), {'status': result.status_code, 'response': result.text}) raise ex.HadoopProvisionError(_('Hadoop/Ambari command failed.'))
def _hdfs_ha_update_host_component(self, hac, host, component, state): update_host_component_url = ('http://{0}/api/v1/clusters/{1}' '/hosts/{2}/host_components/{3}').format( hac['ambari_info'].get_address(), hac['name'], host, component) component_state = {"HostRoles": {"state": state}} body = json.dumps(component_state) result = self._put(update_host_component_url, hac['ambari_info'], data=body) if result.status_code == 202: json_result = json.loads(result.text) request_id = json_result['Requests']['id'] success = self._wait_for_async_request(self._get_async_request_uri( hac['ambari_info'], hac['name'], request_id), hac['ambari_info']) if success: LOG.info(_LI("HDFS-HA: Host component updated successfully: " "{0} {1}").format(host, component)) else: LOG.critical(_LC("HDFS-HA: Host component update failed: " "{0} {1}").format(host, component)) raise ex.NameNodeHAConfigurationError( 'Configuring HDFS HA failed. %s' % result.text) elif result.status_code != 200: LOG.error( _LE('Configuring HDFS HA failed. {0}').format(result.text)) raise ex.NameNodeHAConfigurationError( 'Configuring HDFS HA failed. %s' % result.text)
def _install_services(self, cluster_name, ambari_info): LOG.info(_LI('Installing required Hadoop services ...')) ambari_address = ambari_info.get_address() install_url = ('http://{0}/api/v1/clusters/{' '1}/services?ServiceInfo/state=INIT'.format( ambari_address, cluster_name)) body = ('{"RequestInfo" : { "context" : "Install all services" },' '"Body" : {"ServiceInfo": {"state" : "INSTALLED"}}}') result = self._put(install_url, ambari_info, data=body) if result.status_code == 202: json_result = json.loads(result.text) request_id = json_result['Requests']['id'] success = self._wait_for_async_request(self._get_async_request_uri( ambari_info, cluster_name, request_id), ambari_info) if success: LOG.info(_LI("Install of Hadoop stack successful.")) self._finalize_ambari_state(ambari_info) else: LOG.critical(_LC('Install command failed.')) raise ex.HadoopProvisionError( _('Installation of Hadoop stack failed.')) elif result.status_code != 200: LOG.error( _LE('Install command failed. {0}').format(result.text)) raise ex.HadoopProvisionError( _('Installation of Hadoop stack failed.'))
def start_services(self, cluster_name, cluster_spec, ambari_info): LOG.info(_LI('Starting Hadoop services ...')) LOG.info( _LI('Cluster name: %(cluster_name)s, Ambari server address:' ' %(server_address)s'), { 'cluster_name': cluster_name, 'server_address': ambari_info.get_address() }) start_url = ('http://{0}/api/v1/clusters/{1}/services?ServiceInfo/' 'state=INSTALLED'.format(ambari_info.get_address(), cluster_name)) body = ('{"RequestInfo" : { "context" : "Start all services" },' '"Body" : {"ServiceInfo": {"state" : "STARTED"}}}') self._fire_service_start_notifications(cluster_name, cluster_spec, ambari_info) result = self._put(start_url, ambari_info, data=body) if result.status_code == 202: json_result = json.loads(result.text) request_id = json_result['Requests']['id'] success = self._wait_for_async_request( self._get_async_request_uri(ambari_info, cluster_name, request_id), ambari_info) if success: LOG.info( _LI("Successfully started Hadoop cluster '{0}'.").format( cluster_name)) else: LOG.critical(_LC('Failed to start Hadoop cluster.')) raise ex.HadoopProvisionError( _('Start of Hadoop services failed.')) elif result.status_code != 200: LOG.error( _LE('Start command failed. Status: %(status)s, response: ' '%(response)s'), { 'status': result.status_code, 'result': result.text }) raise ex.HadoopProvisionError( _('Start of Hadoop services failed.'))
def start_services(self, cluster_name, cluster_spec, ambari_info): LOG.info(_LI('Starting Hadoop services ...')) LOG.info(_LI('Cluster name: %(cluster_name)s, Ambari server address: ' '%(server_address)s'), {'cluster_name': cluster_name, 'server_address': ambari_info.get_address()}) start_url = ('http://{0}/api/v1/clusters/{1}/services?ServiceInfo/' 'state=INSTALLED'.format( ambari_info.get_address(), cluster_name)) body = ('{"RequestInfo" : { "context" : "Start all services" },' '"Body" : {"ServiceInfo": {"state" : "STARTED"}}}') self._fire_service_start_notifications( cluster_name, cluster_spec, ambari_info) result = self._put(start_url, ambari_info, data=body) if result.status_code == 202: json_result = json.loads(result.text) request_id = json_result['Requests']['id'] success = self._wait_for_async_request( self._get_async_request_uri(ambari_info, cluster_name, request_id), ambari_info) if success: LOG.info( _LI("Successfully started Hadoop cluster '{0}'.").format( cluster_name)) else: LOG.critical(_LC('Failed to start Hadoop cluster.')) raise ex.HadoopProvisionError( _('Start of Hadoop services failed.')) elif result.status_code != 200: LOG.error( _LE('Start command failed. Status: %(status)s, ' 'response: %(response)s'), {'status': result.status_code, 'response': result.text}) raise ex.HadoopProvisionError( _('Start of Hadoop services failed.'))