示例#1
0
def run_module():
    module_args = dict(
        controller_ip=dict(type='str', required=True),
        username=dict(type='str', required=False, default='admin'),
        password=dict(type='str', required=False, default='contrail123'),
        state=dict(type='str',
                   required=False,
                   default='present',
                   choices=['present']),
        autonomous_system=dict(type='int', required=False),
    )
    result = dict(changed=False, message='')

    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)

    name = 'global-default-system-config'
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    autonomous_system = module.params.get("autonomous_system")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'global-system-config'

    (web_api, update, uuid, js) = login_and_check_id(module, name, obj_type,
                                                     controller_ip, username,
                                                     password, state)

    ## begin: object specific
    old_js = js
    js = {"global-system-config": {}}

    ## limit properties because of web api limitation
    for k in old_js["global-system-config"]:
        if k in [
                "bgpaas_parameters", "igmp_enable", "parent_type",
                "ibgp_auto_mesh", "rd_cluster_seed", "autonomous_system",
                "enable_4byte_as", "display_name", "plugin_tuning", "tag_refs",
                "id_perms:enable", "id_perms:description",
                "id_perms:user_visible", "id_perms:permissions",
                "fast_convergence_parameters", "ip_fabric_subnets",
                "annotations", "mac_limit_control",
                "user_defined_log_statistics", "config_version",
                "supported_vendor_hardwares", "enable_security_policy_draft",
                "perms2", "bgp_router_refs", "supported_fabric_annotations",
                "alarm_enable", "mac_move_control",
                "data_center_interconnect_loopback_namespace",
                "bgp_always_compare_med",
                "data_center_interconnect_asn_namespace",
                "graceful_restart_parameters", "supported_device_families",
                "mac_aging_time", "fq_name", "uuid", "display_name",
                "parent_type", "parent_uuid"
        ]:
            js["global-system-config"][k] = old_js["global-system-config"][k]

    if autonomous_system:
        js["global-system-config"]["autonomous_system"] = autonomous_system
    ## end: object specific

    payload = json.dumps(js)
    #print (payload)
    #print (js.get("global-system-config").get("uuid"))
    #sys.exit(35)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#2
0
def run_module():
    module_args = dict(name=dict(type='str', required=True),
                       controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       uuid=dict(type='str', required=False),
                       domain=dict(type='str',
                                   required=False,
                                   default='default-domain'),
                       project=dict(type='str', required=False),
                       firewall_rules=dict(type='list', required=False))
    result = dict(changed=False, message='')

    required_if_args = [["state", "present", ["firewall_rules"]]]

    module = AnsibleModule(argument_spec=module_args,
                           supports_check_mode=True,
                           required_if=required_if_args)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    firewall_rules = module.params.get("firewall_rules")

    if module.check_mode:
        module.exit_json(**result)

    config_api_url = 'http://' + controller_ip + ':8082/'

    obj_type = 'firewall-policy'

    (web_api, update, uuid, js) = login_and_check_id(module,
                                                     name,
                                                     obj_type,
                                                     controller_ip,
                                                     username,
                                                     password,
                                                     state,
                                                     domain=domain,
                                                     project=project)

    if update and state == 'present':
        pass
    else:
        ## create payload and call API
        if project:
            js = json.loads('''
        { "firewall-policy":
          {
            "fq_name": ["%s", "%s", "%s"],
            "parent_type": "project"
          }
        }
        ''' % (domain, project, name))
        else:
            js = json.loads('''
        { "firewall-policy":
          {
            "fq_name": ["%s"],
            "parent_type": "policy-management"
          }
        }
        ''' % (name))

    ## begin: object specific
    if (firewall_rules):
        firewall_rule_refs = []
        for i in range(len(firewall_rules)):
            # get uuid of each firewall rule
            firewall_rule_name = firewall_rules[i]
            if project:
                firewall_rule_fqname = [domain, project, firewall_rule_name]
            else:
                firewall_rule_fqname = [
                    "default-policy-management", firewall_rule_name
                ]
            response = requests.post(config_api_url + 'fqname-to-id',
                                     data=json.dumps({
                                         "type":
                                         "firewall-rule",
                                         "fq_name":
                                         firewall_rule_fqname
                                     }),
                                     headers=vnc_api_headers)
            if not response.status_code == 200:
                module.fail_json(msg="specified firewall-rule doesn't exist",
                                 **result)
            firewall_rule_uuid = json.loads(response.text).get("uuid")
            firewall_rule_refs.append({
                "attr": {
                    "sequence": "{}".format(i)
                },
                "to": firewall_rule_fqname,
                "uuid": firewall_rule_uuid
            })
        js["firewall-policy"]["firewall_rule_refs"] = firewall_rule_refs
    ## end: object specific

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#3
0
def run_module():
    module_args = dict(name=dict(type='str', required=True),
                       controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       uuid=dict(type='str', required=False),
                       domain=dict(type='str',
                                   required=False,
                                   default='default-domain'),
                       project=dict(type='str',
                                    required=False,
                                    default='default-project'),
                       health_check_type=dict(
                           type='str',
                           required=False,
                           default='link-local',
                           choices=['link-local', 'end-to-end']),
                       monitor_type=dict(type='str',
                                         required=False,
                                         default='PING',
                                         choices=['PING', 'HTTP', 'BFD']),
                       url_path=dict(type='str',
                                     required=False,
                                     default='local-ip'),
                       max_retries=dict(type=int, required=False, default=2),
                       timeout=dict(type=int, required=False, default=5),
                       delay=dict(type=int, required=False, default=3))
    result = dict(changed=False, message='')

    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    health_check_type = module.params.get("health_check_type")
    monitor_type = module.params.get("monitor_type")
    url_path = module.params.get("url_path")
    max_retries = module.params.get("max_retries")
    timeout = module.params.get("timeout")
    delay = module.params.get("delay")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'service-health-check'

    (web_api, update, uuid, js) = login_and_check_id(module,
                                                     name,
                                                     obj_type,
                                                     controller_ip,
                                                     username,
                                                     password,
                                                     state,
                                                     domain=domain,
                                                     project=project)

    if update and state == 'present':
        pass
    else:
        ## create payload and call API
        js = json.loads('''
      { "service-health-check":
        {
          "fq_name": ["%s", "%s", "%s"],
          "parent_type": "project"
        }
      }
      ''' % (domain, project, name))

    ## begin: object specific
    if state == 'present':
        service_health_check_properties = js.get("service-health-check").get(
            "service_health_check_properties")
        if service_health_check_properties == None:
            service_health_check_properties = {}
        service_health_check_properties[
            "health_check_type"] = health_check_type
        service_health_check_properties["monitor_type"] = monitor_type
        service_health_check_properties["url_path"] = url_path
        service_health_check_properties["max_retries"] = max_retries
        service_health_check_properties["timeout"] = timeout
        service_health_check_properties["delay"] = delay
        js["service-health-check"][
            "service_health_check_properties"] = service_health_check_properties

    ## end: object specific

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#4
0
def run_module():
    module_args = dict(name=dict(type='str', required=True),
                       controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       uuid=dict(type='str', required=False),
                       domain=dict(type='str',
                                   required=False,
                                   default='default-domain'),
                       project=dict(type='str',
                                    required=False,
                                    default='default-project'),
                       router_type=dict(
                           type='str',
                           required=False,
                           choices=['snat-routing', 'vxlan-routing']),
                       connected_networks=dict(type='list', required=False),
                       route_target_list=dict(type='list', required=False),
                       vxlan_network_identifier=dict(type='int',
                                                     required=False),
                       physical_router_refs=dict(type='list', required=False))
    result = dict(changed=False, message='')

    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    router_type = module.params.get("router_type")
    connected_networks = module.params.get("connected_networks")
    route_target_list = module.params.get("route_target_list")
    vxlan_network_identifier = module.params.get("vxlan_network_identifier")
    physical_router_refs = module.params.get("physical_router_refs")

    if module.check_mode:
        module.exit_json(**result)

    ## begin: logical-router
    obj_type = 'logical-router'

    (web_api, update, uuid, js) = login_and_check_id(module,
                                                     name,
                                                     obj_type,
                                                     controller_ip,
                                                     username,
                                                     password,
                                                     state,
                                                     domain=domain,
                                                     project=project)

    ## create payload and call API
    if update and state == 'present':
        pass
    else:
        js = json.loads('''
      { "logical-router":
        {
          "fq_name": ["%s", "%s", "%s"],
          "parent_type": "project"
        }
      }
      ''' % (domain, project, name))

    if router_type:
        js["logical-router"]["logical_router_type"] = router_type
    if vxlan_network_identifier:
        js["logical-router"]["vxlan_network_identifier"] = str(
            vxlan_network_identifier)
    if physical_router_refs:
        js["logical-router"]["physical_router_refs"] = [{
            "to": ["default-global-system-config", physical_router]
        } for physical_router in physical_router_refs]
    if route_target_list:
        js["logical-router"]["configured_route_target_list"] = {
            "route_target": [
                "target:{}".format(route_target)
                for route_target in route_target_list
            ]
        }

    print("connected_networks", connected_networks)
    if not connected_networks == None:
        print("try to connect", connected_networks)
        js["logical-router"]["virtual_machine_interface_refs"] = []
        for network in connected_networks:
            js["logical-router"]["virtual_machine_interface_refs"].append({
                "parent_type":
                "project",
                "fq_name": [domain, project],
                "virtual_network_refs": [{
                    "to": [domain, project, network]
                }],
                "virtual_machine_interface_device_owner":
                "network:router_interface"
            })

    ## end: logical-router
    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#5
0
def run_module():
    module_args = dict(name=dict(type='str', required=True),
                       controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       uuid=dict(type='str', required=False),
                       domain=dict(type='str',
                                   required=False,
                                   default='default-domain'),
                       project=dict(type='str', required=False),
                       tag_type=dict(type='str',
                                     required=False,
                                     default='label',
                                     choices=[
                                         "application", "site", "deployment",
                                         "tier", "label"
                                     ]))
    result = dict(changed=False, message='')

    required_if_args = [["state", "present", ["tag_type"]]]

    module = AnsibleModule(argument_spec=module_args,
                           supports_check_mode=True,
                           required_if=required_if_args)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    tag_type = module.params.get("tag_type")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'tag'
    tag_type_name = tag_type + '=' + name

    (web_api, update, uuid, js) = login_and_check_id(module,
                                                     tag_type_name,
                                                     obj_type,
                                                     controller_ip,
                                                     username,
                                                     password,
                                                     state,
                                                     domain=domain,
                                                     project=project)

    if update and state == 'present':
        pass
    else:
        ## create payload and call API
        if project:
            js = json.loads('''
        { "tag":
          {
            "fq_name": ["%s", "%s", "%s"],
            "tag_type_name": "%s",
            "tag_value": "%s",
            "parent_type": "project"
          }
        }
        ''' % (domain, project, name, tag_type, name))
        else:
            js = json.loads('''
        { "tag":
          {
            "fq_name": ["%s"],
            "tag_type_name": "%s",
            "tag_value": "%s"
          }
        }
        ''' % (name, tag_type, name))

    ## begin: object specific
    ## end: object specific

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#6
0
def run_module():
    module_args = dict(name=dict(type='str', required=True),
                       controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       uuid=dict(type='str', required=False),
                       domain=dict(type='str',
                                   required=False,
                                   default='default-domain'),
                       project=dict(type='str',
                                    required=False,
                                    default='default-project'),
                       loadbalancer_subnet_uuid=dict(type='str',
                                                     required=False),
                       loadbalancer_pool_uuid=dict(type='str', required=False),
                       address=dict(type='str', required=False),
                       port=dict(type='int', required=False),
                       weight=dict(type='int', required=False, default=1))
    result = dict(changed=False, message='')

    required_if_args = [[
        "state", "present",
        [
            "loadbalancer_subnet_uuid", "loadbalancer_pool_uuid", "address",
            "port"
        ]
    ]]

    module = AnsibleModule(argument_spec=module_args,
                           supports_check_mode=True,
                           required_if=required_if_args)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    loadbalancer_subnet_uuid = module.params.get("loadbalancer_subnet_uuid")
    loadbalancer_pool_uuid = module.params.get("loadbalancer_pool_uuid")
    address = module.params.get("address")
    port = module.params.get("port")
    weight = module.params.get("weight")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'loadbalancer-member'

    (web_api, update, uuid, js) = login_and_check_id(
        module,
        name,
        obj_type,
        controller_ip,
        username,
        password,
        state,
        domain=domain,
        project=project,
        loadbalancer_pool="undefined-" + loadbalancer_pool_uuid)

    if update and state == 'present':
        pass
    else:
        ## create payload and call API
        js = json.loads('''
      { "loadbalancer-member":
        {
          "fq_name": ["%s", "%s", "undefined-%s", "%s"],
          "parent_type": "loadbalancer-pool",
          "loadbalancer_member_properties": {"admin_state": true}
        }
      }
      ''' % (domain, project, loadbalancer_pool_uuid, name))

    ## begin: object specific
    if (address):
        js["loadbalancer-member"]["loadbalancer_member_properties"][
            "subnet_id"] = loadbalancer_subnet_uuid
    if (address):
        js["loadbalancer-member"]["loadbalancer_member_properties"][
            "address"] = address
    if (port):
        js["loadbalancer-member"]["loadbalancer_member_properties"][
            "protocol_port"] = port
    if (weight):
        js["loadbalancer-member"]["loadbalancer_member_properties"][
            "weight"] = weight
    ## end: object specific

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#7
0
def run_module():
    module_args = dict(
        name=dict(type='str', required=False),
        controller_ip=dict(type='str', required=True),
        username=dict(type='str', required=False, default='admin'),
        password=dict(type='str', required=False, default='contrail123'),
        state=dict(type='str', required=False, default='present', choices=['absent', 'present']),
        uuid=dict(type='str', required=False),
        domain=dict(type='str', required=False, default='default-domain'),
        project=dict(type='str', required=False),
        rule_object=dict(type='str', required=True),
        rule_field=dict(type='str', required=True),
        role_crud_list=dict(type='list', required=False),
        role_name_list=dict(type='list', required=False)
    )
    result = dict(
        changed=False,
        message=''
    )

    required_if_args = [
      ["state", "present", ["role_crud_list", "role_name_list"]]
    ]

    module = AnsibleModule(
        argument_spec=module_args,
        supports_check_mode=True,
        required_if=required_if_args
    )

    name = "default-api-access-list"
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    rule_object = module.params.get("rule_object")
    rule_field = module.params.get("rule_field")
    role_crud_list = module.params.get("role_crud_list")
    role_name_list = module.params.get("role_name_list")

    if module.check_mode:
        module.exit_json(**result)

    obj_type='api-access-list'

    (web_api, update, uuid, js) = login_and_check_id(module, name, obj_type, controller_ip, username, password, state, domain=domain, project=project)

    if update:
      pass
    else:
      module.fail_json(msg='default-api-access-list is not available. cannot add an entry to that.', **result)

    ## begin: object specific
    rbac_rule = js["api-access-list"].get("api_access_list_entries").get("rbac_rule")

    entry_to_be_deleted = -1
    for i in range(len(rbac_rule)):
      rbac_entry = rbac_rule[i]
      tmp_rule_object = rbac_entry.get("rule_object")
      tmp_rule_field = rbac_entry.get("rule_field")
      if tmp_rule_object == rule_object and tmp_rule_field == rule_field:
        if state == 'present':
          module.fail_json(msg='That entry is already available. please firstly delete and re-create it.', **result)
        if state == 'absent':
          entry_to_be_deleted = i

    if state == 'present':
      rule_perms = []
      for i in range(len(role_name_list)):
        rule_perms.append({"role_name": role_name_list[i], "role_crud": role_crud_list[i]})
      rbac_rule.append ({"rule_object": rule_object, "rule_field": rule_field, "rule_perms": rule_perms})
    elif state == 'absent':
      if entry_to_be_deleted == -1:
        module.fail_json(msg='cannot find rbac entry that matches the given rule.', **result)
      del rbac_rule[entry_to_be_deleted]
    ## end: object specific


    payload=json.dumps(js)

    failed = crud (web_api, controller_ip, update, state, result, payload=payload, obj_type=obj_type, uuid=uuid)


    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#8
0
def run_module():
    module_args = dict(name=dict(type='str', required=True),
                       controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       global_object=dict(type='bool', required=False),
                       uuid=dict(type='str', required=False),
                       domain=dict(type='str',
                                   required=False,
                                   default='default-domain'),
                       project=dict(type='str',
                                    required=False,
                                    default='default-project'),
                       subnet=dict(type='str', required=False),
                       subnet_prefix=dict(type='int', required=False),
                       flood_unknown_unicast=dict(type='bool', required=False),
                       ip_fabric_forwarding=dict(type='bool', required=False),
                       fabric_snat=dict(type='bool', required=False),
                       display_name=dict(type='str', required=False),
                       igmp_enable=dict(type='bool', required=False),
                       mac_learning_enabled=dict(type='bool', required=False),
                       port_security_enabled=dict(type='bool', required=False),
                       allow_transit=dict(type='bool', required=False),
                       forwarding_mode=dict(
                           type='str',
                           required=False,
                           choices=['default', 'l2_l3', 'l3', 'l2']),
                       max_flows=dict(type='int', required=False),
                       rpf=dict(type='str',
                                required=False,
                                choices=['enable', 'disable']),
                       vxlan_network_identifier=dict(type='int',
                                                     required=False),
                       route_target_list=dict(type='list', required=False),
                       import_route_target_list=dict(type='list',
                                                     required=False),
                       export_route_target_list=dict(type='list',
                                                     required=False),
                       virtual_network_category=dict(type='str',
                                                     required=False,
                                                     choices=['routed']),
                       network_policy_refs=dict(type='list', required=False),
                       tag_refs=dict(type='list', required=False))
    result = dict(changed=False, message='')

    required_if_args = [[
        "global_object", True,
        [
            "domain", "project", "name", "route_target_list",
            "vxlan_network_identifier"
        ]
    ]]

    module = AnsibleModule(argument_spec=module_args,
                           supports_check_mode=True,
                           required_if=required_if_args)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    subnet = module.params.get("subnet")
    subnet_prefix = module.params.get("subnet_prefix")
    flood_unknown_unicast = module.params.get("flood_unknown_unicast")
    ip_fabric_forwarding = module.params.get("ip_fabric_forwarding")
    fabric_snat = module.params.get("fabric_snat")
    rpf = module.params.get("rpf")
    allow_transit = module.params.get("allow_transit")
    forwarding_mode = module.params.get("forwarding_mode")
    vxlan_network_identifier = module.params.get("vxlan_network_identifier")
    route_target_list = module.params.get("route_target_list")
    import_route_target_list = module.params.get("import_route_target_list")
    export_route_target_list = module.params.get("export_route_target_list")
    virtual_network_category = module.params.get("virtual_network_category")
    network_policy_refs = module.params.get("network_policy_refs")
    tag_refs = module.params.get("tag_refs")

    if module.check_mode:
        module.exit_json(**result)

    ## begin: virtual-network
    config_api_url = 'http://' + controller_ip + ':8082/'

    obj_type = 'virtual-network'

    (web_api, update, uuid, js) = login_and_check_id(module,
                                                     name,
                                                     obj_type,
                                                     controller_ip,
                                                     username,
                                                     password,
                                                     state,
                                                     domain=domain,
                                                     project=project)

    if update and state == 'present':
        pass
    else:
        ## create payload and call API
        js = json.loads('''
      { "virtual-network":
        {
          "fq_name": ["%s", "%s", "%s"],
          "parent_type": "project"
        }
      }
      ''' % (domain, project, name))

    if subnet:
        if (js["virtual-network"].get("network_ipam_refs") == None):
            js["virtual-network"]["network_ipam_refs"] = [{
                "to":
                ["default-domain", "default-project", "default-network-ipam"],
                "attr": {
                    "ipam_subnets": [{
                        "subnet": {
                            "ip_prefix": subnet,
                            "ip_prefix_len": subnet_prefix
                        }
                    }]
                }
            }]
            subnet_uuid = str(uuid_module.uuid4())
            js["virtual-network"]["network_ipam_refs"][0]["attr"][
                "ipam_subnets"][0]["subnet_uuid"] = subnet_uuid
            js["virtual-network"]["network_ipam_refs"][0]["attr"][
                "ipam_subnets"][0]["subnet_name"] = subnet_uuid
    if flood_unknown_unicast:
        js["virtual-network"]["flood_unknown_unicast"] = True
    if ip_fabric_forwarding:
        js["virtual-network"]["ip_fabric_forwarding"] = True
    if fabric_snat:
        js["virtual-network"]["fabric_snat"] = True
    if virtual_network_category:
        js["virtual-network"][
            "virtual_network_category"] = virtual_network_category
    if not network_policy_refs == None:
        # ["default-domain:admin:network-policy1"], []]
        network_policy_refs_list = []
        for np_fqname in network_policy_refs:
            response = requests.post(config_api_url + 'fqname-to-id',
                                     data=json.dumps({
                                         "type":
                                         "network-policy",
                                         "fq_name":
                                         np_fqname.split(":")
                                     }),
                                     headers=vnc_api_headers)
            if not response.status_code == 200:
                module.fail_json(msg="network-policy specified doesn't exist",
                                 **result)
            np_uuid = json.loads(response.text).get("uuid")
            network_policy_refs_list.append({
                "to": np_fqname.split(":"),
                "uuid": np_uuid,
                "attr": {
                    "sequence": {
                        "major": 0,
                        "minor": 0
                    }
                }
            })
        js["virtual-network"]["network_policy_refs"] = network_policy_refs_list

    if not tag_refs == None:
        # ["default-domain:admin:site=A"], []]
        tag_refs_list = []
        for tag_fqname in tag_refs:
            tag_uuid = fqname_to_id(module, tag_fqname, 'tag', controller_ip)
            tag_refs_list.append({
                "to": tag_fqname.split(":"),
                "uuid": tag_uuid
            })
        js["virtual-network"]["tag_refs"] = tag_refs_list

    if js["virtual-network"].get("virtual_network_properties") == None:
        js["virtual-network"]["virtual_network_properties"] = {}
    if rpf:
        js["virtual-network"]["virtual_network_properties"]["rpf"] = rpf
    if allow_transit:
        js["virtual-network"]["virtual_network_properties"][
            "allow_transit"] = allow_transit
    if forwarding_mode:
        js["virtual-network"]["virtual_network_properties"][
            "forwarding_mode"] = forwarding_mode
    if vxlan_network_identifier:
        js["virtual-network"]["virtual_network_properties"][
            "vxlan_network_identifier"] = vxlan_network_identifier
    if route_target_list:
        js["virtual-network"]["route_target_list"] = {
            "route_target": route_target_list
        }
    if import_route_target_list:
        js["virtual-network"]["import_route_target_list"] = {
            "route_target": import_route_target_list
        }
    if export_route_target_list:
        js["virtual-network"]["export_route_target_list"] = {
            "route_target": export_route_target_list
        }

    ## end: virtual-network

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#9
0
def run_module():
    module_args = dict(
        name=dict(type='str', required=True),
        controller_ip=dict(type='str', required=True),
        username=dict(type='str', required=False, default='admin'),
        password=dict(type='str', required=False, default='contrail123'),
        state=dict(type='str',
                   required=False,
                   default='present',
                   choices=['absent', 'present']),
        uuid=dict(type='str', required=False),
        domain=dict(type='str', required=False, default='default-domain'),
        project=dict(type='str', required=False),
        endpoint_1=dict(type='dict', required=False),
        endpoint_2=dict(type='dict', required=False),
        service=dict(type='dict', required=False),
        action_list=dict(type='dict', required=False),
    )
    result = dict(changed=False, message='')

    required_if_args = [[
        "state", "present", ["endpoint_1", "endpoint_2", "action_list"]
    ]]

    module = AnsibleModule(argument_spec=module_args,
                           supports_check_mode=True,
                           required_if=required_if_args)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    endpoint_1 = module.params.get("endpoint_1")
    endpoint_2 = module.params.get("endpoint_2")
    service = module.params.get("service")
    action_list = module.params.get("action_list")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'firewall-rule'

    (web_api, update, uuid, js) = login_and_check_id(module,
                                                     name,
                                                     obj_type,
                                                     controller_ip,
                                                     username,
                                                     password,
                                                     state,
                                                     domain=domain,
                                                     project=project)

    if update and state == 'present':
        pass
    else:
        ## create payload and call API
        if project:
            js = json.loads('''
        { "firewall-rule":
          {
            "fq_name": ["%s", "%s", "%s"],
            "parent_type": "project"
          }
        }
        ''' % (domain, project, name))
        else:
            js = json.loads('''
        { "firewall-rule":
          {
            "fq_name": ["%s"],
            "parent_type": "policy-management"
          }
        }
        ''' % (name))

    ## begin: object specific
    if (endpoint_1):
        js["firewall-rule"]["endpoint_1"] = endpoint_1
    if (endpoint_2):
        js["firewall-rule"]["endpoint_2"] = endpoint_2
    if (action_list):
        js["firewall-rule"]["action_list"] = action_list

    # set default values for webui
    if js["firewall-rule"]["endpoint_1"].get("address_group") == None:
        js["firewall-rule"]["endpoint_1"]["address_group"] = None
    if js["firewall-rule"]["endpoint_1"].get("any") == None:
        js["firewall-rule"]["endpoint_1"]["any"] = None
    if js["firewall-rule"]["endpoint_1"].get("tags") == None:
        js["firewall-rule"]["endpoint_1"]["tags"] = []
    if js["firewall-rule"]["endpoint_2"].get("address_group") == None:
        js["firewall-rule"]["endpoint_2"]["address_group"] = None
    if js["firewall-rule"]["endpoint_2"].get("any") == None:
        js["firewall-rule"]["endpoint_2"]["any"] = None
    if js["firewall-rule"]["endpoint_2"].get("tags") == None:
        js["firewall-rule"]["endpoint_2"]["tags"] = []

    if js["firewall-rule"].get("direction") == None:
        js["firewall-rule"]["direction"] = "<>"
    if js["firewall-rule"].get("match_tag_types") == None:
        js["firewall-rule"]["match_tag_types"] = {"tag_type": []}

    if (service):
        js["firewall-rule"]["service"] = service

    if js["firewall-rule"].get("service") == None:
        js["firewall-rule"]["service"] = {}

    if js["firewall-rule"]["service"].get("protocol") == None:
        js["firewall-rule"]["service"]["protocol"] = "any"
    if js["firewall-rule"]["service"].get("src_ports") == None:
        js["firewall-rule"]["service"]["src_ports"] = {
            "start_port": 0,
            "end_port": 65535
        }
    if js["firewall-rule"]["service"].get("dst_ports") == None:
        js["firewall-rule"]["service"]["dst_ports"] = {
            "start_port": 0,
            "end_port": 65535
        }
    ## end: object specific

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#10
0
def run_module():
    module_args = dict(name=dict(type='str', required=True),
                       controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       domain=dict(type='str',
                                   required=False,
                                   default='default-domain'),
                       project=dict(type='str',
                                    required=False,
                                    default='admin'),
                       physical_router=dict(type='str', required=True),
                       share=dict(type='list', required=False))
    result = dict(changed=False, message='')

    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    physical_router = module.params.get("physical_router")
    share = module.params.get("share")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'physical-interface'

    (web_api, update, uuid,
     js) = login_and_check_id(module,
                              name,
                              obj_type,
                              controller_ip,
                              username,
                              password,
                              state,
                              domain=domain,
                              project=project,
                              physical_router=physical_router)

    ## begin: object specific
    config_api_url = 'http://' + controller_ip + ':8082/'

    failed = False

    if update:
        if state == 'present':

            if not share == None:
                tmp_share_list = []
                for tenant_name, tenant_permission in share:
                    response = requests.post(
                        config_api_url + 'fqname-to-id',
                        data='{"type": "project", "fq_name": ["%s", "%s"]}' %
                        (domain, tenant_name),
                        headers=vnc_api_headers)
                    if not response.status_code == 200:
                        failed = True
                        result["message"] = response.text
                        module.fail_json(
                            msg=
                            "uuid of specified shared project cannot be obtained",
                            **result)
                    project_uuid = json.loads(response.text).get("uuid")
                    tmp_share_list.append({
                        "tenant": project_uuid,
                        "tenant_access": tenant_permission
                    })
                js["physical-interface"]["perms2"]["share"] = tmp_share_list

            response = requests.put(config_api_url + 'physical-interface/' +
                                    uuid,
                                    data=json.dumps(js),
                                    headers=vnc_api_headers)
            if not response.status_code == 200:
                failed = True
                result["message"] = response.text
                module.fail_json(msg="physical-interface update failed",
                                 **result)

        elif state == 'absent':
            # delete physical-interface
            response = requests.delete(config_api_url + 'physical-interface/' +
                                       uuid,
                                       data=json.dumps(js),
                                       headers=vnc_api_headers)
            if not response.status_code == 200:
                failed = True
                result["message"] = response.text
                module.fail_json(msg="physical-interface deletion failed",
                                 **result)
    else:
        if state == 'present':
            js = json.loads('''
        { "physical-interface":
          {
            "fq_name": ["default-global-system-config", "%s", "%s"],
            "parent_type": "physical-router"
          }
        }
        ''' % (physical_router, name))
            response = requests.post(config_api_url + 'physical-interfaces',
                                     data=json.dumps(js),
                                     headers=vnc_api_headers)
            if not response.status_code == 200:
                failed = True
                result["message"] = response.text
                module.fail_json(msg="physical-interface creation failed",
                                 **result)

        else:
            module.fail_json(msg="physical-interface doesn't exist", **result)

    ## end: object specific

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#11
0
def run_module():
    module_args = dict(controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['present']),
                       vxlan_network_identifier_mode=dict(
                           type='str',
                           required=False,
                           choices=['automatic', 'configured']),
                       encapsulation_priorities=dict(type='list',
                                                     required=False),
                       flow_export_rate=dict(type='int', required=False),
                       port_translation_pool=dict(type='dict', required=False))
    result = dict(changed=False, message='')

    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)

    name = 'default-global-vrouter-config'
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    vxlan_network_identifier_mode = module.params.get(
        "vxlan_network_identifier_mode")
    encapsulation_priorities = module.params.get("encapsulation_priorities")
    flow_export_rate = module.params.get("flow_export_rate")
    port_translation_pool = module.params.get("port_translation_pool")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'global-vrouter-config'

    (web_api, update, uuid, js) = login_and_check_id(module, name, obj_type,
                                                     controller_ip, username,
                                                     password, state)

    ## begin: object specific
    if vxlan_network_identifier_mode:
        js["global-vrouter-config"][
            "vxlan_network_identifier_mode"] = vxlan_network_identifier_mode

    if encapsulation_priorities:
        js["global-vrouter-config"]["encapsulation_priorities"][
            "encapsulation"] = encapsulation_priorities

    if flow_export_rate:
        js["global-vrouter-config"]["flow_export_rate"] = flow_export_rate

    if port_translation_pool:
        port_translation_pool_list = []
        if port_translation_pool.get("tcp"):
            port_translation_pool_list.append({
                "protocol":
                "tcp",
                "port_count":
                str(port_translation_pool.get("tcp"))
            })
        if port_translation_pool.get("udp"):
            port_translation_pool_list.append({
                "protocol":
                "udp",
                "port_count":
                str(port_translation_pool.get("udp"))
            })
        js["global-vrouter-config"]["port_translation_pools"] = {
            "port_translation_pool": port_translation_pool_list
        }

    ## end: object specific

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#12
0
def run_module():
    module_args = dict(name=dict(type='str', required=True),
                       controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       uuid=dict(type='str', required=False),
                       domain=dict(type='str',
                                   required=False,
                                   default='default-domain'),
                       project=dict(type='str',
                                    required=False,
                                    default='default-project'),
                       loadbalancer_provider=dict(
                           type='str',
                           required=False,
                           default='opencontrail',
                           choices=['native', 'opencontrail']),
                       loadbalancer_virtual_network=dict(type='str',
                                                         required=False),
                       loadbalancer_subnet_uuid=dict(type='str',
                                                     required=False),
                       loadbalancer_member_address_list=dict(type='list',
                                                             required=False),
                       loadbalancer_member_port_list=dict(type='list',
                                                          required=False))
    result = dict(changed=False, message='')

    required_if_args = [[
        "state", "present",
        [
            "loadbalancer_virtual_network", "loadbalancer_subnet_uuid",
            "loadbalancer_member_address_list", "loadbalancer_member_port_list"
        ]
    ]]

    module = AnsibleModule(argument_spec=module_args,
                           supports_check_mode=True,
                           required_if=required_if_args)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    loadbalancer_provider = module.params.get("loadbalancer_provider")
    loadbalancer_virtual_network = module.params.get(
        "loadbalancer_virtual_network")
    loadbalancer_subnet_uuid = module.params.get("loadbalancer_subnet_uuid")
    loadbalancer_member_address_list = module.params.get(
        "loadbalancer_member_address_list")
    loadbalancer_member_port_list = module.params.get(
        "loadbalancer_member_port_list")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'loadbalancer'

    (web_api, update, uuid, js) = login_and_check_id(module,
                                                     name,
                                                     obj_type,
                                                     controller_ip,
                                                     username,
                                                     password,
                                                     state,
                                                     domain=domain,
                                                     project=project)

    if update and state == 'present':
        pass
    else:
        ## create payload and call API
        js = json.loads('''
      {
        "loadbalancer":
          {
            "fq_name": ["%s", "%s", "%s"],
            "name": "%s",
            "loadbalancer_properties": {
              "admin_state": true,
              "vip_subnet_id": "%s"
            },
            "parent_type": "project",
            "virtual_machine_interface_refs": {
                "instance_ip_back_refs": [
                    {
                        "instance_ip_address": [
                            {
                                "domain": "%s",
                                "fixedIp": "",
                                "project": "%s"
                            }
                        ],
                        "subnet_uuid": "%s"
                    }
                ],
                "parent_type": "project",
                "virtual_machine_interface_device_owner": "neutron:LOADBALANCER",
                "virtual_network_refs": [
                    {
                        "to": [
                            "%s",
                            "%s",
                            "%s"
                        ]
                    }
                ]
            }
          }
        ,
        "loadbalancer-healthmonitor":
          {
            "fq_name": ["%s", "%s", "%s-healthmonitor"],
            "parent_type": "project",
            "loadbalancer_healthmonitor_properties": {
              "admin_state": true,
              "delay": 5,
              "timeout": 5,
              "max_retries": 3,
              "monitor_type": "TCP"
            }
          }
        ,
        "loadbalancer-listener":
          {
            "fq_name": ["%s", "%s", "%s-listener"],
            "parent_type": "project",
            "loadbalancer_listener_properties": {
              "admin_state": true,
              "connection_limit": -1,
              "protocol_port": 80,
              "protocol": "TCP"
            }
          }
        ,
        "loadbalancer-pool":
          {
            "fq_name": ["%s", "%s", "%s-pool"],
            "parent_type": "project",
            "loadbalancer_pool_properties": {
              "admin_state": true,
              "protocol": "TCP",
              "loadbalancer_method": "LEAST_CONNECTIONS"
            }
          }
      }
      ''' % (domain, project, name, name, loadbalancer_subnet_uuid, domain,
             project, loadbalancer_subnet_uuid, domain, project,
             loadbalancer_virtual_network, domain, project, name, domain,
             project, name, domain, project, name))

    ## begin: object specific
    js["loadbalancer"]["loadbalancer_provider"] = loadbalancer_provider

    if not update:
        js["loadbalancer-member"] = []
        for i in range(len(loadbalancer_member_address_list)):
            js["loadbalancer-member"].append({
                "fq_name": [domain, project, "{}-member-{}".format(name, i)],
                "parent_type":
                "loadbalancer-pool",
                "loadbalancer_member_properties": {
                    "admin_state": True,
                    "subnet_id": loadbalancer_subnet_uuid,
                    "weight": 1,
                    "address": loadbalancer_member_address_list[i],
                    "protocol_port": loadbalancer_member_port_list[i]
                }
            })

    ## end: object specific

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#13
0
def run_module():
    module_args = dict(name=dict(type='str', required=True),
                       controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       uuid=dict(type='str', required=False),
                       address=dict(type='str', required=True),
                       vendor=dict(type='str', required=False, default=''),
                       router_type=dict(type='str',
                                        required=False,
                                        default='router',
                                        choices=[
                                            'control-node',
                                            'external-control-node', 'router'
                                        ]),
                       hold_time=dict(type='int', required=False, default=90),
                       admin_down=dict(type='bool',
                                       required=False,
                                       default=False),
                       address_families=dict(type='list', required=False),
                       autonomous_system=dict(type='int', required=True),
                       bgp_router_refs=dict(type='list', required=False))
    result = dict(changed=False, message='')

    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    router_type = module.params.get("router_type")
    address = module.params.get("address")
    vendor = module.params.get("vendor")
    hold_time = module.params.get("hold_time")
    admin_down = module.params.get("admin_down")
    address_families = module.params.get("address_families")
    autonomous_system = module.params.get("autonomous_system")
    bgp_router_refs = module.params.get("bgp_router_refs")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'bgp-router'

    (web_api, update, uuid, js) = login_and_check_id(module, name, obj_type,
                                                     controller_ip, username,
                                                     password, state)

    if update and state == 'present':
        pass
    else:
        ## create payload and call API
        js = json.loads('''
      { "bgp-router":
        {
          "fq_name": ["default-domain","default-project","ip-fabric","__default__", "%s"],
          "parent_type": "routing-instance"
        }
      }
      ''' % (name))

    ## begin: object specific
    if js["bgp-router"].get("bgp_router_parameters") == None:
        bgp_router_parameters = {}
        js["bgp-router"]["bgp_router_parameters"] = bgp_router_parameters
    else:
        bgp_router_parameters = js["bgp-router"]["bgp_router_parameters"]

    if router_type:
        bgp_router_parameters["router_type"] = router_type
    if address:
        bgp_router_parameters["address"] = address
        bgp_router_parameters["identifier"] = address
    if vendor:
        bgp_router_parameters["vendor"] = vendor
    if hold_time:
        bgp_router_parameters["hold_time"] = hold_time
    if admin_down:
        bgp_router_parameters["admin_down"] = admin_down
    if autonomous_system:
        bgp_router_parameters["autonomous_system"] = autonomous_system
    if address_families:
        bgp_router_parameters["address_families"] = address_families

    if bgp_router_refs:
        js["bgp-router"]["bgp_router_refs"] = [{
            "to": [
                "default-domain", "default-project", "ip-fabric",
                "__default__", bgp_router
            ],
            "attr":
            None
        } for bgp_router in bgp_router_refs]

    ## end: object specific

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#14
0
def run_module():
    module_args = dict(
        name=dict(type='str', required=True),
        controller_ip=dict(type='str', required=True),
        username=dict(type='str', required=False, default='admin'),
        password=dict(type='str', required=False, default='contrail123'),
        state=dict(type='str', required=False, default='present', choices=['absent', 'present']),
        uuid=dict(type='str', required=True),
        domain=dict(type='str', required=False, default='default-domain'),
        project=dict(type='str', required=False, default='default-project'),
        virtual_machine_interface_refs=dict(type='list', required=False)
    )
    result = dict(
        changed=False,
        message=''
    )

    module = AnsibleModule(
        argument_spec=module_args,
        supports_check_mode=True
    )

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    uuid = module.params.get("uuid")
    domain = module.params.get("domain")
    project = module.params.get("project")

    if module.check_mode:
        module.exit_json(**result)

    obj_type='virtual-machine'

    (web_api, update, uuid, js) = login_and_check_id(module, name, obj_type, controller_ip, username, password, state, domain=domain, project=project)

    if update and state=='present':
      pass
    else:
      ## create payload and call API
      js=json.loads (
      '''
      { "virtual-machine":
        {
          "fq_name": ["%s"],
          "uuid": "%s"
        }
      }
      ''' % (name, uuid)
    )

    ## begin: object specific
    if virtual_machine_interface_refs:
      # ["default-domain:admin:vmi1"], []]
      vmi_refs_list=[]
      for vmi_fqname in virtual_machine_interface_refs:
        vmi_uuid = fqname_to_id (module, vmi_fqname, 'virtual-machine-interface', controller_ip)
        vmi_refs_list.append ({"to": vmi_fqname.split(":"), "uuid": vmi_uuid })
      js ["virtual-machine-interface"]["virtual_machine_interface_refs"]=vmi_refs_list
    ## end: object specific


    payload=json.dumps(js)

    failed = crud (web_api, controller_ip, update, state, result, payload=payload, obj_type=obj_type, uuid=uuid)


    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#15
0
def run_module():
    module_args = dict(
        name=dict(type='str', required=True),
        controller_ip=dict(type='str', required=True),
        username=dict(type='str', required=False, default='admin'),
        password=dict(type='str', required=False, default='contrail123'),
        state=dict(type='str',
                   required=False,
                   default='present',
                   choices=['absent', 'present']),
        uuid=dict(type='str', required=False),
        domain=dict(type='str', required=False, default='default-domain'),
        service_virtualization_type=dict(type='str',
                                         required=False,
                                         default='virtual-machine'),
        service_mode=dict(
            type='str',
            required=True,
            choices=['transparent', 'in-network', 'in-network-nat']),
        service_type=dict(type='str', required=False, default='firewall'),
        version=dict(type='int', required=False, default='2'),
        interface_type_list=dict(type='list',
                                 required=False,
                                 default=['left', 'right']))
    result = dict(changed=False, message='')

    required_if_args = [["state", "present", ["service_mode"]]]

    module = AnsibleModule(argument_spec=module_args,
                           supports_check_mode=True,
                           required_if=required_if_args)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    service_virtualization_type = module.params.get(
        "service_virtualization_type")
    service_mode = module.params.get("service_mode")
    service_type = module.params.get("service_type")
    version = module.params.get("version")
    interface_type_list = module.params.get("interface_type_list")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'service-template'

    (web_api, update, uuid, js) = login_and_check_id(module,
                                                     name,
                                                     obj_type,
                                                     controller_ip,
                                                     username,
                                                     password,
                                                     state,
                                                     domain=domain,
                                                     project='dummy')

    if update and state == 'present':
        pass
    else:
        ## create payload and call API
        js = json.loads('''
      { "service-template":
        {
          "fq_name": ["%s", "%s"],
          "parent_type": "domain"
        }
      }
      ''' % (domain, name))

    ## begin: object specific
    if (js["service-template"].get("service_template_properties") == None):
        js["service-template"]["service_template_properties"] = {}
    if (service_virtualization_type):
        js["service-template"]["service_template_properties"][
            "service_virtualization_type"] = service_virtualization_type
    if (service_mode):
        js["service-template"]["service_template_properties"][
            "service_mode"] = service_mode
    if (service_type):
        js["service-template"]["service_template_properties"][
            "service_type"] = service_type
    if (interface_type_list):
        js["service-template"]["service_template_properties"][
            "interface_type"] = [{
                "service_interface_type": interface_type
            } for interface_type in interface_type_list]
    if (version):
        js["service-template"]["service_template_properties"][
            "version"] = version
        js["service-template"]["versionList"] = [{
            "text": "v{}".format(version),
            "id": version
        }]

    ## end: object specific

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#16
0
def run_module():
    module_args = dict(controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       domain=dict(type='str',
                                   required=False,
                                   default='default-domain'),
                       project=dict(type='str',
                                    required=False,
                                    default='admin'),
                       fabric=dict(type='str', required=True),
                       vpg_vn_vlan_list=dict(type='list', required=True))
    result = dict(changed=False, message='')

    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)

    name = "dummy"
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    fabric = module.params.get("fabric")
    vpg_vn_vlan_list = module.params.get("vpg_vn_vlan_list")

    if module.check_mode:
        module.exit_json(**result)

    ## begin: object specific
    config_api_url = 'http://' + controller_ip + ':8082/'

    failed = False

    obj_type = 'virtual-port-group'

    # for keystone login
    (web_api, update, uuid, js) = login_and_check_id(module,
                                                     name,
                                                     obj_type,
                                                     controller_ip,
                                                     username,
                                                     password,
                                                     state,
                                                     domain=domain,
                                                     project=project,
                                                     fabric=fabric)

    for i in range(len(vpg_vn_vlan_list)):
        native_vlan = None
        vpg_name, vn_name, vlan_id = vpg_vn_vlan_list[i][0:3]
        if (len(vpg_vn_vlan_list[i]) > 3):
            native_vlan = vpg_vn_vlan_list[i][3]

        ## check if the vpg exists
        response = requests.post(
            config_api_url + 'fqname-to-id',
            data=
            '{"type": "virtual-port-group", "fq_name": ["default-global-system-config", "%s", "%s"]}'
            % (fabric, vpg_name),
            headers=vnc_api_headers)
        if response.status_code == 200:
            tmp = json.loads(response.text)
            vpg_uuid = tmp.get("uuid")

            response = requests.get(config_api_url + 'virtual-port-group/' +
                                    vpg_uuid,
                                    headers=vnc_api_headers)
            vpg_vmi_refs = json.loads(response.text).get(
                "virtual-port-group").get("virtual_machine_interface_refs")
            physical_interface_refs = json.loads(response.text).get(
                "virtual-port-group").get("physical_interface_refs")

            if response.status_code == 200:
                pass
            else:
                failed = True
                result["message"] = response.text
                module.fail_json(msg="cannot get vpg detail", **result)
        else:
            failed = True
            result["message"] = response.text
            module.fail_json(
                msg=
                "cannot assign / delete vlan-id / vn pair, since vpg is not available",
                **result)

        if state == 'present':
            # TODO:
            # check vpg's virtual_machine_interface refs and get attr vlan_tag
            # annotation or virtual_machine_interface_refs' attr
            # skip this if already available

            # check virtual-network uuid
            response = requests.post(
                config_api_url + 'fqname-to-id',
                data=
                '{"type": "virtual-network", "fq_name": ["%s", "%s", "%s"]}' %
                (domain, project, vn_name),
                headers=vnc_api_headers)
            if response.status_code == 200:
                vn_uuid = json.loads(response.text).get("uuid")
            else:
                failed = True
                result["message"] = response.text
                module.fail_json(
                    msg=
                    "cannot assign / delete vlan-id / vn pair, since vn is not available",
                    **result)

            # local link information: please make them the same with vpg side definition, since this definition will update VPG pi refs ..
            local_link_information_list = []
            for pi_refs in physical_interface_refs:
                port_id = pi_refs.get("to")[2]
                switch_info = pi_refs.get("to")[1]
                local_link_information_list.append({
                    "fabric": fabric,
                    "switch_info": switch_info,
                    "port_id": port_id
                })
            local_link_information_str = json.dumps(
                {"local_link_information": local_link_information_list})

            # create vmi with vpg_uuid, vn_uuid and vlan-id
            tmp_str = '''
        { "virtual-machine-interface":
          {
            "fq_name": ["%s", "%s", "%s"],
            "parent_type": "project",
            "device_owner": "baremetal:None",
            "virtual_machine_interface_bindings": {
              "key_value_pair": [
                {"key": "vpg", "value": "%s"},
                {"key": "vnic_type", "value": "baremetal"},
                {"key": "vif_type", "value": "vrouter"}
              ]
            },
            "virtual_network_refs": [
             {
             "to": ["%s", "%s", "%s"],
             "uuid": "%s"
             }
            ],
            "virtual_machine_interface_properties": {
              "sub_interface_vlan_tag": %s
            }
          }
        }
        ''' % (domain, project, "".join(
                (vpg_name, '-', fabric, '-', vn_name, '-', str(vlan_id))),
               vpg_name, domain, project, vn_name, vn_uuid, vlan_id)

            js = json.loads(tmp_str)
            js["virtual-machine-interface"][
                "virtual_machine_interface_bindings"]["key_value_pair"].append(
                    {
                        "key": "profile",
                        "value": local_link_information_str
                    })
            if (native_vlan == None):
                js["virtual-machine-interface"][
                    "virtual_machine_interface_properties"] = {
                        "sub_interface_vlan_tag": vlan_id
                    }
            else:
                js["virtual-machine-interface"][
                    "virtual_machine_interface_bindings"][
                        "key_value_pair"].append({
                            "key": "tor_port_vlan_id",
                            "value": str(vlan_id)
                        })
                js["virtual-machine-interface"][
                    "virtual_machine_interface_properties"] = {
                        "sub_interface_vlan_tag": 0
                    }

            # TODO:
            # check vpg's virtual_machine_interface refs and get attr vlan_tag
            # annotation or virtual_machine_interface_refs' attr
            # skip this if already available

            response = requests.post(config_api_url +
                                     'virtual-machine-interfaces',
                                     data=json.dumps(js),
                                     headers=vnc_api_headers)
            if response.status_code == 200:
                pass
            elif response.status_code == 409:
                # something occurred for this vmi .., set it failed, and continue
                failed = True
                result["message"] += response.text + '\n'
                continue
            else:
                failed = True
                result["message"] = response.text
                module.fail_json(msg="vlan / vn assignment failed", **result)

        elif state == 'absent':
            # TODO:
            # check vpg's virtual_machine_interface refs and get attr vlan_tag
            # annotation or virtual_machine_interface_refs' attr
            # skip this if already available
            vmi_uuid = ''
            for vmi_ref in vpg_vmi_refs:
                if vlan_id == vmi_ref.get("attr").get("sub_inteface_vlan_tag"):
                    vmi_uuid = vmi_ref.get("uuid")
            if vmi_uuid == '':
                failed = True
                module.fail_json(msg="cannot find vmi_uuid to be deleted",
                                 **result)

            # delete virtual-machine-interfaces
            response = requests.delete(
                config_api_url + 'virtual-machine-interfaces/' + vmi_uuid,
                headers=vnc_api_headers)
            if not response.status_code == 200:
                failed = True
                result["message"] = response.text
                module.fail_json(msg="vn / vlan-id pair deletion failed",
                                 **result)
    ## end: object specific

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#17
0
def run_module():
    module_args = dict(name=dict(type='str', required=True),
                       controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       uuid=dict(type='str', required=False),
                       domain=dict(type='str',
                                   required=False,
                                   default='default-domain'),
                       project=dict(type='str',
                                    required=False,
                                    default='default-project'),
                       policy_rule=dict(type='list', required=False))
    result = dict(changed=False, message='')

    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    policy_rule = module.params.get("policy_rule")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'network-policy'

    (web_api, update, uuid, js) = login_and_check_id(module,
                                                     name,
                                                     obj_type,
                                                     controller_ip,
                                                     username,
                                                     password,
                                                     state,
                                                     domain=domain,
                                                     project=project)

    if update and state == 'present':
        pass
    else:
        ## create payload and call API
        js = json.loads('''
      { "network-policy":
        {
          "fq_name": ["%s", "%s", "%s"],
          "parent_type": "project"
        }
      }
      ''' % (domain, project, name))

    ## begin: object specific
    if (policy_rule):
        tmp_policy_rule = policy_rule[:]

        for i in range(len(tmp_policy_rule)):
            # set default values for policy rules
            if tmp_policy_rule[i].get("direction") == None:
                tmp_policy_rule[i]["direction"] = "<>"
            if tmp_policy_rule[i].get("src_ports") == None:
                tmp_policy_rule[i]["src_ports"] = [{
                    "start_port": -1,
                    "end_port": -1
                }]
            if tmp_policy_rule[i].get("dst_ports") == None:
                tmp_policy_rule[i]["dst_ports"] = [{
                    "start_port": -1,
                    "end_port": -1
                }]

        js["network-policy"]["network_policy_entries"] = {
            "policy_rule": tmp_policy_rule
        }

    ## end: object specific

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#18
0
def run_module():
    module_args = dict(
        name=dict(type='str', required=True),
        controller_ip=dict(type='str', required=True),
        username=dict(type='str', required=False, default='admin'),
        password=dict(type='str', required=False, default='contrail123'),
        state=dict(type='str', required=False, default='present', choices=['absent', 'present']),
        uuid=dict(type='str', required=False),
        domain=dict(type='str', required=False, default='default-domain'),
        project=dict(type='str', required=False, default='default-project'),
        bgpaas_ip_address=dict(type='str', required=False),
        hold_time=dict(type='int', required=False, default=90),
        address_families=dict(type='list', required=False, default=['inet']),
        autonomous_system=dict(type='int', required=True),
        virtual_machine_interface_refs=dict(type='str', required=False)
    )
    result = dict(
        changed=False,
        message=''
    )

    module = AnsibleModule(
        argument_spec=module_args,
        supports_check_mode=True
    )

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    address_families = module.params.get("address_families")
    autonomous_system = module.params.get("autonomous_system")
    bgpaas_ip_address = module.params.get("bgpaas_ip_address")
    hold_time = module.params.get("hold_time")
    virtual_machine_interface_refs = module.params.get("virtual_machine_interface_refs")

    if module.check_mode:
        module.exit_json(**result)

    obj_type='bgp-as-a-service'

    (web_api, update, uuid, js) = login_and_check_id(module, name, obj_type, controller_ip, username, password, state, domain=domain, project=project)


    if update and state=='present':
      pass
    else:
      ## create payload and call API
      js=json.loads (
      '''
      { "bgp-as-a-service":
        {
          "fq_name": ["%s", "%s", "%s"],
          "parent_type": "project"
        }
      }
      ''' % (domain, project, name)
    )

    ## begin: object specific
    if autonomous_system:
      js ["bgp-as-a-service"]["autonomous_system"]=autonomous_system
    if bgpaas_ip_address:
      js ["bgp-as-a-service"]["bgpaas_ip_address"]=bgpaas_ip_address

    if js ["bgp-as-a-service"].get("bgpaas_session_attributes") == None:
      js ["bgp-as-a-service"]["bgpaas_session_attributes"]={}
      if address_families:
        js ["bgp-as-a-service"]["bgpaas_session_attributes"]["address_families"]={"family": address_families}
      if hold_time:
        js ["bgp-as-a-service"]["bgpaas_session_attributes"]["hold_time"]=hold_time
    ## end: object specific


    payload=json.dumps(js)

    failed = crud (web_api, controller_ip, update, state, result, payload=payload, obj_type=obj_type, uuid=uuid)


    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#19
0
def run_module():
    module_args = dict(name=dict(type='str', required=True),
                       controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       uuid=dict(type='str', required=False),
                       domain=dict(type='str',
                                   required=False,
                                   default='default-domain'),
                       project=dict(type='str',
                                    required=False,
                                    default='default-project'),
                       mgmt_virtual_network=dict(type='str', required=False),
                       left_virtual_network=dict(type='str', required=True),
                       right_virtual_network=dict(type='str', required=True),
                       left_interface_uuids=dict(type='list', required=False),
                       right_interface_uuids=dict(type='list', required=False),
                       service_template=dict(type='str', required=True))
    result = dict(changed=False, message='')

    required_if_args = [[
        "state", "present",
        ["left_virtual_network", "right_virtual_network", "service_template"]
    ]]

    module = AnsibleModule(argument_spec=module_args,
                           supports_check_mode=True,
                           required_if=required_if_args)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    mgmt_virtual_network = module.params.get("mgmt_virtual_network")
    left_virtual_network = module.params.get("left_virtual_network")
    right_virtual_network = module.params.get("right_virtual_network")
    left_interface_uuids = module.params.get("left_interface_uuids")
    right_interface_uuids = module.params.get("right_interface_uuids")
    service_template = module.params.get("service_template")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'service-instance'

    (web_api, update, uuid, js) = login_and_check_id(module,
                                                     name,
                                                     obj_type,
                                                     controller_ip,
                                                     username,
                                                     password,
                                                     state,
                                                     domain=domain,
                                                     project=project)

    if update and state == 'present':
        pass
    else:
        ## create payload and call API
        js = json.loads('''
      { "service-instance":
        {
          "fq_name": ["%s", "%s", "%s"],
          "parent_type": "project"
        }
      }
      ''' % (domain, project, name))

    ## begin: object specific
    config_api_url = 'http://' + controller_ip + ':8082/'

    failed = False
    userData = {}

    right_virtual_network_fqname = ":".join(
        (domain, project, right_virtual_network))
    left_virtual_network_fqname = ":".join(
        (domain, project, left_virtual_network))
    js["service-instance"]["service_instance_properties"] = {
        "interface_list": [{
            "virtual_network": left_virtual_network_fqname
        }, {
            "virtual_network": right_virtual_network_fqname
        }],
        "left_virtual_network":
        left_virtual_network_fqname,
        "right_virtual_network":
        right_virtual_network_fqname
    }
    js["service-instance"]["service_template_refs"] = [{
        "to": [domain, service_template]
    }]

    if mgmt_virtual_network:
        js["service-instance"]["service_instance_properties"][
            "interface_list"].append({"virtual_network": mgmt_virtual_network})

    if not update and left_interface_uuids:
        tmp_port_tuples = []
        for i in range(len(left_interface_uuids)):
            port_tuple_uuid = str(uuid_module.uuid4())
            tmp_port_tuples.append({
                "to": [
                    domain, project, name,
                    "port-tuple{}-{}".format(i, port_tuple_uuid)
                ],
                "vmis": [{
                    "fq_name": [domain, project, left_interface_uuids[i]],
                    "interfaceType": "left",
                    "uuid": left_interface_uuids[i]
                }, {
                    "fq_name": [domain, project, right_interface_uuids[i]],
                    "interfaceType": "right",
                    "uuid": right_interface_uuids[i]
                }]
            })
        js["service-instance"]["port_tuples"] = tmp_port_tuples

    if update:
        response = requests.get(config_api_url + 'service-instance/' + uuid,
                                headers=vnc_api_headers)
        if not response.status_code == 200:
            failed = True
            result["message"] = response.text
            module.fail_json(
                msg="cannot obtain service-instance object detail", **result)
        port_tuples = json.loads(
            response.text).get("service-instance").get("port_tuples")

        for i in range(len(port_tuples)):
            # href needs to be removed, to make webui update logic works ..
            del port_tuples[i]["href"]

            # get vmi uuids
            port_tuple_uuid = port_tuples[i].get("uuid")
            response = requests.get(config_api_url + 'port-tuple/' +
                                    port_tuple_uuid,
                                    headers=vnc_api_headers)
            if not response.status_code == 200:
                failed = True
                result["message"] = response.text
                module.fail_json(msg="cannot obtain port-tuple object detail",
                                 **result)
            vmi_back_refs = json.loads(response.text).get("port-tuple").get(
                "virtual_machine_interface_back_refs")
            vmis = []
            for vmi_back_ref in vmi_back_refs:
                vmi_uuid = vmi_back_ref.get("uuid")
                response = requests.get(
                    config_api_url + 'virtual-machine-interface/' + vmi_uuid,
                    headers=vnc_api_headers)
                if not response.status_code == 200:
                    failed = True
                    result["message"] = response.text
                    module.fail_json(msg="cannot obtain vmi object detail",
                                     **result)

                vmi_service_interface_type = json.loads(
                    response.text).get("virtual-machine-interface").get(
                        "virtual_machine_interface_properties").get(
                            "service_interface_type")
                vmi_fqname = json.loads(response.text).get(
                    "virtual-machine-interface").get("fq_name")

                vmis.append({
                    "uuid": vmi_uuid,
                    "interfaceType": vmi_service_interface_type,
                    "fq_name": vmi_fqname
                })
            port_tuples[i]["vmis"] = vmis

        if state == 'present':
            js["service-instance"]["port_tuples"] = port_tuples
        if state == 'absent':
            userData = {"port_tuples": port_tuples}

    ## end: object specific

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid,
                  userData=userData)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#20
0
def run_module():
    module_args = dict(
        name=dict(type='str', required=True),
        controller_ip=dict(type='str', required=True),
        username=dict(type='str', required=False, default='admin'),
        password=dict(type='str', required=False, default='contrail123'),
        state=dict(type='str', required=False, default='present', choices=['absent', 'present']),
        uuid=dict(type='str', required=False),
        domain=dict(type='str', required=False, default='default-domain'),
        project=dict(type='str', required=False, default='default-project'),
        virtual_network=dict(type='str', required=False),
        mac_address=dict(type='str', required=False),
        disable_policy=dict(type='bool', required=False),
        allowed_address_pair=dict(type='bool', required=False)
    )
    result = dict(
        changed=False,
        message=''
    )

    module = AnsibleModule(
        argument_spec=module_args,
        supports_check_mode=True
    )

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    virtual_network = module.params.get("virtual_network")
    uuid = module.params.get("uuid")
    mac_address = module.params.get("mac_address")
    allowed_address_pair = module.params.get("allowed_address_pair")
    disable_policy = module.params.get("disable_policy")

    if module.check_mode:
        module.exit_json(**result)

    obj_type='virtual-machine-interface'

    (web_api, update, uuid, js) = login_and_check_id(module, name, obj_type, controller_ip, username, password, state, domain=domain, project=project)


    config_api_url = 'http://' + controller_ip + ':8082/'

    if update and state == 'present':
      pass
    else:
      ## create payload and call API
      js=json.loads (
      '''
      { "virtual-machine-interface":
        {
          "fq_name": ["%s", "%s", "%s"],
          "parent_type": "project"
        }
      }
      ''' % (domain, project, name)
    )


    ## begin: object specific

    if not disable_policy == None:
      js["virtual-machine-interface"]["virtual_machine_interface_disable_policy"]=disable_policy

    if not update and mac_address:
      js["virtual-machine-interface"]["virtual_machine_interface_mac_addresses"]={"mac_address": [mac_address]}

    if not update and js["virtual-machine-interface"].get("virtual_network_refs") == None:
      vn_fqname = [domain, project, virtual_network]
      js["virtual-machine-interface"]["virtual_network_refs"]=[{"to": vn_fqname}]

    ##
    # virtual_machine_refs' attr and href need to be removed, to make webui logic work ..
    ##
    if not js["virtual-machine-interface"].get("virtual_machine_refs") == None:
      del js["virtual-machine-interface"]["virtual_machine_refs"][0]["attr"]
      del js["virtual-machine-interface"]["virtual_machine_refs"][0]["href"]


    ## end: object specific

    payload=json.dumps(js)


    failed = crud (web_api, controller_ip, update, state, result, payload=payload, obj_type=obj_type, uuid=uuid)


    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#21
0
def run_module():
    module_args = dict(name=dict(type='str', required=True),
                       controller_ip=dict(type='str', required=True),
                       username=dict(type='str',
                                     required=False,
                                     default='admin'),
                       password=dict(type='str',
                                     required=False,
                                     default='contrail123'),
                       state=dict(type='str',
                                  required=False,
                                  default='present',
                                  choices=['absent', 'present']),
                       uuid=dict(type='str', required=False),
                       domain=dict(type='str',
                                   required=False,
                                   default='default-domain'),
                       project=dict(type='str',
                                    required=False,
                                    default='default-project'))
    result = dict(changed=False, message='')

    module = AnsibleModule(argument_spec=module_args, supports_check_mode=True)

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")

    if module.check_mode:
        module.exit_json(**result)

    obj_type = 'host-based-service'

    (web_api, update, uuid, js) = login_and_check_id(module,
                                                     name,
                                                     obj_type,
                                                     controller_ip,
                                                     username,
                                                     password,
                                                     state,
                                                     domain=domain,
                                                     project=project)

    if update and state == 'present':
        pass
    else:
        ## create payload and call API
        js = json.loads('''
      { "host-based-service":
        {
          "fq_name": ["%s", "%s", "%s"],
          "parent_type": "project"
        }
      }
      ''' % (domain, project, name))

    ## begin: object specific
    ## end: object specific

    payload = json.dumps(js)

    failed = crud(web_api,
                  controller_ip,
                  update,
                  state,
                  result,
                  payload=payload,
                  obj_type=obj_type,
                  uuid=uuid)

    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)
示例#22
0
def run_module():
    module_args = dict(
        name=dict(type='str', required=True),
        controller_ip=dict(type='str', required=True),
        username=dict(type='str', required=False, default='admin'),
        password=dict(type='str', required=False, default='contrail123'),
        state=dict(type='str', required=False, default='present', choices=['absent', 'present']),
        domain=dict(type='str', required=False, default='default-domain'),
        project=dict(type='str', required=False, default='admin'),
        dict_device_role=dict(type='dict', required=False, default='root')
    )
    result = dict(
        changed=False,
        message=''
    )

    module = AnsibleModule(
        argument_spec=module_args,
        supports_check_mode=True
    )

    name = module.params.get("name")
    controller_ip = module.params.get("controller_ip")
    username = module.params.get("username")
    password = module.params.get("password")
    state = module.params.get("state")
    domain = module.params.get("domain")
    project = module.params.get("project")
    dict_device_role = module.params.get("dict_device_role")

    if module.check_mode:
        module.exit_json(**result)

    obj_type='fabric'

    (web_api, update, uuid, js) = login_and_check_id(module, name, obj_type, controller_ip, username, password, state, domain=domain, project=project)

    ## begin: object specific
    failed=False
    config_api_url = 'http://' + controller_ip + ':8082/'
    if update:
        role_assignment_list=[]
        for device_name in dict_device_role:
          role = dict_device_role[device_name]
          role_assignment_list.append ({"device_fq_name": ["default-global-system-config", device_name], "physical_role": role[0], "routing_bridging_roles": role[1]})
        job_input = {'fabric_fq_name': ["default-global-system-config", name],
                       'role_assignments': role_assignment_list
                    }
        payload = {'job_template_fq_name': ['default-global-system-config', 'role_assignment_template'], "input": job_input}
        response = requests.post(config_api_url + 'execute-job', data=json.dumps(payload), headers=vnc_api_headers)
        if not response.status_code == 200:
          failed = True
          result["message"] = response.text
        ## TODO: wait_for for this job
    else:
        result["message"]="fabric {} doesn't exist".format(name)
    ## end: object specific


    if failed:
        module.fail_json(msg='failure message', **result)

    module.exit_json(**result)