in metron-deployment/ansible/extra_modules/ambari_cluster_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),
cluster_state=dict(type='str', default=None, required=True,
choices=['present', 'absent', 'started', 'stopped']),
blueprint_var=dict(type='dict', required=False),
blueprint_name=dict(type='str', default=None, required=False),
configurations=dict(type='list', default=None, required=False),
wait_for_complete=dict(default=False, required=False, type='bool'),
)
required_together = ['blueprint_var', 'blueprint_name']
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('password')
password = p.get('password')
cluster_name = p.get('cluster_name')
cluster_state = p.get('cluster_state')
blueprint_name = p.get('blueprint_name')
wait_for_complete = p.get('wait_for_complete')
ambari_url = 'http://{0}:{1}'.format(host, port)
try:
if cluster_state in ['started', 'stopped']:
if not cluster_exists(ambari_url, username, password, cluster_name):
module.fail_json(msg="Cluster name {0} does not exist".format(cluster_name))
state = ''
if cluster_state == 'started':
state = 'STARTED'
elif cluster_state == 'stopped':
state = 'INSTALLED'
request = set_cluster_state(ambari_url, username, password, cluster_name, 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 cluster_state == 'absent':
if not cluster_exists(ambari_url, username, password, cluster_name):
module.exit_json(changed=False, msg='Skipping. Cluster does not exist')
if not can_delete_cluster(ambari_url, username, password, cluster_name):
request = set_cluster_state(ambari_url, username, password, cluster_name, 'INSTALLED')
request_id = json.loads(request.content)['Requests']['id']
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))
request = delete_cluster(ambari_url, username, password, cluster_name)
module.exit_json(changed=True, results=request.content)
elif cluster_state == 'present':
if not p.get('blueprint_var') or not blueprint_name: # have neither name nor file
module.fail_json(msg="Must provide blueprint_var and blueprint_name when cluster_state=='present'")
blueprint_var = p.get('blueprint_var')
blueprint, host_map = blueprint_var_to_ambari_converter(blueprint_var)
created_blueprint = False
if not blueprint_exists(ambari_url, username, password, blueprint_name):
create_blueprint(ambari_url, username, password, blueprint_name, blueprint)
created_blueprint = True
if cluster_exists(ambari_url, username, password, cluster_name):
module.exit_json(changed=False, msg='Cluster {0} already exists'.format(cluster_name),
created_blueprint=created_blueprint)
configurations = p.get('configurations')
request = create_cluster(ambari_url, username, password, cluster_name, blueprint_name, configurations, host_map)
request_id = json.loads(request.content)['Requests']['id']
if wait_for_complete:
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))
request_status = get_request_status(ambari_url, username, password, cluster_name, request_id)
module.exit_json(changed=True, results=request.content,
created_blueprint=created_blueprint, status=request_status)
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))