in metron-deployment/ansible/extra_modules/ambari_service_state.py [0:0]
def main():
argument_spec = dict(
host=dict(type='str', default=None, required=True),
port=dict(type='int', default=None, required=True),
username=dict(type='str', default=None, required=True),
password=dict(type='str', default=None, required=True),
cluster_name=dict(type='str', default=None, required=True),
state=dict(type='str', default=None, required=True,
choices=['started', 'stopped', 'deleted']),
service_name=dict(type='str', required=False),
component_name=dict(type='str', default=None, required=False),
component_host=dict(type='str', default=None, required=False),
wait_for_complete=dict(default=False, required=False, type='bool'),
)
required_together = ['component_name', 'component_host']
module = AnsibleModule(
argument_spec=argument_spec,
required_together=required_together
)
if not REQUESTS_FOUND:
module.fail_json(
msg='requests library is required for this module')
p = module.params
host = p.get('host')
port = p.get('port')
username = p.get('username')
password = p.get('password')
cluster_name = p.get('cluster_name')
state = p.get('state')
service_name = p.get('service_name')
component_name = p.get('component_name')
component_host = p.get('component_host')
wait_for_complete = p.get('wait_for_complete')
component_mode = False
ambari_url = 'http://{0}:{1}'.format(host, port)
if component_name:
component_mode = True
try:
if not cluster_exists(ambari_url, username, password, cluster_name):
module.fail_json(msg="Cluster name {0} does not exist".format(cluster_name))
if state in ['started', 'stopped', 'installed']:
desired_state = ''
if state == 'started':
desired_state = 'STARTED'
elif state in ['stopped','installed']:
desired_state = 'INSTALLED'
if component_mode:
if desired_state == 'INSTALLED':
if(can_add_component(ambari_url, username, password, cluster_name, component_name, component_host)):
add_component_to_host(ambari_url, username, password, cluster_name, component_name, component_host)
request = set_component_state(ambari_url, username, password, cluster_name, component_name, component_host, desired_state)
else:
request = set_service_state(ambari_url,username,password,cluster_name,service_name, desired_state)
if wait_for_complete:
try:
request_id = json.loads(request.content)['Requests']['id']
except ValueError:
module.exit_json(changed=True, results=request.content)
status = wait_for_request_complete(ambari_url, username, password, cluster_name, request_id, 2)
if status != 'COMPLETED':
module.fail_json(msg="Request failed with status {0}".format(status))
module.exit_json(changed=True, results=request.content)
elif state == 'deleted':
if component_mode:
request = delete_component(ambari_url, username, password, cluster_name, component_name, component_host)
else:
request = delete_service(ambari_url,username,password,cluster_name,service_name)
module.exit_json(changed=True, results=request.content)
except requests.ConnectionError, e:
module.fail_json(msg="Could not connect to Ambari client: " + str(e.message))
except Exception, e:
module.fail_json(msg="Ambari client exception occurred: " + str(e.message))