configgin 0.16.2 → 0.16.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 +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
|