pfab 0.6.0 → 0.7.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: 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