aws-must 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8bc46bd401c62d97d7cd8171ebe4ba40ab529417
4
- data.tar.gz: d9ee68d839c1892fd29d32a7384d046428c26bfb
3
+ metadata.gz: 83a3b8fd5dea520c1d5531c6346279f428945533
4
+ data.tar.gz: ff8eb51f3a9c3f0e07eb77356c58e3693ef03136
5
5
  SHA512:
6
- metadata.gz: c52c2bb51dc2e9dbb9139cb5880840ed4b8646d999990e46d41f66d2c95b6a1bbdc8eb0a51171743d9e46a45d3ef1c8d62ccefefc024b43d38fa5f26c8a7cfac
7
- data.tar.gz: 82226a0afeda175d83abeb84ba75083b729b321eab5885ab8f6b0c1a66dc683b8bb8653a3132c0757fb13eaf6ed0f93fd104c7732f7fb42ec00b283f27037bba
6
+ metadata.gz: f5cbb6189e5aa14f9cbc8e136ea0603e0a33919729edcbbe8705a9a0924a9a58e046b7cb1730be854b4f8d89ae82878994593a2b647408d52e2bcbc598042301
7
+ data.tar.gz: 7bf6fb2a8410596e44a0619d7e3a2baa938d36800c66a92d1a2ba0d3da0ec5b608680011a29502f2a320ef87ad522a5c410cf11652fa572d574d8c7afde9a98a
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # aws-must - Minimum Viable Solution to Manage CloudFormation Templates - $Release:0.0.3$
1
+ # aws-must - Minimum Viable Solution to Manage CloudFormation Templates - $Release:0.0.4$
2
2
 
3
3
  `aws-must` is a tool, which allows separating infrastructure
4
- configuration and Amazon related syntax using
5
- [YAML](http://learnxinyminutes.com/docs/yaml) and
6
- [Mustache templates](https://mustache.github.io/).
4
+ configuration and Amazon related syntax in CloudFormation JSON
5
+ templates using [YAML](http://learnxinyminutes.com/docs/yaml) and
6
+ [Mustache templates](https://mustache.github.io/).
7
7
 
8
8
 
9
9
  ## The Problem
@@ -89,9 +89,9 @@ template `./mustache/root.mustache` issue the command
89
89
 
90
90
  aws-must.rb gen yaml_file
91
91
 
92
- To extract documentation between **++start++**
93
- **++close++** -tags from template
94
- `./mustache/root.mustache` issue the command
92
+ To extract documentation between **++start++** and
93
+ **++close++** -tags starting with template
94
+ `./mustache/root.mustache`, issue the command
95
95
 
96
96
  aws-must.rb doc
97
97
 
@@ -148,19 +148,15 @@ line argument `browser`, e.g. `rake demo:html-3[chromium-browser]`.
148
148
 
149
149
  #### Use Demo to Bootstrap Own Configuration
150
150
 
151
- To create a copy templates and YAML configuration for demo case `i`,
152
- run rake task `demo:bootstrap-i` and pass command line arguments
153
- defining template directory and configuration directory. For example,
154
- to copy demo case `3` templates to directory `tmp/tmpl` and
155
- configurations to `tmp/conf`, run
151
+ To create a copy of templates and YAML configuration for demo case
152
+ `i`, run rake task `demo:bootstrap-i`, and pass template and
153
+ configuration directories as command line arguments. For example, to
154
+ copy demo case `3` templates to directory `tmp/tmpl`, and
155
+ configurations to directory `tmp/conf`, run
156
156
 
157
157
  rake demo:bootstrap-3[tmp/tmpl,tmp/conf]
158
158
 
159
159
 
160
- After this command `tmp/tmpl` contains `root.mustache`, which is the
161
- starting point of mustache template rendering, and `tmp/conf` contains
162
- a YAML file `conf.yaml` for demo configuration data.
163
-
164
160
 
165
161
  #### Demo Usage on Amazon platform
166
162
 
@@ -220,10 +216,15 @@ To delete `demo` stack
220
216
 
221
217
  rake demo:stack-delete
222
218
 
223
-
224
219
 
220
+ ## Development
221
+
222
+ See [RELEASES](RELEASES.md)
223
+
225
224
 
225
+ ## License
226
226
 
227
+ MIT
227
228
 
228
229
 
229
230
 
data/bin/aws-must.rb CHANGED
@@ -44,19 +44,48 @@ LONGDESC
44
44
  # ------------------------------------------------------------------
45
45
  # action 'json'
46
46
 
47
- desc "json <yaml_file>", "Dump configuration in JSON format"
47
+ desc "json <yaml_file> [with_adjust]", "Dump configuration in JSON format (with or without adjustment)"
48
48
 
49
49
  long_desc <<-LONGDESC
50
50
 
51
- Reads <yaml_file> and dumps it to stdout in JSON format.
51
+ Reads <yaml_file> and dumps it to stdout in JSON format
52
+ 'with_adjust' (yes/no)
53
+
54
+ By default 'adjusts' data, i.e. adds property "_comma" with the
55
+ value "," to each sub document expect the last one in an array.
56
+
57
+ The "_comma" -property helps in generating valid json arrays in
58
+ mustache templates. For example, YAML construct
59
+
60
+ tags:
61
+ - Key: key1
62
+ Value: value1
63
+
64
+ - Key: key2
65
+ Value: value2
66
+
67
+ and Mustache template snippet
68
+
69
+ { "Tags" : [
70
+ {{#tags}}
71
+ { "Key" : "{{Key}}", "Value" : "{{Value}}"{{_comma}} }
72
+ {{/tags}}
73
+ ]}
74
+
75
+ results to valid JSON document
76
+
77
+ { "Tags" : [
78
+ { "Key" : "key1", "Value" : "value1",
79
+ { "Key" : "key2", "Value" : "value2"
80
+ ]}
52
81
 
53
82
  LONGDESC
54
83
 
55
84
 
56
- def json( yaml_file )
85
+ def json( yaml_file, with_adjust="true" )
57
86
 
58
87
  app = ::AwsMust::AwsMust.new( options )
59
- app.json( yaml_file )
88
+ app.json( yaml_file, with_adjust =~ /^true$/ || with_adjust =~ /^yes$/ ? true : false )
60
89
 
61
90
  end
62
91
 
data/demo/4/conf.yaml CHANGED
@@ -17,6 +17,6 @@ parameters:
17
17
  resources:
18
18
 
19
19
  - Instance:
20
- Name: &Resource_1 MyEC2Instance
20
+ Name: MyEC2Instance
21
21
  ImageId: ami-00dae61d
22
- InstanceType: *Param_InstanceType
22
+ InstanceType: t2.micro
data/demo/8/conf.yaml ADDED
@@ -0,0 +1,61 @@
1
+ -- demo/2 : added description property
2
+
3
+
4
+ description: "demo/8 - A simple Amazon EC2 instance created using aws-must tool
5
+ - Minimum Viable Solution to Manage CloudFormation
6
+ Templates. Adds support installing Chef"
7
+
8
+ parameters:
9
+
10
+ - Name: InstanceType
11
+ Type: String
12
+ Description: EC2 reousrce instance type
13
+ Value: &Param_InstanceType t2.micro
14
+
15
+ - Name: &Param_KeyName KeyName
16
+ Type: "AWS::EC2::KeyPair::KeyName"
17
+ Description: Name of an existing EC2 KeyPair to enable SSH access to the instance
18
+ Value: demo-key
19
+
20
+ - Name: &Param_SSHLocation SSHLocation
21
+ Type: String
22
+ Description: The IP address range that can be used to SSH to the EC2 instances
23
+ Value: "0.0.0.0/0"
24
+
25
+ - Name: ChefVersion
26
+ Type: String
27
+ Description: Chef version to install
28
+ Value: &Param_ChefVersion 11.18
29
+
30
+
31
+ resources:
32
+
33
+ - InstanceSecurityGroup:
34
+ Name: &DefaultSG MyDefaultSecurityGroup
35
+ IngressRef: *Param_SSHLocation
36
+
37
+ - Instance:
38
+ Name: &Resource_1 MyEC2Instance
39
+ InstanceType: *Param_InstanceType
40
+ KeyName: *Param_KeyName
41
+ SecurityGroup: *DefaultSG
42
+ InstallChef:
43
+ - Version: *Param_ChefVersion
44
+ tags:
45
+ - Key: demotag1
46
+ Value: demotag1 value
47
+
48
+
49
+ outputs:
50
+
51
+ - Name: Instance1
52
+ Description: InstanceId of the newly created EC2 instance
53
+ Ref: *Resource_1
54
+
55
+
56
+ - Name: IP1
57
+ Description: Public IP address of the newly created EC2 instance
58
+ Attr:
59
+ Ref: *Resource_1
60
+ Name: PublicIp
61
+
@@ -0,0 +1,67 @@
1
+ {{!
2
+
3
+ ++start++
4
+
5
+ ## <a id="mappings.mustache"></a>mappings.mustache <a class='navigator' href='#top'">[top]</a>
6
+
7
+
8
+ Create fixed lookup tables `AWSInstanceType2Arch` and
9
+ `AWSRegionArch2AMI` implementing the table below
10
+
11
+ <code><pre>
12
+ ap-northeast-1 trusty 14.04 LTS amd64 hvm:ebs-ssd 20150528 ami-90815290 hvm
13
+ ap-southeast-1 trusty 14.04 LTS amd64 hvm:ebs-ssd 20150528 ami-0accf458 hvm
14
+ ap-southeast-2 trusty 14.04 LTS amd64 hvm:ebs-ssd 20150528 ami-1dc8b127 hvm
15
+ cn-north-1 trusty 14.04 LTS amd64 hvm:ebs-ssd 20150528 ami-eae27fd3 hvm
16
+ eu-central-1 trusty 14.04 LTS amd64 hvm:ebs-ssd 20150528 ami-3248712f hvm
17
+ eu-west-1 trusty 14.04 LTS amd64 hvm:ebs-ssd 20150528 ami-d74437a0 hvm
18
+ sa-east-1 trusty 14.04 LTS amd64 hvm:ebs-ssd 20150528 ami-0f6ced12 hvm
19
+ us-east-1 trusty 14.04 LTS amd64 hvm:ebs-ssd 20150528 ami-83c525e8 hvm
20
+ us-gov-west-1 trusty 14.04 LTS amd64 hvm:ebs-ssd 20150528 ami-51513172 hvm
21
+ us-west-1 trusty 14.04 LTS amd64 hvm:ebs-ssd 20150528 ami-61b25925 hvm
22
+ us-west-2 trusty 14.04 LTS amd64 hvm:ebs-ssd 20150528 ami-57e8d767 hvm
23
+ </pre></code>
24
+
25
+
26
+ **Attributes**: context= `.`
27
+
28
+ * none
29
+
30
+
31
+ **Actions**:
32
+
33
+ * **AWSInstanceType2Arch**: fixed key/value mapping, currently only
34
+ **t2.micro** --> **64bit**
35
+
36
+ * **AWSRegionArch2AMI**: fixed key/value mapping created, currently
37
+ architectures only for **64bits**
38
+
39
+
40
+ ++close++
41
+
42
+
43
+ ==================================================================
44
+ The template
45
+ ==================================================================
46
+
47
+ }}
48
+
49
+
50
+
51
+ "AWSInstanceType2Arch" : {
52
+ "t2.micro" : { "Arch" : "64" }
53
+ },
54
+ "AWSRegionArch2AMI" : {
55
+ "ap-northeast-1" : { "64" : "ami-90815290" },
56
+ "ap-southeast-1" : { "64" : "ami-0accf458" },
57
+ "ap-southeast-2" : { "64" : "ami-1dc8b127" },
58
+ "cn-north-1" : { "64" : "ami-eae27fd3" },
59
+ "eu-central-1" : { "64" : "ami-3248712f" },
60
+ "eu-west-1" : { "64" : "ami-d74437a0" },
61
+ "sa-east-1" : { "64" : "ami-0f6ced12" },
62
+ "us-east-1" : { "64" : "ami-83c525e8" },
63
+ "us-west-1" : { "64" : "ami-61b25925" },
64
+ "us-gov-west-1" : { "64" : "ami-51513172" },
65
+ "us-west-2" : { "64" : "ami-57e8d767" }
66
+ }
67
+
@@ -0,0 +1,40 @@
1
+ {{!
2
+
3
+
4
+ ++start++
5
+
6
+ ## <a id="output.mustache"></a>output.mustache <a class='navigator' href='#top'">[top]</a>
7
+
8
+ Create one output entry to CloudFormation JSON output section
9
+
10
+ **Attributes**: context= `./outputs`
11
+
12
+ * `Name` : of the ouput entry
13
+ * `Description`: of the output entry
14
+ * `Ref`: name of refernece
15
+ * `Attr`
16
+ * `Ref`: name of attribute reference
17
+ * `Name`: name of the attribute
18
+
19
+
20
+
21
+ **Actions**:
22
+
23
+ * **Name**: `Name`
24
+ * **Description**: `Description`
25
+ * **Value**: **Ref** if `Ref`
26
+ * **Value**: `Attr.Ref`, `Attr.Name` if `Attr`
27
+
28
+
29
+
30
+ ++close++
31
+
32
+ }}
33
+
34
+
35
+ "{{Name}}": {
36
+ "Description" : "{{Description}}"
37
+ {{#Ref}}, "Value" : { "Ref" : "{{Ref}}" }{{/Ref}}
38
+ {{#Attr}}, "Value" : { "Fn::GetAtt" : [ "{{Ref}}", "{{Name}}" ] }{{/Attr}}
39
+ }{{_comma}}
40
+
@@ -0,0 +1,38 @@
1
+ {{!
2
+
3
+
4
+ ++start++
5
+
6
+ ## <a id="parameter.mustache"></a>parameter.mustache <a class='navigator' href='#top'">[top]</a>
7
+
8
+ Create one parameter entry to CloudFormation JSON parameter section
9
+
10
+ **Attributes**: context= `./parameters`
11
+
12
+ * `Name` : of the ouput entry
13
+ * `Description`: of the parameter entry
14
+ * `Type`: The data type of [CloudFormation
15
+ Parameter](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html),
16
+ e.g. `String`, `AWS::EC2::KeyPair::KeyName`
17
+ * `Value`: value of the parameter
18
+
19
+
20
+ **Actions**:
21
+
22
+ * **Name**: `Name`
23
+ * **Description**: `Description`
24
+ * **Type**: `Type`
25
+ * **Default**: `Value`
26
+
27
+ ++close++
28
+
29
+ }}
30
+
31
+
32
+
33
+
34
+ "{{Name}}": {
35
+ "Description" : "{{Description}}{{^Description}}No description given{{/Description}}",
36
+ "Type": "{{Type}}",
37
+ "Default" : "{{Value}}"
38
+ }{{_comma}}
@@ -0,0 +1,38 @@
1
+ {{!
2
+
3
+ resource.mustache
4
+
5
+ ++start++
6
+
7
+ ## <a id="resource.mustache"></a>resource.mustache <a class='navigator' href='#top'">[top]</a>
8
+
9
+
10
+ Dispatches resource sub-type templates based resource Type propertys
11
+
12
+ **Attributes**: context= `./resources`
13
+
14
+ * `Instance`: sub-document defining an EC instance
15
+ * `SecurityGroup`: sub-document defining an <a href="http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-security-group.html">AWS::EC2::SecurityGroup</a>
16
+
17
+
18
+ **Actions**:
19
+
20
+ * **include** <a href="#resourceInstance.mustache">resourceInstance.mustache</a> **if** `Instance`
21
+ * **include** <a href="#resourceSecurityGroup.mustache">resourceSecurityGroup.mustache</a> **if** `SecurityGroup`
22
+
23
+
24
+ **Included resources**
25
+
26
+ * `resourceInstance`
27
+
28
+ > resourceInstance
29
+ > resourceSecurityGroup.mustache
30
+
31
+ ++close++
32
+
33
+
34
+
35
+ }}
36
+
37
+ {{# Instance }}{{> resourceInstance}}{{/ Instance }}
38
+ {{# InstanceSecurityGroup }}{{> resourceSecurityGroup}}{{/ InstanceSecurityGroup }}
@@ -0,0 +1,50 @@
1
+ {{!
2
+
3
+
4
+ ++start++
5
+
6
+
7
+ ## <a id="resourceInstance.mustache"></a>resourceInstance.mustache <a class='navigator' href='#top'">[top]</a>
8
+
9
+ Create an EC2 instance
10
+
11
+ **Attributes**: context= `./resources/Instance`
12
+
13
+ * `Name`: name of the EC2 instance to create
14
+ * `InstanceType` : The instance type, such as t2.micro.
15
+ * `tags` : array of tag sub-documents for EC2 instance
16
+ * `InstallChef`: add UserData to install Chef
17
+
18
+
19
+ **Actions**:
20
+
21
+ * **Name**: `Name`
22
+ * **Type**: 'AWS::EC2::Instance'
23
+ * **for** `tag` **in** `tags` **include** <a href="#tag.mustache">tag.mustache</a>
24
+ * **SecurityGroups.Ref**: `SecurityGroup` if `SecurityGroup`
25
+ * **ImageId**: **AWSRegionArch2AMI**( 'AWS::Region', **AWSInstanceType2Arch**(`InstanceType`))
26
+ * **KeyName**: `KeyName` if `KeyName`
27
+ * **include** <a href="#resourceInstanceChef.mustache">resourceInstanceChef.mustache</a> if `InstallChef`
28
+
29
+ > tag
30
+ > resourceInstanceChef
31
+
32
+ ++close++
33
+
34
+ }}
35
+
36
+
37
+ "{{Name}}" : {
38
+ "Type" : "AWS::EC2::Instance",
39
+ "Properties" : {
40
+ "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" },
41
+ { "Fn::FindInMap" : [ "AWSInstanceType2Arch", "{{InstanceType}}", "Arch" ] } ] }
42
+ , "InstanceType" : "{{InstanceType}}"
43
+ , "Tags" : [ {{#tags}}{{>tag}}{{/tags}} ]
44
+ {{#SecurityGroup}}, "SecurityGroups" : [ { "Ref" : "{{SecurityGroup}}" } ]{{/SecurityGroup}}
45
+ {{#KeyName}}, "KeyName" : { "Ref" : "{{KeyName}}" }{{/KeyName}}
46
+ {{#InstallChef }}, "UserData": { {{> resourceInstanceChef }} }{{/ InstallChef }}
47
+ } {{! Propertites }}
48
+
49
+
50
+ }{{_comma}}
@@ -0,0 +1,48 @@
1
+ {{!
2
+
3
+
4
+ ++start++
5
+
6
+
7
+ ## <a id="resourceInstanceChef.mustache"></a>resourceInstanceChef.mustache<a class='navigator' href='#top'"> [top]</a>
8
+
9
+ UserData -script to install Chef
10
+
11
+ **Attributes**: context= `./resources/Instance/InstallChef`
12
+
13
+ * `Version`: Chef version to install
14
+
15
+ **Actions**:
16
+
17
+ * /bin/bash
18
+ * CHEF_VERSION=`Version`
19
+ * LOG="/tmp/install.log"
20
+ * `curl -L https://www.chef.io/chef/install.sh | sudo bash -s -- -v $CHEF_VERSION >>$LOG 2>&1`
21
+
22
+
23
+ ++close++
24
+
25
+ }}
26
+
27
+
28
+
29
+ "Fn::Base64": { "Fn::Join": [
30
+ "\n",
31
+ [
32
+ "#!/bin/bash",
33
+ "set -x\n",
34
+ "set -o pipefail\n",
35
+ "LOG=/tmp/install.log\n",
36
+ "function finish() {\n",
37
+ "echo \"$(date): chef installation finished\" >> $LOG\n",
38
+ "}\n",
39
+ "trap finish EXIT\n",
40
+ "CHEF_VERSION={{Version}}\n",
41
+ "echo $(date): starting to install chef > $LOG\n",
42
+ "curl -L https://www.chef.io/chef/install.sh | sudo bash -s -- -v $CHEF_VERSION >>$LOG 2>&1\n",
43
+ "echo $(date): chef installed successfully >> $LOG\n"
44
+ ]
45
+ ]}
46
+
47
+
48
+
@@ -0,0 +1,37 @@
1
+ {{!
2
+
3
+
4
+ ++start++
5
+
6
+
7
+ ## <a id="resourceSecurityGroup.mustache"></a>resourceSecurityGroup.mustache <a class='navigator' href='#top'">[top]</a>
8
+
9
+ Create an EC2 Security Group
10
+
11
+ **Attributes**: context= `./resources/InstanceSecurityGroup`
12
+
13
+ * `Name` : of the security group
14
+ * `IngressRef`: A refernce to parameter, which defined CIDR for to inbound traffic (ingress)
15
+
16
+ **Actions**:
17
+
18
+ * **Name**: `Name`
19
+ * **Type**: "AWS::EC2::SecurityGroup"
20
+ * **Properties.SecurityGroupIngress[0].CidrIp**: `IngressRef`
21
+
22
+ ++close++
23
+
24
+ }}
25
+
26
+ "{{Name}}" : {
27
+ "Type" : "AWS::EC2::SecurityGroup",
28
+ "Properties" : {
29
+ "GroupDescription" : "Enable SSH access via port 22",
30
+ "SecurityGroupIngress" : [ {
31
+ "IpProtocol" : "tcp",
32
+ "FromPort" : "22",
33
+ "ToPort" : "22",
34
+ "CidrIp" : { "Ref" : "{{IngressRef}}"}
35
+ } ]
36
+ }
37
+ }{{_comma}}
@@ -0,0 +1,35 @@
1
+ {{!
2
+
3
+ ++start++
4
+
5
+ ## <a id="resources.mustache"></a>resources.mustache <a class='navigator' href='#top'">[top]</a>
6
+
7
+ Empty template.
8
+
9
+ **Attributes**: context= `.`
10
+
11
+ * none
12
+
13
+
14
+ **Actions**:
15
+
16
+ * no action (i.e. empty template)
17
+
18
+
19
+ ++close++
20
+
21
+
22
+ }}
23
+ {{!
24
+
25
+ Moved to YAML
26
+
27
+ "MyEC2Instance" : {
28
+ "Type" : "AWS::EC2::Instance",
29
+ "Properties" : {
30
+ "ImageId" : "ami-00dae61d",
31
+ "InstanceType" : "t2.micro"
32
+ }
33
+ }
34
+
35
+ }}
@@ -0,0 +1,160 @@
1
+ {{!
2
+
3
+ root.mustache: root level template,
4
+
5
+ ==================================================================
6
+ STYLE section
7
+ ==================================================================
8
+
9
+ ++start++
10
+ <style>
11
+ h1 {
12
+ color:blue;
13
+ font-size: 2.5em;
14
+ }
15
+ h2 {
16
+ color:blue;
17
+ font-size: 1.5em;
18
+ }
19
+ h3 {
20
+ color:blue;
21
+ font-size: 1.5em;
22
+ }
23
+ .navigator {
24
+ font-size: 0.5em;
25
+ }
26
+ body {
27
+ background-color: #b0c4de;
28
+ }
29
+ </style>
30
+
31
+ ++close++
32
+
33
+
34
+ ==================================================================
35
+ CONTENT section
36
+ ==================================================================
37
+
38
+ ++start++
39
+
40
+ # <a id="top">aws-must demo 8 templates</a>
41
+
42
+ This document is generated automically from `aws-must` -demo
43
+ templates.
44
+
45
+
46
+ Output contains markdown syntax between
47
+ **&plus;&plus;start&plus;&plus;** and
48
+ **&plus;&plus;close&plus;&plus;** -tags from the template files. For
49
+ each template, it
50
+
51
+ * gives a general description of the template
52
+
53
+ * documents the attribute context e.g. `.` or `./resources/Instance`,
54
+ and attributes referenced within the template
55
+
56
+ * lists template actions, i.e. output from template, or template
57
+ inclusion
58
+
59
+ ### Table of contents
60
+ <ul>
61
+
62
+ <li><a href="#root.mustache">root.mustache</a>: root template =
63
+ starting point of template rendering</li>
64
+
65
+ <li><a href="#parameter.mustache">parameter.mustache</a>: create one
66
+ parameter entry to CloudFormation JSON parameter section</li>
67
+
68
+ <li><a href="#mappings.mustache">mappings.mustache</a>matches a key to
69
+ a corresponding set of named values</li>
70
+
71
+ <li>Resources</li>
72
+
73
+ <ul>
74
+
75
+ <li><a href="#resources.mustache">resources.mustache</a>: fixed
76
+ resources</li>
77
+
78
+ <li><a href="#resource.mustache">resource.mustache</a>: dispatch
79
+ resource based on resource type</li>
80
+
81
+ <ul> <li><a
82
+ href="#resourceSecurityGroup.mustache">resourceSecurityGroup.mustache.mustache</a>:
83
+ create an security group for accessing EC2 instances</li>
84
+
85
+ <li><a
86
+ href="#resourceInstance.mustache">resourceInstance.mustache</a>:
87
+ create an EC2 instance</li>
88
+
89
+ <ul><li><a href="#tag.mustache">tag.mustache</a>: add key-value tag property
90
+ to an</li>
91
+
92
+ <li><a href="#resourceInstanceChef.mustache">resourceInstanceChef.mustache</a>: UserData -script to install Chef
93
+ to an</li><ul>
94
+
95
+ </ul></ul></ul></ul>
96
+
97
+ <li><a href="#output.mustache">output.mustache</a>: values in
98
+ response to describe stack calls </li> </ul>
99
+
100
+
101
+ ## <a id="root.mustache"></a>root.mustache <a class='navigator' href='#top'">[top]</a>
102
+
103
+ Starting point of template rendering.
104
+
105
+ **Attributes**: context= `.`
106
+
107
+ * `description`: description for the CF template
108
+ * `parameters`: array of parameter sub-documents for CloudFormation Parameters -section
109
+ * `resources`: array of resource sub-documents for CloudFormation Resources -section
110
+ * `outputs`: array of output sub-documents for CloudFormation Outputs -section
111
+
112
+
113
+ **Actions**:
114
+
115
+ * **Description**: `description`
116
+ * **for** `parameter` **in** `parameters` **include** <a href="#parameter.mustache">parameter.mustache</a>
117
+ * **include** <a href="#mappings.mustache">mappings.mustache</a>
118
+ * **include** <a href="#resources.mustache">resources.mustache</a>
119
+ * **for** `resource` **in** `resource` **include** <a href="#resource.mustache">resource.mustache</a>
120
+ * **for** `output` **in** `outputs` **include** <a href="#output.mustache">output.mustache</a>
121
+
122
+
123
+ > parameter
124
+ > mappings
125
+ > resources
126
+ > resource
127
+ > output
128
+
129
+
130
+ ++close++
131
+
132
+ }}
133
+
134
+ {
135
+ "AWSTemplateFormatVersion" : "2010-09-09",
136
+
137
+ "Description" : "{{description}}",
138
+
139
+ "Parameters" : {
140
+ {{# parameters }}{{> parameter }}{{/ parameters }}
141
+ },
142
+
143
+ "Mappings" : {
144
+ {{> mappings }}
145
+ },
146
+
147
+ "Resources" : {
148
+
149
+ {{> resources }}
150
+ {{# resources }}{{> resource }}{{/ resources }}
151
+
152
+ },
153
+
154
+ "Outputs" : {
155
+
156
+ {{# outputs }}{{> output }}{{/ outputs }}
157
+
158
+ }
159
+
160
+ }
@@ -0,0 +1,30 @@
1
+ {{!
2
+
3
+
4
+ ++start++
5
+
6
+ ## <a id="tag.mustache"></a>tag.mustache <a class='navigator' href='#top'">[top]</a>
7
+
8
+ One key-value pair in EC2 instance Tags -array
9
+
10
+ **Attributes**: context= `./resources/Instance/tags`
11
+
12
+ * `Key`: of the tag entry
13
+ * `Value`: of the tag entry
14
+
15
+ **Actions**:
16
+
17
+ * **Key**: `Name`
18
+ * **Value**: `Value`
19
+
20
+
21
+
22
+ ++close++
23
+
24
+
25
+
26
+ }}
27
+
28
+ { "Key" : "{{Key}}", "Value" : "{{Value}}"{{_comma}} }
29
+
30
+
@@ -28,13 +28,16 @@ module AwsMust
28
28
  # ------------------------------------------------------------------
29
29
  # dump 'yaml_file' as json
30
30
 
31
- def json( yaml_file )
31
+ def json( yaml_file, with_adjust=true )
32
32
 
33
33
  @logger.debug( "#{__method__}, template_name '#{yaml_file}'" )
34
34
 
35
35
  #
36
36
  data = read_yaml_file( yaml_file )
37
37
 
38
+ # adjust optionanlly
39
+ data = adjust( data ) if with_adjust
40
+
38
41
  puts data.to_json
39
42
 
40
43
 
data/lib/tasks/demo.rake CHANGED
@@ -26,8 +26,9 @@ namespace "demo" do |ns|
26
26
  { :id => "3", :desc=>"Use resources.mustache -partial to create EC2 intance", :region=>['eu-central-1'], :ssh => false },
27
27
  { :id => "4", :desc=>"EC2 instance configuration using YAML-data", :region=>['eu-central-1'], :ssh => false },
28
28
  { :id => "5", :desc=>"Add 'Outputs' -section with reference to EC2 instance", :region=>['eu-central-1'], :ssh => false },
29
- { :id => "6", :desc=>"Add 'Inputs' and 'Mappings' -sections to parametirize", :region=> all_regions, :ssh => false },
30
- { :id => "7", :desc=>"Added support for input parameters, EC2 tags, Instance security group", :region=>all_regions, :ssh => false },
29
+ { :id => "6", :desc=>"Add 'Inputs' and 'Mappings' -sections to parametirize", :region=> all_regions, :ssh => true },
30
+ { :id => "7", :desc=>"Added support for input parameters, EC2 tags, Instance security group", :region=>all_regions, :ssh => true },
31
+ { :id => "8", :desc=>"Added support for installing Chef", :region=>all_regions, :ssh => true },
31
32
 
32
33
 
33
34
  ].each do |c|
@@ -37,9 +38,12 @@ namespace "demo" do |ns|
37
38
  sh "#{cmd} gen -t #{demo_dir}/#{c[:id]} #{demo_dir}/#{c[:id]}/conf.yaml"
38
39
  end
39
40
 
40
- desc "Output configs in '#{demo_dir}/#{c[:id]}' in JSON to demonstrate '#{c[:desc]}'"
41
- task "json-#{c[:id]}" do
42
- sh "#{cmd} json #{demo_dir}/#{c[:id]}/conf.yaml"
41
+ desc "Output configs in '#{demo_dir}/#{c[:id]}' in JSON with/without adjustment (default: yes/no)"
42
+ task "json-#{c[:id]}", :with_adjust do |t, args|
43
+
44
+ args.with_defaults( with_adjust: "yes" )
45
+
46
+ sh "#{cmd} json #{demo_dir}/#{c[:id]}/conf.yaml #{args.with_adjust}"
43
47
  end
44
48
 
45
49
  desc "Check the difference between version '#{c[:id]}' and :prev (default '#{c[:id].to_i() -1}') "
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-must
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - jarjuk
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-10 00:00:00.000000000 Z
11
+ date: 2015-06-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mustache
@@ -72,6 +72,17 @@ files:
72
72
  - demo/7/resources.mustache
73
73
  - demo/7/root.mustache
74
74
  - demo/7/tag.mustache
75
+ - demo/8/conf.yaml
76
+ - demo/8/mappings.mustache
77
+ - demo/8/output.mustache
78
+ - demo/8/parameter.mustache
79
+ - demo/8/resource.mustache
80
+ - demo/8/resourceInstance.mustache
81
+ - demo/8/resourceInstanceChef.mustache
82
+ - demo/8/resourceSecurityGroup.mustache
83
+ - demo/8/resources.mustache
84
+ - demo/8/root.mustache
85
+ - demo/8/tag.mustache
75
86
  - lib/aws-must.rb
76
87
  - lib/aws-must/aws-must.rb
77
88
  - lib/aws-must/docu.rb