// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.kubernetes.core.v1.inputs;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.kubernetes.core.v1.inputs.ResourceClaimArgs;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


/**
 * ResourceRequirements describes the compute resource requirements.
 * 
 */
public final class ResourceRequirementsArgs extends com.pulumi.resources.ResourceArgs {

    public static final ResourceRequirementsArgs Empty = new ResourceRequirementsArgs();

    /**
     * Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.
     * 
     * This is an alpha field and requires enabling the DynamicResourceAllocation feature gate.
     * 
     * This field is immutable. It can only be set for containers.
     * 
     */
    @Import(name="claims")
    private @Nullable Output<List<ResourceClaimArgs>> claims;

    /**
     * @return Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.
     * 
     * This is an alpha field and requires enabling the DynamicResourceAllocation feature gate.
     * 
     * This field is immutable. It can only be set for containers.
     * 
     */
    public Optional<Output<List<ResourceClaimArgs>>> claims() {
        return Optional.ofNullable(this.claims);
    }

    /**
     * Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
     * 
     */
    @Import(name="limits")
    private @Nullable Output<Map<String,String>> limits;

    /**
     * @return Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
     * 
     */
    public Optional<Output<Map<String,String>>> limits() {
        return Optional.ofNullable(this.limits);
    }

    /**
     * Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
     * 
     */
    @Import(name="requests")
    private @Nullable Output<Map<String,String>> requests;

    /**
     * @return Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
     * 
     */
    public Optional<Output<Map<String,String>>> requests() {
        return Optional.ofNullable(this.requests);
    }

    private ResourceRequirementsArgs() {}

    private ResourceRequirementsArgs(ResourceRequirementsArgs $) {
        this.claims = $.claims;
        this.limits = $.limits;
        this.requests = $.requests;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(ResourceRequirementsArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private ResourceRequirementsArgs $;

        public Builder() {
            $ = new ResourceRequirementsArgs();
        }

        public Builder(ResourceRequirementsArgs defaults) {
            $ = new ResourceRequirementsArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param claims Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.
         * 
         * This is an alpha field and requires enabling the DynamicResourceAllocation feature gate.
         * 
         * This field is immutable. It can only be set for containers.
         * 
         * @return builder
         * 
         */
        public Builder claims(@Nullable Output<List<ResourceClaimArgs>> claims) {
            $.claims = claims;
            return this;
        }

        /**
         * @param claims Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.
         * 
         * This is an alpha field and requires enabling the DynamicResourceAllocation feature gate.
         * 
         * This field is immutable. It can only be set for containers.
         * 
         * @return builder
         * 
         */
        public Builder claims(List<ResourceClaimArgs> claims) {
            return claims(Output.of(claims));
        }

        /**
         * @param claims Claims lists the names of resources, defined in spec.resourceClaims, that are used by this container.
         * 
         * This is an alpha field and requires enabling the DynamicResourceAllocation feature gate.
         * 
         * This field is immutable. It can only be set for containers.
         * 
         * @return builder
         * 
         */
        public Builder claims(ResourceClaimArgs... claims) {
            return claims(List.of(claims));
        }

        /**
         * @param limits Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
         * 
         * @return builder
         * 
         */
        public Builder limits(@Nullable Output<Map<String,String>> limits) {
            $.limits = limits;
            return this;
        }

        /**
         * @param limits Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
         * 
         * @return builder
         * 
         */
        public Builder limits(Map<String,String> limits) {
            return limits(Output.of(limits));
        }

        /**
         * @param requests Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
         * 
         * @return builder
         * 
         */
        public Builder requests(@Nullable Output<Map<String,String>> requests) {
            $.requests = requests;
            return this;
        }

        /**
         * @param requests Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. Requests cannot exceed Limits. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
         * 
         * @return builder
         * 
         */
        public Builder requests(Map<String,String> requests) {
            return requests(Output.of(requests));
        }

        public ResourceRequirementsArgs build() {
            return $;
        }
    }

}
