ruby-terraform 1.6.0.pre.6 → 1.7.0.pre.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 +4 -4
- data/Gemfile.lock +4 -4
- data/lib/ruby_terraform/models/change.rb +104 -0
- data/lib/ruby_terraform/models/known_value.rb +35 -0
- data/lib/ruby_terraform/models/list.rb +57 -0
- data/lib/ruby_terraform/models/map.rb +54 -0
- data/lib/ruby_terraform/models/objects.rb +186 -0
- data/lib/ruby_terraform/models/plan.rb +51 -0
- data/lib/ruby_terraform/models/resource_change.rb +91 -0
- data/lib/ruby_terraform/models/unknown_value.rb +32 -0
- data/lib/ruby_terraform/models/values.rb +38 -0
- data/lib/ruby_terraform/models.rb +5 -0
- data/lib/ruby_terraform/value_equality.rb +15 -0
- data/lib/ruby_terraform/version.rb +1 -1
- data/lib/ruby_terraform.rb +1 -0
- metadata +13 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f456092f582718db648a5bdfab600d022ffd02b464da155088de1f1ca5247aa2
|
4
|
+
data.tar.gz: e79d368374b9f892ac2fec66d5262f6b9d0999542772e8542912b18791ac1656
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e00c371ab4abea3f4d9448fc8a9fdd0dcdb7abcdd069aeb77f74ef1f16944dd2bc1f597cdb9ff5c6b2ede990f35c064adcb56dac50bcb9ac9cd74c0a1411703
|
7
|
+
data.tar.gz: 01f44d86b1c2ef64a2ea9511a14ece5903d34e554b6908cfe9c41dd724e2a3d7f934fca8f1168b9c94544dcf2b07fb20c3d94f1071dbc408ea8825819eb2398a
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ruby-terraform (1.
|
4
|
+
ruby-terraform (1.7.0.pre.2)
|
5
5
|
immutable-struct (~> 2.4)
|
6
6
|
lino (~> 3.0)
|
7
7
|
|
@@ -129,8 +129,8 @@ GEM
|
|
129
129
|
parser (>= 3.1.1.0)
|
130
130
|
rubocop-rake (0.6.0)
|
131
131
|
rubocop (~> 1.0)
|
132
|
-
rubocop-rspec (2.
|
133
|
-
rubocop (~> 1.
|
132
|
+
rubocop-rspec (2.12.1)
|
133
|
+
rubocop (~> 1.31)
|
134
134
|
ruby-progressbar (1.11.0)
|
135
135
|
ruby2_keywords (0.0.5)
|
136
136
|
ruby_gpg2 (0.8.0)
|
@@ -177,4 +177,4 @@ DEPENDENCIES
|
|
177
177
|
yard
|
178
178
|
|
179
179
|
BUNDLED WITH
|
180
|
-
2.3.
|
180
|
+
2.3.17
|
@@ -0,0 +1,104 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../value_equality'
|
4
|
+
require_relative './objects'
|
5
|
+
|
6
|
+
module RubyTerraform
|
7
|
+
module Models
|
8
|
+
class Change
|
9
|
+
include ValueEquality
|
10
|
+
|
11
|
+
def initialize(content)
|
12
|
+
@content = content
|
13
|
+
end
|
14
|
+
|
15
|
+
def actions
|
16
|
+
@content[:actions].map do |action|
|
17
|
+
{
|
18
|
+
'no-op' => :no_op,
|
19
|
+
'create' => :create,
|
20
|
+
'read' => :read,
|
21
|
+
'update' => :update,
|
22
|
+
'delete' => :delete
|
23
|
+
}[action]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def before
|
28
|
+
@content[:before]
|
29
|
+
end
|
30
|
+
|
31
|
+
def before_sensitive
|
32
|
+
@content[:before_sensitive]
|
33
|
+
end
|
34
|
+
|
35
|
+
def before_object
|
36
|
+
Objects.box(before, sensitive: before_sensitive)
|
37
|
+
end
|
38
|
+
|
39
|
+
def after
|
40
|
+
@content[:after]
|
41
|
+
end
|
42
|
+
|
43
|
+
def after_unknown
|
44
|
+
@content[:after_unknown]
|
45
|
+
end
|
46
|
+
|
47
|
+
def after_sensitive
|
48
|
+
@content[:after_sensitive]
|
49
|
+
end
|
50
|
+
|
51
|
+
def after_object
|
52
|
+
Objects.box(
|
53
|
+
after,
|
54
|
+
unknown: after_unknown,
|
55
|
+
sensitive: after_sensitive
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
59
|
+
def no_op?
|
60
|
+
actions == [:no_op]
|
61
|
+
end
|
62
|
+
|
63
|
+
def create?
|
64
|
+
actions == [:create]
|
65
|
+
end
|
66
|
+
|
67
|
+
def read?
|
68
|
+
actions == [:read]
|
69
|
+
end
|
70
|
+
|
71
|
+
def update?
|
72
|
+
actions == [:update]
|
73
|
+
end
|
74
|
+
|
75
|
+
def replace_delete_before_create?
|
76
|
+
actions == %i[delete create]
|
77
|
+
end
|
78
|
+
|
79
|
+
def replace_create_before_delete?
|
80
|
+
actions == %i[create delete]
|
81
|
+
end
|
82
|
+
|
83
|
+
def replace?
|
84
|
+
replace_delete_before_create? || replace_create_before_delete?
|
85
|
+
end
|
86
|
+
|
87
|
+
def delete?
|
88
|
+
actions == [:delete]
|
89
|
+
end
|
90
|
+
|
91
|
+
def inspect
|
92
|
+
@content.inspect
|
93
|
+
end
|
94
|
+
|
95
|
+
def to_h
|
96
|
+
@content
|
97
|
+
end
|
98
|
+
|
99
|
+
def state
|
100
|
+
[@content]
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../value_equality'
|
4
|
+
|
5
|
+
module RubyTerraform
|
6
|
+
module Models
|
7
|
+
class KnownValue
|
8
|
+
include ValueEquality
|
9
|
+
|
10
|
+
def initialize(value, sensitive: false)
|
11
|
+
@value = value
|
12
|
+
@sensitive = sensitive
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :value
|
16
|
+
|
17
|
+
def known?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
def sensitive?
|
22
|
+
@sensitive
|
23
|
+
end
|
24
|
+
|
25
|
+
def state
|
26
|
+
[@value, @sensitive]
|
27
|
+
end
|
28
|
+
|
29
|
+
def inspect
|
30
|
+
sensitive = sensitive? ? 'sensitive' : 'non-sensitive'
|
31
|
+
"#{@value.inspect} (known, #{sensitive})"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../value_equality'
|
4
|
+
|
5
|
+
module RubyTerraform
|
6
|
+
module Models
|
7
|
+
class List
|
8
|
+
extend Forwardable
|
9
|
+
|
10
|
+
include Enumerable
|
11
|
+
include ValueEquality
|
12
|
+
|
13
|
+
def_delegators(
|
14
|
+
:@value,
|
15
|
+
:to_a, :to_h, :to_ary,
|
16
|
+
:[], :[]=, :at, :fetch, :first, :last,
|
17
|
+
:concat, :union, :difference, :intersection, :intersect?,
|
18
|
+
:<<, :push, :append, :pop, :shift, :unshift, :insert,
|
19
|
+
:each, :each_index, :reverse_each, :length, :size, :empty?,
|
20
|
+
:find_index, :index, :rindex, :join,
|
21
|
+
:reverse, :reverse!, :rotate, :rotate!, :sort, :sort!, :sort_by!,
|
22
|
+
:collect, :collect!, :map, :map!, :select, :select!, :filter, :filter!,
|
23
|
+
:keep_if, :values_at, :delete, :delete_at, :delete_if,
|
24
|
+
:reject, :reject!, :zip, :transpose, :replace, :clear, :fill, :include?,
|
25
|
+
:<=>, :slice, :slice!, :assoc, :rassoc, :+, :*, :-, :&, :|, :max, :min,
|
26
|
+
:minmax, :uniq, :uniq!, :compact, :compact!, :flatten, :flatten!,
|
27
|
+
:count, :cycle,
|
28
|
+
:permutation, :combination,
|
29
|
+
:repeated_permutation, :repeated_combination,
|
30
|
+
:product, :take, :take_while, :drop, :drop_while,
|
31
|
+
:bsearch, :bsearch_index, :any?, :all?, :none?, :one?, :dig, :sum,
|
32
|
+
:deconstruct, :append, :prepend, :shuffle!, :shuffle, :sample, :pack
|
33
|
+
)
|
34
|
+
|
35
|
+
def initialize(value, sensitive: false)
|
36
|
+
@value = value
|
37
|
+
@sensitive = sensitive
|
38
|
+
end
|
39
|
+
|
40
|
+
attr_reader :value
|
41
|
+
|
42
|
+
def sensitive?
|
43
|
+
@sensitive
|
44
|
+
end
|
45
|
+
|
46
|
+
def state
|
47
|
+
[@value, @sensitive]
|
48
|
+
end
|
49
|
+
|
50
|
+
def inspect
|
51
|
+
sensitive = sensitive? ? 'sensitive' : 'non-sensitive'
|
52
|
+
"#{value.inspect} (#{sensitive})"
|
53
|
+
end
|
54
|
+
alias to_s inspect
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../value_equality'
|
4
|
+
|
5
|
+
module RubyTerraform
|
6
|
+
module Models
|
7
|
+
class Map
|
8
|
+
extend Forwardable
|
9
|
+
|
10
|
+
include Enumerable
|
11
|
+
include ValueEquality
|
12
|
+
|
13
|
+
def_delegators(
|
14
|
+
:@value,
|
15
|
+
:rehash, :to_hash, :to_h, :to_a, :to_proc,
|
16
|
+
:[], :fetch, :[]=, :store, :default, :default=,
|
17
|
+
:default_proc, :default_proc=, :key, :size, :length, :empty?,
|
18
|
+
:each_value, :each_key, :each_pair, :each,
|
19
|
+
:transform_keys, :transform_keys!,
|
20
|
+
:transform_values, :transform_values!,
|
21
|
+
:keys, :values, :values_at, :fetch_values,
|
22
|
+
:shift, :delete, :delete_if, :keep_if,
|
23
|
+
:select, :select!, :filter, :filter!, :reject, :reject!,
|
24
|
+
:slice, :except, :clear, :invert, :update, :replace,
|
25
|
+
:merge!, :merge, :assoc, :rassoc, :flatten, :compact, :compact!,
|
26
|
+
:include?, :member?, :has_key?, :has_value?, :key?, :value?,
|
27
|
+
:compare_by_identity, :compare_by_identity?, :any?, :dig,
|
28
|
+
:<=, :<, :>=, :>, :deconstruct_keys
|
29
|
+
)
|
30
|
+
|
31
|
+
def initialize(value, sensitive: false)
|
32
|
+
@value = value
|
33
|
+
@sensitive = sensitive
|
34
|
+
end
|
35
|
+
|
36
|
+
attr_reader :value
|
37
|
+
|
38
|
+
def sensitive?
|
39
|
+
@sensitive
|
40
|
+
end
|
41
|
+
|
42
|
+
def state
|
43
|
+
[@value, @sensitive]
|
44
|
+
end
|
45
|
+
|
46
|
+
def inspect
|
47
|
+
sensitive = sensitive? ? 'sensitive' : 'non-sensitive'
|
48
|
+
"#{value.inspect} (#{sensitive})"
|
49
|
+
end
|
50
|
+
|
51
|
+
alias to_s inspect
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,186 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './values'
|
4
|
+
|
5
|
+
module RubyTerraform
|
6
|
+
module Models
|
7
|
+
# rubocop:disable Metrics/ModuleLength
|
8
|
+
module Objects
|
9
|
+
class << self
|
10
|
+
# rubocop:disable Style/RedundantAssignment
|
11
|
+
def box(object, unknown: nil, sensitive: nil)
|
12
|
+
initial = boxed_empty_by_value(object)
|
13
|
+
unknown ||= native_empty_by_value(object)
|
14
|
+
sensitive ||= native_empty_by_value(object)
|
15
|
+
|
16
|
+
return Values.unknown(sensitive: sensitive) if unknown == true
|
17
|
+
|
18
|
+
boxed_unknown =
|
19
|
+
box_unknown(unknown, sensitive: sensitive, initial: initial)
|
20
|
+
boxed_object =
|
21
|
+
box_known(object, sensitive: sensitive, initial: boxed_unknown)
|
22
|
+
|
23
|
+
boxed_object
|
24
|
+
end
|
25
|
+
|
26
|
+
# rubocop:enable Style/RedundantAssignment
|
27
|
+
|
28
|
+
def paths(object, current = [], accumulator = [])
|
29
|
+
normalised = normalise(object)
|
30
|
+
if normalised.is_a?(Enumerable)
|
31
|
+
normalised.inject(accumulator) do |a, e|
|
32
|
+
paths(e[0], current + [e[1]], a)
|
33
|
+
end
|
34
|
+
else
|
35
|
+
accumulator + [current]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def known_values(paths, object: {}, sensitive: {})
|
40
|
+
paths.map do |path|
|
41
|
+
resolved = try_dig(object, path)
|
42
|
+
resolved_sensitive = try_dig(sensitive, path) == true
|
43
|
+
|
44
|
+
Values.known(resolved, sensitive: resolved_sensitive)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def unknown_values(paths, unknown: {}, sensitive: {})
|
49
|
+
paths.map do |path|
|
50
|
+
resolved = try_dig(unknown, path)
|
51
|
+
resolved_sensitive = try_dig(sensitive, path) == true
|
52
|
+
|
53
|
+
resolved ? Values.unknown(sensitive: resolved_sensitive) : nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# rubocop:disable Metrics/MethodLength
|
60
|
+
def box_unknown(unknown, sensitive: {}, initial: Values.empty_map)
|
61
|
+
unknown_paths = paths(unknown)
|
62
|
+
if root_path(unknown_paths)
|
63
|
+
return Values.unknown(sensitive: sensitive)
|
64
|
+
end
|
65
|
+
|
66
|
+
unknown_values = unknown_values(
|
67
|
+
unknown_paths, unknown: unknown, sensitive: sensitive
|
68
|
+
)
|
69
|
+
|
70
|
+
object(
|
71
|
+
unknown_paths, unknown_values,
|
72
|
+
sensitive: sensitive, initial: initial
|
73
|
+
)
|
74
|
+
end
|
75
|
+
# rubocop:enable Metrics/MethodLength
|
76
|
+
|
77
|
+
# rubocop:disable Metrics/MethodLength
|
78
|
+
def box_known(object, sensitive: {}, initial: Values.empty_map)
|
79
|
+
object_paths = paths(object)
|
80
|
+
if root_path(object_paths)
|
81
|
+
return Values.known(object, sensitive: sensitive)
|
82
|
+
end
|
83
|
+
|
84
|
+
object_values = known_values(
|
85
|
+
object_paths, object: object, sensitive: sensitive
|
86
|
+
)
|
87
|
+
|
88
|
+
object(
|
89
|
+
object_paths, object_values,
|
90
|
+
sensitive: sensitive, initial: initial
|
91
|
+
)
|
92
|
+
end
|
93
|
+
# rubocop:enable Metrics/MethodLength
|
94
|
+
|
95
|
+
def object(paths, values, sensitive: {}, initial: Values.empty_map)
|
96
|
+
paths
|
97
|
+
.zip(values)
|
98
|
+
.each_with_object(initial) do |path_value, object|
|
99
|
+
path, value = path_value
|
100
|
+
update_in(object, path, value, sensitive: sensitive)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def update_in(object, path, value, sensitive: {})
|
105
|
+
path.inject([[], path.drop(1)]) do |context, step|
|
106
|
+
seen, remaining = context
|
107
|
+
pointer = [seen, step, remaining]
|
108
|
+
|
109
|
+
update_object_for_step(object, pointer, value, sensitive: sensitive)
|
110
|
+
update_context_for_step(pointer)
|
111
|
+
end
|
112
|
+
object
|
113
|
+
end
|
114
|
+
|
115
|
+
# rubocop:disable Metrics/MethodLength
|
116
|
+
def update_object_for_step(object, pointer, value, sensitive: {})
|
117
|
+
seen, step, remaining = pointer
|
118
|
+
|
119
|
+
parent = try_dig(object, seen, default: object)
|
120
|
+
upcoming = remaining.first
|
121
|
+
|
122
|
+
resolved_sensitive = try_dig(sensitive, seen + [step]) == true
|
123
|
+
resolved =
|
124
|
+
if remaining.empty?
|
125
|
+
value
|
126
|
+
else
|
127
|
+
boxed_empty_by_key(upcoming, sensitive: resolved_sensitive)
|
128
|
+
end
|
129
|
+
|
130
|
+
parent[step] ||= resolved
|
131
|
+
end
|
132
|
+
# rubocop:enable Metrics/MethodLength
|
133
|
+
|
134
|
+
def update_context_for_step(pointer)
|
135
|
+
seen, step, remaining = pointer
|
136
|
+
[seen + [step], remaining.drop(1)]
|
137
|
+
end
|
138
|
+
|
139
|
+
def try_dig(object, path, default: nil)
|
140
|
+
return default if path.empty?
|
141
|
+
|
142
|
+
result = object.dig(*path)
|
143
|
+
result.nil? ? default : result
|
144
|
+
rescue NoMethodError, TypeError
|
145
|
+
default
|
146
|
+
end
|
147
|
+
|
148
|
+
def boxed_empty_by_key(key, sensitive: false)
|
149
|
+
if key.is_a?(Numeric)
|
150
|
+
Values.empty_list(sensitive: sensitive)
|
151
|
+
else
|
152
|
+
Values.empty_map(sensitive: sensitive)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
def boxed_empty_by_value(value, sensitive: false)
|
157
|
+
case value
|
158
|
+
when Array then Values.empty_list(sensitive: sensitive)
|
159
|
+
when Hash then Values.empty_map(sensitive: sensitive)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def native_empty_by_value(value)
|
164
|
+
case value
|
165
|
+
when Array then []
|
166
|
+
when Hash then {}
|
167
|
+
else false
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def normalise(object)
|
172
|
+
case object
|
173
|
+
when Array then object.each_with_index.to_a
|
174
|
+
when Hash then object.to_a.map { |e| [e[1], e[0]] }
|
175
|
+
else object
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def root_path(paths)
|
180
|
+
paths.count == 1 && paths[0].empty?
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
# rubocop:enable Metrics/ModuleLength
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'resource_change'
|
4
|
+
|
5
|
+
module RubyTerraform
|
6
|
+
module Models
|
7
|
+
class Plan
|
8
|
+
def initialize(content)
|
9
|
+
@content = content
|
10
|
+
end
|
11
|
+
|
12
|
+
def format_version
|
13
|
+
@content[:format_version]
|
14
|
+
end
|
15
|
+
|
16
|
+
def terraform_version
|
17
|
+
@content[:terraform_version]
|
18
|
+
end
|
19
|
+
|
20
|
+
def variables
|
21
|
+
@content[:variables]
|
22
|
+
end
|
23
|
+
|
24
|
+
def variable_values
|
25
|
+
variables.transform_values { |value| value[:value] }
|
26
|
+
end
|
27
|
+
|
28
|
+
def resource_changes
|
29
|
+
@content[:resource_changes].map do |resource_change|
|
30
|
+
ResourceChange.new(resource_change)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def resource_changes_matching(definition)
|
35
|
+
resource_changes.filter do |resource_change|
|
36
|
+
definition.all? do |method, value|
|
37
|
+
resource_change.send(method) == value
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def inspect
|
43
|
+
@content.inspect
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_h
|
47
|
+
@content
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../value_equality'
|
4
|
+
require_relative 'change'
|
5
|
+
|
6
|
+
module RubyTerraform
|
7
|
+
module Models
|
8
|
+
class ResourceChange
|
9
|
+
include ValueEquality
|
10
|
+
def initialize(content)
|
11
|
+
@content = content
|
12
|
+
end
|
13
|
+
|
14
|
+
def address
|
15
|
+
@content[:address]
|
16
|
+
end
|
17
|
+
|
18
|
+
def module_address
|
19
|
+
@content[:module_address]
|
20
|
+
end
|
21
|
+
|
22
|
+
def mode
|
23
|
+
@content[:mode]
|
24
|
+
end
|
25
|
+
|
26
|
+
def type
|
27
|
+
@content[:type]
|
28
|
+
end
|
29
|
+
|
30
|
+
def name
|
31
|
+
@content[:name]
|
32
|
+
end
|
33
|
+
|
34
|
+
def index
|
35
|
+
@content[:index]
|
36
|
+
end
|
37
|
+
|
38
|
+
def provider_name
|
39
|
+
@content[:provider_name]
|
40
|
+
end
|
41
|
+
|
42
|
+
def change
|
43
|
+
Change.new(@content[:change])
|
44
|
+
end
|
45
|
+
|
46
|
+
def no_op?
|
47
|
+
change.no_op?
|
48
|
+
end
|
49
|
+
|
50
|
+
def create?
|
51
|
+
change.create?
|
52
|
+
end
|
53
|
+
|
54
|
+
def read?
|
55
|
+
change.read?
|
56
|
+
end
|
57
|
+
|
58
|
+
def update?
|
59
|
+
change.update?
|
60
|
+
end
|
61
|
+
|
62
|
+
def replace_delete_before_create?
|
63
|
+
change.replace_delete_before_create?
|
64
|
+
end
|
65
|
+
|
66
|
+
def replace_create_before_delete?
|
67
|
+
change.replace_create_before_delete?
|
68
|
+
end
|
69
|
+
|
70
|
+
def replace?
|
71
|
+
change.replace?
|
72
|
+
end
|
73
|
+
|
74
|
+
def delete?
|
75
|
+
change.delete?
|
76
|
+
end
|
77
|
+
|
78
|
+
def inspect
|
79
|
+
@content.inspect
|
80
|
+
end
|
81
|
+
|
82
|
+
def to_h
|
83
|
+
@content
|
84
|
+
end
|
85
|
+
|
86
|
+
def state
|
87
|
+
[@content]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../value_equality'
|
4
|
+
|
5
|
+
module RubyTerraform
|
6
|
+
module Models
|
7
|
+
class UnknownValue
|
8
|
+
include ValueEquality
|
9
|
+
|
10
|
+
def initialize(sensitive: false)
|
11
|
+
@sensitive = sensitive
|
12
|
+
end
|
13
|
+
|
14
|
+
def known?
|
15
|
+
false
|
16
|
+
end
|
17
|
+
|
18
|
+
def sensitive?
|
19
|
+
@sensitive
|
20
|
+
end
|
21
|
+
|
22
|
+
def state
|
23
|
+
[@sensitive]
|
24
|
+
end
|
25
|
+
|
26
|
+
def inspect
|
27
|
+
sensitive = sensitive? ? 'sensitive' : 'non-sensitive'
|
28
|
+
"? (unknown, #{sensitive})"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './list'
|
4
|
+
require_relative './map'
|
5
|
+
require_relative './known_value'
|
6
|
+
require_relative './unknown_value'
|
7
|
+
|
8
|
+
module RubyTerraform
|
9
|
+
module Models
|
10
|
+
module Values
|
11
|
+
class << self
|
12
|
+
def known(value, sensitive: false)
|
13
|
+
KnownValue.new(value, sensitive: sensitive)
|
14
|
+
end
|
15
|
+
|
16
|
+
def unknown(sensitive: false)
|
17
|
+
UnknownValue.new(sensitive: sensitive)
|
18
|
+
end
|
19
|
+
|
20
|
+
def list(value, sensitive: false)
|
21
|
+
List.new(value, sensitive: sensitive)
|
22
|
+
end
|
23
|
+
|
24
|
+
def empty_list(sensitive: false)
|
25
|
+
list([], sensitive: sensitive)
|
26
|
+
end
|
27
|
+
|
28
|
+
def map(value, sensitive: false)
|
29
|
+
Map.new(value, sensitive: sensitive)
|
30
|
+
end
|
31
|
+
|
32
|
+
def empty_map(sensitive: false)
|
33
|
+
map({}, sensitive: sensitive)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/ruby_terraform.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-terraform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0.pre.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- InfraBlocks Maintainers
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: immutable-struct
|
@@ -317,6 +317,16 @@ files:
|
|
317
317
|
- lib/ruby_terraform/commands/workspace_show.rb
|
318
318
|
- lib/ruby_terraform/errors.rb
|
319
319
|
- lib/ruby_terraform/errors/execution_error.rb
|
320
|
+
- lib/ruby_terraform/models.rb
|
321
|
+
- lib/ruby_terraform/models/change.rb
|
322
|
+
- lib/ruby_terraform/models/known_value.rb
|
323
|
+
- lib/ruby_terraform/models/list.rb
|
324
|
+
- lib/ruby_terraform/models/map.rb
|
325
|
+
- lib/ruby_terraform/models/objects.rb
|
326
|
+
- lib/ruby_terraform/models/plan.rb
|
327
|
+
- lib/ruby_terraform/models/resource_change.rb
|
328
|
+
- lib/ruby_terraform/models/unknown_value.rb
|
329
|
+
- lib/ruby_terraform/models/values.rb
|
320
330
|
- lib/ruby_terraform/options.rb
|
321
331
|
- lib/ruby_terraform/options/definition.rb
|
322
332
|
- lib/ruby_terraform/options/definitions.rb
|
@@ -333,6 +343,7 @@ files:
|
|
333
343
|
- lib/ruby_terraform/options/values/key_value.rb
|
334
344
|
- lib/ruby_terraform/options/values/string.rb
|
335
345
|
- lib/ruby_terraform/output.rb
|
346
|
+
- lib/ruby_terraform/value_equality.rb
|
336
347
|
- lib/ruby_terraform/version.rb
|
337
348
|
- ruby_terraform.gemspec
|
338
349
|
homepage: https://github.com/infrablocks/ruby_terraform
|