pfab 0.37.0 → 0.39.0

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