itamae-spec 0.0.2 → 0.0.3
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/lib/itamae-spec/generators/project.rb +6 -0
- data/lib/itamae-spec/resource.rb +2 -0
- data/lib/itamae-spec/resource/file.rb +44 -0
- data/lib/itamae-spec/resource/route53_record.rb +145 -0
- data/lib/itamae-spec/resource/s3_file.rb +1 -1
- data/lib/itamae-spec/version.txt +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c331c48127fb1a98218a1a3c3558ced75f5be9c8ca8498a5a5cc90d1f317314c
|
4
|
+
data.tar.gz: 61b144fafd16ca07d70edbfd545021433a47db68872ddf61d44ad7a42c93b752
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a66032f85bcee1eb44d9fad26a0a1ccffab6d76eda4f6cb8965f1c1f22fd121519fe6347b4e3b1cfb72c04087227b4f905714865019b384841c1b8527abc4627
|
7
|
+
data.tar.gz: 51d791fe0021ca63c798441d214d018d0f74301b92cb91ccece9ce1b05edf7f00902777fa6242bf8820f0f9802332e9d662c5b90be8a1f22e58612706b0d8de2
|
data/lib/itamae-spec/resource.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
module Itamae
|
3
|
+
module Resource
|
4
|
+
class File
|
5
|
+
def send_tempfile
|
6
|
+
if !attributes.content && !content_file
|
7
|
+
@temppath = nil
|
8
|
+
return
|
9
|
+
end
|
10
|
+
|
11
|
+
begin
|
12
|
+
src = if content_file
|
13
|
+
content_file
|
14
|
+
else
|
15
|
+
f = Tempfile.open('itamae')
|
16
|
+
f.write(attributes.content)
|
17
|
+
f.close
|
18
|
+
f.path
|
19
|
+
end
|
20
|
+
|
21
|
+
@temppath = ::File.join(runner.tmpdir, Time.now.to_f.to_s)
|
22
|
+
|
23
|
+
if backend.is_a?(Itamae::Backend::Docker)
|
24
|
+
run_command(["mkdir", @temppath])
|
25
|
+
backend.send_file(src, @temppath)
|
26
|
+
@temppath = ::File.join(@temppath, ::File.basename(src))
|
27
|
+
elsif backend.is_a?(Itamae::Backend::Local)
|
28
|
+
run_command(["touch", @temppath])
|
29
|
+
run_specinfra(:change_file_mode, @temppath, '0600')
|
30
|
+
run_specinfra(:copy_file, src, @temppath)
|
31
|
+
else
|
32
|
+
run_command(["touch", @temppath])
|
33
|
+
run_specinfra(:change_file_mode, @temppath, '0600')
|
34
|
+
backend.send_file(src, @temppath)
|
35
|
+
end
|
36
|
+
|
37
|
+
run_specinfra(:change_file_mode, @temppath, '0600')
|
38
|
+
ensure
|
39
|
+
f.unlink if f
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,145 @@
|
|
1
|
+
require 'multi_json'
|
2
|
+
|
3
|
+
module Itamae
|
4
|
+
module Resource
|
5
|
+
class Route53Record < File
|
6
|
+
define_attribute :action, default: :create
|
7
|
+
define_attribute :region, type: String, required: true
|
8
|
+
define_attribute :profile, type: String, default: 'default'
|
9
|
+
define_attribute :hosted_zone_id, type: String, required: true
|
10
|
+
define_attribute :comment, type: String
|
11
|
+
define_attribute :record_name, type: String, default_name: true
|
12
|
+
define_attribute :type, type: String, required: true
|
13
|
+
define_attribute :ttl, type: Integer, required: true
|
14
|
+
define_attribute :value, type: [ String, Array ], required: true
|
15
|
+
# define_attribute :set_identifier, type: String
|
16
|
+
# define_attribute :weight, type: String
|
17
|
+
# define_attribute :failover, type: String
|
18
|
+
# define_attribute :health_check_id, type: String
|
19
|
+
# define_attribute :traffic_policy_instance_id, type: String
|
20
|
+
|
21
|
+
def pre_action
|
22
|
+
attributes.record_name = attributes.record_name + '.' unless attributes.record_name[-1] == '.'
|
23
|
+
credentials = Aws::SharedCredentials.new(profile_name: attributes.profile)
|
24
|
+
@route53 = Aws::Route53::Client.new(region: attributes.region, credentials: credentials)
|
25
|
+
|
26
|
+
@change_batch = define_change_batch
|
27
|
+
resource_record_set = @change_batch[:changes][0][:resource_record_set]
|
28
|
+
attributes.content = MultiJson.dump(resource_record_set, pretty: true)
|
29
|
+
|
30
|
+
@resource_record_set = compare_record_values(fetch_record)
|
31
|
+
|
32
|
+
case @current_action
|
33
|
+
when :create
|
34
|
+
attributes.exist = true
|
35
|
+
when :upsert
|
36
|
+
attributes.exist = true
|
37
|
+
when :delete
|
38
|
+
attributes.exist = false
|
39
|
+
end
|
40
|
+
|
41
|
+
send_tempfile
|
42
|
+
compare_file if @current_action == :upsert
|
43
|
+
end
|
44
|
+
|
45
|
+
def set_current_attributes
|
46
|
+
current.modified = false
|
47
|
+
end
|
48
|
+
|
49
|
+
def action_create
|
50
|
+
return if current.exist
|
51
|
+
@route53.change_resource_record_sets(
|
52
|
+
change_batch: @change_batch,
|
53
|
+
hosted_zone_id: attributes.hosted_zone_id
|
54
|
+
)
|
55
|
+
end
|
56
|
+
|
57
|
+
def action_upsert
|
58
|
+
@route53.change_resource_record_sets(
|
59
|
+
change_batch: @change_batch,
|
60
|
+
hosted_zone_id: attributes.hosted_zone_id
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
def action_delete
|
65
|
+
return unless current.exist
|
66
|
+
@route53.change_resource_record_sets(
|
67
|
+
change_batch: @change_batch,
|
68
|
+
hosted_zone_id: attributes.hosted_zone_id
|
69
|
+
)
|
70
|
+
rescue Aws::Route53::Errors::InvalidChangeBatch => e
|
71
|
+
Itamae.logger.warn e.inspect
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def define_change_batch
|
77
|
+
if attributes.value.class == Array
|
78
|
+
resource_records = attributes.value.map do |v|
|
79
|
+
{ value: v }
|
80
|
+
end
|
81
|
+
elsif attributes.value.class == String
|
82
|
+
resource_records = Array.new(1, { value: attributes.value })
|
83
|
+
end
|
84
|
+
|
85
|
+
resource_record_set = {
|
86
|
+
name: attributes.record_name,
|
87
|
+
type: attributes.type,
|
88
|
+
ttl: attributes.ttl,
|
89
|
+
resource_records: resource_records
|
90
|
+
}
|
91
|
+
|
92
|
+
changes = {
|
93
|
+
action: attributes.action.to_s.upcase,
|
94
|
+
resource_record_set: resource_record_set
|
95
|
+
}
|
96
|
+
|
97
|
+
{
|
98
|
+
changes: [ changes ],
|
99
|
+
comment: attributes.comment
|
100
|
+
}
|
101
|
+
end
|
102
|
+
|
103
|
+
def fetch_record
|
104
|
+
resp = @route53.list_resource_record_sets(
|
105
|
+
hosted_zone_id: attributes.hosted_zone_id,
|
106
|
+
start_record_name: attributes.record_name,
|
107
|
+
start_record_type: attributes.type,
|
108
|
+
start_record_identifier: attributes.set_identifier,
|
109
|
+
max_items: 1
|
110
|
+
)
|
111
|
+
|
112
|
+
resp.resource_record_sets[0]
|
113
|
+
end
|
114
|
+
|
115
|
+
def compare_record_values(resource_record_set)
|
116
|
+
if attributes.record_name == resource_record_set.name && attributes.type == resource_record_set.type
|
117
|
+
current.exist = true
|
118
|
+
resource_record_set.to_h
|
119
|
+
else
|
120
|
+
current.exist = false
|
121
|
+
{}
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def compare_to
|
126
|
+
if current.exist
|
127
|
+
f = Tempfile.open('itamae')
|
128
|
+
f.write(MultiJson.dump(@resource_record_set, pretty: true))
|
129
|
+
f.close
|
130
|
+
f.path
|
131
|
+
else
|
132
|
+
'/dev/null'
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def show_content_diff
|
137
|
+
if attributes.modified
|
138
|
+
Itamae.logger.info 'Convert resource record set to JSON and display the difference.'
|
139
|
+
end
|
140
|
+
|
141
|
+
super
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
@@ -3,7 +3,7 @@ require 'aws-sdk'
|
|
3
3
|
module Itamae
|
4
4
|
module Resource
|
5
5
|
class S3File < File
|
6
|
-
define_attribute :object_key, type: String,
|
6
|
+
define_attribute :object_key, type: String, required: true
|
7
7
|
define_attribute :region, type: String, required: true
|
8
8
|
define_attribute :bucket, type: String, required: true
|
9
9
|
define_attribute :profile, type: String, default: 'default'
|
data/lib/itamae-spec/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itamae-spec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kammy1231
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -225,7 +225,9 @@ files:
|
|
225
225
|
- lib/itamae-spec/generators/templates/project/tmp-nodes/.keep
|
226
226
|
- lib/itamae-spec/logger.rb
|
227
227
|
- lib/itamae-spec/resource.rb
|
228
|
+
- lib/itamae-spec/resource/file.rb
|
228
229
|
- lib/itamae-spec/resource/http_request.rb
|
230
|
+
- lib/itamae-spec/resource/route53_record.rb
|
229
231
|
- lib/itamae-spec/resource/s3_file.rb
|
230
232
|
- lib/itamae-spec/task/base.rb
|
231
233
|
- lib/itamae-spec/task/base_task.rb
|