sparkle-guides 0.1.10 → 0.1.12

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
- SHA1:
3
- metadata.gz: 4cf80716c1f462168e5827fca6593c81a6c29bd6
4
- data.tar.gz: e31969f4ae18a2978a94ba5e92e438c578235f11
2
+ SHA256:
3
+ metadata.gz: e2cf461c429c10b2156db909a0cb627c594bda1cc7c86532d6dd8b3920affceb
4
+ data.tar.gz: df4f1573c99d06439f0fe11b3d80bc238c56105dc35c5b42497a66c6b1455ff7
5
5
  SHA512:
6
- metadata.gz: 06b6fdae6857a89b78822bd5bf2765e4d59ac0234a6c6080637a6457a80780c6f2aa1c0fe390b9968c799891e57baa0ec10ae106c31b186493ac839a5f471472
7
- data.tar.gz: 174df5f00486cdd8acb124ae94c5ae7861128c64a006afaa873fdc500c1692d8f33a6f1e5f01aab87dbf00210c51cd38602ffce315f09db62044ab209b5d4435
6
+ metadata.gz: facf5eefbb559517c5a68a0d3b8b7abac016196ef6760e3cbdc8c483c668593358eaab39628a319e156cd4db3671e6538bfd3e2c373506f1d35ae64c35403b5f
7
+ data.tar.gz: 8c9b28db2eb1208c774fc6f9da95cdd43a187f5587b0184a1bbb4e455bdb055a63e64b871a9ffb8ce7669f446c28ecca095a64a82afb280a70c6d36c2f02f82b
@@ -1,3 +1,7 @@
1
+ # v0.1.12
2
+ * Include cross location apply stack example
3
+ * Start tips and tricks
4
+
1
5
  # v0.1.8
2
6
  * Update non-default type files with provider flag
3
7
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- title: "Stack Interdependencies"
2
+ title: "Stack Dependencies"
3
3
  weight: 2
4
4
  anchors:
5
5
  - title: "Overview"
@@ -10,6 +10,8 @@ anchors:
10
10
  url: "#nested-stack-implementation"
11
11
  - title: "Apply nested stack"
12
12
  url: "#apply-nested-stack"
13
+ - title: "Cross location"
14
+ url: "#cross-location"
13
15
  ---
14
16
 
15
17
  ## Overview
@@ -390,3 +392,44 @@ You can destroy the all the `infrastructure` related stacks with the command:
390
392
  ~~~
391
393
  sfn destroy sparkle-guide-infrastructure
392
394
  ~~~
395
+
396
+ ## Cross location
397
+
398
+ SparkleFormation supports accessing stacks in other locations when using the
399
+ apply stack functionality. This is done by configuring named locations within
400
+ the `.sfn` configuration file and then referencing the location when applying
401
+ the stack. Using this example `.sfn` configuration file:
402
+
403
+ ~~~ruby
404
+ Configuration.new do
405
+ credentials do
406
+ provider :aws
407
+ aws_access_key_id 'KEY'
408
+ aws_secret_access_key 'SECRET'
409
+ aws_region 'us-east-1'
410
+ end
411
+ locations do
412
+ west_stacks do
413
+ provider :aws
414
+ aws_access_key_id 'KEY'
415
+ aws_secret_access_key 'SECRET'
416
+ aws_region 'us-west-2'
417
+ end
418
+ end
419
+ end
420
+ ~~~
421
+
422
+ This configuration connects to the AWS API in us-east-1. It also includes configuration
423
+ for connecting to us-west-2 via a named location of `west_stacks`. This allows referencing
424
+ stacks located in us-west-2 when using the apply stack functionality. Assume a new stack
425
+ is being created in us-east-1 (my-stack) and the outputs from other-stack in us-west-2
426
+ should be applied. This can be accomplished with the following command:
427
+
428
+ ~~~
429
+ sfn create my-stack --apply-stack west_stacks__my-stack
430
+ ~~~
431
+
432
+ When the stack is created sfn will first connect to the us-west-2 API and gather the
433
+ outputs from other-stack, then it will connect to us-east-1 to create the new stack.
434
+
435
+ _NOTE: Custom locations are not required to have a common provider._
@@ -26,8 +26,7 @@ anchors:
26
26
 
27
27
  ## Requirements
28
28
 
29
- * Ruby (Version `>=` 2.0)
30
- * Bundler
29
+ * Ruby (Version `>=` 2.3)
31
30
  * Provider Credentials
32
31
 
33
32
  ### Installing Ruby
@@ -53,8 +52,10 @@ the provider:
53
52
 
54
53
  * [miasma-aws](https://github.com/miasma-rb/miasma-aws)
55
54
  * [miasma-azure](https://github.com/miasma-rb/miasma-azure)
55
+ * [miasma-google](https://github.com/miasma-rb/miasma-google)
56
56
  * [miasma-open-stack](https://github.com/miasma-rb/miasma-open-stack)
57
57
  * [miasma-rackspace](https://github.com/miasma-rb/miasma-rackspace)
58
+ * [miasma-terraform](https://github.com/miasma-rb/miasma-terraform)
58
59
 
59
60
  ## Installation
60
61
 
@@ -0,0 +1,128 @@
1
+ ---
2
+ title: "Tips and Tricks"
3
+ weight: 3
4
+ anchors:
5
+ - title: "Stubbing builtins"
6
+ url: "#stubbing-builtins"
7
+ - title: "Resource conflicts"
8
+ url: "#resource-conflicts"
9
+ ---
10
+
11
+ ## Stubbing builtins
12
+
13
+ SparkleFormation provides a number of builtin resources using the
14
+ `dynamic!` helper. These known resources are collected when SparkleFormation
15
+ is released. Because this is a static list of resource types it is
16
+ common for new resources to be introduced within a cloud provider
17
+ and not be available within SparkleFormation. Since the new resource
18
+ types will not be available within SparkleFormation until the next
19
+ release, stubbing the builtin will provide the same behavior as if
20
+ it were included within the builtin list.
21
+
22
+ For example, lets assume that AWS CloudFormation introduces a new
23
+ resource type named `AWS::JVM::Instance`. To stub this resource a
24
+ new dynamic can be created locally:
25
+
26
+ ~~~ruby
27
+ SparkleFormation.dynamic(:jvm_instance) do |name|
28
+ resources.set!("#{name}_jvm_instance".to_sym) do
29
+ type "AWS::JVM::Instance"
30
+ end
31
+ end
32
+ ~~~
33
+
34
+ With this dynamic defined it will behave the same as if it were
35
+ defined in the builtin list:
36
+
37
+ ~~~ruby
38
+ SparkleFormation.new(:test) do
39
+ dynamic!(:jvm_instance, :test) do
40
+ properties.memory 512
41
+ end
42
+ end
43
+ ~~~
44
+
45
+ which results in:
46
+
47
+ ~~~json
48
+ {
49
+ "Resources": {
50
+ "TestJvmInstance": {
51
+ "Type": "AWS::JVM::Instance",
52
+ "Properties": {
53
+ "Memory": 512
54
+ }
55
+ }
56
+ }
57
+ }
58
+ ~~~
59
+
60
+ Once the `AWS::JVM::Instance` becomes available in the builtin
61
+ list within SparkleFormation the custom stub dynamic can be deleted.
62
+
63
+ ## Resource conflicts
64
+
65
+ Resource conflicts can occur when the same resource name is used
66
+ in multiple resource namespaces. If a template has created resources
67
+ using the `dynamic!` helper and not included the resource's namespace,
68
+ conflicts will occur when the new resource becomes available. An
69
+ example of this is the `AWS::ElasticLoadBalancing::LoadBalancer` resource.
70
+
71
+ Assume that the following template is in use:
72
+
73
+ ~~~ruby
74
+ SparkleFormation.new(:lb) do
75
+ dynamic!(:load_balancer, :app)
76
+ end
77
+ ~~~
78
+
79
+ and it generates:
80
+
81
+ ~~~json
82
+ {
83
+ "Resources": {
84
+ "AppLoadBalancer": {
85
+ "Type": "AWS::ElasticLoadBalancing::LoadBalancer"
86
+ }
87
+ }
88
+ }
89
+ ~~~
90
+
91
+ Now, AWS releases a new resource with a conflicting name
92
+ `AWS::ElasticLoadBalancingV2::LoadBalancer` and SparkleFormation's internal
93
+ resource list has been updated. When the template is run again, it returns
94
+ an error about conflicting resource names. One solution is to update the
95
+ `dynamic!` call to include the namespace:
96
+
97
+ ~~~ruby
98
+ SparkleFormation.new(:lb) do
99
+ dynamic!(:elastic_load_balancing_load_balancer, :app)
100
+ end
101
+ ~~~
102
+
103
+ and it will then generate:
104
+
105
+ ~~~json
106
+ {
107
+ "Resources": {
108
+ "AppElasticLoadBalancingLoadBalancer": {
109
+ "Type": "AWS::ElasticLoadBalancing::LoadBalancer"
110
+ }
111
+ }
112
+ }
113
+ ~~~
114
+
115
+ This resolves the conflict issue, yet in practice the modification of the
116
+ resource name will likely cause issues in complex templates where the
117
+ resource is being referenced in other locations. To allow templates to
118
+ remain unchanged, a new dynamic can be introduced which will force matching
119
+ of the `:load_balancer` name to the local dynamic:
120
+
121
+ ~~~ruby
122
+ SparkleFormation.dynamic(:load_balancer) do |name|
123
+ dynamic!(:elastic_load_balancing_load_balancer, name, :resource_name_suffix => :load_balancer)
124
+ end
125
+ ~~~
126
+
127
+ With this dynamic in place, all original templates will continue to behave
128
+ as expected without individual modifications.
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'sparkle-guides'
3
- s.version = '0.1.10'
3
+ s.version = '0.1.12'
4
4
  s.summary = 'SparkleFormation Guides'
5
5
  s.author = 'Chris Roberts'
6
6
  s.email = 'chrisroberts.code@gmail.com'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sparkle-guides
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-15 00:00:00.000000000 Z
11
+ date: 2019-01-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: SparkleFormation Usage Guides
14
14
  email: chrisroberts.code@gmail.com
@@ -20,6 +20,7 @@ files:
20
20
  - README.md
21
21
  - docs/apply-and-nested.md
22
22
  - docs/getting-started.md
23
+ - docs/tips-and-tricks.md
23
24
  - sparkle-guides.gemspec
24
25
  homepage: http://github.com/sparkleformation/sparkle-guides
25
26
  licenses:
@@ -40,8 +41,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
40
41
  - !ruby/object:Gem::Version
41
42
  version: '0'
42
43
  requirements: []
43
- rubyforge_project:
44
- rubygems_version: 2.4.8
44
+ rubygems_version: 3.0.1
45
45
  signing_key:
46
46
  specification_version: 4
47
47
  summary: SparkleFormation Guides