terraframe 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: 0dcd49ea8fc966a851305a7ba0141c7a1f20010c
4
- data.tar.gz: be6ff6375b82ca3a50dda7b258717ca8f5b41064
3
+ metadata.gz: 00d384598fcee65d58735e3c41a56f4a4970d399
4
+ data.tar.gz: 1b798d833ae2d4d8ec3d5eb8642d12660448b0d1
5
5
  SHA512:
6
- metadata.gz: 75eae91b7b578746992c9c9ec9dcb03e3ce3398a6f69b42b65b146676248bb2101ca2c5941fa60bc120fe982d934650dc3d7ba8b7b6e48e49a5112946026d36a
7
- data.tar.gz: 2f80d7729c29a43c714d573e4c8552dae0c3482b48c64ec1d5d2ac6700b76c80ae5a7e428446a7bd1a9de98a38dd8b4d63ea91e1d1c600513e3d5b67d848f38f
6
+ metadata.gz: b72417f33acbe501eff732c849aa5a0d6711afe50ee86b7f3909aeef66759e5ab508ec0c77a766312eafae813c57540177211bf06a2f8a37041a362ec86c08bf
7
+ data.tar.gz: 65f00999504ed3840a655c69a22230fc72cbe2a7127d8d24c3c4dc93ee4aeed9efe89e09b778e345bc77c6df2418f0b863af5baaf03e51b0d9b1f1fb8cf2e53f
@@ -25,7 +25,7 @@ module Terraframe
25
25
 
26
26
  :aws_instance => Terraframe::AWS::AWSTaggedResource,
27
27
  :aws_route_table => Terraframe::AWS::AWSTaggedResource,
28
- :aws_security_group => Terraframe::AWS::AWSTaggedResource,
28
+ :aws_security_group => Terraframe::AWS::AWSSecurityGroupResource,
29
29
  :aws_subnet => Terraframe::AWS::AWSTaggedResource,
30
30
  :aws_vpc => Terraframe::AWS::AWSTaggedResource
31
31
  }
@@ -15,7 +15,7 @@ module Terraframe
15
15
  end
16
16
 
17
17
  class AWSTaggedResource < Terraframe::Resource
18
- def initialize(name, vars, &block)
18
+ def initialize(name, vars, context, &block)
19
19
  @fields = {}
20
20
  @vars = Hashie::Mash.new(vars)
21
21
 
@@ -23,10 +23,10 @@ module Terraframe
23
23
  @fields["tags"]["Name"] = name
24
24
 
25
25
  instance_eval &block
26
- end
26
+ end
27
27
 
28
28
  def tags(&block)
29
- tag_set = Terraframe::AWS::AWSTagBlock.new(@vars, &block)
29
+ tag_set = Terraframe::AWS::AWSTagBlock.new(@vars, @context, &block)
30
30
  @fields["tags"].merge!(tag_set.fields)
31
31
  end
32
32
 
@@ -37,5 +37,12 @@ module Terraframe
37
37
 
38
38
  class AWSTagBlock < Terraframe::ScriptItem
39
39
  end
40
+
41
+ class AWSSecurityGroupResource < AWSResource
42
+ def initialize(name, vars, context, &block)
43
+ super(name, vars, context, &block)
44
+ @fields["name"] = name
45
+ end
46
+ end
40
47
  end
41
48
  end
@@ -4,9 +4,45 @@ module Terraframe
4
4
  class Resource < Terraframe::ScriptItem
5
5
  attr_reader :resource_name
6
6
 
7
- def initialize(resource_name, vars, &block)
7
+ def initialize(resource_name, vars, context, &block)
8
8
  @resource_name = resource_name
9
- super(vars, &block)
9
+ super(vars, context, &block)
10
10
  end
11
+
12
+ def connection(&block)
13
+ connection_set = Connection.new(vars, context, &block)
14
+ @fields["connection"] = connection_set.fields
15
+ end
16
+
17
+ def provisioner(provisioner_type, &block)
18
+ provisioner_type = provisioner_type.to_sym
19
+
20
+ @fields["provisioner"] = @fields["provisioner"] || []
21
+
22
+ provisioner_set = Provisioner.new(vars, context, &block)
23
+ @fields["provisioner"] << { cleanup_provisioner_type(provisioner_type) => provisioner_set.fields }
24
+ end
25
+
26
+ def cleanup_provisioner_type(provisioner_type)
27
+ case provisioner_type.to_sym
28
+ when :remote_exec
29
+ "remote-exec"
30
+ when :local_exec
31
+ "local-exec"
32
+ else
33
+ provisioner_type
34
+ end
35
+ end
36
+ end
37
+
38
+
39
+
40
+ class Provisioner < Terraframe::ScriptItem
41
+ def connection(&block)
42
+ connection_set = Connection.new(vars, context, &block)
43
+ @fields["connection"] = connection_set.fields
44
+ end
45
+ end
46
+ class Connection < Terraframe::ScriptItem
11
47
  end
12
48
  end
@@ -5,16 +5,21 @@ module Terraframe
5
5
  class ScriptItem
6
6
  attr_reader :fields
7
7
  attr_reader :vars
8
+ attr_reader :context
8
9
 
9
- def initialize(vars, &block)
10
+ def initialize(vars, context, &block)
10
11
  @fields = {}
12
+ @context = context
11
13
  @vars = Hashie::Mash.new(vars)
12
14
 
13
15
  instance_eval &block
14
16
  end
15
17
 
16
18
  def to_json(*a)
17
- @fields.to_json(*a)
19
+ sanitized = @fields
20
+ sanitized.delete("\#")
21
+
22
+ sanitized.to_json(*a)
18
23
  end
19
24
 
20
25
  ## DSL FUNCTIONS BELOW
@@ -3,6 +3,8 @@ require 'hashie/mash'
3
3
 
4
4
  module Terraframe
5
5
  class State
6
+ # TODO: support outputs!
7
+
6
8
  attr_reader :vars
7
9
  attr_reader :logger
8
10
 
@@ -50,7 +52,8 @@ module Terraframe
50
52
  raise msg
51
53
  end
52
54
 
53
- provider = @__contexts[type].provider_type.new(vars, &block)
55
+ handling_context = @__contexts[type]
56
+ provider = handling_context.provider_type.new(vars, handling_context, &block)
54
57
  logger.debug "Provider of type '#{type}': #{provider.inspect}"
55
58
  @__output[:provider][type] = provider
56
59
 
@@ -63,12 +66,6 @@ module Terraframe
63
66
  raise msg
64
67
  end
65
68
 
66
- def provisioner
67
- msg = "TODO: implement provisioner support."
68
- logger.fatal msg
69
- raise msg
70
- end
71
-
72
69
  def resource(resource_type, resource_name, &block)
73
70
  handling_context_pair = @__contexts.find { |k, v| v.resources.include?(resource_type) }
74
71
  if handling_context_pair == nil
@@ -81,7 +78,7 @@ module Terraframe
81
78
  resource_class = handling_context.resources[resource_type]
82
79
 
83
80
  @__output[:resource][resource_type] ||= {}
84
- @__output[:resource][resource_type][resource_name.to_s] = resource_class.new(resource_name, vars, &block)
81
+ @__output[:resource][resource_type][resource_name.to_s] = resource_class.new(resource_name, vars, handling_context, &block)
85
82
  end
86
83
 
87
84
  # anything that is not a provider or a variable should be interpreted
@@ -1,3 +1,3 @@
1
1
  module Terraframe
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terraframe
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
  - Ed Ropple
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-12 00:00:00.000000000 Z
11
+ date: 2015-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler