drupalcluster 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c8d457e4dcb27114f13fbef2af0d92279d17caf6
4
- data.tar.gz: 993e01b7fc9bdfd7b11e083a9dd2a7d177199f03
3
+ metadata.gz: a1bb745a1cf7e2ddf027b8a07c905947e6cdf7a2
4
+ data.tar.gz: 3a9ec40a4c81ee677cf72ad132d292bcecd2fbb5
5
5
  SHA512:
6
- metadata.gz: 2c378072481dd82c976d31687bd69f47cbb2662327a5db72681928d0460ffd48b3966c0f3fc875b2f56a48bcc0c4afbfdd90efdebcdba636f3da36889c4e3825
7
- data.tar.gz: c693336408ca3f4b2c3a66348400b1edc58b3c0cdb394fa58362f4f50d156ef2361b0c8420a89f471a608d83190d2b0da09da3ed490c8e2db5b3cf2e73c8c3ad
6
+ metadata.gz: 373cc24151bce5d73fa0596324c8f61aa892a8078ad4960cf309b83137b9cfdfbdce62d6b5a625675d678be717611bd8785c24f193381880bc8357ee146bcd84
7
+ data.tar.gz: 15e27278221b1fba58c1bcf9c08e35f61b0254e4dbeee63819040bef2a8a2fdc607b0cfde51f76b427f452c932cf41f0755e7ecca41eaee1b7a35e31d51aa9c6
@@ -0,0 +1,487 @@
1
+ AWSTemplateFormatVersion: 2010-09-09
2
+ Description: >-
3
+ LAMP Multi-AZ with Drupal, using Elastic File System and cloud RDS db
4
+ Parameters:
5
+ VpcId:
6
+ Type: 'AWS::EC2::VPC::Id'
7
+ Description: VpcId of your existing Virtual Private Cloud (VPC)
8
+ ConstraintDescription: must be the VPC Id of an existing Virtual Private Cloud.
9
+ SubnetA:
10
+ Type: AWS::EC2::Subnet::Id
11
+ Description: A SubnetId in your Virtual Private Cloud (VPC)
12
+ ConstraintDescription: >-
13
+ Should be residing in the selected Virtual Private Cloud.
14
+ SubnetB:
15
+ Type: AWS::EC2::Subnet::Id
16
+ Description: A SubnetId from another availability zone than SubnetA in your Virtual Private Cloud (VPC)
17
+ ConstraintDescription: >-
18
+ Should be residing in the selected Virtual Private Cloud.
19
+ SubnetA and SubnetB must be in different Availability Zones.
20
+ KeyName:
21
+ Description: Name of an existing EC2 KeyPair to enable SSH access to the instances
22
+ Type: 'AWS::EC2::KeyPair::KeyName'
23
+ ConstraintDescription: must be the name of an existing EC2 KeyPair.
24
+ HealthCheckInterval:
25
+ Default: '10'
26
+ Description: How frequent CloudWatch should check health of instances (in seconds).
27
+ Type: String
28
+ UnhealthyAfter:
29
+ Default: '5'
30
+ Description: How many CloudWatch health checks to determine instance is out of order.
31
+ Type: String
32
+ PuppetMasterIp:
33
+ Description: The (internal) IP address of the puppet master for the system.
34
+ Type: String
35
+ DBName:
36
+ Default: drupaldb
37
+ Description: MySQL database name
38
+ Type: String
39
+ MinLength: '1'
40
+ MaxLength: '64'
41
+ AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
42
+ ConstraintDescription: must begin with a letter and contain only alphanumeric characters.
43
+ DBUser:
44
+ Default: admin
45
+ Description: Username for MySQL database access
46
+ Type: String
47
+ MinLength: '1'
48
+ MaxLength: '16'
49
+ AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
50
+ ConstraintDescription: must begin with a letter and contain only alphanumeric characters.
51
+ DBPassword:
52
+ Default: password
53
+ NoEcho: 'true'
54
+ Description: Password for MySQL database access
55
+ Type: String
56
+ MinLength: '8'
57
+ MaxLength: '41'
58
+ AllowedPattern: '[a-zA-Z0-9]*'
59
+ ConstraintDescription: Must contain at least 8 alphanumeric characters.
60
+ DBAllocatedStorage:
61
+ Default: '5'
62
+ Description: The size of the database (Gb)
63
+ Type: Number
64
+ MinValue: '5'
65
+ MaxValue: '1024'
66
+ ConstraintDescription: must be between 5 and 1024Gb.
67
+ MultiAZDatabase:
68
+ Default: 'false'
69
+ Description: Create a Multi-AZ MySQL Amazon RDS database instance
70
+ Type: String
71
+ AllowedValues:
72
+ - 'true'
73
+ - 'false'
74
+ ConstraintDescription: must be either true or false.
75
+ WebServerCapacity:
76
+ Default: '2'
77
+ Description: The initial nuber of WebServer instances
78
+ Type: Number
79
+ MinValue: '1'
80
+ MaxValue: '5'
81
+ ConstraintDescription: must be between 1 and 5 EC2 instances.
82
+ SSHLocation:
83
+ Description: ' The IP address range that can be used to SSH to the EC2 instances'
84
+ Type: String
85
+ MinLength: '9'
86
+ MaxLength: '18'
87
+ Default: 0.0.0.0/0
88
+ AllowedPattern: '(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})'
89
+ ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.
90
+ Resources:
91
+ ##
92
+ #
93
+ EFSSecurityGroup:
94
+ Type: 'AWS::EC2::SecurityGroup'
95
+ Properties:
96
+ GroupDescription: Enable HTTP access via port 80 locked down to the ELB and SSH access
97
+ SecurityGroupIngress:
98
+ - IpProtocol: tcp
99
+ FromPort: '0'
100
+ ToPort: '65535'
101
+ SourceSecurityGroupId: !Ref WebServerSecurityGroup
102
+ VpcId: !Ref VpcId
103
+ SharedDirectory:
104
+ Type: 'AWS::EFS::FileSystem'
105
+ Properties:
106
+ PerformanceMode: generalPurpose
107
+ FileSystemTags:
108
+ - Key: Name
109
+ Value: !Ref 'AWS::StackName'
110
+ MountPtA:
111
+ Type: AWS::EFS::MountTarget
112
+ Properties:
113
+ FileSystemId: !Ref SharedDirectory
114
+ SubnetId: !Ref SubnetA
115
+ SecurityGroups: [!Ref EFSSecurityGroup]
116
+ MountPtB:
117
+ Type: AWS::EFS::MountTarget
118
+ Properties:
119
+ FileSystemId: !Ref SharedDirectory
120
+ SubnetId: !Ref SubnetB
121
+ SecurityGroups: [!Ref EFSSecurityGroup]
122
+ ##
123
+ #
124
+ ALBSecurityGroup:
125
+ Type: AWS::EC2::SecurityGroup
126
+ Properties:
127
+ GroupDescription: >-
128
+ Enable HTTP access via port 80 and SSH on port 22,
129
+ and also puppet on port 8140
130
+ SecurityGroupIngress:
131
+ - IpProtocol: tcp
132
+ FromPort: '80'
133
+ ToPort: '80'
134
+ CidrIp: !Ref SSHLocation
135
+ - IpProtocol: tcp
136
+ FromPort: '22'
137
+ ToPort: '22'
138
+ CidrIp: !Ref SSHLocation
139
+ - IpProtocol: tcp
140
+ FromPort: '8140'
141
+ ToPort: '8140'
142
+ CidrIp: !Sub '${PuppetMasterIp}/32'
143
+ VpcId: !Ref VpcId
144
+ ApplicationLoadBalancer:
145
+ Type: AWS::ElasticLoadBalancingV2::LoadBalancer
146
+ Properties:
147
+ SecurityGroups:
148
+ - !Ref ALBSecurityGroup
149
+ Subnets:
150
+ - !Ref SubnetA
151
+ - !Ref SubnetB
152
+ ALBListener:
153
+ Type: 'AWS::ElasticLoadBalancingV2::Listener'
154
+ Properties:
155
+ DefaultActions:
156
+ - Type: forward
157
+ TargetGroupArn: !Ref ALBTargetGroup
158
+ LoadBalancerArn: !Ref ApplicationLoadBalancer
159
+ Port: '80'
160
+ Protocol: HTTP
161
+ ALBTargetGroup:
162
+ Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'
163
+ Properties:
164
+ HealthCheckIntervalSeconds: !Ref HealthCheckInterval
165
+ HealthCheckTimeoutSeconds: 5
166
+ HealthyThresholdCount: 2
167
+ Port: 80
168
+ Protocol: HTTP
169
+ UnhealthyThresholdCount: !Ref UnhealthyAfter
170
+ VpcId: !Ref VpcId
171
+ TargetGroupAttributes:
172
+ - Key: stickiness.enabled
173
+ Value: 'true'
174
+ - Key: stickiness.type
175
+ Value: lb_cookie
176
+ - Key: stickiness.lb_cookie.duration_seconds
177
+ Value: '30'
178
+ ##
179
+ #
180
+ WebServerSecurityGroup:
181
+ Type: 'AWS::EC2::SecurityGroup'
182
+ Properties:
183
+ GroupDescription: Enable HTTP access via port 80 locked down to the ELB and SSH access
184
+ SecurityGroupIngress:
185
+ - IpProtocol: tcp
186
+ FromPort: '80'
187
+ ToPort: '80'
188
+ SourceSecurityGroupId: !Ref ALBSecurityGroup
189
+ - IpProtocol: tcp
190
+ FromPort: '22'
191
+ ToPort: '22'
192
+ CidrIp: !Ref SSHLocation
193
+ - IpProtocol: tcp
194
+ FromPort: '8140'
195
+ ToPort: '8140'
196
+ CidrIp: !Sub ${PuppetMasterIp}/32
197
+ VpcId: !Ref VpcId
198
+ WebServerGroup:
199
+ Type: 'AWS::AutoScaling::AutoScalingGroup'
200
+ Properties:
201
+ VPCZoneIdentifier:
202
+ - !Ref SubnetA
203
+ - !Ref SubnetB
204
+ LaunchConfigurationName: !Ref LaunchConfig
205
+ MinSize: '1'
206
+ MaxSize: '5'
207
+ DesiredCapacity: !Ref WebServerCapacity
208
+ TargetGroupARNs:
209
+ - !Ref ALBTargetGroup
210
+ CreationPolicy:
211
+ ResourceSignal:
212
+ Timeout: PT5M
213
+ Count: !Ref WebServerCapacity
214
+ UpdatePolicy:
215
+ AutoScalingRollingUpdate:
216
+ MinInstancesInService: '1'
217
+ MaxBatchSize: '1'
218
+ PauseTime: PT15M
219
+ WaitOnResourceSignals: 'true'
220
+ LaunchConfig:
221
+ Type: 'AWS::AutoScaling::LaunchConfiguration'
222
+ Metadata:
223
+ 'AWS::CloudFormation::Init':
224
+ configSets:
225
+ drupal_install:
226
+ - install_cfn
227
+ - install_php
228
+ - start_httpd
229
+ - install_drupal
230
+ - install_puppet
231
+ install_cfn:
232
+ files:
233
+ /etc/cfn/cfn-hup.conf:
234
+ content: !Sub |
235
+ [main]
236
+ stack=${AWS::StackId}
237
+ region=${AWS::Region}
238
+
239
+ mode: '000400'
240
+ owner: root
241
+ group: root
242
+ /etc/cfn/hooks.d/cfn-auto-reloader.conf:
243
+ content: !Join
244
+ - ''
245
+ - - |
246
+ [cfn-auto-reloader-hook]
247
+ triggers=post.update
248
+ path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Init
249
+ - !Sub >
250
+ action=/opt/aws/bin/cfn-init -v
251
+ --stack ${AWS::StackName}
252
+ --resource LaunchConfig
253
+ --configsets drupal_install
254
+ --region ${AWS::Region}
255
+ - |
256
+ runas=root
257
+ mode: '000400'
258
+ owner: root
259
+ group: root
260
+ services:
261
+ sysvinit:
262
+ cfn-hup:
263
+ enabled: 'true'
264
+ ensureRunning: 'true'
265
+ files:
266
+ - /etc/cfn/cfn-hup.conf
267
+ - /etc/cfn/hooks.d/cfn-auto-reloader.conf
268
+ install_php:
269
+ packages:
270
+ yum:
271
+ php: []
272
+ php-mysql: []
273
+ php-cli: []
274
+ php-common: []
275
+ php-xml: []
276
+ php-pdo: []
277
+ php-gd: []
278
+ php-mbstring: []
279
+ start_httpd:
280
+ packages:
281
+ yum:
282
+ httpd: []
283
+ files:
284
+ /var/www/html/index.php:
285
+ content: !Sub
286
+ - |
287
+ <html>
288
+ <head>
289
+ <title>AWS CloudFormation PHP Sample</title>
290
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
291
+ </head>
292
+ <body>
293
+ <h1>Welcome to the AWS CloudFormation PHP Sample</h1>
294
+ <p/>
295
+ <?php
296
+ // Print out the current data and tie
297
+ print "The Current Date and Time is: <br/>";
298
+ print date("g:i A l, F j Y.");
299
+ ?>
300
+ <p/>
301
+ <?php
302
+ // Setup a handle for CURL
303
+ $curl_handle=curl_init();
304
+ curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
305
+ curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
306
+ // Get the hostname of the intance from the instance metadata
307
+ curl_setopt($curl_handle,CURLOPT_URL,'http://169.254.169.254/latest/meta-data/public-hostname');
308
+ $hostname = curl_exec($curl_handle);
309
+ if (empty($hostname))
310
+ {
311
+ print "Sorry, for some reason, we got no hostname back <br />";
312
+ }
313
+ else
314
+ {
315
+ print "Server = " . $hostname . "<br />";
316
+ }
317
+ // Get the instance-id of the intance from the instance metadata
318
+ curl_setopt($curl_handle,CURLOPT_URL,'http://169.254.169.254/latest/meta-data/instance-id');
319
+ $instanceid = curl_exec($curl_handle);
320
+ if (empty($instanceid))
321
+ {
322
+ print "Sorry, for some reason, we got no instance id back <br />";
323
+ }
324
+ else
325
+ {
326
+ print "EC2 instance-id = " . $instanceid . "<br />";
327
+ }
328
+ $Database = "${DB}";
329
+ $DBUser = "${DBUser}";
330
+ $DBPassword = "${DBPassword}";
331
+ print "Database = " . $Database . "<br />";
332
+ $dbconnection = mysql_connect($Database, $DBUser, $DBPassword)
333
+ or die("Could not connect: " . mysql_error());
334
+ print ("Connected to $Database successfully");
335
+ mysql_close($dbconnection);
336
+ ?>
337
+ <h2>PHP Information</h2>
338
+ <p/>
339
+ <?php
340
+ phpinfo();
341
+ ?>
342
+ </body>
343
+ </html>
344
+ - DB: !GetAtt [MySQLDatabase, Endpoint.Address]
345
+ mode: '000600'
346
+ owner: apache
347
+ group: apache
348
+ #/etc/httpd/conf/httpd.conf:
349
+ services:
350
+ sysvinit:
351
+ httpd:
352
+ enabled: 'true'
353
+ ensureRunning: 'true'
354
+ install_drupal:
355
+ packages:
356
+ yum:
357
+ nfs-utils: []
358
+ sources:
359
+ /tmp: https://ftp.drupal.org/files/projects/drupal-7.56.tar.gz
360
+ files:
361
+ /init/drupal_init:
362
+ content: !Sub
363
+ - |
364
+ #!/bin/bash
365
+ echo "This msg is from ${AWS::Region}" >> initfile
366
+ echo "EFS: ${EFS}" >> initfile
367
+ echo "DB: ${DB}" >> initfile
368
+ mkdir -p /efs
369
+ mount -t nfs4 -o nfsvers=4.1,hard,timeo=600,retrans=2 ${EFS}:/ /efs
370
+ cd /efs
371
+ if [ ! -d /efs/drupal ]
372
+ then
373
+ /init/first_meet_drupal
374
+ fi
375
+ ln -s /efs/drupal /var/www/html/drupal
376
+ - DB: !GetAtt [MySQLDatabase, Endpoint.Address]
377
+ EFS: !Sub >-
378
+ ${SharedDirectory}.efs.${AWS::Region}.amazonaws.com
379
+ mode: '755'
380
+ /init/first_meet_drupal:
381
+ content: |
382
+ cp -r /tmp/drupal-7.56 /efs/drupal
383
+ cd /efs/drupal
384
+ mkdir files
385
+ cd sites/default
386
+ cp default.settings.php settings.php
387
+ # we might write db details in settings.php
388
+ # and resume presaved MySQL dump
389
+ cd ../..
390
+ chmod -R a+rw *
391
+ mode: '755'
392
+ commands:
393
+ init:
394
+ command: ./drupal_init >drupal_init.out 2>drupal_init.err
395
+ cwd: /init
396
+ install_puppet:
397
+ packages:
398
+ yum:
399
+ puppet: []
400
+ files:
401
+ /init/puppet_init:
402
+ content: !Sub |
403
+ #!/bin/bash
404
+ echo "${PuppetMasterIp} puppet" >> /etc/hosts
405
+ echo " server = puppet" >> /etc/puppet/puppet.conf
406
+ puppet agent --waitforcert 120
407
+ mode: '755'
408
+ services:
409
+ sysvinit:
410
+ puppet:
411
+ enabled: 'true'
412
+ ensureRunning: 'true'
413
+ commands:
414
+ init:
415
+ command: ./puppet_init >puppet_init.out 2>puppet_init.err
416
+ cwd: /init
417
+ ignoreErrors: true
418
+ Properties:
419
+ ImageId: ami-ea26ce85
420
+ InstanceType: t2.micro
421
+ SecurityGroups:
422
+ - !Ref WebServerSecurityGroup
423
+ KeyName: !Ref KeyName
424
+ UserData: !Base64
425
+ Fn::Sub: |
426
+ #!/bin/bash -xe
427
+ PROMPT="export PS1=\"\[\033[1;48m\]\u@\h-${AWS::StackName} \[\033[00m\]\W> \""
428
+ echo "$PROMPT" >> /root/.bashrc
429
+ echo "$PROMPT" >> /home/ec2-user/.bashrc
430
+ yum update -y # aws-cfn-bootstrap
431
+ # Install the files and packages from the metadata
432
+ opts="--stack ${AWS::StackName} --region ${AWS::Region} --resource"
433
+ cfn="/opt/aws/bin/cfn"
434
+ $cfn-init -v $opts LaunchConfig --configsets drupal_install
435
+
436
+ # Signal the status from cfn-init
437
+ $cfn-signal -e $? $opts WebServerGroup
438
+ ##
439
+ #
440
+ DBEC2SecurityGroup:
441
+ Type: 'AWS::EC2::SecurityGroup'
442
+ Properties:
443
+ GroupDescription: Open database for access
444
+ SecurityGroupIngress:
445
+ - IpProtocol: tcp
446
+ FromPort: '3306'
447
+ ToPort: '3306'
448
+ SourceSecurityGroupId: !Ref WebServerSecurityGroup
449
+ VpcId: !Ref VpcId
450
+ MySQLDatabase:
451
+ Type: 'AWS::RDS::DBInstance'
452
+ Properties:
453
+ Engine: MySQL
454
+ DBName: !Ref DBName
455
+ MultiAZ: !Ref MultiAZDatabase
456
+ MasterUsername: !Ref DBUser
457
+ MasterUserPassword: !Ref DBPassword
458
+ DBInstanceClass: db.t2.micro
459
+ AllocatedStorage: !Ref DBAllocatedStorage
460
+ VPCSecurityGroups:
461
+ - !GetAtt [DBEC2SecurityGroup, GroupId]
462
+ ##
463
+ #
464
+ Outputs:
465
+ WebsiteURL:
466
+ Description: |
467
+ URL for newly created Drupal cluster.
468
+ Installation required.
469
+ Value: !Join
470
+ - ''
471
+ - - 'http://'
472
+ - !GetAtt [ApplicationLoadBalancer, DNSName]
473
+ - '/drupal'
474
+ DatabaseURL:
475
+ Description: >
476
+ URL for its MySQL database cluster.
477
+
478
+ Please fill it in the Advanced tab of
479
+ database settings during Drupal installation.
480
+ Value: !GetAtt [MySQLDatabase, Endpoint.Address]
481
+ DatabaseName:
482
+ Value: !Ref DBName
483
+ DatabaseUser:
484
+ Value: !Ref DBUser
485
+ #DatabasePassword:
486
+ # Description: (top secret)
487
+ # Value: !Ref DBPassword
@@ -0,0 +1,549 @@
1
+ AWSTemplateFormatVersion: 2010-09-09
2
+ Description: >-
3
+ LAMP Multi-AZ with Drupal, using Elastic File System and cloud RDS db,
4
+ all within a new VPC
5
+ Parameters:
6
+ VpcId:
7
+ Type: 'AWS::EC2::VPC::Id'
8
+ Description: The default VpcId, dummy parameter - not in use
9
+ ConstraintDescription: must be the VPC Id of an existing Virtual Private Cloud.
10
+ SubnetA:
11
+ Type: AWS::EC2::Subnet::Id
12
+ Description: Default subnet 1 in the default VPC, dummy parameter - not in use
13
+ ConstraintDescription: >-
14
+ Should be residing in the selected Virtual Private Cloud.
15
+ SubnetB:
16
+ Type: AWS::EC2::Subnet::Id
17
+ Description: Default subnet 2 in the default VPC, dummy parameter - not in use
18
+ ConstraintDescription: >-
19
+ Should be residing in the selected Virtual Private Cloud.
20
+ KeyName:
21
+ Description: Name of an existing EC2 KeyPair to enable SSH access to the instances
22
+ Type: 'AWS::EC2::KeyPair::KeyName'
23
+ ConstraintDescription: must be the name of an existing EC2 KeyPair.
24
+ HealthCheckInterval:
25
+ Default: '10'
26
+ Description: How frequent CloudWatch should check health of instances (in seconds).
27
+ Type: String
28
+ UnhealthyAfter:
29
+ Default: '5'
30
+ Description: How many CloudWatch health checks to determine instance is out of order.
31
+ Type: String
32
+ PuppetMasterIp:
33
+ Description: The (internal) IP address of the puppet master for the system.
34
+ Type: String
35
+ DBName:
36
+ Default: drupaldb
37
+ Description: MySQL database name
38
+ Type: String
39
+ MinLength: '1'
40
+ MaxLength: '64'
41
+ AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
42
+ ConstraintDescription: must begin with a letter and contain only alphanumeric characters.
43
+ DBUser:
44
+ Default: admin
45
+ Description: Username for MySQL database access
46
+ Type: String
47
+ MinLength: '1'
48
+ MaxLength: '16'
49
+ AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
50
+ ConstraintDescription: must begin with a letter and contain only alphanumeric characters.
51
+ DBPassword:
52
+ Default: password
53
+ NoEcho: 'true'
54
+ Description: Password for MySQL database access
55
+ Type: String
56
+ MinLength: '8'
57
+ MaxLength: '41'
58
+ AllowedPattern: '[a-zA-Z0-9]*'
59
+ ConstraintDescription: Must contain at least 8 alphanumeric characters.
60
+ DBAllocatedStorage:
61
+ Default: '5'
62
+ Description: The size of the database (Gb)
63
+ Type: Number
64
+ MinValue: '5'
65
+ MaxValue: '1024'
66
+ ConstraintDescription: must be between 5 and 1024Gb.
67
+ MultiAZDatabase:
68
+ Default: 'false'
69
+ Description: Create a Multi-AZ MySQL Amazon RDS database instance
70
+ Type: String
71
+ AllowedValues:
72
+ - 'true'
73
+ - 'false'
74
+ ConstraintDescription: must be either true or false.
75
+ WebServerCapacity:
76
+ Default: '2'
77
+ Description: The initial nuber of WebServer instances
78
+ Type: Number
79
+ MinValue: '1'
80
+ MaxValue: '5'
81
+ ConstraintDescription: must be between 1 and 5 EC2 instances.
82
+ SSHLocation:
83
+ Description: ' The IP address range that can be used to SSH to the EC2 instances'
84
+ Type: String
85
+ MinLength: '9'
86
+ MaxLength: '18'
87
+ Default: 0.0.0.0/0
88
+ AllowedPattern: '(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})'
89
+ ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.
90
+ Resources:
91
+ ##
92
+ #
93
+ Network:
94
+ Type: AWS::EC2::VPC
95
+ Properties:
96
+ CidrBlock: 12.1.0.0/16
97
+ EnableDnsHostnames: true
98
+ Tags:
99
+ - Key: Name
100
+ Value: !Sub ${AWS::StackName}-Network
101
+ MySubnetA:
102
+ Type: AWS::EC2::Subnet
103
+ Properties:
104
+ VpcId: !Ref Network
105
+ CidrBlock: 12.1.0.0/20
106
+ AvailabilityZone: !Sub ${AWS::Region}a
107
+ MapPublicIpOnLaunch: true
108
+ Tags:
109
+ - Key: Name
110
+ Value: !Sub ${AWS::StackName}-subnet-a
111
+ MySubnetB:
112
+ Type: AWS::EC2::Subnet
113
+ Properties:
114
+ VpcId: !Ref Network
115
+ CidrBlock: 12.1.16.0/20
116
+ AvailabilityZone: !Sub ${AWS::Region}b
117
+ MapPublicIpOnLaunch: true
118
+ Tags:
119
+ - Key: Name
120
+ Value: !Sub ${AWS::StackName}-subnet-b
121
+ #
122
+ Gateway:
123
+ Type: AWS::EC2::InternetGateway
124
+ Properties:
125
+ Tags:
126
+ - Key: Name
127
+ Value: !Sub ${AWS::StackName}-GW
128
+ AttachGateway:
129
+ Type: AWS::EC2::VPCGatewayAttachment
130
+ Properties:
131
+ VpcId: !Ref Network
132
+ InternetGatewayId: !Ref Gateway
133
+ ServerRouteTable:
134
+ Type: AWS::EC2::RouteTable
135
+ Properties:
136
+ VpcId: !Ref Network
137
+ ServerRoute:
138
+ Type: AWS::EC2::Route
139
+ DependsOn: Gateway
140
+ Properties:
141
+ RouteTableId: !Ref ServerRouteTable
142
+ DestinationCidrBlock: 0.0.0.0/0
143
+ GatewayId: !Ref Gateway
144
+ RouteTableAssociationA:
145
+ Type: AWS::EC2::SubnetRouteTableAssociation
146
+ Properties:
147
+ SubnetId: !Ref MySubnetA
148
+ RouteTableId: !Ref ServerRouteTable
149
+ RouteTableAssociationB:
150
+ Type: AWS::EC2::SubnetRouteTableAssociation
151
+ Properties:
152
+ SubnetId: !Ref MySubnetB
153
+ RouteTableId: !Ref ServerRouteTable
154
+ NetworkInterfaceA:
155
+ Type: AWS::EC2::NetworkInterface
156
+ Properties:
157
+ Description: Application network interface.
158
+ SourceDestCheck: 'false'
159
+ GroupSet:
160
+ - !Ref ALBSecurityGroup
161
+ SubnetId: !Ref MySubnetA
162
+ Tags:
163
+ - Key: Name
164
+ Value: !Sub ${AWS::StackName}-eni-a
165
+ NetworkInterfaceB:
166
+ Type: AWS::EC2::NetworkInterface
167
+ Properties:
168
+ Description: Application network interface.
169
+ SourceDestCheck: 'false'
170
+ GroupSet:
171
+ - !Ref ALBSecurityGroup
172
+ SubnetId: !Ref MySubnetB
173
+ Tags:
174
+ - Key: Name
175
+ Value: !Sub ${AWS::StackName}-eni-b
176
+ #
177
+ DBSubnetGroup:
178
+ Type: AWS::RDS::DBSubnetGroup
179
+ Properties:
180
+ DBSubnetGroupDescription: One more resource for full connectivity within the VPC
181
+ SubnetIds:
182
+ - !Ref MySubnetA
183
+ - !Ref MySubnetB
184
+ ##
185
+ #
186
+ EFSSecurityGroup:
187
+ Type: 'AWS::EC2::SecurityGroup'
188
+ Properties:
189
+ GroupDescription: Enable HTTP access via port 80 locked down to the ELB and SSH access
190
+ SecurityGroupIngress:
191
+ - IpProtocol: tcp
192
+ FromPort: '0'
193
+ ToPort: '65535'
194
+ SourceSecurityGroupId: !Ref WebServerSecurityGroup
195
+ VpcId: !Ref Network
196
+ SharedDirectory:
197
+ Type: 'AWS::EFS::FileSystem'
198
+ Properties:
199
+ PerformanceMode: generalPurpose
200
+ FileSystemTags:
201
+ - Key: Name
202
+ Value: !Ref 'AWS::StackName'
203
+ MountPtA:
204
+ Type: AWS::EFS::MountTarget
205
+ Properties:
206
+ FileSystemId: !Ref SharedDirectory
207
+ SubnetId: !Ref MySubnetA
208
+ SecurityGroups: [!Ref EFSSecurityGroup]
209
+ MountPtB:
210
+ Type: AWS::EFS::MountTarget
211
+ Properties:
212
+ FileSystemId: !Ref SharedDirectory
213
+ SubnetId: !Ref MySubnetB
214
+ SecurityGroups: [!Ref EFSSecurityGroup]
215
+ ##
216
+ #
217
+ ALBSecurityGroup:
218
+ Type: AWS::EC2::SecurityGroup
219
+ Properties:
220
+ GroupDescription: >-
221
+ Enable HTTP access via port 80 and SSH on port 22
222
+ SecurityGroupIngress:
223
+ - IpProtocol: tcp
224
+ FromPort: '80'
225
+ ToPort: '80'
226
+ CidrIp: !Ref SSHLocation
227
+ - IpProtocol: tcp
228
+ FromPort: '22'
229
+ ToPort: '22'
230
+ CidrIp: !Ref SSHLocation
231
+ VpcId: !Ref Network
232
+ ApplicationLoadBalancer:
233
+ Type: AWS::ElasticLoadBalancingV2::LoadBalancer
234
+ Properties:
235
+ SecurityGroups:
236
+ - !Ref ALBSecurityGroup
237
+ Subnets:
238
+ - !Ref MySubnetA
239
+ - !Ref MySubnetB
240
+ ALBListener:
241
+ Type: 'AWS::ElasticLoadBalancingV2::Listener'
242
+ Properties:
243
+ DefaultActions:
244
+ - Type: forward
245
+ TargetGroupArn: !Ref ALBTargetGroup
246
+ LoadBalancerArn: !Ref ApplicationLoadBalancer
247
+ Port: '80'
248
+ Protocol: HTTP
249
+ ALBTargetGroup:
250
+ Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'
251
+ Properties:
252
+ HealthCheckIntervalSeconds: !Ref HealthCheckInterval
253
+ HealthCheckTimeoutSeconds: 5
254
+ HealthyThresholdCount: 2
255
+ Port: 80
256
+ Protocol: HTTP
257
+ UnhealthyThresholdCount: !Ref UnhealthyAfter
258
+ VpcId: !Ref Network
259
+ TargetGroupAttributes:
260
+ - Key: stickiness.enabled
261
+ Value: 'true'
262
+ - Key: stickiness.type
263
+ Value: lb_cookie
264
+ - Key: stickiness.lb_cookie.duration_seconds
265
+ Value: '30'
266
+ ##
267
+ #
268
+ WebServerSecurityGroup:
269
+ Type: 'AWS::EC2::SecurityGroup'
270
+ Properties:
271
+ GroupDescription: Enable HTTP access via port 80 locked down to the ELB and SSH access
272
+ SecurityGroupIngress:
273
+ - IpProtocol: tcp
274
+ FromPort: '80'
275
+ ToPort: '80'
276
+ SourceSecurityGroupId: !Ref ALBSecurityGroup
277
+ - IpProtocol: tcp
278
+ FromPort: '22'
279
+ ToPort: '22'
280
+ CidrIp: !Ref SSHLocation
281
+ VpcId: !Ref Network
282
+ WebServerGroup:
283
+ Type: 'AWS::AutoScaling::AutoScalingGroup'
284
+ Properties:
285
+ VPCZoneIdentifier:
286
+ - !Ref MySubnetA
287
+ - !Ref MySubnetB
288
+ LaunchConfigurationName: !Ref LaunchConfig
289
+ MinSize: '1'
290
+ MaxSize: '5'
291
+ DesiredCapacity: !Ref WebServerCapacity
292
+ TargetGroupARNs:
293
+ - !Ref ALBTargetGroup
294
+ CreationPolicy:
295
+ ResourceSignal:
296
+ Timeout: PT5M
297
+ Count: !Ref WebServerCapacity
298
+ UpdatePolicy:
299
+ AutoScalingRollingUpdate:
300
+ MinInstancesInService: '1'
301
+ MaxBatchSize: '1'
302
+ PauseTime: PT15M
303
+ WaitOnResourceSignals: 'true'
304
+ LaunchConfig:
305
+ Type: 'AWS::AutoScaling::LaunchConfiguration'
306
+ Metadata:
307
+ 'AWS::CloudFormation::Init':
308
+ configSets:
309
+ drupal_install:
310
+ - install_cfn
311
+ - install_php
312
+ - start_httpd
313
+ - install_drupal
314
+ install_cfn:
315
+ files:
316
+ /etc/cfn/cfn-hup.conf:
317
+ content: !Sub |
318
+ [main]
319
+ stack=${AWS::StackId}
320
+ region=${AWS::Region}
321
+
322
+ mode: '000400'
323
+ owner: root
324
+ group: root
325
+ /etc/cfn/hooks.d/cfn-auto-reloader.conf:
326
+ content: !Join
327
+ - ''
328
+ - - |
329
+ [cfn-auto-reloader-hook]
330
+ triggers=post.update
331
+ path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Init
332
+ - !Sub >
333
+ action=/opt/aws/bin/cfn-init -v
334
+ --stack ${AWS::StackName}
335
+ --resource LaunchConfig
336
+ --configsets drupal_install
337
+ --region ${AWS::Region}
338
+ - |
339
+ runas=root
340
+ mode: '000400'
341
+ owner: root
342
+ group: root
343
+ services:
344
+ sysvinit:
345
+ cfn-hup:
346
+ enabled: 'true'
347
+ ensureRunning: 'true'
348
+ files:
349
+ - /etc/cfn/cfn-hup.conf
350
+ - /etc/cfn/hooks.d/cfn-auto-reloader.conf
351
+ install_php:
352
+ packages:
353
+ yum:
354
+ php: []
355
+ php-mysql: []
356
+ php-cli: []
357
+ php-common: []
358
+ php-xml: []
359
+ php-pdo: []
360
+ php-gd: []
361
+ php-mbstring: []
362
+ start_httpd:
363
+ packages:
364
+ yum:
365
+ httpd: []
366
+ files:
367
+ /var/www/html/index.php:
368
+ content: !Sub
369
+ - |
370
+ <html>
371
+ <head>
372
+ <title>AWS CloudFormation PHP Sample</title>
373
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
374
+ </head>
375
+ <body>
376
+ <h1>Welcome to the AWS CloudFormation PHP Sample</h1>
377
+ <p/>
378
+ <?php
379
+ // Print out the current data and tie
380
+ print "The Current Date and Time is: <br/>";
381
+ print date("g:i A l, F j Y.");
382
+ ?>
383
+ <p/>
384
+ <?php
385
+ // Setup a handle for CURL
386
+ $curl_handle=curl_init();
387
+ curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
388
+ curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
389
+ // Get the hostname of the intance from the instance metadata
390
+ curl_setopt($curl_handle,CURLOPT_URL,'http://169.254.169.254/latest/meta-data/public-hostname');
391
+ $hostname = curl_exec($curl_handle);
392
+ if (empty($hostname))
393
+ {
394
+ print "Sorry, for some reason, we got no hostname back <br />";
395
+ }
396
+ else
397
+ {
398
+ print "Server = " . $hostname . "<br />";
399
+ }
400
+ // Get the instance-id of the intance from the instance metadata
401
+ curl_setopt($curl_handle,CURLOPT_URL,'http://169.254.169.254/latest/meta-data/instance-id');
402
+ $instanceid = curl_exec($curl_handle);
403
+ if (empty($instanceid))
404
+ {
405
+ print "Sorry, for some reason, we got no instance id back <br />";
406
+ }
407
+ else
408
+ {
409
+ print "EC2 instance-id = " . $instanceid . "<br />";
410
+ }
411
+ $Database = "${DB}";
412
+ $DBUser = "${DBUser}";
413
+ $DBPassword = "${DBPassword}";
414
+ print "Database = " . $Database . "<br />";
415
+ $dbconnection = mysql_connect($Database, $DBUser, $DBPassword)
416
+ or die("Could not connect: " . mysql_error());
417
+ print ("Connected to $Database successfully");
418
+ mysql_close($dbconnection);
419
+ ?>
420
+ <h2>PHP Information</h2>
421
+ <p/>
422
+ <?php
423
+ phpinfo();
424
+ ?>
425
+ </body>
426
+ </html>
427
+ - DB: !GetAtt [MySQLDatabase, Endpoint.Address]
428
+ mode: '000600'
429
+ owner: apache
430
+ group: apache
431
+ #/etc/httpd/conf/httpd.conf:
432
+ services:
433
+ sysvinit:
434
+ httpd:
435
+ enabled: 'true'
436
+ ensureRunning: 'true'
437
+ install_drupal:
438
+ packages:
439
+ yum:
440
+ nfs-utils: []
441
+ sources:
442
+ /tmp: https://ftp.drupal.org/files/projects/drupal-7.56.tar.gz
443
+ files:
444
+ /init/drupal_init:
445
+ content: !Sub
446
+ - |
447
+ #!/bin/bash
448
+ echo "This msg is from ${AWS::Region}" >> initfile
449
+ echo "EFS: ${EFS}" >> initfile
450
+ echo "DB: ${DB}" >> initfile
451
+ mkdir -p /efs
452
+ mount -t nfs4 -o nfsvers=4.1,hard,timeo=600,retrans=2 ${EFS}:/ /efs
453
+ cd /efs
454
+ if [ ! -d /efs/drupal ]
455
+ then
456
+ /init/first_meet_drupal
457
+ fi
458
+ ln -s /efs/drupal /var/www/html/drupal
459
+ - DB: !GetAtt [MySQLDatabase, Endpoint.Address]
460
+ EFS: !Sub >-
461
+ ${SharedDirectory}.efs.${AWS::Region}.amazonaws.com
462
+ mode: '755'
463
+ /init/first_meet_drupal:
464
+ content: |
465
+ cp -r /tmp/drupal-7.56 /efs/drupal
466
+ cd /efs/drupal
467
+ mkdir files
468
+ cd sites/default
469
+ cp default.settings.php settings.php
470
+ # we might write db details in settings.php
471
+ # and resume presaved MySQL dump
472
+ cd ../..
473
+ chmod -R a+rw *
474
+ mode: '755'
475
+ commands:
476
+ init:
477
+ command: ./drupal_init >drupal_init.out 2>drupal_init.err
478
+ cwd: /init
479
+ Properties:
480
+ ImageId: ami-ea26ce85
481
+ InstanceType: t2.micro
482
+ SecurityGroups:
483
+ - !Ref WebServerSecurityGroup
484
+ KeyName: !Ref KeyName
485
+ UserData: !Base64
486
+ Fn::Sub: |
487
+ #!/bin/bash -xe
488
+ PROMPT="export PS1=\"\[\033[1;48m\]\u@\h-${AWS::StackName} \[\033[00m\]\W> \""
489
+ echo "$PROMPT" >> /root/.bashrc
490
+ echo "$PROMPT" >> /home/ec2-user/.bashrc
491
+ yum update -y # aws-cfn-bootstrap
492
+ # Install the files and packages from the metadata
493
+ opts="--stack ${AWS::StackName} --region ${AWS::Region} --resource"
494
+ cfn="/opt/aws/bin/cfn"
495
+ $cfn-init -v $opts LaunchConfig --configsets drupal_install
496
+
497
+ # Signal the status from cfn-init
498
+ $cfn-signal -e $? $opts WebServerGroup
499
+ ##
500
+ #
501
+ DBEC2SecurityGroup:
502
+ Type: 'AWS::EC2::SecurityGroup'
503
+ Properties:
504
+ GroupDescription: Open database for access
505
+ SecurityGroupIngress:
506
+ - IpProtocol: tcp
507
+ FromPort: '3306'
508
+ ToPort: '3306'
509
+ SourceSecurityGroupId: !Ref WebServerSecurityGroup
510
+ VpcId: !Ref Network
511
+ MySQLDatabase:
512
+ Type: 'AWS::RDS::DBInstance'
513
+ Properties:
514
+ Engine: MySQL
515
+ DBName: !Ref DBName
516
+ MultiAZ: !Ref MultiAZDatabase
517
+ MasterUsername: !Ref DBUser
518
+ MasterUserPassword: !Ref DBPassword
519
+ DBInstanceClass: db.t2.micro
520
+ DBSubnetGroupName: !Ref DBSubnetGroup
521
+ AllocatedStorage: !Ref DBAllocatedStorage
522
+ VPCSecurityGroups:
523
+ - !GetAtt [DBEC2SecurityGroup, GroupId]
524
+ ##
525
+ #
526
+ Outputs:
527
+ WebsiteURL:
528
+ Description: |
529
+ URL for newly created Drupal cluster.
530
+ Installation required.
531
+ Value: !Join
532
+ - ''
533
+ - - 'http://'
534
+ - !GetAtt [ApplicationLoadBalancer, DNSName]
535
+ - '/drupal'
536
+ DatabaseURL:
537
+ Description: >
538
+ URL for its MySQL database cluster.
539
+
540
+ Please fill it in the Advanced tab of
541
+ database settings during Drupal installation.
542
+ Value: !GetAtt [MySQLDatabase, Endpoint.Address]
543
+ DatabaseName:
544
+ Value: !Ref DBName
545
+ DatabaseUser:
546
+ Value: !Ref DBUser
547
+ #DatabasePassword:
548
+ # Description: (top secret)
549
+ # Value: !Ref DBPassword
@@ -2,17 +2,16 @@
2
2
  Gem::Specification.new do |s|
3
3
 
4
4
  s.name = 'drupalcluster'
5
- s.version = '0.1.1'
5
+ s.version = '0.1.2'
6
6
  s.license = "Nonstandard"
7
7
  s.date = '2017-11-03'
8
8
  s.summary = "Create/delete/test a multiserver Drupal site in Amazon cloud."
9
9
  s.description = File.new("readme.md").read
10
10
  s.authors = ["Bertalan Pecsi"]
11
11
  s.email = 'zellerede@gmail.com'
12
- all_files = `git ls-files`.split $/
13
- s.files = all_files.select {|fname| fname !~ /html/}
12
+ s.files = `git ls-files`.split $/
14
13
  s.executables = ["drupalcluster"]
15
- s.homepage = 'https://github.com/zellerede/drupal'
14
+ s.homepage = 'https://github.com/zellerede/drupalcluster'
16
15
  s.require_paths = ["bin",
17
16
  "lib"]
18
17
 
data/readme.md CHANGED
@@ -1,3 +1,5 @@
1
+
2
+
1
3
  +drupalcluster+ is a command line tool to quickly
2
4
  deploy a Drupal hosting cluster of a scalable amount [2..5]
3
5
  of virtual webservers.
@@ -6,8 +8,10 @@ of virtual webservers.
6
8
  Your AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY should be either
7
9
  environment variables, or set in ~/.aws/credentials.
8
10
 
9
- The configuration file contains additional details for the cluster
10
- /etc/drupalcluster/drupalcluster.conf
11
+ The configuration file contains additional details for the cluster,
12
+ including an ssh KeyName that's needed to access the servers.
13
+ The KeyName defaults to 'Drupal', easiest if it's precreated.
14
+ $HOME/.drc/drupalcluster.conf
11
15
 
12
16
  This is a demo version only, builds Drupal on HTTP connection.
13
17
  Don't use it seriously.
@@ -15,10 +19,13 @@ Especially, don't post personal/sensitive data on your Drupal site.
15
19
 
16
20
  ==== Commands
17
21
 
18
- create <name> -- Creates a Drupal hosting cluster
19
- check [<name>] -- Checks the status of creation/deletion
20
- delete <name> -- Deletes permanently the given cluster
21
- test <name|url> -- Sends a simple HTTP GET to the URL (of the given cluster)
22
- attack <instance> -- Permanently terminates the given server instance
23
- list -- Lists the recently created/deleted clusters.
22
+ create name -- Creates a Drupal hosting cluster
23
+ check [name] -- Checks the status of creation/deletion
24
+ delete name -- Deletes permanently the given cluster
25
+ test name|url -- Sends a simple HTTP GET to the URL (of the given cluster)
26
+ attack instance -- Permanently terminates the given server instance
27
+ list -- Lists the recently created/deleted clusters.
28
+
29
+ -----------------------
24
30
 
31
+ *** Please contribute to add rspec's ***
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: drupalcluster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bertalan Pecsi
@@ -38,18 +38,21 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.8'
41
- description: "+drupalcluster+ is a command line tool to quickly\ndeploy a Drupal
41
+ description: "\n\n+drupalcluster+ is a command line tool to quickly\ndeploy a Drupal
42
42
  hosting cluster of a scalable amount [2..5]\nof virtual webservers.\n\n!! AWS identity
43
43
  is required for this script !!\nYour AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY should
44
44
  be either\nenvironment variables, or set in ~/.aws/credentials.\n\nThe configuration
45
- file contains additional details for the cluster\n /etc/drupalcluster/drupalcluster.conf\n\nThis
46
- is a demo version only, builds Drupal on HTTP connection.\nDon't use it seriously.
47
- \nEspecially, don't post personal/sensitive data on your Drupal site.\n\n==== Commands\n\n
48
- \ create <name> -- Creates a Drupal hosting cluster\n check [<name>] --
49
- Checks the status of creation/deletion \n delete <name> -- Deletes permanently
50
- the given cluster\n test <name|url> -- Sends a simple HTTP GET to the URL (of
51
- the given cluster)\n attack <instance> -- Permanently terminates the given server
52
- instance\n list -- Lists the recently created/deleted clusters.\n\n"
45
+ file contains additional details for the cluster,\nincluding an ssh KeyName that's
46
+ needed to access the servers.\nThe KeyName defaults to 'Drupal', easiest if it's
47
+ precreated.\n $HOME/.drc/drupalcluster.conf\n\nThis is a demo version only, builds
48
+ Drupal on HTTP connection.\nDon't use it seriously. \nEspecially, don't post personal/sensitive
49
+ data on your Drupal site.\n\n==== Commands\n\n create name -- Creates a Drupal
50
+ hosting cluster\n check [name] -- Checks the status of creation/deletion \n
51
+ \ delete name -- Deletes permanently the given cluster\n test name|url --
52
+ Sends a simple HTTP GET to the URL (of the given cluster)\n attack instance --
53
+ Permanently terminates the given server instance\n list -- Lists the
54
+ recently created/deleted clusters.\n\n-----------------------\n\n*** Please contribute
55
+ to add rspec's ***\n"
53
56
  email: zellerede@gmail.com
54
57
  executables:
55
58
  - drupalcluster
@@ -58,6 +61,8 @@ extra_rdoc_files: []
58
61
  files:
59
62
  - bin/drupalcluster
60
63
  - conf/drupalcluster.conf
64
+ - data/Drupal.yaml
65
+ - data/Drupal_in_VPC.yaml
61
66
  - drupalcluster.gemspec
62
67
  - lib/aws/drupal_aws.rb
63
68
  - lib/cli_framework.rb
@@ -65,7 +70,7 @@ files:
65
70
  - lib/etc/utilities.rb
66
71
  - lib/netting.rb
67
72
  - readme.md
68
- homepage: https://github.com/zellerede/drupal
73
+ homepage: https://github.com/zellerede/drupalcluster
69
74
  licenses:
70
75
  - Nonstandard
71
76
  metadata: {}