1
+ import cdk = require( '@aws-cdk/cdk' ) ;
2
+ import { ClusterParameterGroupRef } from './cluster-parameter-group-ref' ;
3
+ import { Parameters } from './props' ;
4
+ import { cloudformation , DBClusterParameterGroupName } from './rds.generated' ;
5
+
6
+ /**
7
+ * Properties for a cluster parameter group
8
+ */
9
+ export interface ClusterParameterGroupProps {
10
+ /**
11
+ * Database family of this parameter group
12
+ */
13
+ family : string ;
14
+
15
+ /**
16
+ * Description for this parameter group
17
+ */
18
+ description : string ;
19
+
20
+ /**
21
+ * The parameters in this parameter group
22
+ */
23
+ parameters ?: Parameters ;
24
+ }
25
+
26
+ /**
27
+ * Defina a cluster parameter group
28
+ */
29
+ export class ClusterParameterGroup extends ClusterParameterGroupRef {
30
+ public readonly parameterGroupName : DBClusterParameterGroupName ;
31
+ private readonly parameters : Parameters = { } ;
32
+
33
+ constructor ( parent : cdk . Construct , id : string , props : ClusterParameterGroupProps ) {
34
+ super ( parent , id ) ;
35
+
36
+ const resource = new cloudformation . DBClusterParameterGroupResource ( this , 'Resource' , {
37
+ description : props . description ,
38
+ family : props . family ,
39
+ parameters : new cdk . Token ( ( ) => this . parameters ) ,
40
+ } ) ;
41
+
42
+ for ( const [ key , value ] of Object . entries ( props . parameters || { } ) ) {
43
+ this . setParameter ( key , value ) ;
44
+ }
45
+
46
+ this . parameterGroupName = resource . ref ;
47
+ }
48
+
49
+ /**
50
+ * Set a single parameter in this parameter group
51
+ */
52
+ public setParameter ( key : string , value : string | undefined ) {
53
+ if ( value === undefined && key in this . parameters ) {
54
+ delete this . parameters [ key ] ;
55
+ }
56
+ if ( value !== undefined ) {
57
+ this . parameters [ key ] = value ;
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Remove a previously-set parameter from this parameter group
63
+ */
64
+ public removeParameter ( key : string ) {
65
+ this . setParameter ( key , undefined ) ;
66
+ }
67
+
68
+ /**
69
+ * Validate this construct
70
+ */
71
+ public validate ( ) : string [ ] {
72
+ if ( Object . keys ( this . parameters ) . length === 0 ) {
73
+ return [ 'At least one parameter required, call setParameter().' ] ;
74
+ }
75
+ return [ ] ;
76
+ }
77
+ }
0 commit comments