pfab 0.6.0 → 0.7.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: d731b1aced5361202684f5f3f782ff6846816818499c0d8ce4892cbcb728661d
4
- data.tar.gz: 147ae1a483a6a980b138070ffe858ddea9b0bcca8bd86fc311c63d7693bc39a3
3
+ metadata.gz: '03967e0911ee09d5b46c3c9b3f65b40cfcf3eaa4160edea4f877a12a3262a157'
4
+ data.tar.gz: b0f26e10f910e669dc40cd370179084eb0bdb9097ac07eb4cb72fe1894856b4c
5
5
  SHA512:
6
- metadata.gz: c520165411f2fe9023385c896677032c3decd4552209b9e5fab5af6c852b82bac357bb3fe07bd34bb9a02c05990de193b2101e45f2379b7c32dcd3d7dfa8953c
7
- data.tar.gz: f963ee37ca9fcaac8f57b6be715b6d06fbe4ebed20ce06ba6fc768d338cf8f231c7f39f13ddbfc242345f169171aa94786e7eec1b42ac038019e96cf313c1e23
6
+ metadata.gz: 43446c3185c0ea5dab111015c490aa41f823f83aeeaa91928cc4b016c6c52a7e4a1faf2f26295e538fd6abb4b15cbc5e7ddab95ff17bab36137aa70f82df7b9f
7
+ data.tar.gz: 617049c6303bfaf34c79063f6910555466dd340964b53c4c5da6740f4c62ec94dd20b01f2497ec1c9cd4f877ba99baa4438fa7c8c6bb9e75bbdcb38365863345
data/README.markdown CHANGED
@@ -1,10 +1,12 @@
1
1
  pfab
2
2
  ===================
3
3
 
4
- nothing to see here
4
+ The missing k8s deployer
5
5
 
6
6
 
7
- set ~/.pfab.yaml
7
+ ## Setup
8
+
9
+ Configure ~/.pfab.yaml
8
10
  ```
9
11
  container.repository: "gcr.io/$$$$$$$"
10
12
  default_cpu_string: "50m/250m"
@@ -16,10 +18,69 @@ envs:
16
18
  context: "k8s-production-context"
17
19
  ```
18
20
 
19
- Then
21
+ # application.yaml
22
+ ```$yaml
23
+ name: myapp
24
+ prebuild: "mvn -T 4 clean package"
25
+
26
+ deployables:
27
+ kafkaconsumer:
28
+ type: daemon
29
+ command: java -Xmx550m -javaagent:/app/dd-java-agent.jar -jar myjar.jar kafkarunner
30
+ cpu: 50m/250m
31
+ memory: 400Mi/600Mi
32
+ dbmigrate:
33
+ type: job
34
+ command: java -jar myjar.jar db_migrate
35
+ upsert-usage-logs:
36
+ type: cron
37
+ schedule: 2 6 * * *
38
+ command: java -jar myjar.jar my_nightly_job
39
+ grpc:
40
+ type: web
41
+ port: 8443
42
+ protocol: h2c # tell traefik this is going to be http2
43
+ command: java -Xmx550m -javaagent:/app/dd-java-agent.jar -jar myjar.jar server /app/grpc.yml
44
+ readinessProbe:
45
+ exec:
46
+ command: ["/bin/grpc_health_probe", "-addr=:8443"]
47
+ initialDelaySeconds: 5
48
+ livenessProbe:
49
+ exec:
50
+ command: ["/bin/grpc_health_probe", "-addr=:8443"]
51
+ initialDelaySeconds: 120
52
+ staging:
53
+ host: api.staginghost.com
54
+ replicas: 1
55
+ production:
56
+ host: api.host.com
57
+ replicas: 2
58
+ cpu: 50m/250m
59
+ memory: 600Mi/768Mi
60
+
61
+
62
+ staging:
63
+ environment:
64
+ ENV: staging
65
+ production:
66
+ environment:
67
+ ENV: production
68
+ env_secrets:
69
+ AWS_SECRET_ACCESS_KEY: secretstore/aws_secret_access_key
70
+ environment:
71
+ DD_AGENT_HOST: field/status.hostIP
72
+ AWS_ACCESS_KEY_ID: "1234"
73
+ ```
74
+
75
+
76
+
77
+ # Profit
20
78
  ```
21
79
  pfab shipit
22
80
  pfab status
81
+ pfab logs
82
+ pfab exec
83
+ pfab run_local
23
84
  ```
24
85
 
25
86
  Contributing to pfab
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.0
1
+ 0.7.0
data/lib/pfab/cli.rb CHANGED
@@ -133,6 +133,29 @@ module Pfab
133
133
  end
134
134
  end
135
135
 
136
+ command :run_local do |c|
137
+ c.syntax = "pfab run_local"
138
+ c.summary = "run an app LOCALLY"
139
+ c.description = "run the application command with all env vars set"
140
+ c.example "run a command locally",
141
+ "pfab run_local"
142
+ c.option "-c", "--command COMMAND", "Run a command with the ENV vars of the selected app"
143
+ c.action do |_args, options|
144
+ $env = :development
145
+ app_name = get_app_name
146
+ puts "RUNNING THE FOLLOWING LOCALLY"
147
+
148
+ env_vars = yy.env_vars(app_name).
149
+ reject { |v| v.has_key? :valueFrom }
150
+
151
+ env_var_string = env_vars.map { |item| "#{item[:name]}=#{item[:value]}" }.join(" ")
152
+ options.default command: @apps[app_name][:command]
153
+
154
+ puts_and_system "#{env_var_string} #{options.command}"
155
+ end
156
+ end
157
+ alias_command :rl, :run_local
158
+
136
159
  default_command :help
137
160
 
138
161
  run!
@@ -196,14 +219,18 @@ module Pfab
196
219
  return true
197
220
  end
198
221
 
199
- def cmd_generate_yaml
200
- wrote = Pfab::Yamls.generate_for(apps: @apps,
201
- application_yaml: @application_yaml,
202
- env: $env,
203
- sha: get_current_sha,
204
- image_name: image_name,
205
- config: config
222
+ def yy
223
+ Pfab::Yamls.new(apps: @apps,
224
+ application_yaml: @application_yaml,
225
+ env: $env,
226
+ sha: get_current_sha,
227
+ image_name: image_name,
228
+ config: config
206
229
  )
230
+ end
231
+
232
+ def cmd_generate_yaml
233
+ wrote = yy.generate_all
207
234
  puts "Generated #{wrote}"
208
235
  end
209
236
 
@@ -49,11 +49,11 @@ module Pfab
49
49
  { name: "DEPLOYED_NAME", value: @data['deployed_name'] },
50
50
  ]
51
51
 
52
- load_env_vars(env_vars, @data["application_yaml"][:environment])
53
- load_env_vars(env_vars, @data["application_yaml"][@data["env"]][:environment])
52
+ load_env_vars(env_vars, @data.dig("application_yaml", :environment))
53
+ load_env_vars(env_vars, @data.dig("application_yaml", @data["env"], :environment))
54
54
 
55
- load_secrets(env_vars, @data["application_yaml"][:env_secrets])
56
- load_secrets(env_vars, @data["application_yaml"][@data["env"]][:env_secrets])
55
+ load_secrets(env_vars, @data.dig("application_yaml", :env_secrets))
56
+ load_secrets(env_vars, @data.dig("application_yaml", @data["env"], :env_secrets))
57
57
 
58
58
  env_vars
59
59
  end
data/lib/pfab/yamls.rb CHANGED
@@ -1,24 +1,39 @@
1
1
  require 'pry'
2
2
  module Pfab
3
3
  class Yamls
4
- def self.generate_for(apps:, application_yaml:, image_name:, env:, sha:, config:)
5
-
6
- apps.map do |app, props|
7
- puts app
8
-
9
- data = {
10
- "env" => env.to_s,
11
- 'image_name' => image_name,
12
- 'sha' => sha,
13
- 'container_repository' => config["container.repository"],
14
- 'config' => config,
15
- 'props' => props,
16
- 'deployed_name' => app,
17
- 'application' => application_yaml["name"],
18
- 'application_yaml' => application_yaml
19
- }
20
-
21
- filename = ".application-k8s-#{env}-#{app}.yaml"
4
+
5
+ def initialize(apps:, application_yaml:, image_name:, env:, sha:, config:)
6
+ @apps = apps
7
+ @base_data = {
8
+ "env" => env.to_s,
9
+ 'image_name' => image_name,
10
+ 'sha' => sha,
11
+ 'container_repository' => config["container.repository"],
12
+ 'config' => config,
13
+ 'application' => application_yaml["name"],
14
+ 'application_yaml' => application_yaml
15
+ }
16
+ end
17
+
18
+ def env_vars(app)
19
+ template = Pfab::Templates::Base.new(data_for(app, @apps[app]))
20
+ template.env_vars
21
+ end
22
+
23
+ def data_for(app, props)
24
+ data = @base_data.clone
25
+ data['props'] = props
26
+ data['deployed_name'] = app
27
+ data
28
+ end
29
+
30
+ def generate_all
31
+
32
+ @apps.map do |app, props|
33
+
34
+ data = data_for(app, props)
35
+
36
+ filename = ".application-k8s-#{data["env"]}-#{app}.yaml"
22
37
  File.open(filename, "w") do |f|
23
38
  case props[:deployable_type]
24
39
  when "web" then
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.6.0 ruby lib
5
+ # stub: pfab 0.7.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "pfab".freeze
9
- s.version = "0.6.0"
9
+ s.version = "0.7.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 = "2019-01-08"
14
+ s.date = "2019-01-10"
15
15
  s.description = "k8s helper".freeze
16
16
  s.email = "jdwyer@prefab.cloud".freeze
17
17
  s.executables = ["pfab".freeze]
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.6.0
4
+ version: 0.7.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: 2019-01-08 00:00:00.000000000 Z
11
+ date: 2019-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: commander