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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 7725554be470eca87c54a1c24b22e16117d0083d9223c549a8b9bdeea7f9958e
4
- data.tar.gz: 172a52159cef690d16f24d02e41b68a481d024669f91f88b3301e68800f425e5
2
+ SHA1:
3
+ metadata.gz: ce88507cf9921fba1b59321f1b5cc777ebe874a1
4
+ data.tar.gz: 4752bef9f47dc92651ec4ac8dab3ae2f22841c87
5
5
  SHA512:
6
- metadata.gz: cd13971b2d26e671805468425bfe83b9c30852e1a0c316ac8db868def5e00e9c1db48a6d5b87112282d389b9bc5f0377e9b3260babf063083b15eabc6000ca08
7
- data.tar.gz: 0b1f7c8766a4751dc31cc6b5a9f300d69e8cd4f08d02f4acb81804370fd2085f39475d928802e83e356735d4c778ea15ddb25a9e6ff573433d57479bbb3e30a7
6
+ metadata.gz: 3073e869b142653a23b8d98cff2bf9e414895093d664a460371ab92827726cd01d5bb294466f58b7b8bd574bdb63e2a73ab4211b7afff85c16bcd6d584f6437b
7
+ data.tar.gz: 5797e37cf29d5ec1cce8f3df9b170cc5969d73d11db8ca17fea6520e824f49a114686c7ae17450861b7b4ab1ebcfffeb29dd5ef0a062250f1f840b0f6e66e675
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- configgin (0.16.2)
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.1.0)
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.1)
36
+ mime-types (3.2.2)
37
37
  mime-types-data (~> 3.2015)
38
- mime-types-data (3.2016.0521)
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.2)
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.3
89
+ 1.16.1
@@ -1,3 +1,3 @@
1
1
  module Configgin
2
- VERSION = '0.16.2'.freeze
2
+ VERSION = '0.16.3'.freeze
3
3
  end
@@ -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
- @spec['job']['name']
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
- @client.get_pods(namespace: @namespace, label_selector: "skiff-role-name=#{role_name}")
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, wait_for_ip, job)
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
- if wait_for_ip
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 pods.all? { |pod| pod.status.podIP }
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 pods unless pods.empty?
60
+ return good_pods unless good_pods.empty?
56
61
  end
57
- sleep 1
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
- exported_properties = pod.metadata.annotations["skiff-exported-properties-#{job}"]
65
- exported_properties.nil? ? {} : JSON.parse(exported_properties)
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
- unless pod.status.containerStatuses.nil?
88
- key = pod.status.containerStatuses.map(&:imageID).sort.join("\n")
89
- sets[key] += 1
90
- keys[pod.metadata.uid] = key
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 = @client.get_service(role_name, @namespace)
101
- pod = get_pods_for_role(role_name, false, job).first
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, @namespace)
115
- pod = get_pods_for_role(role_name, false, job).first
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
- @client.get_service(role_name, @namespace)
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 = @spec['consumes'][key]
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'], true, provider['job'])
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' => @namespace,
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.2
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-08-09 00:00:00.000000000 Z
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.7.7
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