// *** 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.eks;

import com.pulumi.aws.cloudformation.Stack;
import com.pulumi.aws.ec2.SecurityGroup;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Export;
import com.pulumi.core.annotations.ResourceType;
import com.pulumi.core.internal.Codegen;
import com.pulumi.eks.NodeGroupArgs;
import com.pulumi.eks.Utilities;
import java.lang.String;
import java.util.List;
import javax.annotation.Nullable;

/**
 * NodeGroup is a component that wraps the AWS EC2 instances that provide compute capacity for an EKS cluster.
 * 
 */
@ResourceType(type="eks:index:NodeGroup")
public class NodeGroup extends com.pulumi.resources.ComponentResource {
    /**
     * The AutoScalingGroup name for the Node group.
     * 
     */
    @Export(name="autoScalingGroupName", refs={String.class}, tree="[0]")
    private Output<String> autoScalingGroupName;

    /**
     * @return The AutoScalingGroup name for the Node group.
     * 
     */
    public Output<String> autoScalingGroupName() {
        return this.autoScalingGroupName;
    }
    /**
     * The CloudFormation Stack which defines the Node AutoScalingGroup.
     * 
     */
    @Export(name="cfnStack", refs={Stack.class}, tree="[0]")
    private Output<Stack> cfnStack;

    /**
     * @return The CloudFormation Stack which defines the Node AutoScalingGroup.
     * 
     */
    public Output<Stack> cfnStack() {
        return this.cfnStack;
    }
    /**
     * The additional security groups for the node group that captures user-specific rules.
     * 
     */
    @Export(name="extraNodeSecurityGroups", refs={List.class,SecurityGroup.class}, tree="[0,1]")
    private Output<List<SecurityGroup>> extraNodeSecurityGroups;

    /**
     * @return The additional security groups for the node group that captures user-specific rules.
     * 
     */
    public Output<List<SecurityGroup>> extraNodeSecurityGroups() {
        return this.extraNodeSecurityGroups;
    }
    /**
     * The security group for the node group to communicate with the cluster.
     * 
     */
    @Export(name="nodeSecurityGroup", refs={SecurityGroup.class}, tree="[0]")
    private Output<SecurityGroup> nodeSecurityGroup;

    /**
     * @return The security group for the node group to communicate with the cluster.
     * 
     */
    public Output<SecurityGroup> nodeSecurityGroup() {
        return this.nodeSecurityGroup;
    }

    /**
     *
     * @param name The _unique_ name of the resulting resource.
     */
    public NodeGroup(String name) {
        this(name, NodeGroupArgs.Empty);
    }
    /**
     *
     * @param name The _unique_ name of the resulting resource.
     * @param args The arguments to use to populate this resource's properties.
     */
    public NodeGroup(String name, NodeGroupArgs args) {
        this(name, args, null);
    }
    /**
     *
     * @param name The _unique_ name of the resulting resource.
     * @param args The arguments to use to populate this resource's properties.
     * @param options A bag of options that control this resource's behavior.
     */
    public NodeGroup(String name, NodeGroupArgs args, @Nullable com.pulumi.resources.ComponentResourceOptions options) {
        super("eks:index:NodeGroup", name, args == null ? NodeGroupArgs.Empty : args, makeResourceOptions(options, Codegen.empty()), true);
    }

    private static com.pulumi.resources.ComponentResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.ComponentResourceOptions options, @Nullable Output<String> id) {
        var defaultOptions = com.pulumi.resources.ComponentResourceOptions.builder()
            .version(Utilities.getVersion())
            .build();
        return com.pulumi.resources.ComponentResourceOptions.merge(defaultOptions, options, id);
    }

}
