@intentius/chant-lexicon-aws 0.18.19 → 0.18.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/__tests__/mock-cloud-executor.d.ts +5 -0
- package/dist/components/__tests__/mock-cloud-executor.d.ts.map +1 -1
- package/dist/components/apply.d.ts +9 -1
- package/dist/components/apply.d.ts.map +1 -1
- package/dist/components/cloud-executor.d.ts +5 -0
- package/dist/components/cloud-executor.d.ts.map +1 -1
- package/dist/generated/index.d.ts +4 -1
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/integrity.json +4 -4
- package/dist/manifest.json +1 -1
- package/dist/meta.json +100 -5
- package/dist/plugin.d.ts.map +1 -1
- package/dist/types/index.d.ts +73 -14
- package/package.json +2 -2
- package/src/components/__tests__/mock-cloud-executor.ts +17 -0
- package/src/components/apply.test.ts +22 -0
- package/src/components/apply.ts +37 -1
- package/src/components/cloud-executor.ts +7 -0
- package/src/generated/index.d.ts +73 -14
- package/src/generated/index.ts +4 -1
- package/src/generated/lexicon-aws.json +100 -5
- package/src/plugin.ts +5 -3
package/dist/integrity.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"algorithm": "sha256",
|
|
3
3
|
"artifacts": {
|
|
4
|
-
"manifest.json": "
|
|
5
|
-
"meta.json": "
|
|
6
|
-
"types/index.d.ts": "
|
|
4
|
+
"manifest.json": "48d42bc59eee26616da0978d29feae409b7038f84142ae274253a9fe93ba3dd4",
|
|
5
|
+
"meta.json": "276762c43447caaa9a47218bd3503ff4c2df9ceac5f9401351fc79d7137fcda1",
|
|
6
|
+
"types/index.d.ts": "8847b60fce42e667effbe029aabe5feba52c5ad7974cd28b4f02263ddfbefe18",
|
|
7
7
|
"rules/hardcoded-region.ts": "5a0eaf7ab391231fe6cd51426ece29539cb4b36f31c8dd060956638fed55722a",
|
|
8
8
|
"rules/iam-wildcard.ts": "135d7217d278fef50939e605c5da32603ba35674b8c4b5c4d66a06c77903e945",
|
|
9
9
|
"rules/s3-encryption.ts": "c4f9f8aa8dc382ed98c7b04e820a600590cc75335a8db2e087cbfbfe4003d09e",
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"skills/chant-aws.md": "4d65eb160e001f2af42eb7c622a5b498c2fd1f5afbd6c8155615c010fb265c63",
|
|
59
59
|
"skills/chant-aws-eks.md": "8789255709ff004ad0a875fd5999edcdc66fc6e33d710db058d9f42703bcfdfe"
|
|
60
60
|
},
|
|
61
|
-
"composite": "
|
|
61
|
+
"composite": "b7672f3aa4c84b35fe6baf5098668f40c2689487737de83e428280526dd83d84"
|
|
62
62
|
}
|
package/dist/manifest.json
CHANGED
package/dist/meta.json
CHANGED
|
@@ -985,6 +985,15 @@
|
|
|
985
985
|
},
|
|
986
986
|
"Ipv6Addresses": {
|
|
987
987
|
"default": null
|
|
988
|
+
},
|
|
989
|
+
"FlowLogsEnabled": {
|
|
990
|
+
"default": false
|
|
991
|
+
},
|
|
992
|
+
"FlowLogsS3Bucket": {
|
|
993
|
+
"maxLength": 255
|
|
994
|
+
},
|
|
995
|
+
"FlowLogsS3Prefix": {
|
|
996
|
+
"maxLength": 255
|
|
988
997
|
}
|
|
989
998
|
},
|
|
990
999
|
"primaryIdentifier": [
|
|
@@ -20790,6 +20799,9 @@
|
|
|
20790
20799
|
"LatestVersion_Patch": "LatestVersion.Patch"
|
|
20791
20800
|
},
|
|
20792
20801
|
"propertyConstraints": {
|
|
20802
|
+
"Arn": {
|
|
20803
|
+
"pattern": "^arn:[^:]+:imagebuilder:[^:]+:[^:]+:container-recipe/.+$"
|
|
20804
|
+
},
|
|
20793
20805
|
"PlatformOverride": {
|
|
20794
20806
|
"enum": [
|
|
20795
20807
|
"Windows",
|
|
@@ -30935,6 +30947,11 @@
|
|
|
30935
30947
|
"attrs": {
|
|
30936
30948
|
"Arn": "Arn"
|
|
30937
30949
|
},
|
|
30950
|
+
"propertyConstraints": {
|
|
30951
|
+
"Arn": {
|
|
30952
|
+
"pattern": "^arn:[^:]+:imagebuilder:[^:]+:[^:]+:distribution-configuration/.+$"
|
|
30953
|
+
}
|
|
30954
|
+
},
|
|
30938
30955
|
"createOnly": [
|
|
30939
30956
|
"Name"
|
|
30940
30957
|
],
|
|
@@ -46723,6 +46740,9 @@
|
|
|
46723
46740
|
"LatestVersion_Patch": "LatestVersion.Patch"
|
|
46724
46741
|
},
|
|
46725
46742
|
"propertyConstraints": {
|
|
46743
|
+
"Arn": {
|
|
46744
|
+
"pattern": "^arn:[^:]+:imagebuilder:[^:]+:[^:]+:component/.+$"
|
|
46745
|
+
},
|
|
46726
46746
|
"Type": {
|
|
46727
46747
|
"enum": [
|
|
46728
46748
|
"BUILD",
|
|
@@ -46788,6 +46808,9 @@
|
|
|
46788
46808
|
"propertyConstraints": {
|
|
46789
46809
|
"ImageId": {
|
|
46790
46810
|
"format": "AWS::EC2::Image.Id"
|
|
46811
|
+
},
|
|
46812
|
+
"Arn": {
|
|
46813
|
+
"pattern": "^arn:[^:]+:imagebuilder:[^:]+:[^:]+:image/.+$"
|
|
46791
46814
|
}
|
|
46792
46815
|
},
|
|
46793
46816
|
"createOnly": [
|
|
@@ -46869,6 +46892,9 @@
|
|
|
46869
46892
|
"Arn": "Arn"
|
|
46870
46893
|
},
|
|
46871
46894
|
"propertyConstraints": {
|
|
46895
|
+
"Arn": {
|
|
46896
|
+
"pattern": "^arn:[^:]+:imagebuilder:[^:]+:[^:]+:lifecycle-policy/.+$"
|
|
46897
|
+
},
|
|
46872
46898
|
"Status": {
|
|
46873
46899
|
"enum": [
|
|
46874
46900
|
"DISABLED",
|
|
@@ -47051,6 +47077,9 @@
|
|
|
47051
47077
|
"DeploymentId": "DeploymentId"
|
|
47052
47078
|
},
|
|
47053
47079
|
"propertyConstraints": {
|
|
47080
|
+
"Arn": {
|
|
47081
|
+
"pattern": "^arn:[^:]+:imagebuilder:[^:]+:[^:]+:image-pipeline/.+$"
|
|
47082
|
+
},
|
|
47054
47083
|
"Status": {
|
|
47055
47084
|
"enum": [
|
|
47056
47085
|
"DISABLED",
|
|
@@ -47132,6 +47161,11 @@
|
|
|
47132
47161
|
"LatestVersion_Minor": "LatestVersion.Minor",
|
|
47133
47162
|
"LatestVersion_Patch": "LatestVersion.Patch"
|
|
47134
47163
|
},
|
|
47164
|
+
"propertyConstraints": {
|
|
47165
|
+
"Arn": {
|
|
47166
|
+
"pattern": "^arn:[^:]+:imagebuilder:[^:]+:[^:]+:image-recipe/.+$"
|
|
47167
|
+
}
|
|
47168
|
+
},
|
|
47135
47169
|
"createOnly": [
|
|
47136
47170
|
"Name",
|
|
47137
47171
|
"Version",
|
|
@@ -48105,6 +48139,9 @@
|
|
|
48105
48139
|
"Arn": "Arn"
|
|
48106
48140
|
},
|
|
48107
48141
|
"propertyConstraints": {
|
|
48142
|
+
"Arn": {
|
|
48143
|
+
"pattern": "^arn:[^:]+:imagebuilder:[^:]+:[^:]+:infrastructure-configuration/.+$"
|
|
48144
|
+
},
|
|
48108
48145
|
"SecurityGroupIds": {
|
|
48109
48146
|
"format": "AWS::EC2::SecurityGroup.Ids"
|
|
48110
48147
|
},
|
|
@@ -61110,11 +61147,6 @@
|
|
|
61110
61147
|
"kind": "property",
|
|
61111
61148
|
"lexicon": "aws"
|
|
61112
61149
|
},
|
|
61113
|
-
"MetadataProperties": {
|
|
61114
|
-
"resourceType": "AWS::SageMaker::ModelPackage.MetadataProperties",
|
|
61115
|
-
"kind": "property",
|
|
61116
|
-
"lexicon": "aws"
|
|
61117
|
-
},
|
|
61118
61150
|
"MetadataTableConfiguration": {
|
|
61119
61151
|
"resourceType": "AWS::S3::Bucket.MetadataTableConfiguration",
|
|
61120
61152
|
"kind": "property",
|
|
@@ -98386,6 +98418,69 @@
|
|
|
98386
98418
|
"kind": "property",
|
|
98387
98419
|
"lexicon": "aws"
|
|
98388
98420
|
},
|
|
98421
|
+
"TrialComponent": {
|
|
98422
|
+
"resourceType": "AWS::SageMaker::TrialComponent",
|
|
98423
|
+
"kind": "resource",
|
|
98424
|
+
"lexicon": "aws",
|
|
98425
|
+
"attrs": {
|
|
98426
|
+
"TrialComponentArn": "TrialComponentArn",
|
|
98427
|
+
"CreationTime": "CreationTime",
|
|
98428
|
+
"LastModifiedTime": "LastModifiedTime",
|
|
98429
|
+
"LineageGroupArn": "LineageGroupArn"
|
|
98430
|
+
},
|
|
98431
|
+
"propertyConstraints": {
|
|
98432
|
+
"TrialComponentArn": {
|
|
98433
|
+
"pattern": "^arn:aws[a-z\\-]*:sagemaker:[a-z0-9\\-]*:[0-9]{12}:experiment-trial-component/",
|
|
98434
|
+
"maxLength": 256
|
|
98435
|
+
},
|
|
98436
|
+
"TrialComponentName": {
|
|
98437
|
+
"pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,119}$",
|
|
98438
|
+
"minLength": 1,
|
|
98439
|
+
"maxLength": 120
|
|
98440
|
+
},
|
|
98441
|
+
"DisplayName": {
|
|
98442
|
+
"pattern": "^[a-zA-Z0-9](-*[a-zA-Z0-9]){0,119}$",
|
|
98443
|
+
"minLength": 1,
|
|
98444
|
+
"maxLength": 120
|
|
98445
|
+
},
|
|
98446
|
+
"CreationTime": {
|
|
98447
|
+
"format": "date-time"
|
|
98448
|
+
},
|
|
98449
|
+
"LastModifiedTime": {
|
|
98450
|
+
"format": "date-time"
|
|
98451
|
+
},
|
|
98452
|
+
"LineageGroupArn": {
|
|
98453
|
+
"maxLength": 256
|
|
98454
|
+
}
|
|
98455
|
+
},
|
|
98456
|
+
"createOnly": [
|
|
98457
|
+
"TrialComponentName",
|
|
98458
|
+
"MetadataProperties"
|
|
98459
|
+
],
|
|
98460
|
+
"primaryIdentifier": [
|
|
98461
|
+
"TrialComponentArn"
|
|
98462
|
+
],
|
|
98463
|
+
"tagging": {
|
|
98464
|
+
"taggable": true,
|
|
98465
|
+
"tagOnCreate": true,
|
|
98466
|
+
"tagUpdatable": true
|
|
98467
|
+
}
|
|
98468
|
+
},
|
|
98469
|
+
"TrialComponentStatus": {
|
|
98470
|
+
"resourceType": "AWS::SageMaker::TrialComponent.TrialComponentStatus",
|
|
98471
|
+
"kind": "property",
|
|
98472
|
+
"lexicon": "aws"
|
|
98473
|
+
},
|
|
98474
|
+
"TrialComponent_MetadataProperties": {
|
|
98475
|
+
"resourceType": "AWS::SageMaker::TrialComponent.MetadataProperties",
|
|
98476
|
+
"kind": "property",
|
|
98477
|
+
"lexicon": "aws"
|
|
98478
|
+
},
|
|
98479
|
+
"TrialComponent_TrialComponentStatus": {
|
|
98480
|
+
"resourceType": "AWS::SageMaker::TrialComponent.TrialComponentStatus",
|
|
98481
|
+
"kind": "property",
|
|
98482
|
+
"lexicon": "aws"
|
|
98483
|
+
},
|
|
98389
98484
|
"Trigger": {
|
|
98390
98485
|
"resourceType": "AWS::Glue::Trigger",
|
|
98391
98486
|
"kind": "resource",
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAuF,MAAM,0BAA0B,CAAC;AAwBnJ;;sFAEsF;AACtF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAuF,MAAM,0BAA0B,CAAC;AAwBnJ;;sFAEsF;AACtF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,aA2rBvB,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -14,6 +14,12 @@ export declare class Accelerator {
|
|
|
14
14
|
DualStackDnsName?: string;
|
|
15
15
|
/** Indicates whether an accelerator is enabled. The value is true or false. */
|
|
16
16
|
Enabled?: boolean;
|
|
17
|
+
/** Indicates whether flow logs are enabled for the accelerator. */
|
|
18
|
+
FlowLogsEnabled?: boolean;
|
|
19
|
+
/** The name of the Amazon S3 bucket for the flow logs. */
|
|
20
|
+
FlowLogsS3Bucket?: string;
|
|
21
|
+
/** The prefix for the location in the Amazon S3 bucket for the flow logs. */
|
|
22
|
+
FlowLogsS3Prefix?: string;
|
|
17
23
|
/** The IP addresses from BYOIP Prefix pool. */
|
|
18
24
|
IpAddresses?: string[];
|
|
19
25
|
/** IP Address type. */
|
|
@@ -3978,6 +3984,8 @@ Information on the current primary is available on the DataReplicationMetadata o
|
|
|
3978
3984
|
ResourceShareArns?: string[];
|
|
3979
3985
|
SecurityGroups?: string[];
|
|
3980
3986
|
StompEndpoints?: string[];
|
|
3987
|
+
/** The broker's storage size in GB. */
|
|
3988
|
+
StorageSize?: number;
|
|
3981
3989
|
StorageType?: any;
|
|
3982
3990
|
SubnetIds?: string[];
|
|
3983
3991
|
Tags?: Broker_TagsEntry[];
|
|
@@ -35650,6 +35658,37 @@ export declare class TransitVirtualInterface {
|
|
|
35650
35658
|
readonly VirtualInterfaceId: string;
|
|
35651
35659
|
}
|
|
35652
35660
|
|
|
35661
|
+
export declare class TrialComponent {
|
|
35662
|
+
constructor(props: {
|
|
35663
|
+
/** The name of the trial component. Must be unique in your AWS account and is not case-sensitive. */
|
|
35664
|
+
TrialComponentName: string;
|
|
35665
|
+
/** When the trial component was created. */
|
|
35666
|
+
CreationTime?: string;
|
|
35667
|
+
/** The name of the component as displayed. If DisplayName isn't specified, TrialComponentName is displayed. */
|
|
35668
|
+
DisplayName?: string;
|
|
35669
|
+
/** The input artifacts for the component. */
|
|
35670
|
+
InputArtifacts?: Record<string, unknown>;
|
|
35671
|
+
/** When the trial component was last modified. */
|
|
35672
|
+
LastModifiedTime?: string;
|
|
35673
|
+
/** The Amazon Resource Name (ARN) of the lineage group. */
|
|
35674
|
+
LineageGroupArn?: string;
|
|
35675
|
+
MetadataProperties?: TrialComponent_MetadataProperties;
|
|
35676
|
+
/** The output artifacts for the component. */
|
|
35677
|
+
OutputArtifacts?: Record<string, unknown>;
|
|
35678
|
+
/** The hyperparameters for the component. */
|
|
35679
|
+
Parameters?: Record<string, unknown>;
|
|
35680
|
+
Status?: TrialComponent_TrialComponentStatus;
|
|
35681
|
+
/** A list of tags to associate with the trial component. */
|
|
35682
|
+
Tags?: Record<string, unknown>[];
|
|
35683
|
+
/** The Amazon Resource Name (ARN) of the trial component. */
|
|
35684
|
+
TrialComponentArn?: string;
|
|
35685
|
+
}, attributes?: CFResourceAttributes);
|
|
35686
|
+
readonly CreationTime: string;
|
|
35687
|
+
readonly LastModifiedTime: string;
|
|
35688
|
+
readonly LineageGroupArn: string;
|
|
35689
|
+
readonly TrialComponentArn: string;
|
|
35690
|
+
}
|
|
35691
|
+
|
|
35653
35692
|
export declare class Trigger {
|
|
35654
35693
|
constructor(props: {
|
|
35655
35694
|
/** The actions initiated by this trigger. */
|
|
@@ -77291,6 +77330,8 @@ export declare class ImagePipeline_Schedule {
|
|
|
77291
77330
|
PipelineExecutionStartCondition?: "EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE" | "EXPRESSION_MATCH_ONLY";
|
|
77292
77331
|
/** The expression determines how often EC2 Image Builder evaluates your pipelineExecutionStartCondition. */
|
|
77293
77332
|
ScheduleExpression?: string;
|
|
77333
|
+
/** The timezone that applies to the scheduling expression, for example "Etc/UTC" or "America/Los_Angeles" in IANA timezone format. If not specified, this defaults to UTC. */
|
|
77334
|
+
Timezone?: string;
|
|
77294
77335
|
});
|
|
77295
77336
|
}
|
|
77296
77337
|
|
|
@@ -89857,19 +89898,6 @@ export declare class MetadataDestination {
|
|
|
89857
89898
|
});
|
|
89858
89899
|
}
|
|
89859
89900
|
|
|
89860
|
-
export declare class MetadataProperties {
|
|
89861
|
-
constructor(props: {
|
|
89862
|
-
/** The commit ID. */
|
|
89863
|
-
CommitId?: string;
|
|
89864
|
-
/** The entity this entity was generated by. */
|
|
89865
|
-
GeneratedBy?: string;
|
|
89866
|
-
/** The project ID metadata. */
|
|
89867
|
-
ProjectId?: string;
|
|
89868
|
-
/** The repository metadata. */
|
|
89869
|
-
Repository?: string;
|
|
89870
|
-
});
|
|
89871
|
-
}
|
|
89872
|
-
|
|
89873
89901
|
export declare class MetadataTableConfiguration {
|
|
89874
89902
|
constructor(props: {
|
|
89875
89903
|
/** The destination information for the metadata table configuration. The destination table bucket must be in the same Region and AWS-account as the general purpose bucket. The specified metadata table name must be unique within the ``aws_s3_metadata`` namespace in the destination table bucket. */
|
|
@@ -119174,6 +119202,37 @@ export declare class TrendmicroSourceProperties {
|
|
|
119174
119202
|
});
|
|
119175
119203
|
}
|
|
119176
119204
|
|
|
119205
|
+
export declare class TrialComponent_MetadataProperties {
|
|
119206
|
+
constructor(props: {
|
|
119207
|
+
/** The commit ID. */
|
|
119208
|
+
CommitId?: string;
|
|
119209
|
+
/** The entity this entity was generated by. */
|
|
119210
|
+
GeneratedBy?: string;
|
|
119211
|
+
/** The project ID. */
|
|
119212
|
+
ProjectId?: string;
|
|
119213
|
+
/** The repository. */
|
|
119214
|
+
Repository?: string;
|
|
119215
|
+
});
|
|
119216
|
+
}
|
|
119217
|
+
|
|
119218
|
+
export declare class TrialComponent_TrialComponentStatus {
|
|
119219
|
+
constructor(props: {
|
|
119220
|
+
/** If the component failed, a message describing why. */
|
|
119221
|
+
Message?: string;
|
|
119222
|
+
/** The status of the trial component. */
|
|
119223
|
+
PrimaryStatus?: "Completed" | "Failed" | "InProgress" | "Stopped" | "Stopping";
|
|
119224
|
+
});
|
|
119225
|
+
}
|
|
119226
|
+
|
|
119227
|
+
export declare class TrialComponentStatus {
|
|
119228
|
+
constructor(props: {
|
|
119229
|
+
/** If the component failed, a message describing why. */
|
|
119230
|
+
Message?: string;
|
|
119231
|
+
/** The status of the trial component. */
|
|
119232
|
+
PrimaryStatus?: "Completed" | "Failed" | "InProgress" | "Stopped" | "Stopping";
|
|
119233
|
+
});
|
|
119234
|
+
}
|
|
119235
|
+
|
|
119177
119236
|
export declare class Trigger_Action {
|
|
119178
119237
|
constructor(props: {
|
|
119179
119238
|
/** The job arguments used when this trigger fires. For this job run, they replace the default arguments set in the job definition itself. */
|
|
@@ -127815,7 +127874,7 @@ export type GatewayTarget_SchemaType =
|
|
|
127815
127874
|
| "object"
|
|
127816
127875
|
| "string";
|
|
127817
127876
|
|
|
127818
|
-
export type GatewayTarget_TargetProtocolType = "HTTP" | "MCP";
|
|
127877
|
+
export type GatewayTarget_TargetProtocolType = "HTTP" | "INFERENCE" | "MCP";
|
|
127819
127878
|
|
|
127820
127879
|
export type GatewayTarget_TargetStatus =
|
|
127821
127880
|
| "CREATE_PENDING_AUTH"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentius/chant-lexicon-aws",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.21",
|
|
4
4
|
"description": "AWS CloudFormation lexicon for chant — declarative IaC in TypeScript",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://intentius.io/chant",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"typescript": "^5.9.3"
|
|
81
81
|
},
|
|
82
82
|
"peerDependencies": {
|
|
83
|
-
"@intentius/chant": "^0.18.
|
|
83
|
+
"@intentius/chant": "^0.18.21",
|
|
84
84
|
"typescript": "^5.9.3"
|
|
85
85
|
}
|
|
86
86
|
}
|
|
@@ -68,6 +68,11 @@ export interface FakeStackConfig {
|
|
|
68
68
|
terminalStatus?: string;
|
|
69
69
|
/** True if this is a brand-new stack (no prior stack) — affects `isCreate`. Default: false. */
|
|
70
70
|
isCreate?: boolean;
|
|
71
|
+
/** When true, the next changeset created against this (already-current) stack
|
|
72
|
+
* reports a FAILED "no changes" status, as real CloudFormation does for an
|
|
73
|
+
* update with an empty diff — cfn-deploy must treat it as an idempotent no-op
|
|
74
|
+
* success (#960). */
|
|
75
|
+
noChanges?: boolean;
|
|
71
76
|
}
|
|
72
77
|
|
|
73
78
|
export interface FakeDeploymentConfig {
|
|
@@ -200,6 +205,18 @@ export function createMockCloudExecutor(options: MockCloudExecutorOptions = {}):
|
|
|
200
205
|
const changeSetName = `mock-changeset-${changeSetCounter}`;
|
|
201
206
|
const config = stacks.get(args.stackName);
|
|
202
207
|
const changes = config?.changes ?? [];
|
|
208
|
+
if (config?.noChanges) {
|
|
209
|
+
// Real CloudFormation: an update change set with an empty diff is
|
|
210
|
+
// created FAILED with a "didn't contain changes" reason (#960).
|
|
211
|
+
return {
|
|
212
|
+
changeSetName,
|
|
213
|
+
stackName: args.stackName,
|
|
214
|
+
status: "FAILED",
|
|
215
|
+
statusReason: "The submitted information didn't contain changes. Submit different information to create a change set.",
|
|
216
|
+
isCreate: false,
|
|
217
|
+
changes: [],
|
|
218
|
+
};
|
|
219
|
+
}
|
|
203
220
|
pendingChangeSets.set(changeSetName, { stackName: args.stackName, changes });
|
|
204
221
|
return {
|
|
205
222
|
changeSetName,
|
|
@@ -26,6 +26,28 @@ describe("cfn-deploy (#557)", () => {
|
|
|
26
26
|
expect(mock.calls.map((c) => c.method)).toEqual(["createChangeSet", "executeChangeSet", "waitForStack"]);
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
+
it("treats a no-change changeset as an idempotent no-op success, never executing it (#960)", async () => {
|
|
30
|
+
const mock = createMockCloudExecutor({
|
|
31
|
+
stacks: {
|
|
32
|
+
"loom-cognito": {
|
|
33
|
+
noChanges: true,
|
|
34
|
+
terminalStatus: "CREATE_COMPLETE",
|
|
35
|
+
outputs: { UserPoolId: "us-east-2_abc123" },
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
const capability = createCfnDeployCapability(mock.executor);
|
|
40
|
+
|
|
41
|
+
const output = await capability.run(ctx, { stack: "loom-cognito", template: "archive:cognito.template.json" });
|
|
42
|
+
|
|
43
|
+
// Reports the stack's current state (so downstream steps still get real
|
|
44
|
+
// outputs) instead of throwing on execute-change-set.
|
|
45
|
+
expect(output.stackStatus).toBe("CREATE_COMPLETE");
|
|
46
|
+
expect(output.outputs).toEqual({ UserPoolId: "us-east-2_abc123" });
|
|
47
|
+
// The empty change set is deleted and never executed.
|
|
48
|
+
expect(mock.calls.map((c) => c.method)).toEqual(["createChangeSet", "deleteChangeSet", "describeStack"]);
|
|
49
|
+
});
|
|
50
|
+
|
|
29
51
|
it("throws when the stack rolls back — a failed deploy must not report success", async () => {
|
|
30
52
|
const mock = createMockCloudExecutor({
|
|
31
53
|
stacks: { "search-service": { terminalStatus: "ROLLBACK_COMPLETE" } },
|
package/src/components/apply.ts
CHANGED
|
@@ -20,7 +20,27 @@
|
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
import type { Capability } from "@intentius/chant/components/capability";
|
|
23
|
-
import { defaultCloudExecutor, type CfnChange, type CloudExecutor } from "./cloud-executor";
|
|
23
|
+
import { defaultCloudExecutor, type CfnChange, type CfnChangeSet, type CloudExecutor } from "./cloud-executor";
|
|
24
|
+
|
|
25
|
+
/** CloudFormation's wording when a change set has nothing to apply — the stack
|
|
26
|
+
* is already current. AWS phrases it "The submitted information didn't contain
|
|
27
|
+
* changes."; `aws cloudformation deploy` reports "No updates are to be
|
|
28
|
+
* performed."; keep both plus a bare "no changes" for other backends/Floci. */
|
|
29
|
+
const NO_CHANGE_REASON = /(did ?n['’]?t|does ?n['’]?t|did not|does not) contain changes|no updates are to be performed|no changes/i;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* True when CloudFormation reports the change set has nothing to apply. AWS
|
|
33
|
+
* surfaces this as a FAILED change set whose `StatusReason` names the empty
|
|
34
|
+
* diff (executing it then errors); when no reason is available, a FAILED set
|
|
35
|
+
* with zero proposed changes is the same no-op. A FAILED set with any other
|
|
36
|
+
* reason is a genuine create failure and must NOT be treated as a no-op.
|
|
37
|
+
*/
|
|
38
|
+
export function isNoopChangeSet(changeSet: CfnChangeSet): boolean {
|
|
39
|
+
if (changeSet.status !== "FAILED") return false;
|
|
40
|
+
return changeSet.statusReason
|
|
41
|
+
? NO_CHANGE_REASON.test(changeSet.statusReason)
|
|
42
|
+
: changeSet.changes.length === 0;
|
|
43
|
+
}
|
|
24
44
|
|
|
25
45
|
// ── cfn-deploy ───────────────────────────────────────────────────────────────
|
|
26
46
|
|
|
@@ -121,6 +141,22 @@ export function createCfnDeployCapability(
|
|
|
121
141
|
parameters: flattenCfnInputs(input),
|
|
122
142
|
});
|
|
123
143
|
|
|
144
|
+
// An unchanged stack yields a change set with nothing to apply.
|
|
145
|
+
// `execute-change-set` rejects it ("The submitted information didn't
|
|
146
|
+
// contain changes"), which would fail this component and stop the whole
|
|
147
|
+
// run — so a re-run of `--components all` dies on the first already-current
|
|
148
|
+
// stack. Treat it as an idempotent no-op success instead: delete the empty
|
|
149
|
+
// change set and report the stack's current status/outputs so downstream
|
|
150
|
+
// steps still get real outputs and the run proceeds (#960).
|
|
151
|
+
if (isNoopChangeSet(changeSet)) {
|
|
152
|
+
await executor.cloudformation.deleteChangeSet({
|
|
153
|
+
stackName: stack,
|
|
154
|
+
changeSetName: changeSet.changeSetName,
|
|
155
|
+
});
|
|
156
|
+
const { stackStatus, outputs } = await executor.cloudformation.describeStack(stack);
|
|
157
|
+
return { stackStatus, outputs };
|
|
158
|
+
}
|
|
159
|
+
|
|
124
160
|
const replacements = changeSet.changes.filter((c) => c.replacement);
|
|
125
161
|
let snapshotId: string | undefined;
|
|
126
162
|
|
|
@@ -52,6 +52,11 @@ export interface CfnChangeSet {
|
|
|
52
52
|
changeSetName: string;
|
|
53
53
|
stackName: string;
|
|
54
54
|
status: string;
|
|
55
|
+
/** CloudFormation's `StatusReason` for the change set, when present. A FAILED
|
|
56
|
+
* change set whose reason names an empty diff ("didn't contain changes" / "No
|
|
57
|
+
* updates are to be performed") is a no-op, not a real failure — see
|
|
58
|
+
* {@link isNoopChangeSet}. */
|
|
59
|
+
statusReason?: string;
|
|
55
60
|
/** True the first time this stack is created (no prior stack exists). */
|
|
56
61
|
isCreate: boolean;
|
|
57
62
|
changes: CfnChange[];
|
|
@@ -404,6 +409,7 @@ const realCloudFormation: CloudFormationClient = {
|
|
|
404
409
|
);
|
|
405
410
|
const described = JSON.parse(stdout) as {
|
|
406
411
|
Status: string;
|
|
412
|
+
StatusReason?: string;
|
|
407
413
|
Changes?: Array<{
|
|
408
414
|
ResourceChange: {
|
|
409
415
|
Action: string;
|
|
@@ -418,6 +424,7 @@ const realCloudFormation: CloudFormationClient = {
|
|
|
418
424
|
changeSetName,
|
|
419
425
|
stackName: args.stackName,
|
|
420
426
|
status: described.Status,
|
|
427
|
+
statusReason: described.StatusReason,
|
|
421
428
|
isCreate: described.Status === "CREATE_COMPLETE" && !described.Changes?.length,
|
|
422
429
|
changes: (described.Changes ?? []).map((c) => ({
|
|
423
430
|
action: c.ResourceChange.Action as CfnChange["action"],
|
package/src/generated/index.d.ts
CHANGED
|
@@ -14,6 +14,12 @@ export declare class Accelerator {
|
|
|
14
14
|
DualStackDnsName?: string;
|
|
15
15
|
/** Indicates whether an accelerator is enabled. The value is true or false. */
|
|
16
16
|
Enabled?: boolean;
|
|
17
|
+
/** Indicates whether flow logs are enabled for the accelerator. */
|
|
18
|
+
FlowLogsEnabled?: boolean;
|
|
19
|
+
/** The name of the Amazon S3 bucket for the flow logs. */
|
|
20
|
+
FlowLogsS3Bucket?: string;
|
|
21
|
+
/** The prefix for the location in the Amazon S3 bucket for the flow logs. */
|
|
22
|
+
FlowLogsS3Prefix?: string;
|
|
17
23
|
/** The IP addresses from BYOIP Prefix pool. */
|
|
18
24
|
IpAddresses?: string[];
|
|
19
25
|
/** IP Address type. */
|
|
@@ -3978,6 +3984,8 @@ Information on the current primary is available on the DataReplicationMetadata o
|
|
|
3978
3984
|
ResourceShareArns?: string[];
|
|
3979
3985
|
SecurityGroups?: string[];
|
|
3980
3986
|
StompEndpoints?: string[];
|
|
3987
|
+
/** The broker's storage size in GB. */
|
|
3988
|
+
StorageSize?: number;
|
|
3981
3989
|
StorageType?: any;
|
|
3982
3990
|
SubnetIds?: string[];
|
|
3983
3991
|
Tags?: Broker_TagsEntry[];
|
|
@@ -35650,6 +35658,37 @@ export declare class TransitVirtualInterface {
|
|
|
35650
35658
|
readonly VirtualInterfaceId: string;
|
|
35651
35659
|
}
|
|
35652
35660
|
|
|
35661
|
+
export declare class TrialComponent {
|
|
35662
|
+
constructor(props: {
|
|
35663
|
+
/** The name of the trial component. Must be unique in your AWS account and is not case-sensitive. */
|
|
35664
|
+
TrialComponentName: string;
|
|
35665
|
+
/** When the trial component was created. */
|
|
35666
|
+
CreationTime?: string;
|
|
35667
|
+
/** The name of the component as displayed. If DisplayName isn't specified, TrialComponentName is displayed. */
|
|
35668
|
+
DisplayName?: string;
|
|
35669
|
+
/** The input artifacts for the component. */
|
|
35670
|
+
InputArtifacts?: Record<string, unknown>;
|
|
35671
|
+
/** When the trial component was last modified. */
|
|
35672
|
+
LastModifiedTime?: string;
|
|
35673
|
+
/** The Amazon Resource Name (ARN) of the lineage group. */
|
|
35674
|
+
LineageGroupArn?: string;
|
|
35675
|
+
MetadataProperties?: TrialComponent_MetadataProperties;
|
|
35676
|
+
/** The output artifacts for the component. */
|
|
35677
|
+
OutputArtifacts?: Record<string, unknown>;
|
|
35678
|
+
/** The hyperparameters for the component. */
|
|
35679
|
+
Parameters?: Record<string, unknown>;
|
|
35680
|
+
Status?: TrialComponent_TrialComponentStatus;
|
|
35681
|
+
/** A list of tags to associate with the trial component. */
|
|
35682
|
+
Tags?: Record<string, unknown>[];
|
|
35683
|
+
/** The Amazon Resource Name (ARN) of the trial component. */
|
|
35684
|
+
TrialComponentArn?: string;
|
|
35685
|
+
}, attributes?: CFResourceAttributes);
|
|
35686
|
+
readonly CreationTime: string;
|
|
35687
|
+
readonly LastModifiedTime: string;
|
|
35688
|
+
readonly LineageGroupArn: string;
|
|
35689
|
+
readonly TrialComponentArn: string;
|
|
35690
|
+
}
|
|
35691
|
+
|
|
35653
35692
|
export declare class Trigger {
|
|
35654
35693
|
constructor(props: {
|
|
35655
35694
|
/** The actions initiated by this trigger. */
|
|
@@ -77291,6 +77330,8 @@ export declare class ImagePipeline_Schedule {
|
|
|
77291
77330
|
PipelineExecutionStartCondition?: "EXPRESSION_MATCH_AND_DEPENDENCY_UPDATES_AVAILABLE" | "EXPRESSION_MATCH_ONLY";
|
|
77292
77331
|
/** The expression determines how often EC2 Image Builder evaluates your pipelineExecutionStartCondition. */
|
|
77293
77332
|
ScheduleExpression?: string;
|
|
77333
|
+
/** The timezone that applies to the scheduling expression, for example "Etc/UTC" or "America/Los_Angeles" in IANA timezone format. If not specified, this defaults to UTC. */
|
|
77334
|
+
Timezone?: string;
|
|
77294
77335
|
});
|
|
77295
77336
|
}
|
|
77296
77337
|
|
|
@@ -89857,19 +89898,6 @@ export declare class MetadataDestination {
|
|
|
89857
89898
|
});
|
|
89858
89899
|
}
|
|
89859
89900
|
|
|
89860
|
-
export declare class MetadataProperties {
|
|
89861
|
-
constructor(props: {
|
|
89862
|
-
/** The commit ID. */
|
|
89863
|
-
CommitId?: string;
|
|
89864
|
-
/** The entity this entity was generated by. */
|
|
89865
|
-
GeneratedBy?: string;
|
|
89866
|
-
/** The project ID metadata. */
|
|
89867
|
-
ProjectId?: string;
|
|
89868
|
-
/** The repository metadata. */
|
|
89869
|
-
Repository?: string;
|
|
89870
|
-
});
|
|
89871
|
-
}
|
|
89872
|
-
|
|
89873
89901
|
export declare class MetadataTableConfiguration {
|
|
89874
89902
|
constructor(props: {
|
|
89875
89903
|
/** The destination information for the metadata table configuration. The destination table bucket must be in the same Region and AWS-account as the general purpose bucket. The specified metadata table name must be unique within the ``aws_s3_metadata`` namespace in the destination table bucket. */
|
|
@@ -119174,6 +119202,37 @@ export declare class TrendmicroSourceProperties {
|
|
|
119174
119202
|
});
|
|
119175
119203
|
}
|
|
119176
119204
|
|
|
119205
|
+
export declare class TrialComponent_MetadataProperties {
|
|
119206
|
+
constructor(props: {
|
|
119207
|
+
/** The commit ID. */
|
|
119208
|
+
CommitId?: string;
|
|
119209
|
+
/** The entity this entity was generated by. */
|
|
119210
|
+
GeneratedBy?: string;
|
|
119211
|
+
/** The project ID. */
|
|
119212
|
+
ProjectId?: string;
|
|
119213
|
+
/** The repository. */
|
|
119214
|
+
Repository?: string;
|
|
119215
|
+
});
|
|
119216
|
+
}
|
|
119217
|
+
|
|
119218
|
+
export declare class TrialComponent_TrialComponentStatus {
|
|
119219
|
+
constructor(props: {
|
|
119220
|
+
/** If the component failed, a message describing why. */
|
|
119221
|
+
Message?: string;
|
|
119222
|
+
/** The status of the trial component. */
|
|
119223
|
+
PrimaryStatus?: "Completed" | "Failed" | "InProgress" | "Stopped" | "Stopping";
|
|
119224
|
+
});
|
|
119225
|
+
}
|
|
119226
|
+
|
|
119227
|
+
export declare class TrialComponentStatus {
|
|
119228
|
+
constructor(props: {
|
|
119229
|
+
/** If the component failed, a message describing why. */
|
|
119230
|
+
Message?: string;
|
|
119231
|
+
/** The status of the trial component. */
|
|
119232
|
+
PrimaryStatus?: "Completed" | "Failed" | "InProgress" | "Stopped" | "Stopping";
|
|
119233
|
+
});
|
|
119234
|
+
}
|
|
119235
|
+
|
|
119177
119236
|
export declare class Trigger_Action {
|
|
119178
119237
|
constructor(props: {
|
|
119179
119238
|
/** The job arguments used when this trigger fires. For this job run, they replace the default arguments set in the job definition itself. */
|
|
@@ -127815,7 +127874,7 @@ export type GatewayTarget_SchemaType =
|
|
|
127815
127874
|
| "object"
|
|
127816
127875
|
| "string";
|
|
127817
127876
|
|
|
127818
|
-
export type GatewayTarget_TargetProtocolType = "HTTP" | "MCP";
|
|
127877
|
+
export type GatewayTarget_TargetProtocolType = "HTTP" | "INFERENCE" | "MCP";
|
|
127819
127878
|
|
|
127820
127879
|
export type GatewayTarget_TargetStatus =
|
|
127821
127880
|
| "CREATE_PENDING_AUTH"
|
package/src/generated/index.ts
CHANGED
|
@@ -1500,6 +1500,7 @@ export const TransitGatewayRouteTableAttachment = createResource("AWS::NetworkMa
|
|
|
1500
1500
|
export const TransitGatewayRouteTablePropagation = createResource("AWS::EC2::TransitGatewayRouteTablePropagation", "aws", {});
|
|
1501
1501
|
export const TransitGatewayVpcAttachment = createResource("AWS::EC2::TransitGatewayVpcAttachment", "aws", {"Id":"Id"});
|
|
1502
1502
|
export const TransitVirtualInterface = createResource("AWS::DirectConnect::TransitVirtualInterface", "aws", {"BgpPeers_Item_BgpPeerId":"BgpPeers.*.BgpPeerId","VirtualInterfaceArn":"VirtualInterfaceArn","VirtualInterfaceId":"VirtualInterfaceId"});
|
|
1503
|
+
export const TrialComponent = createResource("AWS::SageMaker::TrialComponent", "aws", {"TrialComponentArn":"TrialComponentArn","CreationTime":"CreationTime","LastModifiedTime":"LastModifiedTime","LineageGroupArn":"LineageGroupArn"});
|
|
1503
1504
|
export const Trigger = createResource("AWS::Glue::Trigger", "aws", {});
|
|
1504
1505
|
export const TrustAnchor = createResource("AWS::RolesAnywhere::TrustAnchor", "aws", {"TrustAnchorId":"TrustAnchorId","TrustAnchorArn":"TrustAnchorArn"});
|
|
1505
1506
|
export const TrustedEntitySet = createResource("AWS::GuardDuty::TrustedEntitySet", "aws", {"Id":"Id","Status":"Status","CreatedAt":"CreatedAt","UpdatedAt":"UpdatedAt","ErrorDetails":"ErrorDetails"});
|
|
@@ -6938,7 +6939,6 @@ export const MessageTemplateAttachment = createProperty("AWS::Wisdom::MessageTem
|
|
|
6938
6939
|
export const MessageTemplateAttributes = createProperty("AWS::Wisdom::MessageTemplate.MessageTemplateAttributes", "aws");
|
|
6939
6940
|
export const MetadataCatalogConfig = createProperty("AWS::AppFlow::Flow.MetadataCatalogConfig", "aws");
|
|
6940
6941
|
export const MetadataDestination = createProperty("AWS::S3::Bucket.MetadataDestination", "aws");
|
|
6941
|
-
export const MetadataProperties = createProperty("AWS::SageMaker::ModelPackage.MetadataProperties", "aws");
|
|
6942
6942
|
export const MetadataTableConfiguration = createProperty("AWS::S3::Bucket.MetadataTableConfiguration", "aws");
|
|
6943
6943
|
export const MetadataTableEncryptionConfiguration = createProperty("AWS::S3::Bucket.MetadataTableEncryptionConfiguration", "aws");
|
|
6944
6944
|
export const Method_Integration = createProperty("AWS::ApiGateway::Method.Integration", "aws");
|
|
@@ -10012,6 +10012,9 @@ export const TreatmentObject = createProperty("AWS::Evidently::Experiment.Treatm
|
|
|
10012
10012
|
export const TreatmentToWeight = createProperty("AWS::Evidently::Experiment.TreatmentToWeight", "aws");
|
|
10013
10013
|
export const TrendmicroConnectorProfileCredentials = createProperty("AWS::AppFlow::ConnectorProfile.TrendmicroConnectorProfileCredentials", "aws");
|
|
10014
10014
|
export const TrendmicroSourceProperties = createProperty("AWS::AppFlow::Flow.TrendmicroSourceProperties", "aws");
|
|
10015
|
+
export const TrialComponent_MetadataProperties = createProperty("AWS::SageMaker::TrialComponent.MetadataProperties", "aws");
|
|
10016
|
+
export const TrialComponent_TrialComponentStatus = createProperty("AWS::SageMaker::TrialComponent.TrialComponentStatus", "aws");
|
|
10017
|
+
export const TrialComponentStatus = createProperty("AWS::SageMaker::TrialComponent.TrialComponentStatus", "aws");
|
|
10015
10018
|
export const Trigger_Action = createProperty("AWS::Glue::Trigger.Action", "aws");
|
|
10016
10019
|
export const Trigger_Condition = createProperty("AWS::Glue::Trigger.Condition", "aws");
|
|
10017
10020
|
export const Trigger_EventBatchingCondition = createProperty("AWS::Glue::Trigger.EventBatchingCondition", "aws");
|