コード例 #1
0
def attach_vnic(compute_client, module):
    avd = AttachVnicDetails()
    avd.display_name = module.params.get("display_name", None)
    avd.instance_id = module.params.get("instance_id")
    avd.create_vnic_details = get_vnic_details(module)
    avd.nic_index = module.params.get("nic_index", None)

    result = oci_utils.create_and_wait(
        resource_type=RESOURCE_NAME,
        client=compute_client,
        create_fn=compute_client.attach_vnic,
        kwargs_create={"attach_vnic_details": avd},
        get_fn=compute_client.get_vnic_attachment,
        get_param="vnic_attachment_id",
        module=module)
    return result
コード例 #2
0
def main():
    my_logger = oci_utils.get_logger("oci_instance")
    set_logger(my_logger)

    module_args = oci_utils.get_common_arg_spec(supports_wait=True)
    module_args.update(
        dict(
            display_name=dict(type="str", required=False, aliases=["name"]),
            instance_id=dict(type="str", required=False),
            vnic_attachment_id=dict(type="str", required=False, aliases=["id"]),
            nic_index=dict(type="int", required=False, default=0),
            create_vnic_details=dict(type="dict", required=False, aliases=["vnic"]),
            state=dict(
                type="str",
                required=False,
                default="present",
                choices=["present", "absent"],
            ),
        )
    )

    module = AnsibleModule(
        argument_spec=module_args,
        supports_check_mode=False,
        mutually_exclusive=["id", "create_vnic_details"],
        required_if=[("state", "absent", ["vnic_attachment_id"])],
    )

    if not HAS_OCI_PY_SDK:
        module.fail_json(msg="oci python sdk required for this module.")

    compute_client = oci_utils.create_service_client(module, ComputeClient)

    state = module.params["state"]

    result = dict(changed=False)

    vna_id = module.params["vnic_attachment_id"]
    debug("VNIC attachment Id provided by user is " + str(vna_id))

    try:
        if vna_id is not None:
            vna = oci_utils.get_existing_resource(
                compute_client.get_vnic_attachment, module, vnic_attachment_id=vna_id
            )

            if state == "absent":
                if vna is not None:
                    debug("Deleting " + vna.id)
                    result = oci_utils.delete_and_wait(
                        resource_type=RESOURCE_NAME,
                        client=compute_client,
                        get_fn=compute_client.get_vnic_attachment,
                        kwargs_get={"vnic_attachment_id": vna_id},
                        delete_fn=compute_client.detach_vnic,
                        kwargs_delete={"vnic_attachment_id": vna_id},
                        module=module,
                        wait_applicable=True,
                    )
                else:
                    debug(
                        "VNIC attachment "
                        + vna_id
                        + " already detached. So returning changed=False."
                    )
            else:
                module.fail_json("To delete a VNIC attachment, set state=absent")
        else:
            # Create a secondary VNIC and attach it to an instance
            instance_id = module.params.get("instance_id")
            exclude_attributes = {"display_name": True}
            default_attribute_values = {"nic_index": 0}
            compartment_id = compute_client.get_instance(
                instance_id=instance_id
            ).data.compartment_id
            result = oci_utils.check_and_create_resource(
                resource_type=RESOURCE_NAME,
                create_fn=attach_vnic,
                kwargs_create={"compute_client": compute_client, "module": module},
                list_fn=compute_client.list_vnic_attachments,
                kwargs_list={
                    "compartment_id": compartment_id,
                    "instance_id": instance_id,
                },
                module=module,
                model=AttachVnicDetails(),
                exclude_attributes=exclude_attributes,
                default_attribute_values=default_attribute_values,
            )
    except ServiceError as ex:
        module.fail_json(msg=ex.message)
    except MaximumWaitTimeExceeded as mwte:
        module.fail_json(msg=str(mwte))

    module.exit_json(**result)