def main()

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))