configgin 0.14.0 → 0.14.1
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 +9 -9
- data/bin/configgin +14 -1
- data/lib/configgin/version.rb +1 -1
- data/lib/job.rb +2 -2
- data/lib/kube_link_generator.rb +32 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57e22a993e395b62b0e774967bc18ae370ac25ad
|
4
|
+
data.tar.gz: a7336574e707fdafd1f94700969a221cd9cd7fea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8a346691d24d176cb5d3ab5baa34050467d60380acb30d1fd9116cf20a1c237bc0674174692ebb4edd8b12fc9427c938ac6ac732141f1639fbdd659ac977283
|
7
|
+
data.tar.gz: 4621b053cc303f2c4aa82b9fe8b0007339fd2c78bd608b71d3b1843723e84bdb49ab9839f6386f4b534dbe1750573b5b32bb102ca544d37bc005dfee7af8f770
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
configgin (0.14.
|
4
|
+
configgin (0.14.1)
|
5
5
|
bosh-template (~> 2.0)
|
6
6
|
deep_merge (~> 1.1)
|
7
7
|
kubeclient (~> 2.0)
|
@@ -16,11 +16,11 @@ GEM
|
|
16
16
|
ast (2.3.0)
|
17
17
|
bosh-template (2.0.0)
|
18
18
|
semi_semantic (~> 1.2.0)
|
19
|
-
deep_merge (1.
|
19
|
+
deep_merge (1.2.1)
|
20
20
|
diff-lcs (1.3)
|
21
21
|
domain_name (0.5.20170404)
|
22
22
|
unf (>= 0.0.5, < 1.0.0)
|
23
|
-
http (
|
23
|
+
http (2.2.2)
|
24
24
|
addressable (~> 2.3)
|
25
25
|
http-cookie (~> 1.0)
|
26
26
|
http-form_data (~> 1.0.1)
|
@@ -29,9 +29,9 @@ GEM
|
|
29
29
|
domain_name (~> 0.5)
|
30
30
|
http-form_data (1.0.3)
|
31
31
|
http_parser.rb (0.6.0)
|
32
|
-
kubeclient (2.5.
|
33
|
-
http (
|
34
|
-
recursive-open-struct (
|
32
|
+
kubeclient (2.5.2)
|
33
|
+
http (>= 0.98, < 3)
|
34
|
+
recursive-open-struct (~> 1.0.0)
|
35
35
|
rest-client
|
36
36
|
mime-types (3.1)
|
37
37
|
mime-types-data (~> 3.2015)
|
@@ -44,7 +44,7 @@ GEM
|
|
44
44
|
public_suffix (3.0.1)
|
45
45
|
rainbow (2.1.0)
|
46
46
|
rake (10.4.2)
|
47
|
-
recursive-open-struct (1.0.
|
47
|
+
recursive-open-struct (1.0.5)
|
48
48
|
rest-client (2.0.2)
|
49
49
|
http-cookie (>= 1.0.2, < 2.0)
|
50
50
|
mime-types (>= 1.16, < 4.0)
|
@@ -72,7 +72,7 @@ GEM
|
|
72
72
|
semi_semantic (1.2.0)
|
73
73
|
unf (0.1.4)
|
74
74
|
unf_ext
|
75
|
-
unf_ext (0.0.7.
|
75
|
+
unf_ext (0.0.7.5)
|
76
76
|
unicode-display_width (1.2.1)
|
77
77
|
|
78
78
|
PLATFORMS
|
@@ -86,4 +86,4 @@ DEPENDENCIES
|
|
86
86
|
rubocop
|
87
87
|
|
88
88
|
BUNDLED WITH
|
89
|
-
1.
|
89
|
+
1.15.1
|
data/bin/configgin
CHANGED
@@ -33,6 +33,19 @@ kube_client = Kubeclient::Client.new(
|
|
33
33
|
bearer_token: File.read("#{SVC_ACC_PATH}/token")
|
34
34
|
}
|
35
35
|
)
|
36
|
+
kube_client_stateful_set = Kubeclient::Client.new(
|
37
|
+
URI::HTTPS.build(host: ENV['KUBERNETES_SERVICE_HOST'],
|
38
|
+
port: ENV['KUBERNETES_SERVICE_PORT_HTTPS'],
|
39
|
+
path: '/apis/apps'),
|
40
|
+
'v1beta1',
|
41
|
+
ssl_options: {
|
42
|
+
ca_file: "#{SVC_ACC_PATH}/ca.crt",
|
43
|
+
verify_ssl: OpenSSL::SSL::VERIFY_PEER
|
44
|
+
},
|
45
|
+
auth_options: {
|
46
|
+
bearer_token: File.read("#{SVC_ACC_PATH}/token")
|
47
|
+
}
|
48
|
+
)
|
36
49
|
kube_namespace = File.read("#{SVC_ACC_PATH}/namespace")
|
37
50
|
|
38
51
|
jobs = {}
|
@@ -49,7 +62,7 @@ job_configs.each do |job, job_config|
|
|
49
62
|
exit 1
|
50
63
|
end
|
51
64
|
|
52
|
-
jobs[job] = Job.new(bosh_spec, kube_namespace, kube_client)
|
65
|
+
jobs[job] = Job.new(bosh_spec, kube_namespace, kube_client, kube_client_stateful_set)
|
53
66
|
end
|
54
67
|
|
55
68
|
exported_properties = Hash[jobs.map { |name, job| [name, job.exported_properties] }]
|
data/lib/configgin/version.rb
CHANGED
data/lib/job.rb
CHANGED
@@ -4,11 +4,11 @@ require_relative 'kube_link_generator'
|
|
4
4
|
|
5
5
|
# Job describes a single BOSH job
|
6
6
|
class Job
|
7
|
-
def initialize(spec, namespace, client)
|
7
|
+
def initialize(spec, namespace, client, client_stateful_set)
|
8
8
|
@spec = spec
|
9
9
|
@namespace = namespace
|
10
10
|
@client = client
|
11
|
-
@spec['links'] = KubeLinkSpecs.new(@spec, @namespace, @client)
|
11
|
+
@spec['links'] = KubeLinkSpecs.new(@spec, @namespace, @client, client_stateful_set)
|
12
12
|
end
|
13
13
|
|
14
14
|
attr_reader :spec
|
data/lib/kube_link_generator.rb
CHANGED
@@ -8,9 +8,10 @@ class KubeLinkSpecs
|
|
8
8
|
# ANNOTATION_AZ is the Kube annotation for the (availability) zone
|
9
9
|
ANNOTATION_AZ = 'failure-domain.beta.kubernetes.io/zone'.freeze
|
10
10
|
|
11
|
-
def initialize(spec, namespace, kube_client)
|
11
|
+
def initialize(spec, namespace, kube_client, kube_client_stateful_set)
|
12
12
|
@links = {}
|
13
13
|
@client = kube_client
|
14
|
+
@client_stateful_set = kube_client_stateful_set
|
14
15
|
@namespace = namespace
|
15
16
|
@spec = spec || {}
|
16
17
|
end
|
@@ -104,6 +105,31 @@ class KubeLinkSpecs
|
|
104
105
|
}
|
105
106
|
end
|
106
107
|
|
108
|
+
def get_statefulset_instance_info(role_name, job)
|
109
|
+
ss = @client_stateful_set.get_stateful_set(role_name, @namespace)
|
110
|
+
pod = get_pods_for_role(role_name, false).first
|
111
|
+
properties = JSON.parse(pod.metadata.annotations['skiff-exported-properties'])
|
112
|
+
|
113
|
+
Array.new(ss.spec.replicas) do |i|
|
114
|
+
{
|
115
|
+
'name' => ss.metadata.name,
|
116
|
+
'index' => i,
|
117
|
+
'id' => ss.metadata.name,
|
118
|
+
'az' => pod.metadata.annotations['failure-domain.beta.kubernetes.io/zone'] || 'az0',
|
119
|
+
'address' => "#{ss.metadata.name}-#{i}.#{ss.spec.serviceName}",
|
120
|
+
'properties' => properties.fetch(job, {}),
|
121
|
+
'bootstrap' => i.zero?
|
122
|
+
}
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def service?(role_name)
|
127
|
+
@client.get_service(role_name, @namespace)
|
128
|
+
true
|
129
|
+
rescue KubeException
|
130
|
+
false
|
131
|
+
end
|
132
|
+
|
107
133
|
def [](key)
|
108
134
|
return @links[key] if @links.key? key
|
109
135
|
|
@@ -120,10 +146,14 @@ class KubeLinkSpecs
|
|
120
146
|
pods = get_pods_for_role(provider['role'], true)
|
121
147
|
pods_per_image = get_pods_per_image(pods)
|
122
148
|
instances = pods.map { |p| get_pod_instance_info(p, provider['job'], pods_per_image) }
|
123
|
-
|
149
|
+
elsif service? provider['role']
|
124
150
|
# Getting pods for a different service; since we have kube services, we don't handle it in configgin
|
125
151
|
$stderr.puts "Resolving link #{key} via service #{provider}"
|
126
152
|
instances = [get_svc_instance_info(provider['role'], provider['job'])]
|
153
|
+
else
|
154
|
+
# If there's no service associated, check the statefulset instead
|
155
|
+
$stderr.puts "Resolving link #{key} via statefulset #{provider}"
|
156
|
+
instances = get_statefulset_instance_info(provider['role'], provider['job'])
|
127
157
|
end
|
128
158
|
|
129
159
|
@links[key] = {
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: configgin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.
|
4
|
+
version: 0.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SUSE
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -177,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
177
|
version: '0'
|
178
178
|
requirements: []
|
179
179
|
rubyforge_project:
|
180
|
-
rubygems_version: 2.6.
|
180
|
+
rubygems_version: 2.6.13
|
181
181
|
signing_key:
|
182
182
|
specification_version: 4
|
183
183
|
summary: A simple cli app in Ruby to generate configurations using BOSH ERB templates
|