def create_node_pool(container_engine_client, module):
    create_node_pool_details = CreateNodePoolDetails()
    for attribute in create_node_pool_details.attribute_map.keys():
        if attribute in module.params:
            setattr(create_node_pool_details, attribute,
                    module.params[attribute])

    node_labels = module.params['initial_node_labels']
    if node_labels:
        initial_node_labels = []
        for d in node_labels:
            keyvalue = KeyValue()
            if d.get("key", None) and d.get("value", None):
                keyvalue.key = d.get("key")
                keyvalue.value = d.get("value")
                initial_node_labels.append(keyvalue)
        create_node_pool_details.initial_node_labels = initial_node_labels

    result = oci_ce_utils.create_and_wait(
        resource_type="node_pool",
        create_fn=container_engine_client.create_node_pool,
        kwargs_create={"create_node_pool_details": create_node_pool_details},
        client=container_engine_client,
        get_fn=container_engine_client.get_node_pool,
        get_param="node_pool_id",
        module=module)
    return result
def create_node_pool(container_engine_client, module):
    create_node_pool_details = CreateNodePoolDetails()
    for attribute in create_node_pool_details.attribute_map.keys():
        if attribute in module.params:
            setattr(create_node_pool_details, attribute,
                    module.params[attribute])

    node_labels = module.params["initial_node_labels"]
    if node_labels:
        initial_node_labels = []
        for d in node_labels:
            keyvalue = KeyValue()
            if d.get("key", None) and d.get("value", None):
                keyvalue.key = d.get("key")
                keyvalue.value = d.get("value")
                initial_node_labels.append(keyvalue)
        create_node_pool_details.initial_node_labels = initial_node_labels
    # Note: `wait` is "True" by default for `oci_node_pool`, unlike other resources because a node pool is only useful
    # if atleast one node in the node pool reaches ACTIVE state (Installation of Helm components are delayed until a
    # node is available).
    result = oci_ce_utils.create_and_wait(
        resource_type="node_pool",
        create_fn=container_engine_client.create_node_pool,
        kwargs_create={"create_node_pool_details": create_node_pool_details},
        client=container_engine_client,
        get_fn=container_engine_client.get_node_pool,
        get_param="node_pool_id",
        module=module,
    )
    return result
Example #3
0
def main():
    module_args = oci_utils.get_common_arg_spec(supports_create=True,
                                                supports_wait=True)
    module_args.update(
        dict(compartment_id=dict(type='str', required=False),
             node_pool_id=dict(type='str', required=False, aliases=['id']),
             cluster_id=dict(type='str', required=False),
             kubernetes_version=dict(type='str', required=False),
             name=dict(type='str', required=False),
             initial_node_labels=dict(type=list, required=False),
             subnet_ids=dict(type=list, required=False),
             state=dict(type='str',
                        required=False,
                        default='present',
                        choices=['absent', 'present']),
             node_image_name=dict(type='str', required=False),
             node_shape=dict(type='str', required=False),
             quantity_per_subnet=dict(type='int', required=False),
             ssh_public_key=dict(type='str', required=False),
             count_of_nodes_to_wait=dict(type=int, required=False, default=1),
             wait_until=dict(type='str', required=False, default="ACTIVE")))

    module = AnsibleModule(argument_spec=module_args,
                           supports_check_mode=False,
                           required_if=[('state', 'absent', ['node_pool_id'])])

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

    container_engine_client = oci_utils.create_service_client(
        module, ContainerEngineClient)

    state = module.params['state']
    node_pool_id = module.params['node_pool_id']

    if state == 'absent':
        result = delete_node_pool(container_engine_client, module)

    else:
        if node_pool_id is not None:
            result = update_node_pool(container_engine_client, module)
        else:
            kwargs_list = {'compartment_id': module.params['compartment_id']}
            exclude_attributes = {'name': True}
            result = oci_utils.check_and_create_resource(
                resource_type='node_pool',
                create_fn=create_node_pool,
                kwargs_create={
                    'container_engine_client': container_engine_client,
                    'module': module
                },
                list_fn=container_engine_client.list_node_pools,
                kwargs_list=kwargs_list,
                module=module,
                model=CreateNodePoolDetails(),
                exclude_attributes=exclude_attributes)
    module.exit_json(**result)
Example #4
0
def main():
    module_args = oci_utils.get_common_arg_spec(supports_create=True,
                                                supports_wait=True)
    module_args.update(
        dict(
            compartment_id=dict(type="str", required=False),
            node_pool_id=dict(type="str", required=False, aliases=["id"]),
            cluster_id=dict(type="str", required=False),
            kubernetes_version=dict(type="str", required=False),
            name=dict(type="str", required=False),
            initial_node_labels=dict(type=list, required=False),
            subnet_ids=dict(type=list, required=False),
            node_config_details=dict(
                type="dict",
                options=dict(
                    size=dict(type="int"),
                    placement_configs=dict(
                        type="list",
                        elements="dict",
                        options=dict(
                            availability_domain=dict(type="str",
                                                     required=True),
                            subnet_id=dict(type="str", required=True),
                        ),
                    ),
                ),
                required=False,
            ),
            state=dict(
                type="str",
                required=False,
                default="present",
                choices=["absent", "present"],
            ),
            node_image_name=dict(type="str", required=False),
            node_shape=dict(type="str", required=False),
            quantity_per_subnet=dict(type="int", required=False),
            ssh_public_key=dict(type="str", required=False),
            count_of_nodes_to_wait=dict(type=int, required=False, default=1),
            wait_until=dict(type="str", required=False, default="ACTIVE"),
        ))

    module = AnsibleModule(
        argument_spec=module_args,
        supports_check_mode=False,
        required_if=[("state", "absent", ["node_pool_id"])],
    )

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

    container_engine_client = oci_utils.create_service_client(
        module, ContainerEngineClient)

    state = module.params["state"]
    node_pool_id = module.params["node_pool_id"]

    if state == "absent":
        result = delete_node_pool(container_engine_client, module)

    else:
        if node_pool_id is not None:
            result = update_node_pool(container_engine_client, module)
        else:
            kwargs_list = {"compartment_id": module.params["compartment_id"]}
            exclude_attributes = {"name": True}
            result = oci_utils.check_and_create_resource(
                resource_type="node_pool",
                create_fn=create_node_pool,
                kwargs_create={
                    "container_engine_client": container_engine_client,
                    "module": module,
                },
                list_fn=container_engine_client.list_node_pools,
                kwargs_list=kwargs_list,
                module=module,
                model=CreateNodePoolDetails(),
                exclude_attributes=exclude_attributes,
            )
    module.exit_json(**result)
Example #5
0
def prepare_create_node_pool_details(**kwargs):
    # Discover the image_id if the name is provided
    create_node_pool_details = {
        k: v for k, v in kwargs.items() if hasattr(CreateNodePoolDetails, k)
    }
    return CreateNodePoolDetails(**create_node_pool_details)