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 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