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