pfab 0.37.0 → 0.39.0

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
2
  SHA256:
3
- metadata.gz: 31f217c1c2c63af2baff59160c71250a9c6d478c68ab49383ff02782f81fc4ac
4
- data.tar.gz: 5e05966091f8f5fd06b3ff37a25942ca77bdb4296223549f2378d8e0b99b8b9d
3
+ metadata.gz: f561887ca5e83e755c6841adc9bd5f7bb665c7fc983f694fae7a0721a6f31803
4
+ data.tar.gz: ec200b656730a992810235c3ef54fc586f7cfbd55af8779eb43bb71a65da30e7
5
5
  SHA512:
6
- metadata.gz: 7405b5827ccbf926bb331f5707982834c815b9ca570ccab02b4a066818e61341546c6df2f68550948ac97de7596f7c138cfdd6835c6eed9a6bdf0503ba6e2ed5
7
- data.tar.gz: 6562c155f57c212f8de04233573035e9376d2c23eab78065f78862a4486b231d76da03085325b514734202848fd82a944de9fe8482f2acb5bd36db5aefe0089f
6
+ metadata.gz: aa72a372ca6dbd79130a87a6aeac08211b79f8d97500ed9e854e1affdb219d495e9cf58338de835a9bebd23a7c56099c5871e16e9b2daa2887f66c92785bc98a
7
+ data.tar.gz: a6f890f67571a0bbc93c1160f1ff7adebb566f3554f945eb4a6a28b9a8db016eab4f5ef2bf84a2650bea6cd0404ea6ef85e33e5a39ad3fbbc358a8b0274b5c39
data/Gemfile CHANGED
@@ -7,11 +7,13 @@ gem "commander"
7
7
 
8
8
  gem "activesupport"
9
9
  gem "pry-byebug"
10
+ gem 'styled_yaml', '~> 0.0.1'
11
+
10
12
  # Add dependencies to develop your gem here.
11
13
  # Include everything needed to run rake, tests, features, etc.
12
14
  group :development do
13
15
  gem "rdoc", "~> 3.12"
14
- gem "bundler", "~> 1.0"
16
+ gem "bundler", "~> 2.3"
15
17
  gem "juwelier", "~> 2.4.9", git: "https://github.com/flajann2/juwelier"
16
18
  gem "simplecov", ">= 0"
17
19
  gem "test-unit", ">= 0"
data/Gemfile.lock CHANGED
@@ -53,7 +53,8 @@ GEM
53
53
  faraday-net_http_persistent (1.2.0)
54
54
  faraday-patron (1.0.0)
55
55
  faraday-rack (1.0.0)
56
- git (1.11.0)
56
+ git (1.18.0)
57
+ addressable (~> 2.8)
57
58
  rchardet (~> 1.8)
58
59
  github_api (0.19.0)
59
60
  addressable (~> 2.4)
@@ -106,6 +107,7 @@ GEM
106
107
  json (>= 1.8, < 3)
107
108
  simplecov-html (~> 0.10.0)
108
109
  simplecov-html (0.10.2)
110
+ styled_yaml (0.0.1)
109
111
  test-unit (3.2.9)
110
112
  power_assert
111
113
  thread_safe (0.3.6)
@@ -117,12 +119,13 @@ PLATFORMS
117
119
 
118
120
  DEPENDENCIES
119
121
  activesupport
120
- bundler (~> 1.0)
122
+ bundler (~> 2.3)
121
123
  commander
122
124
  juwelier (~> 2.4.9)!
123
125
  pry-byebug
124
126
  rdoc (~> 3.12)
125
127
  simplecov
128
+ styled_yaml (~> 0.0.1)
126
129
  test-unit
127
130
 
128
131
  BUNDLED WITH
data/README.markdown CHANGED
@@ -124,5 +124,5 @@ Releasing
124
124
  Copyright
125
125
  ---------
126
126
 
127
- Copyright (c) 2018 Jeff Dwyer. See
127
+ Copyright (c) 2023 Prefab Inc. See
128
128
  LICENSE.txt for further details.
data/lib/pfab/cli.rb CHANGED
@@ -3,6 +3,7 @@ require "net/http"
3
3
  require "yaml"
4
4
  require "json"
5
5
  require 'active_support/core_ext/hash/indifferent_access'
6
+ require 'styled_yaml'
6
7
 
7
8
  module Pfab
8
9
  class CLI
@@ -87,7 +88,7 @@ module Pfab
87
88
 
88
89
  first_pod = get_first_pod(app_name)
89
90
 
90
- puts_and_system("kubectl logs -f #{first_pod}")
91
+ kubectl("logs -f #{first_pod}")
91
92
  end
92
93
  end
93
94
 
@@ -99,7 +100,7 @@ module Pfab
99
100
  set_kube_context
100
101
  app_name = get_app_name
101
102
 
102
- puts_and_system "kubectl rollout restart deployment.apps/#{app_name}"
103
+ kubectl "rollout restart deployment.apps/#{app_name}"
103
104
  end
104
105
  end
105
106
 
@@ -116,7 +117,7 @@ module Pfab
116
117
  set_kube_context
117
118
  app_name = get_app_name
118
119
  first_pod = get_first_pod app_name
119
- puts_and_system "kubectl exec -it #{first_pod} -- #{options.command || '/bin/sh'}"
120
+ kubectl "exec -it #{first_pod} -- #{options.command || '/bin/sh'}"
120
121
  end
121
122
  end
122
123
 
@@ -141,11 +142,11 @@ module Pfab
141
142
  selector = "application=#{@application_yaml['name']}"
142
143
 
143
144
  if options.watch
144
- puts_and_system "kubectl get pods -l #{selector} -w"
145
+ kubectl "get pods -l #{selector} -w"
145
146
  elsif $verbose
146
- puts_and_system "kubectl describe pods -l #{selector}"
147
+ kubectl "describe pods -l #{selector}"
147
148
  else
148
- puts_and_system "kubectl get ingresses,jobs,services,cronjobs,deployments,pods -l #{selector}"
149
+ kubectl "get ingresses,jobs,services,cronjobs,deployments,pods -l #{selector}"
149
150
  end
150
151
  end
151
152
  end
@@ -184,9 +185,9 @@ module Pfab
184
185
  puts "THIS APPLIES TO THE ENTIRE NAMESPACE"
185
186
  types = %w(Failed Pending Succeeded)
186
187
  types.each do |type|
187
- system("kubectl get pods --field-selector status.phase=#{type}")
188
+ kubectl("get pods --field-selector status.phase=#{type}")
188
189
  if agree("Delete those?")
189
- `kubectl delete pods --field-selector status.phase=#{type}`
190
+ kubectl("delete pods --field-selector status.phase=#{type}")
190
191
  puts "Deleted"
191
192
  end
192
193
  end
@@ -205,9 +206,9 @@ module Pfab
205
206
  app = deployables[app_name]
206
207
  if app[:deployable_type] == "cron"
207
208
  deployed_name = deployed_name(app)
208
- puts_and_system("kubectl delete cronjob -l deployed-name=#{deployed_name}")
209
+ kubectl("delete cronjob -l deployed-name=#{deployed_name}")
209
210
  end
210
- puts_and_system("kubectl apply -f .application-k8s-#{$env}-#{app_name}.yaml")
211
+ kubectl("apply -f .application-k8s-#{$env}-#{app_name}.yaml")
211
212
  puts_and_system("git tag release-#{$env}-#{app_name}-#{Time.now.strftime("%Y-%m-%d-%H-%M-%S")} HEAD")
212
213
  puts_and_system("git push origin --tags")
213
214
  end
@@ -323,6 +324,10 @@ module Pfab
323
324
  @_config ||= YAML.load(File.read(File.join(Dir.home, ".pfab.yaml")))
324
325
  end
325
326
 
327
+ def kubectl cmd
328
+ puts_and_system "kubectl #{cmd} --namespace=#{yy.namespace}"
329
+ end
330
+
326
331
  def puts_and_system cmd
327
332
  puts cmd
328
333
  if $dryrun
@@ -368,8 +373,7 @@ module Pfab
368
373
  end
369
374
 
370
375
  def get_pods(app)
371
- get_pods_str = "kubectl get pods -o json -l deployed-name=#{app}"
372
- puts get_pods_str
376
+ kubectl "get pods -o json -l deployed-name=#{app}"
373
377
  pods_str = `#{get_pods_str}`
374
378
  JSON.parse(pods_str)
375
379
  end
@@ -17,12 +17,16 @@ module Pfab
17
17
  app_vars.dig(@data["env"], key) || app_vars[key]
18
18
  end
19
19
 
20
- def get_top_level(key)
21
- @data["application_yaml"].dig(@data["env"], key) || @data["application_yaml"][key]
20
+ def get_namespace
21
+ @data['namespace']
22
22
  end
23
23
 
24
- def get_namespace()
25
- get("namespace") || get_top_level("namespace") || @data['env']
24
+ def get_command()
25
+ cmd = get("command")
26
+ if cmd.kind_of?(Array)
27
+ return cmd
28
+ end
29
+ return cmd.split(" ")
26
30
  end
27
31
 
28
32
  def cpu(req_type)
@@ -2,7 +2,7 @@ module Pfab
2
2
  module Templates
3
3
  class Cron < Base
4
4
  def write_to(f)
5
- f << YAML.dump(job.deep_stringify_keys)
5
+ f << StyledYAML.dump(job.deep_stringify_keys)
6
6
  end
7
7
 
8
8
  def application_type
@@ -23,7 +23,7 @@ module Pfab
23
23
  "deploy-id" => deploy_id,
24
24
  "tags.datadoghq.com/env": @data['env'],
25
25
  "tags.datadoghq.com/service": @data['deployed_name'],
26
- "tags.datadoghq.com/version": "#{@data['sha']}"
26
+ "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
27
27
  }
28
28
  },
29
29
  spec: {
@@ -49,7 +49,7 @@ module Pfab
49
49
  "application-type" => "cron",
50
50
  "tags.datadoghq.com/env": @data['env'],
51
51
  "tags.datadoghq.com/service": @data['deployed_name'],
52
- "tags.datadoghq.com/version": "#{@data['sha']}"
52
+ "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
53
53
  },
54
54
  },
55
55
  spec: {
@@ -58,7 +58,7 @@ module Pfab
58
58
  {
59
59
  image: image_name,
60
60
  name: @data['deployed_name'],
61
- command: app_vars["command"].split(" "),
61
+ command: get_command,
62
62
  env: env_vars,
63
63
  resources: resources,
64
64
  },
@@ -2,7 +2,7 @@ module Pfab
2
2
  module Templates
3
3
  class Daemon < Base
4
4
  def write_to(f)
5
- f << YAML.dump(deployment.deep_stringify_keys)
5
+ f << StyledYAML.dump(deployment.deep_stringify_keys)
6
6
  end
7
7
 
8
8
  def application_type
@@ -23,7 +23,7 @@ module Pfab
23
23
  "deploy-id" => deploy_id,
24
24
  "tags.datadoghq.com/env": @data['env'],
25
25
  "tags.datadoghq.com/service": @data['deployed_name'],
26
- "tags.datadoghq.com/version":"#{@data['sha']}"
26
+ "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
27
27
  }
28
28
  },
29
29
  spec: {
@@ -45,7 +45,7 @@ module Pfab
45
45
  "application-type" => "daemon",
46
46
  "tags.datadoghq.com/env": @data['env'],
47
47
  "tags.datadoghq.com/service": @data['deployed_name'],
48
- "tags.datadoghq.com/version": "#{@data['sha']}"
48
+ "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
49
49
  },
50
50
  },
51
51
  spec: {
@@ -54,7 +54,7 @@ module Pfab
54
54
  {
55
55
  image: image_name,
56
56
  name: @data['deployed_name'],
57
- command: get("command").split(" "),
57
+ command: get_command,
58
58
  env: env_vars,
59
59
  resources: resources,
60
60
  }
@@ -2,7 +2,7 @@ module Pfab
2
2
  module Templates
3
3
  class Job < Base
4
4
  def write_to(f)
5
- f << YAML.dump(job.deep_stringify_keys)
5
+ f << StyledYAML.dump(job.deep_stringify_keys)
6
6
  end
7
7
 
8
8
  def application_type
@@ -23,10 +23,13 @@ module Pfab
23
23
  "deploy-id" => deploy_id,
24
24
  "tags.datadoghq.com/env": @data['env'],
25
25
  "tags.datadoghq.com/service": @data['deployed_name'],
26
- "tags.datadoghq.com/version":"#{@data['sha']}"
26
+ "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
27
27
  }
28
28
  },
29
29
  spec: {
30
+ ttlSecondsAfterFinished: get('ttlSecondsAfterFinished'),
31
+ completions: get('completions') || 1,
32
+ parallelism: get('parallelism') || 1,
30
33
  template: {
31
34
  metadata: {
32
35
  name: "#{@data['deployed_name']}-#{@data['sha']}",
@@ -37,7 +40,7 @@ module Pfab
37
40
  "application-type" => "job",
38
41
  "tags.datadoghq.com/env": @data['env'],
39
42
  "tags.datadoghq.com/service": @data['deployed_name'],
40
- "tags.datadoghq.com/version": "#{@data['sha']}"
43
+ "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
41
44
  },
42
45
  },
43
46
  spec: {
@@ -46,7 +49,7 @@ module Pfab
46
49
  {
47
50
  image: image_name,
48
51
  name: @data['deployed_name'],
49
- command: app_vars["command"].split(" "),
52
+ command: get_command,
50
53
  env: env_vars,
51
54
  resources: resources,
52
55
  },
@@ -55,7 +58,7 @@ module Pfab
55
58
  }.compact,
56
59
  },
57
60
  backoffLimit: 0,
58
- },
61
+ }.compact,
59
62
  }
60
63
  end
61
64
  end
@@ -1,3 +1,5 @@
1
+ require "rubygems/safe_yaml"
2
+
1
3
  module Pfab
2
4
  module Templates
3
5
  class Web < Base
@@ -5,13 +7,13 @@ module Pfab
5
7
  if get("host").nil?
6
8
  puts "No host to deploy to for #{@data['deployed_name']}. Skipping."
7
9
  else
8
- f << YAML.dump(service.deep_stringify_keys)
10
+ f << StyledYAML.dump(service.deep_stringify_keys)
9
11
  if not app_vars.has_key?('generateIngressEnabled') || app_vars['generateIngressEnabled']
10
- f << YAML.dump(ingress.deep_stringify_keys)
12
+ f << StyledYAML.dump(ingress.deep_stringify_keys)
11
13
  else
12
14
  puts "skipping ingress because ingress_disabled = #{@data['generateIngressEnabled']}"
13
15
  end
14
- f << YAML.dump(deployment.deep_stringify_keys)
16
+ f << StyledYAML.dump(deployment.deep_stringify_keys)
15
17
  end
16
18
  end
17
19
 
@@ -198,7 +200,7 @@ module Pfab
198
200
  "deploy-id" => deploy_id,
199
201
  "tags.datadoghq.com/env": @data['env'],
200
202
  "tags.datadoghq.com/service": @data['deployed_name'],
201
- "tags.datadoghq.com/version":"#{@data['sha']}"
203
+ "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
202
204
  }
203
205
  },
204
206
  spec: {
@@ -225,7 +227,7 @@ module Pfab
225
227
  "application-type" => "web",
226
228
  "tags.datadoghq.com/env": @data['env'],
227
229
  "tags.datadoghq.com/service": @data['deployed_name'],
228
- "tags.datadoghq.com/version": "#{@data['sha']}"
230
+ "tags.datadoghq.com/version": StyledYAML.double_quoted(@data['sha'])
229
231
  },
230
232
  },
231
233
  spec: {
@@ -234,7 +236,7 @@ module Pfab
234
236
  {
235
237
  image: image_name,
236
238
  name: @data['deployed_name'],
237
- command: get("command").split(" "),
239
+ command: get_command,
238
240
  env: env_vars,
239
241
  resources: resources,
240
242
  ports: [
data/lib/pfab/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Pfab
2
2
  module Version
3
3
  MAJOR = 0
4
- MINOR = 37
4
+ MINOR = 39
5
5
  PATCH = 0
6
6
  BUILD = nil
7
7
 
data/lib/pfab/yamls.rb CHANGED
@@ -4,6 +4,8 @@ module Pfab
4
4
 
5
5
  def initialize(apps:, application_yaml:, image_name:, env:, sha:, config:)
6
6
  @apps = apps
7
+ namespace = application_yaml.dig(env.to_s, "namespace") || application_yaml["namespace"]
8
+ raise "No namespace founds" unless namespace
7
9
  @base_data = {
8
10
  "env" => env.to_s,
9
11
  'image_name' => image_name,
@@ -11,7 +13,8 @@ module Pfab
11
13
  'container_repository' => config["container.repository"],
12
14
  'config' => config,
13
15
  'application' => application_yaml["name"],
14
- 'application_yaml' => application_yaml
16
+ 'application_yaml' => application_yaml,
17
+ 'namespace' => namespace,
15
18
  }
16
19
  end
17
20
 
@@ -27,8 +30,11 @@ module Pfab
27
30
  data
28
31
  end
29
32
 
30
- def generate(keys)
33
+ def namespace
34
+ @base_data['namespace']
35
+ end
31
36
 
37
+ def generate(keys)
32
38
  keys.each do |key|
33
39
  props = @apps[key]
34
40
  data = data_for(key, props)
@@ -48,9 +54,6 @@ module Pfab
48
54
  end
49
55
  filename
50
56
  end
51
-
52
57
  end
53
-
54
-
55
58
  end
56
59
  end
data/pfab.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: pfab 0.37.0 ruby lib
5
+ # stub: pfab 0.39.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "pfab".freeze
9
- s.version = "0.37.0"
9
+ s.version = "0.39.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Jeff Dwyer".freeze]
14
- s.date = "2023-03-15"
14
+ s.date = "2023-04-14"
15
15
  s.description = "k8s helper".freeze
16
16
  s.email = "jdwyer@prefab.cloud".freeze
17
17
  s.executables = ["pfab".freeze]
@@ -55,8 +55,9 @@ Gem::Specification.new do |s|
55
55
  s.add_runtime_dependency(%q<commander>.freeze, [">= 0"])
56
56
  s.add_runtime_dependency(%q<activesupport>.freeze, [">= 0"])
57
57
  s.add_runtime_dependency(%q<pry-byebug>.freeze, [">= 0"])
58
+ s.add_runtime_dependency(%q<styled_yaml>.freeze, ["~> 0.0.1"])
58
59
  s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
59
- s.add_development_dependency(%q<bundler>.freeze, ["~> 1.0"])
60
+ s.add_development_dependency(%q<bundler>.freeze, ["~> 2.3"])
60
61
  s.add_development_dependency(%q<juwelier>.freeze, ["~> 2.4.9"])
61
62
  s.add_development_dependency(%q<simplecov>.freeze, [">= 0"])
62
63
  s.add_development_dependency(%q<test-unit>.freeze, [">= 0"])
@@ -64,8 +65,9 @@ Gem::Specification.new do |s|
64
65
  s.add_dependency(%q<commander>.freeze, [">= 0"])
65
66
  s.add_dependency(%q<activesupport>.freeze, [">= 0"])
66
67
  s.add_dependency(%q<pry-byebug>.freeze, [">= 0"])
68
+ s.add_dependency(%q<styled_yaml>.freeze, ["~> 0.0.1"])
67
69
  s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
68
- s.add_dependency(%q<bundler>.freeze, ["~> 1.0"])
70
+ s.add_dependency(%q<bundler>.freeze, ["~> 2.3"])
69
71
  s.add_dependency(%q<juwelier>.freeze, ["~> 2.4.9"])
70
72
  s.add_dependency(%q<simplecov>.freeze, [">= 0"])
71
73
  s.add_dependency(%q<test-unit>.freeze, [">= 0"])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pfab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.37.0
4
+ version: 0.39.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Dwyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-15 00:00:00.000000000 Z
11
+ date: 2023-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: styled_yaml
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.0.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.0.1
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rdoc
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +86,14 @@ dependencies:
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '1.0'
89
+ version: '2.3'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '1.0'
96
+ version: '2.3'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: juwelier
85
99
  requirement: !ruby/object:Gem::Requirement