configgin 0.16.2 → 0.16.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile.lock +6 -6
- data/lib/configgin/version.rb +1 -1
- data/lib/kube_link_generator.rb +38 -28
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ce88507cf9921fba1b59321f1b5cc777ebe874a1
|
4
|
+
data.tar.gz: 4752bef9f47dc92651ec4ac8dab3ae2f22841c87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3073e869b142653a23b8d98cff2bf9e414895093d664a460371ab92827726cd01d5bb294466f58b7b8bd574bdb63e2a73ab4211b7afff85c16bcd6d584f6437b
|
7
|
+
data.tar.gz: 5797e37cf29d5ec1cce8f3df9b170cc5969d73d11db8ca17fea6520e824f49a114686c7ae17450861b7b4ab1ebcfffeb29dd5ef0a062250f1f840b0f6e66e675
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
configgin (0.16.
|
4
|
+
configgin (0.16.3)
|
5
5
|
bosh-template (~> 2.0)
|
6
6
|
deep_merge (~> 1.1)
|
7
7
|
kubeclient (~> 2.0)
|
@@ -14,7 +14,7 @@ GEM
|
|
14
14
|
addressable (2.5.2)
|
15
15
|
public_suffix (>= 2.0.2, < 4.0)
|
16
16
|
ast (2.3.0)
|
17
|
-
bosh-template (2.
|
17
|
+
bosh-template (2.2.0)
|
18
18
|
semi_semantic (~> 1.2.0)
|
19
19
|
deep_merge (1.2.1)
|
20
20
|
diff-lcs (1.3)
|
@@ -33,15 +33,15 @@ GEM
|
|
33
33
|
http (>= 0.98, < 3)
|
34
34
|
recursive-open-struct (~> 1.0.0)
|
35
35
|
rest-client
|
36
|
-
mime-types (3.
|
36
|
+
mime-types (3.2.2)
|
37
37
|
mime-types-data (~> 3.2015)
|
38
|
-
mime-types-data (3.
|
38
|
+
mime-types-data (3.2018.0812)
|
39
39
|
mustache (1.0.5)
|
40
40
|
netrc (0.11.0)
|
41
41
|
parser (2.4.0.0)
|
42
42
|
ast (~> 2.2)
|
43
43
|
powerpack (0.1.1)
|
44
|
-
public_suffix (3.0.
|
44
|
+
public_suffix (3.0.3)
|
45
45
|
rainbow (2.1.0)
|
46
46
|
rake (10.4.2)
|
47
47
|
recursive-open-struct (1.0.5)
|
@@ -86,4 +86,4 @@ DEPENDENCIES
|
|
86
86
|
rubocop
|
87
87
|
|
88
88
|
BUNDLED WITH
|
89
|
-
1.16.
|
89
|
+
1.16.1
|
data/lib/configgin/version.rb
CHANGED
data/lib/kube_link_generator.rb
CHANGED
@@ -16,8 +16,11 @@ class KubeLinkSpecs
|
|
16
16
|
@spec = spec || {}
|
17
17
|
end
|
18
18
|
|
19
|
+
attr_reader :client, :spec, :namespace
|
20
|
+
SLEEP_DURATION = 1
|
21
|
+
|
19
22
|
def this_name
|
20
|
-
|
23
|
+
spec['job']['name']
|
21
24
|
end
|
22
25
|
|
23
26
|
# pod_index returns a number for the given pod name. The number is expected to
|
@@ -34,35 +37,43 @@ class KubeLinkSpecs
|
|
34
37
|
end
|
35
38
|
|
36
39
|
def _get_pods_for_role(role_name)
|
37
|
-
|
40
|
+
client.get_pods(namespace: namespace, label_selector: "skiff-role-name=#{role_name}")
|
38
41
|
end
|
39
42
|
|
40
|
-
def get_pods_for_role(role_name,
|
43
|
+
def get_pods_for_role(role_name, job, options = {})
|
41
44
|
loop do
|
42
45
|
# The 30.times loop exists to print out status messages
|
43
46
|
30.times do
|
44
47
|
1.times do
|
45
48
|
pods = _get_pods_for_role(role_name)
|
46
|
-
|
49
|
+
good_pods = pods.select do |pod|
|
50
|
+
next false unless pod.status.podIP
|
51
|
+
next true if pod.metadata.annotations["skiff-exported-properties-#{job}"]
|
52
|
+
# Fall back to non-job-specific properties, for upgrades from older versions
|
53
|
+
pod.metadata.annotations['skiff-exported-properties']
|
54
|
+
end
|
55
|
+
|
56
|
+
if options[:wait_for_all]
|
47
57
|
# Wait until all pods have IP addresses and properties
|
48
|
-
break unless
|
49
|
-
break unless pods.all? { |pod| pod.metadata.annotations["skiff-exported-properties-#{job}"] }
|
50
|
-
else
|
51
|
-
# We just need one pod with exported properties
|
52
|
-
pods.select! { |pod| pod.status.podIP }
|
53
|
-
pods.select! { |pod| pod.metadata.annotations["skiff-exported-properties-#{job}"] }
|
58
|
+
break unless good_pods.length == pods.length
|
54
59
|
end
|
55
|
-
return
|
60
|
+
return good_pods unless good_pods.empty?
|
56
61
|
end
|
57
|
-
sleep
|
62
|
+
sleep SLEEP_DURATION
|
58
63
|
end
|
59
64
|
$stdout.puts "Waiting for pods for role #{role_name} and provider job #{job} (at #{Time.now})..."
|
65
|
+
$stdout.flush
|
60
66
|
end
|
61
67
|
end
|
62
68
|
|
63
69
|
def get_exported_properties(pod, job)
|
64
|
-
|
65
|
-
|
70
|
+
if pod.metadata.annotations["skiff-exported-properties-#{job}"]
|
71
|
+
JSON.parse(pod.metadata.annotations["skiff-exported-properties-#{job}"])
|
72
|
+
elsif pod.metadata.annotations["skiff-exported-properties"]
|
73
|
+
JSON.parse(pod.metadata.annotations["skiff-exported-properties"])[job]
|
74
|
+
else
|
75
|
+
{}
|
76
|
+
end
|
66
77
|
end
|
67
78
|
|
68
79
|
def get_pod_instance_info(pod, job, pods_per_image)
|
@@ -84,11 +95,10 @@ class KubeLinkSpecs
|
|
84
95
|
sets = Hash.new(0)
|
85
96
|
keys = {}
|
86
97
|
pods.each do |pod|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
98
|
+
next if pod.status.containerStatuses.nil?
|
99
|
+
key = pod.status.containerStatuses.map(&:imageID).sort.join("\n")
|
100
|
+
sets[key] += 1
|
101
|
+
keys[pod.metadata.uid] = key
|
92
102
|
end
|
93
103
|
pods.each do |pod|
|
94
104
|
result[pod.metadata.uid] = sets[keys[pod.metadata.uid]]
|
@@ -97,8 +107,8 @@ class KubeLinkSpecs
|
|
97
107
|
end
|
98
108
|
|
99
109
|
def get_svc_instance_info(role_name, job)
|
100
|
-
svc =
|
101
|
-
pod = get_pods_for_role(role_name,
|
110
|
+
svc = client.get_service(role_name, namespace)
|
111
|
+
pod = get_pods_for_role(role_name, job).first
|
102
112
|
{
|
103
113
|
'name' => svc.metadata.name,
|
104
114
|
'index' => 0, # Completely made up index; there is only ever one service
|
@@ -111,8 +121,8 @@ class KubeLinkSpecs
|
|
111
121
|
end
|
112
122
|
|
113
123
|
def get_statefulset_instance_info(role_name, job)
|
114
|
-
ss = @client_stateful_set.get_stateful_set(role_name,
|
115
|
-
pod = get_pods_for_role(role_name,
|
124
|
+
ss = @client_stateful_set.get_stateful_set(role_name, namespace)
|
125
|
+
pod = get_pods_for_role(role_name, job).first
|
116
126
|
|
117
127
|
Array.new(ss.spec.replicas) do |i|
|
118
128
|
{
|
@@ -128,7 +138,7 @@ class KubeLinkSpecs
|
|
128
138
|
end
|
129
139
|
|
130
140
|
def service?(role_name)
|
131
|
-
|
141
|
+
client.get_service(role_name, namespace)
|
132
142
|
true
|
133
143
|
rescue KubeException
|
134
144
|
false
|
@@ -138,7 +148,7 @@ class KubeLinkSpecs
|
|
138
148
|
return @links[key] if @links.key? key
|
139
149
|
|
140
150
|
# Resolve the role we're looking for
|
141
|
-
provider =
|
151
|
+
provider = spec['consumes'][key]
|
142
152
|
unless provider
|
143
153
|
$stderr.puts "No link provider found for #{key}"
|
144
154
|
return @links[key] = nil
|
@@ -146,7 +156,7 @@ class KubeLinkSpecs
|
|
146
156
|
|
147
157
|
if provider['role'] == this_name
|
148
158
|
$stderr.puts "Resolving link #{key} via self provider #{provider}"
|
149
|
-
pods = get_pods_for_role(provider['role'],
|
159
|
+
pods = get_pods_for_role(provider['role'], provider['job'], wait_for_all: true)
|
150
160
|
pods_per_image = get_pods_per_image(pods)
|
151
161
|
instances = pods.map { |p| get_pod_instance_info(p, provider['job'], pods_per_image) }
|
152
162
|
elsif service? provider['role']
|
@@ -161,9 +171,9 @@ class KubeLinkSpecs
|
|
161
171
|
|
162
172
|
@links[key] = {
|
163
173
|
'address' => "#{provider['role']}.#{ENV['KUBERNETES_NAMESPACE']}.svc.#{ENV['KUBERNETES_CLUSTER_DOMAIN']}",
|
164
|
-
'instance_group' => '',
|
174
|
+
'instance_group' => '', # This is probably the role name from the manifest
|
165
175
|
'default_network' => '',
|
166
|
-
'deployment_name' =>
|
176
|
+
'deployment_name' => namespace,
|
167
177
|
'domain' => "#{ENV['KUBERNETES_NAMESPACE']}.svc.#{ENV['KUBERNETES_CLUSTER_DOMAIN']}",
|
168
178
|
'root_domain' => "#{ENV['KUBERNETES_NAMESPACE']}.svc.#{ENV['KUBERNETES_CLUSTER_DOMAIN']}",
|
169
179
|
'instances' => instances,
|
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.16.
|
4
|
+
version: 0.16.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SUSE
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-10 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.
|
180
|
+
rubygems_version: 2.2.5
|
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
|