github.com/pulumi/pulumi-aws/sdk/v6@v6.32.0/go/aws/networkmanager/coreNetworkPolicyAttachment.go (about)

     1  // Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT.
     2  // *** WARNING: Do not edit by hand unless you're certain you know what you are doing! ***
     3  
     4  package networkmanager
     5  
     6  import (
     7  	"context"
     8  	"reflect"
     9  
    10  	"errors"
    11  	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/internal"
    12  	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    13  )
    14  
    15  // Provides a Core Network Policy Attachment resource. This puts a Core Network Policy to an existing Core Network and executes the change set, which deploys changes globally based on the policy submitted (Sets the policy to `LIVE`).
    16  //
    17  // > **NOTE:** Deleting this resource will not delete the current policy defined in this resource. Deleting this resource will also not revert the current `LIVE` policy to the previous version.
    18  //
    19  // ## Example Usage
    20  //
    21  // ### Basic
    22  //
    23  // <!--Start PulumiCodeChooser -->
    24  // ```go
    25  // package main
    26  //
    27  // import (
    28  //
    29  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/networkmanager"
    30  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    31  //
    32  // )
    33  //
    34  //	func main() {
    35  //		pulumi.Run(func(ctx *pulumi.Context) error {
    36  //			example, err := networkmanager.NewCoreNetwork(ctx, "example", &networkmanager.CoreNetworkArgs{
    37  //				GlobalNetworkId: pulumi.Any(exampleAwsNetworkmanagerGlobalNetwork.Id),
    38  //			})
    39  //			if err != nil {
    40  //				return err
    41  //			}
    42  //			_, err = networkmanager.NewCoreNetworkPolicyAttachment(ctx, "example", &networkmanager.CoreNetworkPolicyAttachmentArgs{
    43  //				CoreNetworkId:  example.ID(),
    44  //				PolicyDocument: pulumi.Any(exampleAwsNetworkmanagerCoreNetworkPolicyDocument.Json),
    45  //			})
    46  //			if err != nil {
    47  //				return err
    48  //			}
    49  //			return nil
    50  //		})
    51  //	}
    52  //
    53  // ```
    54  // <!--End PulumiCodeChooser -->
    55  //
    56  // ### With VPC Attachment (Single Region)
    57  //
    58  // The example below illustrates the scenario where your policy document has static routes pointing to VPC attachments and you want to attach your VPCs to the core network before applying the desired policy document. Set the `createBasePolicy` argument of the `networkmanager.CoreNetwork` resource to `true` if your core network does not currently have any `LIVE` policies (e.g. this is the first `pulumi up` with the core network resource), since a `LIVE` policy is required before VPCs can be attached to the core network. Otherwise, if your core network already has a `LIVE` policy, you may exclude the `createBasePolicy` argument. There are 2 options to implement this:
    59  //
    60  // - Option 1: Use the `basePolicyDocument` argument in the `networkmanager.CoreNetwork` resource that allows the most customizations to a base policy. Use this to customize the `edgeLocations` `asn`. In the example below, `us-west-2` and ASN `65500` are used in the base policy.
    61  // - Option 2: Use the `createBasePolicy` argument only. This creates a base policy in the region specified in the `provider` block.
    62  //
    63  // ### Option 1 - using basePolicyDocument
    64  //
    65  // <!--Start PulumiCodeChooser -->
    66  // ```go
    67  // package main
    68  //
    69  // import (
    70  //
    71  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/networkmanager"
    72  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    73  //
    74  // )
    75  // func main() {
    76  // pulumi.Run(func(ctx *pulumi.Context) error {
    77  // exampleGlobalNetwork, err := networkmanager.NewGlobalNetwork(ctx, "example", nil)
    78  // if err != nil {
    79  // return err
    80  // }
    81  // base, err := networkmanager.GetCoreNetworkPolicyDocument(ctx, &networkmanager.GetCoreNetworkPolicyDocumentArgs{
    82  // CoreNetworkConfigurations: []networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfiguration{
    83  // {
    84  // AsnRanges: []string{
    85  // "65022-65534",
    86  // },
    87  // EdgeLocations: []networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationEdgeLocation{
    88  // {
    89  // Location: "us-west-2",
    90  // Asn: pulumi.StringRef("65500"),
    91  // },
    92  // },
    93  // },
    94  // },
    95  // Segments: []networkmanager.GetCoreNetworkPolicyDocumentSegment{
    96  // {
    97  // Name: "segment",
    98  // },
    99  // },
   100  // }, nil);
   101  // if err != nil {
   102  // return err
   103  // }
   104  // exampleCoreNetwork, err := networkmanager.NewCoreNetwork(ctx, "example", &networkmanager.CoreNetworkArgs{
   105  // GlobalNetworkId: exampleGlobalNetwork.ID(),
   106  // BasePolicyDocument: pulumi.String(base.Json),
   107  // CreateBasePolicy: pulumi.Bool(true),
   108  // })
   109  // if err != nil {
   110  // return err
   111  // }
   112  // var splat0 []interface{}
   113  // for _, val0 := range exampleAwsSubnet {
   114  // splat0 = append(splat0, val0.Arn)
   115  // }
   116  // exampleVpcAttachment, err := networkmanager.NewVpcAttachment(ctx, "example", &networkmanager.VpcAttachmentArgs{
   117  // CoreNetworkId: exampleCoreNetwork.ID(),
   118  // SubnetArns: toPulumiArray(splat0),
   119  // VpcArn: pulumi.Any(exampleAwsVpc.Arn),
   120  // })
   121  // if err != nil {
   122  // return err
   123  // }
   124  // example := networkmanager.GetCoreNetworkPolicyDocumentOutput(ctx, networkmanager.GetCoreNetworkPolicyDocumentOutputArgs{
   125  // CoreNetworkConfigurations: networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationArray{
   126  // &networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationArgs{
   127  // AsnRanges: pulumi.StringArray{
   128  // pulumi.String("65022-65534"),
   129  // },
   130  // EdgeLocations: networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationEdgeLocationArray{
   131  // &networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationEdgeLocationArgs{
   132  // Location: pulumi.String("us-west-2"),
   133  // Asn: pulumi.String("65500"),
   134  // },
   135  // },
   136  // },
   137  // },
   138  // Segments: networkmanager.GetCoreNetworkPolicyDocumentSegmentArray{
   139  // &networkmanager.GetCoreNetworkPolicyDocumentSegmentArgs{
   140  // Name: pulumi.String("segment"),
   141  // },
   142  // },
   143  // SegmentActions: networkmanager.GetCoreNetworkPolicyDocumentSegmentActionArray{
   144  // &networkmanager.GetCoreNetworkPolicyDocumentSegmentActionArgs{
   145  // Action: pulumi.String("create-route"),
   146  // Segment: pulumi.String("segment"),
   147  // DestinationCidrBlocks: pulumi.StringArray{
   148  // pulumi.String("0.0.0.0/0"),
   149  // },
   150  // Destinations: pulumi.StringArray{
   151  // exampleVpcAttachment.ID(),
   152  // },
   153  // },
   154  // },
   155  // }, nil);
   156  // _, err = networkmanager.NewCoreNetworkPolicyAttachment(ctx, "example", &networkmanager.CoreNetworkPolicyAttachmentArgs{
   157  // CoreNetworkId: exampleCoreNetwork.ID(),
   158  // PolicyDocument: example.ApplyT(func(example networkmanager.GetCoreNetworkPolicyDocumentResult) (*string, error) {
   159  // return &example.Json, nil
   160  // }).(pulumi.StringPtrOutput),
   161  // })
   162  // if err != nil {
   163  // return err
   164  // }
   165  // return nil
   166  // })
   167  // }
   168  // func toPulumiArray(arr []) pulumi.Array {
   169  // var pulumiArr pulumi.Array
   170  // for _, v := range arr {
   171  // pulumiArr = append(pulumiArr, pulumi.(v))
   172  // }
   173  // return pulumiArr
   174  // }
   175  // ```
   176  // <!--End PulumiCodeChooser -->
   177  //
   178  // ### Option 2 - createBasePolicy only
   179  //
   180  // <!--Start PulumiCodeChooser -->
   181  // ```go
   182  // package main
   183  //
   184  // import (
   185  //
   186  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/networkmanager"
   187  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   188  //
   189  // )
   190  // func main() {
   191  // pulumi.Run(func(ctx *pulumi.Context) error {
   192  // exampleGlobalNetwork, err := networkmanager.NewGlobalNetwork(ctx, "example", nil)
   193  // if err != nil {
   194  // return err
   195  // }
   196  // exampleCoreNetwork, err := networkmanager.NewCoreNetwork(ctx, "example", &networkmanager.CoreNetworkArgs{
   197  // GlobalNetworkId: exampleGlobalNetwork.ID(),
   198  // CreateBasePolicy: pulumi.Bool(true),
   199  // })
   200  // if err != nil {
   201  // return err
   202  // }
   203  // var splat0 []interface{}
   204  // for _, val0 := range exampleAwsSubnet {
   205  // splat0 = append(splat0, val0.Arn)
   206  // }
   207  // exampleVpcAttachment, err := networkmanager.NewVpcAttachment(ctx, "example", &networkmanager.VpcAttachmentArgs{
   208  // CoreNetworkId: exampleCoreNetwork.ID(),
   209  // SubnetArns: toPulumiArray(splat0),
   210  // VpcArn: pulumi.Any(exampleAwsVpc.Arn),
   211  // })
   212  // if err != nil {
   213  // return err
   214  // }
   215  // example := networkmanager.GetCoreNetworkPolicyDocumentOutput(ctx, networkmanager.GetCoreNetworkPolicyDocumentOutputArgs{
   216  // CoreNetworkConfigurations: networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationArray{
   217  // &networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationArgs{
   218  // AsnRanges: pulumi.StringArray{
   219  // pulumi.String("65022-65534"),
   220  // },
   221  // EdgeLocations: networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationEdgeLocationArray{
   222  // &networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationEdgeLocationArgs{
   223  // Location: pulumi.String("us-west-2"),
   224  // },
   225  // },
   226  // },
   227  // },
   228  // Segments: networkmanager.GetCoreNetworkPolicyDocumentSegmentArray{
   229  // &networkmanager.GetCoreNetworkPolicyDocumentSegmentArgs{
   230  // Name: pulumi.String("segment"),
   231  // },
   232  // },
   233  // SegmentActions: networkmanager.GetCoreNetworkPolicyDocumentSegmentActionArray{
   234  // &networkmanager.GetCoreNetworkPolicyDocumentSegmentActionArgs{
   235  // Action: pulumi.String("create-route"),
   236  // Segment: pulumi.String("segment"),
   237  // DestinationCidrBlocks: pulumi.StringArray{
   238  // pulumi.String("0.0.0.0/0"),
   239  // },
   240  // Destinations: pulumi.StringArray{
   241  // exampleVpcAttachment.ID(),
   242  // },
   243  // },
   244  // },
   245  // }, nil);
   246  // _, err = networkmanager.NewCoreNetworkPolicyAttachment(ctx, "example", &networkmanager.CoreNetworkPolicyAttachmentArgs{
   247  // CoreNetworkId: exampleCoreNetwork.ID(),
   248  // PolicyDocument: example.ApplyT(func(example networkmanager.GetCoreNetworkPolicyDocumentResult) (*string, error) {
   249  // return &example.Json, nil
   250  // }).(pulumi.StringPtrOutput),
   251  // })
   252  // if err != nil {
   253  // return err
   254  // }
   255  // return nil
   256  // })
   257  // }
   258  // func toPulumiArray(arr []) pulumi.Array {
   259  // var pulumiArr pulumi.Array
   260  // for _, v := range arr {
   261  // pulumiArr = append(pulumiArr, pulumi.(v))
   262  // }
   263  // return pulumiArr
   264  // }
   265  // ```
   266  // <!--End PulumiCodeChooser -->
   267  //
   268  // ### With VPC Attachment (Multi-Region)
   269  //
   270  // The example below illustrates the scenario where your policy document has static routes pointing to VPC attachments and you want to attach your VPCs to the core network before applying the desired policy document. Set the `createBasePolicy` argument of the `networkmanager.CoreNetwork` resource to `true` if your core network does not currently have any `LIVE` policies (e.g. this is the first `pulumi up` with the core network resource), since a `LIVE` policy is required before VPCs can be attached to the core network. Otherwise, if your core network already has a `LIVE` policy, you may exclude the `createBasePolicy` argument. For multi-region in a core network that does not yet have a `LIVE` policy, there are 2 options:
   271  //
   272  // - Option 1: Use the `basePolicyDocument` argument that allows the most customizations to a base policy. Use this to customize the `edgeLocations` `asn`. In the example below, `us-west-2`, `us-east-1` and specific ASNs are used in the base policy.
   273  // - Option 2: Pass a list of regions to the `networkmanager.CoreNetwork` resource `basePolicyRegions` argument. In the example below, `us-west-2` and `us-east-1` are specified in the base policy.
   274  //
   275  // ### Option 1 - using basePolicyDocument
   276  //
   277  // <!--Start PulumiCodeChooser -->
   278  // ```go
   279  // package main
   280  //
   281  // import (
   282  //
   283  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/networkmanager"
   284  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   285  //
   286  // )
   287  // func main() {
   288  // pulumi.Run(func(ctx *pulumi.Context) error {
   289  // exampleGlobalNetwork, err := networkmanager.NewGlobalNetwork(ctx, "example", nil)
   290  // if err != nil {
   291  // return err
   292  // }
   293  // base, err := networkmanager.GetCoreNetworkPolicyDocument(ctx, &networkmanager.GetCoreNetworkPolicyDocumentArgs{
   294  // CoreNetworkConfigurations: []networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfiguration{
   295  // {
   296  // AsnRanges: []string{
   297  // "65022-65534",
   298  // },
   299  // EdgeLocations: []networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationEdgeLocation{
   300  // {
   301  // Location: "us-west-2",
   302  // Asn: pulumi.StringRef("65500"),
   303  // },
   304  // {
   305  // Location: "us-east-1",
   306  // Asn: pulumi.StringRef("65501"),
   307  // },
   308  // },
   309  // },
   310  // },
   311  // Segments: []networkmanager.GetCoreNetworkPolicyDocumentSegment{
   312  // {
   313  // Name: "segment",
   314  // },
   315  // },
   316  // }, nil);
   317  // if err != nil {
   318  // return err
   319  // }
   320  // exampleCoreNetwork, err := networkmanager.NewCoreNetwork(ctx, "example", &networkmanager.CoreNetworkArgs{
   321  // GlobalNetworkId: exampleGlobalNetwork.ID(),
   322  // BasePolicyDocument: pulumi.String(base.Json),
   323  // CreateBasePolicy: pulumi.Bool(true),
   324  // })
   325  // if err != nil {
   326  // return err
   327  // }
   328  // var splat0 []interface{}
   329  // for _, val0 := range exampleUsWest2AwsSubnet {
   330  // splat0 = append(splat0, val0.Arn)
   331  // }
   332  // exampleUsWest2, err := networkmanager.NewVpcAttachment(ctx, "example_us_west_2", &networkmanager.VpcAttachmentArgs{
   333  // CoreNetworkId: exampleCoreNetwork.ID(),
   334  // SubnetArns: toPulumiArray(splat0),
   335  // VpcArn: pulumi.Any(exampleUsWest2AwsVpc.Arn),
   336  // })
   337  // if err != nil {
   338  // return err
   339  // }
   340  // var splat1 []interface{}
   341  // for _, val0 := range exampleUsEast1AwsSubnet {
   342  // splat1 = append(splat1, val0.Arn)
   343  // }
   344  // exampleUsEast1, err := networkmanager.NewVpcAttachment(ctx, "example_us_east_1", &networkmanager.VpcAttachmentArgs{
   345  // CoreNetworkId: exampleCoreNetwork.ID(),
   346  // SubnetArns: toPulumiArray(splat1),
   347  // VpcArn: pulumi.Any(exampleUsEast1AwsVpc.Arn),
   348  // })
   349  // if err != nil {
   350  // return err
   351  // }
   352  // example := networkmanager.GetCoreNetworkPolicyDocumentOutput(ctx, networkmanager.GetCoreNetworkPolicyDocumentOutputArgs{
   353  // CoreNetworkConfigurations: networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationArray{
   354  // &networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationArgs{
   355  // AsnRanges: pulumi.StringArray{
   356  // pulumi.String("65022-65534"),
   357  // },
   358  // EdgeLocations: networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationEdgeLocationArray{
   359  // &networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationEdgeLocationArgs{
   360  // Location: pulumi.String("us-west-2"),
   361  // Asn: pulumi.String("65500"),
   362  // },
   363  // &networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationEdgeLocationArgs{
   364  // Location: pulumi.String("us-east-1"),
   365  // Asn: pulumi.String("65501"),
   366  // },
   367  // },
   368  // },
   369  // },
   370  // Segments: networkmanager.GetCoreNetworkPolicyDocumentSegmentArray{
   371  // &networkmanager.GetCoreNetworkPolicyDocumentSegmentArgs{
   372  // Name: pulumi.String("segment"),
   373  // },
   374  // &networkmanager.GetCoreNetworkPolicyDocumentSegmentArgs{
   375  // Name: pulumi.String("segment2"),
   376  // },
   377  // },
   378  // SegmentActions: networkmanager.GetCoreNetworkPolicyDocumentSegmentActionArray{
   379  // &networkmanager.GetCoreNetworkPolicyDocumentSegmentActionArgs{
   380  // Action: pulumi.String("create-route"),
   381  // Segment: pulumi.String("segment"),
   382  // DestinationCidrBlocks: pulumi.StringArray{
   383  // pulumi.String("10.0.0.0/16"),
   384  // },
   385  // Destinations: pulumi.StringArray{
   386  // exampleUsWest2.ID(),
   387  // },
   388  // },
   389  // &networkmanager.GetCoreNetworkPolicyDocumentSegmentActionArgs{
   390  // Action: pulumi.String("create-route"),
   391  // Segment: pulumi.String("segment"),
   392  // DestinationCidrBlocks: pulumi.StringArray{
   393  // pulumi.String("10.1.0.0/16"),
   394  // },
   395  // Destinations: pulumi.StringArray{
   396  // exampleUsEast1.ID(),
   397  // },
   398  // },
   399  // },
   400  // }, nil);
   401  // _, err = networkmanager.NewCoreNetworkPolicyAttachment(ctx, "example", &networkmanager.CoreNetworkPolicyAttachmentArgs{
   402  // CoreNetworkId: exampleCoreNetwork.ID(),
   403  // PolicyDocument: example.ApplyT(func(example networkmanager.GetCoreNetworkPolicyDocumentResult) (*string, error) {
   404  // return &example.Json, nil
   405  // }).(pulumi.StringPtrOutput),
   406  // })
   407  // if err != nil {
   408  // return err
   409  // }
   410  // return nil
   411  // })
   412  // }
   413  // func toPulumiArray(arr []) pulumi.Array {
   414  // var pulumiArr pulumi.Array
   415  // for _, v := range arr {
   416  // pulumiArr = append(pulumiArr, pulumi.(v))
   417  // }
   418  // return pulumiArr
   419  // }
   420  // ```
   421  // <!--End PulumiCodeChooser -->
   422  //
   423  // ### Option 2 - using basePolicyRegions
   424  //
   425  // <!--Start PulumiCodeChooser -->
   426  // ```go
   427  // package main
   428  //
   429  // import (
   430  //
   431  //	"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/networkmanager"
   432  //	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
   433  //
   434  // )
   435  // func main() {
   436  // pulumi.Run(func(ctx *pulumi.Context) error {
   437  // exampleGlobalNetwork, err := networkmanager.NewGlobalNetwork(ctx, "example", nil)
   438  // if err != nil {
   439  // return err
   440  // }
   441  // exampleCoreNetwork, err := networkmanager.NewCoreNetwork(ctx, "example", &networkmanager.CoreNetworkArgs{
   442  // GlobalNetworkId: exampleGlobalNetwork.ID(),
   443  // BasePolicyRegions: pulumi.StringArray{
   444  // pulumi.String("us-west-2"),
   445  // pulumi.String("us-east-1"),
   446  // },
   447  // CreateBasePolicy: pulumi.Bool(true),
   448  // })
   449  // if err != nil {
   450  // return err
   451  // }
   452  // var splat0 []interface{}
   453  // for _, val0 := range exampleUsWest2AwsSubnet {
   454  // splat0 = append(splat0, val0.Arn)
   455  // }
   456  // exampleUsWest2, err := networkmanager.NewVpcAttachment(ctx, "example_us_west_2", &networkmanager.VpcAttachmentArgs{
   457  // CoreNetworkId: exampleCoreNetwork.ID(),
   458  // SubnetArns: toPulumiArray(splat0),
   459  // VpcArn: pulumi.Any(exampleUsWest2AwsVpc.Arn),
   460  // })
   461  // if err != nil {
   462  // return err
   463  // }
   464  // var splat1 []interface{}
   465  // for _, val0 := range exampleUsEast1AwsSubnet {
   466  // splat1 = append(splat1, val0.Arn)
   467  // }
   468  // exampleUsEast1, err := networkmanager.NewVpcAttachment(ctx, "example_us_east_1", &networkmanager.VpcAttachmentArgs{
   469  // CoreNetworkId: exampleCoreNetwork.ID(),
   470  // SubnetArns: toPulumiArray(splat1),
   471  // VpcArn: pulumi.Any(exampleUsEast1AwsVpc.Arn),
   472  // })
   473  // if err != nil {
   474  // return err
   475  // }
   476  // example := networkmanager.GetCoreNetworkPolicyDocumentOutput(ctx, networkmanager.GetCoreNetworkPolicyDocumentOutputArgs{
   477  // CoreNetworkConfigurations: networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationArray{
   478  // &networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationArgs{
   479  // AsnRanges: pulumi.StringArray{
   480  // pulumi.String("65022-65534"),
   481  // },
   482  // EdgeLocations: networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationEdgeLocationArray{
   483  // &networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationEdgeLocationArgs{
   484  // Location: pulumi.String("us-west-2"),
   485  // },
   486  // &networkmanager.GetCoreNetworkPolicyDocumentCoreNetworkConfigurationEdgeLocationArgs{
   487  // Location: pulumi.String("us-east-1"),
   488  // },
   489  // },
   490  // },
   491  // },
   492  // Segments: networkmanager.GetCoreNetworkPolicyDocumentSegmentArray{
   493  // &networkmanager.GetCoreNetworkPolicyDocumentSegmentArgs{
   494  // Name: pulumi.String("segment"),
   495  // },
   496  // &networkmanager.GetCoreNetworkPolicyDocumentSegmentArgs{
   497  // Name: pulumi.String("segment2"),
   498  // },
   499  // },
   500  // SegmentActions: networkmanager.GetCoreNetworkPolicyDocumentSegmentActionArray{
   501  // &networkmanager.GetCoreNetworkPolicyDocumentSegmentActionArgs{
   502  // Action: pulumi.String("create-route"),
   503  // Segment: pulumi.String("segment"),
   504  // DestinationCidrBlocks: pulumi.StringArray{
   505  // pulumi.String("10.0.0.0/16"),
   506  // },
   507  // Destinations: pulumi.StringArray{
   508  // exampleUsWest2.ID(),
   509  // },
   510  // },
   511  // &networkmanager.GetCoreNetworkPolicyDocumentSegmentActionArgs{
   512  // Action: pulumi.String("create-route"),
   513  // Segment: pulumi.String("segment"),
   514  // DestinationCidrBlocks: pulumi.StringArray{
   515  // pulumi.String("10.1.0.0/16"),
   516  // },
   517  // Destinations: pulumi.StringArray{
   518  // exampleUsEast1.ID(),
   519  // },
   520  // },
   521  // },
   522  // }, nil);
   523  // _, err = networkmanager.NewCoreNetworkPolicyAttachment(ctx, "example", &networkmanager.CoreNetworkPolicyAttachmentArgs{
   524  // CoreNetworkId: exampleCoreNetwork.ID(),
   525  // PolicyDocument: example.ApplyT(func(example networkmanager.GetCoreNetworkPolicyDocumentResult) (*string, error) {
   526  // return &example.Json, nil
   527  // }).(pulumi.StringPtrOutput),
   528  // })
   529  // if err != nil {
   530  // return err
   531  // }
   532  // return nil
   533  // })
   534  // }
   535  // func toPulumiArray(arr []) pulumi.Array {
   536  // var pulumiArr pulumi.Array
   537  // for _, v := range arr {
   538  // pulumiArr = append(pulumiArr, pulumi.(v))
   539  // }
   540  // return pulumiArr
   541  // }
   542  // ```
   543  // <!--End PulumiCodeChooser -->
   544  //
   545  // ## Import
   546  //
   547  // Using `pulumi import`, import `aws_networkmanager_core_network_policy_attachment` using the core network ID. For example:
   548  //
   549  // ```sh
   550  // $ pulumi import aws:networkmanager/coreNetworkPolicyAttachment:CoreNetworkPolicyAttachment example core-network-0d47f6t230mz46dy4
   551  // ```
   552  type CoreNetworkPolicyAttachment struct {
   553  	pulumi.CustomResourceState
   554  
   555  	// The ID of the core network that a policy will be attached to and made `LIVE`.
   556  	CoreNetworkId pulumi.StringOutput `pulumi:"coreNetworkId"`
   557  	// Policy document for creating a core network. Note that updating this argument will result in the new policy document version being set as the `LATEST` and `LIVE` policy document. Refer to the [Core network policies documentation](https://docs.aws.amazon.com/network-manager/latest/cloudwan/cloudwan-policy-change-sets.html) for more information.
   558  	PolicyDocument pulumi.StringOutput `pulumi:"policyDocument"`
   559  	// Current state of a core network.
   560  	State pulumi.StringOutput `pulumi:"state"`
   561  }
   562  
   563  // NewCoreNetworkPolicyAttachment registers a new resource with the given unique name, arguments, and options.
   564  func NewCoreNetworkPolicyAttachment(ctx *pulumi.Context,
   565  	name string, args *CoreNetworkPolicyAttachmentArgs, opts ...pulumi.ResourceOption) (*CoreNetworkPolicyAttachment, error) {
   566  	if args == nil {
   567  		return nil, errors.New("missing one or more required arguments")
   568  	}
   569  
   570  	if args.CoreNetworkId == nil {
   571  		return nil, errors.New("invalid value for required argument 'CoreNetworkId'")
   572  	}
   573  	if args.PolicyDocument == nil {
   574  		return nil, errors.New("invalid value for required argument 'PolicyDocument'")
   575  	}
   576  	opts = internal.PkgResourceDefaultOpts(opts)
   577  	var resource CoreNetworkPolicyAttachment
   578  	err := ctx.RegisterResource("aws:networkmanager/coreNetworkPolicyAttachment:CoreNetworkPolicyAttachment", name, args, &resource, opts...)
   579  	if err != nil {
   580  		return nil, err
   581  	}
   582  	return &resource, nil
   583  }
   584  
   585  // GetCoreNetworkPolicyAttachment gets an existing CoreNetworkPolicyAttachment resource's state with the given name, ID, and optional
   586  // state properties that are used to uniquely qualify the lookup (nil if not required).
   587  func GetCoreNetworkPolicyAttachment(ctx *pulumi.Context,
   588  	name string, id pulumi.IDInput, state *CoreNetworkPolicyAttachmentState, opts ...pulumi.ResourceOption) (*CoreNetworkPolicyAttachment, error) {
   589  	var resource CoreNetworkPolicyAttachment
   590  	err := ctx.ReadResource("aws:networkmanager/coreNetworkPolicyAttachment:CoreNetworkPolicyAttachment", name, id, state, &resource, opts...)
   591  	if err != nil {
   592  		return nil, err
   593  	}
   594  	return &resource, nil
   595  }
   596  
   597  // Input properties used for looking up and filtering CoreNetworkPolicyAttachment resources.
   598  type coreNetworkPolicyAttachmentState struct {
   599  	// The ID of the core network that a policy will be attached to and made `LIVE`.
   600  	CoreNetworkId *string `pulumi:"coreNetworkId"`
   601  	// Policy document for creating a core network. Note that updating this argument will result in the new policy document version being set as the `LATEST` and `LIVE` policy document. Refer to the [Core network policies documentation](https://docs.aws.amazon.com/network-manager/latest/cloudwan/cloudwan-policy-change-sets.html) for more information.
   602  	PolicyDocument *string `pulumi:"policyDocument"`
   603  	// Current state of a core network.
   604  	State *string `pulumi:"state"`
   605  }
   606  
   607  type CoreNetworkPolicyAttachmentState struct {
   608  	// The ID of the core network that a policy will be attached to and made `LIVE`.
   609  	CoreNetworkId pulumi.StringPtrInput
   610  	// Policy document for creating a core network. Note that updating this argument will result in the new policy document version being set as the `LATEST` and `LIVE` policy document. Refer to the [Core network policies documentation](https://docs.aws.amazon.com/network-manager/latest/cloudwan/cloudwan-policy-change-sets.html) for more information.
   611  	PolicyDocument pulumi.StringPtrInput
   612  	// Current state of a core network.
   613  	State pulumi.StringPtrInput
   614  }
   615  
   616  func (CoreNetworkPolicyAttachmentState) ElementType() reflect.Type {
   617  	return reflect.TypeOf((*coreNetworkPolicyAttachmentState)(nil)).Elem()
   618  }
   619  
   620  type coreNetworkPolicyAttachmentArgs struct {
   621  	// The ID of the core network that a policy will be attached to and made `LIVE`.
   622  	CoreNetworkId string `pulumi:"coreNetworkId"`
   623  	// Policy document for creating a core network. Note that updating this argument will result in the new policy document version being set as the `LATEST` and `LIVE` policy document. Refer to the [Core network policies documentation](https://docs.aws.amazon.com/network-manager/latest/cloudwan/cloudwan-policy-change-sets.html) for more information.
   624  	PolicyDocument string `pulumi:"policyDocument"`
   625  }
   626  
   627  // The set of arguments for constructing a CoreNetworkPolicyAttachment resource.
   628  type CoreNetworkPolicyAttachmentArgs struct {
   629  	// The ID of the core network that a policy will be attached to and made `LIVE`.
   630  	CoreNetworkId pulumi.StringInput
   631  	// Policy document for creating a core network. Note that updating this argument will result in the new policy document version being set as the `LATEST` and `LIVE` policy document. Refer to the [Core network policies documentation](https://docs.aws.amazon.com/network-manager/latest/cloudwan/cloudwan-policy-change-sets.html) for more information.
   632  	PolicyDocument pulumi.StringInput
   633  }
   634  
   635  func (CoreNetworkPolicyAttachmentArgs) ElementType() reflect.Type {
   636  	return reflect.TypeOf((*coreNetworkPolicyAttachmentArgs)(nil)).Elem()
   637  }
   638  
   639  type CoreNetworkPolicyAttachmentInput interface {
   640  	pulumi.Input
   641  
   642  	ToCoreNetworkPolicyAttachmentOutput() CoreNetworkPolicyAttachmentOutput
   643  	ToCoreNetworkPolicyAttachmentOutputWithContext(ctx context.Context) CoreNetworkPolicyAttachmentOutput
   644  }
   645  
   646  func (*CoreNetworkPolicyAttachment) ElementType() reflect.Type {
   647  	return reflect.TypeOf((**CoreNetworkPolicyAttachment)(nil)).Elem()
   648  }
   649  
   650  func (i *CoreNetworkPolicyAttachment) ToCoreNetworkPolicyAttachmentOutput() CoreNetworkPolicyAttachmentOutput {
   651  	return i.ToCoreNetworkPolicyAttachmentOutputWithContext(context.Background())
   652  }
   653  
   654  func (i *CoreNetworkPolicyAttachment) ToCoreNetworkPolicyAttachmentOutputWithContext(ctx context.Context) CoreNetworkPolicyAttachmentOutput {
   655  	return pulumi.ToOutputWithContext(ctx, i).(CoreNetworkPolicyAttachmentOutput)
   656  }
   657  
   658  // CoreNetworkPolicyAttachmentArrayInput is an input type that accepts CoreNetworkPolicyAttachmentArray and CoreNetworkPolicyAttachmentArrayOutput values.
   659  // You can construct a concrete instance of `CoreNetworkPolicyAttachmentArrayInput` via:
   660  //
   661  //	CoreNetworkPolicyAttachmentArray{ CoreNetworkPolicyAttachmentArgs{...} }
   662  type CoreNetworkPolicyAttachmentArrayInput interface {
   663  	pulumi.Input
   664  
   665  	ToCoreNetworkPolicyAttachmentArrayOutput() CoreNetworkPolicyAttachmentArrayOutput
   666  	ToCoreNetworkPolicyAttachmentArrayOutputWithContext(context.Context) CoreNetworkPolicyAttachmentArrayOutput
   667  }
   668  
   669  type CoreNetworkPolicyAttachmentArray []CoreNetworkPolicyAttachmentInput
   670  
   671  func (CoreNetworkPolicyAttachmentArray) ElementType() reflect.Type {
   672  	return reflect.TypeOf((*[]*CoreNetworkPolicyAttachment)(nil)).Elem()
   673  }
   674  
   675  func (i CoreNetworkPolicyAttachmentArray) ToCoreNetworkPolicyAttachmentArrayOutput() CoreNetworkPolicyAttachmentArrayOutput {
   676  	return i.ToCoreNetworkPolicyAttachmentArrayOutputWithContext(context.Background())
   677  }
   678  
   679  func (i CoreNetworkPolicyAttachmentArray) ToCoreNetworkPolicyAttachmentArrayOutputWithContext(ctx context.Context) CoreNetworkPolicyAttachmentArrayOutput {
   680  	return pulumi.ToOutputWithContext(ctx, i).(CoreNetworkPolicyAttachmentArrayOutput)
   681  }
   682  
   683  // CoreNetworkPolicyAttachmentMapInput is an input type that accepts CoreNetworkPolicyAttachmentMap and CoreNetworkPolicyAttachmentMapOutput values.
   684  // You can construct a concrete instance of `CoreNetworkPolicyAttachmentMapInput` via:
   685  //
   686  //	CoreNetworkPolicyAttachmentMap{ "key": CoreNetworkPolicyAttachmentArgs{...} }
   687  type CoreNetworkPolicyAttachmentMapInput interface {
   688  	pulumi.Input
   689  
   690  	ToCoreNetworkPolicyAttachmentMapOutput() CoreNetworkPolicyAttachmentMapOutput
   691  	ToCoreNetworkPolicyAttachmentMapOutputWithContext(context.Context) CoreNetworkPolicyAttachmentMapOutput
   692  }
   693  
   694  type CoreNetworkPolicyAttachmentMap map[string]CoreNetworkPolicyAttachmentInput
   695  
   696  func (CoreNetworkPolicyAttachmentMap) ElementType() reflect.Type {
   697  	return reflect.TypeOf((*map[string]*CoreNetworkPolicyAttachment)(nil)).Elem()
   698  }
   699  
   700  func (i CoreNetworkPolicyAttachmentMap) ToCoreNetworkPolicyAttachmentMapOutput() CoreNetworkPolicyAttachmentMapOutput {
   701  	return i.ToCoreNetworkPolicyAttachmentMapOutputWithContext(context.Background())
   702  }
   703  
   704  func (i CoreNetworkPolicyAttachmentMap) ToCoreNetworkPolicyAttachmentMapOutputWithContext(ctx context.Context) CoreNetworkPolicyAttachmentMapOutput {
   705  	return pulumi.ToOutputWithContext(ctx, i).(CoreNetworkPolicyAttachmentMapOutput)
   706  }
   707  
   708  type CoreNetworkPolicyAttachmentOutput struct{ *pulumi.OutputState }
   709  
   710  func (CoreNetworkPolicyAttachmentOutput) ElementType() reflect.Type {
   711  	return reflect.TypeOf((**CoreNetworkPolicyAttachment)(nil)).Elem()
   712  }
   713  
   714  func (o CoreNetworkPolicyAttachmentOutput) ToCoreNetworkPolicyAttachmentOutput() CoreNetworkPolicyAttachmentOutput {
   715  	return o
   716  }
   717  
   718  func (o CoreNetworkPolicyAttachmentOutput) ToCoreNetworkPolicyAttachmentOutputWithContext(ctx context.Context) CoreNetworkPolicyAttachmentOutput {
   719  	return o
   720  }
   721  
   722  // The ID of the core network that a policy will be attached to and made `LIVE`.
   723  func (o CoreNetworkPolicyAttachmentOutput) CoreNetworkId() pulumi.StringOutput {
   724  	return o.ApplyT(func(v *CoreNetworkPolicyAttachment) pulumi.StringOutput { return v.CoreNetworkId }).(pulumi.StringOutput)
   725  }
   726  
   727  // Policy document for creating a core network. Note that updating this argument will result in the new policy document version being set as the `LATEST` and `LIVE` policy document. Refer to the [Core network policies documentation](https://docs.aws.amazon.com/network-manager/latest/cloudwan/cloudwan-policy-change-sets.html) for more information.
   728  func (o CoreNetworkPolicyAttachmentOutput) PolicyDocument() pulumi.StringOutput {
   729  	return o.ApplyT(func(v *CoreNetworkPolicyAttachment) pulumi.StringOutput { return v.PolicyDocument }).(pulumi.StringOutput)
   730  }
   731  
   732  // Current state of a core network.
   733  func (o CoreNetworkPolicyAttachmentOutput) State() pulumi.StringOutput {
   734  	return o.ApplyT(func(v *CoreNetworkPolicyAttachment) pulumi.StringOutput { return v.State }).(pulumi.StringOutput)
   735  }
   736  
   737  type CoreNetworkPolicyAttachmentArrayOutput struct{ *pulumi.OutputState }
   738  
   739  func (CoreNetworkPolicyAttachmentArrayOutput) ElementType() reflect.Type {
   740  	return reflect.TypeOf((*[]*CoreNetworkPolicyAttachment)(nil)).Elem()
   741  }
   742  
   743  func (o CoreNetworkPolicyAttachmentArrayOutput) ToCoreNetworkPolicyAttachmentArrayOutput() CoreNetworkPolicyAttachmentArrayOutput {
   744  	return o
   745  }
   746  
   747  func (o CoreNetworkPolicyAttachmentArrayOutput) ToCoreNetworkPolicyAttachmentArrayOutputWithContext(ctx context.Context) CoreNetworkPolicyAttachmentArrayOutput {
   748  	return o
   749  }
   750  
   751  func (o CoreNetworkPolicyAttachmentArrayOutput) Index(i pulumi.IntInput) CoreNetworkPolicyAttachmentOutput {
   752  	return pulumi.All(o, i).ApplyT(func(vs []interface{}) *CoreNetworkPolicyAttachment {
   753  		return vs[0].([]*CoreNetworkPolicyAttachment)[vs[1].(int)]
   754  	}).(CoreNetworkPolicyAttachmentOutput)
   755  }
   756  
   757  type CoreNetworkPolicyAttachmentMapOutput struct{ *pulumi.OutputState }
   758  
   759  func (CoreNetworkPolicyAttachmentMapOutput) ElementType() reflect.Type {
   760  	return reflect.TypeOf((*map[string]*CoreNetworkPolicyAttachment)(nil)).Elem()
   761  }
   762  
   763  func (o CoreNetworkPolicyAttachmentMapOutput) ToCoreNetworkPolicyAttachmentMapOutput() CoreNetworkPolicyAttachmentMapOutput {
   764  	return o
   765  }
   766  
   767  func (o CoreNetworkPolicyAttachmentMapOutput) ToCoreNetworkPolicyAttachmentMapOutputWithContext(ctx context.Context) CoreNetworkPolicyAttachmentMapOutput {
   768  	return o
   769  }
   770  
   771  func (o CoreNetworkPolicyAttachmentMapOutput) MapIndex(k pulumi.StringInput) CoreNetworkPolicyAttachmentOutput {
   772  	return pulumi.All(o, k).ApplyT(func(vs []interface{}) *CoreNetworkPolicyAttachment {
   773  		return vs[0].(map[string]*CoreNetworkPolicyAttachment)[vs[1].(string)]
   774  	}).(CoreNetworkPolicyAttachmentOutput)
   775  }
   776  
   777  func init() {
   778  	pulumi.RegisterInputType(reflect.TypeOf((*CoreNetworkPolicyAttachmentInput)(nil)).Elem(), &CoreNetworkPolicyAttachment{})
   779  	pulumi.RegisterInputType(reflect.TypeOf((*CoreNetworkPolicyAttachmentArrayInput)(nil)).Elem(), CoreNetworkPolicyAttachmentArray{})
   780  	pulumi.RegisterInputType(reflect.TypeOf((*CoreNetworkPolicyAttachmentMapInput)(nil)).Elem(), CoreNetworkPolicyAttachmentMap{})
   781  	pulumi.RegisterOutputType(CoreNetworkPolicyAttachmentOutput{})
   782  	pulumi.RegisterOutputType(CoreNetworkPolicyAttachmentArrayOutput{})
   783  	pulumi.RegisterOutputType(CoreNetworkPolicyAttachmentMapOutput{})
   784  }