ky 0.3.2 → 0.3.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
2
  SHA1:
3
- metadata.gz: 5e6457f14235fff459007114725f30bc21c98c8e
4
- data.tar.gz: 79e288a71402fed10584f55ca4c1dccac9cb6c28
3
+ metadata.gz: 2533ddef5c84d343f63a450906ff204af9d8fba3
4
+ data.tar.gz: fa69c9106ed34e68b7d37b0ae42d6a038133967d
5
5
  SHA512:
6
- metadata.gz: 8d24974efdd05b58bdd32483ab43e5bac1f0b7be4c87100105cb10751d119c555f1691fa0c6a6b6f208cefd18bf72d526eaecda4f61f6bca614c76598cb5f86d
7
- data.tar.gz: 0a3cb75f0eb527b1ecc8efe997551a61665d50936af73a0a547f1cbd9231004428b1980402bbe217106c5b33d0b6c6cbeb5a034e597223eab20d335ab01896b1
6
+ metadata.gz: 56c897b7045750693622757feeac1920b395a17258d92096151811a5df8f6dc59dcd1f2447a83c5733a92a630c84410174fe65216ee6d68c06b654d27e5d5254
7
+ data.tar.gz: 3bd1693ec6df03cd29733abdda68369b85e6ee5442402a2a2331e14a666f46df874d9ad7655974753287698fed631ada2d5968601dd6fc1cdfab0d9551ef39a0
data/README.md CHANGED
@@ -7,7 +7,7 @@ The primary purpose is to automate/DRY up duplication and agreement between mult
7
7
  The full/hopeful use of the tool may be enabled with the new `compile` command which is very much a rough draft at present, but which takes a crack at generating a complete deployment yaml file for every line of a Procfile such as used for Heroku, and a pair of config and secrets files. The secret file can be non-base64 encoded, and compile will generate deployments and a base64 encoded secrets file to a target directory specified. This command uses all the below commands in combination, one other command not exposed via CLI independently.
8
8
 
9
9
  The command is invoked as:
10
- `ky compile Procfile.file config.yml secrets.yml output_dir` and the output directory will be created if necessary. You may pass a namespace to compile which will be reflected in the deployments (and should agree with the config and secrets, though it's not checking they agree at present). The arguments are all configurable via the configuration file as well, so it can in practice be invoked as `ky compile` or `kky compile --envioronment stg` if you have a configuration file correctly present as described below.
10
+ `ky compile Procfile.file config.yml secrets.yml output_dir` and the output directory will be created if necessary. You may pass a namespace to compile which will be reflected in the deployments (and should agree with the config and secrets, though it's not checking they agree at present). The arguments are all configurable via the configuration file as well, so it can in practice be invoked as `ky compile` or `ky compile --envioronment stg` if you have a configuration file correctly present as described below.
11
11
 
12
12
  Configuration begins with a config file in the project working directory, or in your home directory if you wish to share across several projects. Unfortunately there are several competing conventions for configuration files, the traditional dot-file configuration convention and newer, more visible Capitalfile configuration. KY is a lubricant, and has no opinion, and therefore currently supports naming your configuration file `.ky.yml`, `.ky.yaml`, or `Lubefile` or `Kyfile`. The default configuration, if this file is not found, is as follows:
13
13
  ```
data/lib/ky.rb CHANGED
@@ -9,7 +9,7 @@ require_relative 'ky/template'
9
9
  require_relative 'ky/deploy_generation'
10
10
 
11
11
 
12
- module KY
12
+ class KY
13
13
  CONFIG_FILE_NAMES = [".ky.yml", ".ky.yaml", "Lubefile", "Kyfile"]
14
14
  CONFIG_LOCATIONS = ["#{Dir.pwd}/", "#{Dir.home}/"]
15
15
  DEFAULT_CONFIG = {
@@ -23,10 +23,9 @@ module KY
23
23
  inline_config: true,
24
24
  inline_secret: false,
25
25
  project_name: "global"
26
- }.stringify_keys
26
+ }.with_indifferent_access
27
27
 
28
- module_function
29
- cattr_accessor :environment, :image_tag
28
+ attr_accessor :environment, :image_tag
30
29
 
31
30
  def decode(output, input)
32
31
  output << Manipulation.code_yaml(input, :decode)
@@ -41,7 +40,7 @@ module KY
41
40
  end
42
41
 
43
42
  def env(output, input1, input2)
44
- output << EnvGeneration.generate_env(input1, input2).to_yaml
43
+ output << EnvGeneration.generate_env(self, input1, input2).to_yaml
45
44
  rescue KY::EnvGeneration::ConflictingProjectError => e
46
45
  $stderr << "Error processing yml files, please provide a config and a secrets file from the same kubernetes project/name"
47
46
  exit(1)
@@ -50,12 +49,12 @@ module KY
50
49
  def compile(proc_path, env1path, env2path, base_output_dir, namespace=DeployGeneration::DEFAULT_NAMESPACE)
51
50
  full_output_dir = Pathname.new(base_output_dir).join(environment.to_s).to_s
52
51
  FileUtils.mkdir_p(full_output_dir)
53
- env_obj = EnvGeneration.new(env1path, env2path)
54
- deploys_hash = DeployGeneration.new(proc_path, full_output_dir, env_obj.project, namespace).to_h
52
+ env_obj = EnvGeneration.new(self, env1path, env2path)
53
+ deploys_hash = DeployGeneration.new(self, proc_path, full_output_dir, env_obj.project, namespace).to_h
55
54
  deploys_hash.each do |file_path, deploy_hash|
56
55
  File.write(file_path, Manipulation.merge_hash(deploy_hash, env_obj.to_h).to_yaml)
57
56
  end
58
- Manipulation.write_configs_encode_if_needed(env_obj.config_hsh, env_obj.secret_hsh, full_output_dir, configuration["project_name"])
57
+ Manipulation.write_configs_encode_if_needed(env_obj.config_hsh, env_obj.secret_hsh, full_output_dir, configuration[:project_name])
59
58
  end
60
59
 
61
60
  def configuration
data/lib/ky/cli.rb CHANGED
@@ -1,33 +1,33 @@
1
1
  require_relative '../ky'
2
2
  require 'thor'
3
- module KY
3
+ class KY
4
4
  class Cli < Thor
5
5
  MissingParametersError = Class.new(StandardError)
6
6
  desc "encode secrets.yml", "base64 encoded yaml version of data attributes in secrets.yml"
7
7
  def encode(input_source=$stdin, output_source=$stdout)
8
8
  input_output(input_source, output_source) do |input_object, output_object|
9
- KY.encode(output_object, input_object)
9
+ KY.new.encode(output_object, input_object)
10
10
  end
11
11
  end
12
12
 
13
13
  desc "decode secrets.yml", "decoded yaml version of secrets.yml with base64 encoded data attributes"
14
14
  def decode(input_source=$stdin, output_source=$stdout)
15
15
  input_output(input_source, output_source) do |input_object, output_object|
16
- KY.decode(output_object, input_object)
16
+ KY.new.decode(output_object, input_object)
17
17
  end
18
18
  end
19
19
 
20
20
  desc "merge base.yml env.yml", "deep merged/combined yaml of two seperate files"
21
21
  def merge(input_source1, input_source2=$stdin, output_source=$stdout)
22
22
  input_output(input_source1, output_source) do |input_object1, output_object|
23
- with(input_source2, 'r') {|input_object2| KY.merge(output_object, input_object1, input_object2) }
23
+ with(input_source2, 'r') {|input_object2| KY.new.merge(output_object, input_object1, input_object2) }
24
24
  end
25
25
  end
26
26
 
27
27
  desc "env config.yml secrets.yml", "generate env variables section of a deployment from a config and a secrets file"
28
28
  def env(input_source1, input_source2=$stdin, output_source=$stdout)
29
29
  input_output(input_source1, output_source) do |input_object1, output_object|
30
- with(input_source2, 'r') {|input_object2| KY.env(output_object, input_object1, input_object2) }
30
+ with(input_source2, 'r') {|input_object2| KY.new.env(output_object, input_object1, input_object2) }
31
31
  end
32
32
  end
33
33
 
@@ -43,15 +43,16 @@ module KY
43
43
  method_option :environment, type: :string, aliases: "-e"
44
44
  method_option :image_tag, type: :string, aliases: "-t"
45
45
  def compile(procfile_path=nil, config_or_secrets_path=nil, secrets_or_config_path=nil, output_dir=nil)
46
- KY.environment = options[:environment]
47
- KY.image_tag = options[:image_tag]
48
- procfile_path ||= KY.configuration['procfile_path']
49
- config_or_secrets_path ||= KY.configuration['config_path'] || KY.configuration['secret_path']
50
- secrets_or_config_path ||= KY.configuration['secret_path'] || KY.configuration['config_path']
51
- output_dir ||= KY.configuration['output_dir']
46
+ instance = KY.new
47
+ instance.environment = options[:environment]
48
+ instance.image_tag = options[:image_tag]
49
+ procfile_path ||= instance.configuration['procfile_path']
50
+ config_or_secrets_path ||= instance.configuration['config_path'] || instance.configuration['secret_path']
51
+ secrets_or_config_path ||= instance.configuration['secret_path'] || instance.configuration['config_path']
52
+ output_dir ||= instance.configuration['output_dir']
52
53
  raise MissingParametersError unless procfile_path && config_or_secrets_path && secrets_or_config_path && output_dir
53
54
  input_input(config_or_secrets_path, secrets_or_config_path) do |input1, input2|
54
- KY.compile(procfile_path, input1, input2, output_dir, options[:namespace])
55
+ instance.compile(procfile_path, input1, input2, output_dir, options[:namespace])
55
56
  end
56
57
  end
57
58
 
@@ -1,13 +1,14 @@
1
- module KY
1
+ class KY
2
2
  class DeployGeneration
3
- def initialize(proc_path, full_output_dir, project_name=nil, current_namespace=nil)
3
+ def initialize(instance, proc_path, full_output_dir, project_name=nil, current_namespace=nil)
4
+ @instance = instance
4
5
  @proc_commands = File.read(proc_path).split("\n")
5
6
  .map {|line| line.split(':', 2) }
6
7
  .map {|k, v| [k, ["/bin/bash","-c", v]] }
7
8
  .to_h
8
9
  @full_output_dir = full_output_dir
9
- @project_name = project_name || KY.configuration[:project_name]
10
- @current_namespace = current_namespace || KY.configuration[:namespace]
10
+ @project_name = project_name || instance.configuration[:project_name]
11
+ @current_namespace = current_namespace || instance.configuration[:namespace]
11
12
  @deployment_yaml = read_deployment_yaml
12
13
  end
13
14
 
@@ -24,11 +25,11 @@ module KY
24
25
  end
25
26
 
26
27
  private
27
- attr_reader :proc_commands, :full_output_dir, :project_name, :current_namespace, :deployment_yaml
28
+ attr_reader :proc_commands, :full_output_dir, :project_name, :current_namespace, :deployment_yaml, :instance
28
29
 
29
30
  def read_deployment_yaml
30
- if KY.configuration['deployment']
31
- File.read(KY.configuration['deployment'])
31
+ if instance.configuration['deployment']
32
+ File.read(instance.configuration['deployment'])
32
33
  else
33
34
  File.read(default_deployment_template)
34
35
  end
@@ -39,13 +40,13 @@ module KY
39
40
  end
40
41
 
41
42
  def template_hash(id, command_array)
42
- app_name = KY.configuration['app_name'] || "#{project_name}-#{id}"
43
+ app_name = instance.configuration['app_name'] || "#{project_name}-#{id}"
43
44
  template_context = Template.context(app_name: app_name, id: id, command_array: command_array)
44
45
  Manipulation.merge_hash(
45
46
  YAML.load(
46
47
  ERB.new(deployment_yaml).result(template_context)
47
48
  ),
48
- KY.deploy_merge(id)
49
+ instance.deploy_merge(id)
49
50
  )
50
51
  end
51
52
  end
@@ -1,6 +1,6 @@
1
1
  require 'active_support'
2
2
  require 'active_support/core_ext'
3
- module KY
3
+ class KY
4
4
  class EnvGeneration
5
5
  ConflictingProjectError = Class.new(StandardError)
6
6
 
@@ -9,13 +9,14 @@ module KY
9
9
  define_method(raw_string.underscore) { raw_string }
10
10
  end
11
11
 
12
- def self.generate_env(input1, input2)
13
- new(input1, input2).to_h
12
+ def self.generate_env(instance, input1, input2)
13
+ new(instance, input1, input2).to_h
14
14
  end
15
15
 
16
- attr_reader :config_hsh, :secret_hsh
17
- def initialize(input1, input2)
16
+ attr_reader :config_hsh, :secret_hsh, :instance
17
+ def initialize(instance, input1, input2)
18
18
  input_hashes = YAML.load(input1.read), YAML.load(input2.read)
19
+ @instance = instance
19
20
  @config_hsh = input_hashes.find {|h| h[kind] == config_map }
20
21
  @secret_hsh = input_hashes.find {|h| h[kind] == secret }
21
22
  raise ConflictingProjectError.new("Config and Secret metadata names do not agree") unless secret_hsh[metadata][name] == project
@@ -41,12 +42,12 @@ module KY
41
42
  end
42
43
 
43
44
  def inline_config?
44
- KY.configuration[:inline_config]
45
+ instance.configuration[:inline_config]
45
46
  end
46
47
 
47
48
 
48
49
  def inline_secret?
49
- KY.configuration[:inline_secret]
50
+ instance.configuration[:inline_secret]
50
51
  end
51
52
 
52
53
  def inline_env_map(type, kebab_version, env_value)
@@ -1,5 +1,5 @@
1
1
  require 'deep_merge/rails_compat'
2
- module KY
2
+ class KY
3
3
  module Manipulation
4
4
  DEFAULT_DATA_KEY = 'data'
5
5
  MAGIC_DELIMITER = '@'
data/lib/ky/template.rb CHANGED
@@ -1,22 +1,24 @@
1
- class Template
2
- def self.context(hsh)
3
- new(hsh).context
4
- end
1
+ class KY
2
+ class Template
3
+ def self.context(hsh)
4
+ new(hsh).context
5
+ end
5
6
 
6
- attr_reader :context_hash
7
- def initialize(hsh)
8
- @context_hash = hsh
9
- end
7
+ attr_reader :context_hash
8
+ def initialize(hsh)
9
+ @context_hash = hsh
10
+ end
10
11
 
11
- def environment
12
- KY.environment
13
- end
12
+ def environment
13
+ KY.environment
14
+ end
14
15
 
15
- def context
16
- template_context = binding
17
- context_hash.each do |var, value|
18
- template_context.local_variable_set(var, value)
16
+ def context
17
+ template_context = binding
18
+ context_hash.each do |var, value|
19
+ template_context.local_variable_set(var, value)
20
+ end
21
+ template_context
19
22
  end
20
- template_context
21
23
  end
22
24
  end
data/lib/ky/version.rb CHANGED
@@ -1,3 +1,3 @@
1
- module KY
2
- VERSION = "0.3.2"
1
+ class KY
2
+ VERSION = "0.3.3"
3
3
  end
data/spec/ky_bin_spec.rb CHANGED
@@ -1,79 +1,114 @@
1
1
  require 'ky/cli'
2
- describe "cli commands" do
3
- let(:tmpfile_path) { "spec/support/tmpfile.yml" }
4
- before do # for backwards compatible with old non-inlining test/support behavior
5
- normal_config = KY::DEFAULT_CONFIG
6
- KY.define_methods_from_config(normal_config)
7
- allow(KY).to receive(:configuration).and_return(normal_config.merge(inline_config: false))
8
- end
2
+ describe "ky cli" do
3
+ describe "legacy/component cli commands" do
4
+ let(:tmpfile_path) { "spec/support/tmpfile.yml" }
9
5
 
10
- after { `rm #{tmpfile_path}` if File.exists?(tmpfile_path) }
11
- describe "works with stdout" do
12
- it "decodes" do
13
- output = File.read('spec/support/decoded.yml')
14
- expect($stdout).to receive(:<<).with(output)
15
- KY::Cli.new.decode("spec/support/encoded.yml")
16
- end
6
+ after { `rm #{tmpfile_path}` if File.exists?(tmpfile_path) }
7
+ describe "works with stdout" do
8
+ it "decodes" do
9
+ output = File.read('spec/support/decoded.yml')
10
+ expect($stdout).to receive(:<<).with(output)
11
+ KY::Cli.new.decode("spec/support/encoded.yml")
12
+ end
17
13
 
18
- it "encodes" do
19
- output = File.read('spec/support/encoded.yml')
20
- expect($stdout).to receive(:<<).with(output)
21
- KY::Cli.new.encode("spec/support/decoded.yml")
14
+ it "encodes" do
15
+ output = File.read('spec/support/encoded.yml')
16
+ expect($stdout).to receive(:<<).with(output)
17
+ KY::Cli.new.encode("spec/support/decoded.yml")
18
+ end
22
19
  end
23
- end
24
20
 
25
- describe "works with files" do
26
- it "decodes" do
27
- output = File.read('spec/support/decoded.yml')
28
- KY::Cli.new.decode("spec/support/encoded.yml", tmpfile_path)
29
- expect(File.read(tmpfile_path)).to eq(output)
21
+ describe "works with files" do
22
+ it "decodes" do
23
+ output = File.read('spec/support/decoded.yml')
24
+ KY::Cli.new.decode("spec/support/encoded.yml", tmpfile_path)
25
+ expect(File.read(tmpfile_path)).to eq(output)
26
+ end
27
+
28
+ it "encodes" do
29
+ output = File.read('spec/support/encoded.yml')
30
+ KY::Cli.new.encode("spec/support/decoded.yml", tmpfile_path)
31
+ expect(File.read(tmpfile_path)).to eq(output)
32
+ end
30
33
  end
31
34
 
32
- it "encodes" do
33
- output = File.read('spec/support/encoded.yml')
34
- KY::Cli.new.encode("spec/support/decoded.yml", tmpfile_path)
35
- expect(File.read(tmpfile_path)).to eq(output)
35
+ describe "merges yml files" do
36
+ it "to stdout" do
37
+ output = File.read('spec/support/web-merged.yml')
38
+ expect($stdout).to receive(:<<).with(output)
39
+ KY::Cli.new.merge('spec/support/web-base.yml', 'spec/support/web-env.yml')
40
+ end
36
41
  end
37
- end
38
42
 
39
- describe "merges yml files" do
40
- it "to stdout" do
41
- output = File.read('spec/support/web-merged.yml')
42
- expect($stdout).to receive(:<<).with(output)
43
- KY::Cli.new.merge('spec/support/web-base.yml', 'spec/support/web-env.yml')
43
+ describe "generates env section" do
44
+ it "to stdout" do
45
+ output = File.read('spec/support/web-env.yml')
46
+ expect($stdout).to receive(:<<).with(output)
47
+ KY::Cli.new.env('spec/support/decoded.yml', 'spec/support/config.yml')
48
+ end
49
+
50
+ it "config and secret are order independent" do
51
+ output = File.read('spec/support/web-env.yml')
52
+ expect($stdout).to receive(:<<).with(output)
53
+ KY::Cli.new.env('spec/support/config.yml', 'spec/support/decoded.yml')
54
+ end
55
+
56
+ it "to file" do
57
+ output = File.read('spec/support/web-env.yml')
58
+ KY::Cli.new.env('spec/support/config.yml', 'spec/support/decoded.yml', tmpfile_path)
59
+ expect(File.read(tmpfile_path)).to eq(output)
60
+ end
44
61
  end
45
62
  end
46
63
 
47
- describe "generates env section" do
48
- it "to stdout" do
49
- output = File.read('spec/support/web-env.yml')
50
- expect($stdout).to receive(:<<).with(output)
51
- KY::Cli.new.env('spec/support/decoded.yml', 'spec/support/config.yml')
64
+ describe "primary cli command" do
65
+ let(:instance) { KY.new }
66
+ let(:fake_tag) { 'fake_tag' }
67
+ let(:tmpdir) { 'spec/support/tmpdir' }
68
+ after { `rm -r #{tmpdir}` ; instance.environment = nil ; instance.image_tag = nil }
69
+ describe "compiles Procfile and env secrets/configs into entire deployments" do
70
+ it "to directory" do
71
+ KY::Cli.new.compile('spec/support/Procfile', 'spec/support/config.yml', 'spec/support/decoded.yml', tmpdir)
72
+ expect(File.exists?("#{tmpdir}/web.deployment.yml")).to be true
73
+ expect(File.exists?("#{tmpdir}/worker.deployment.yml")).to be true
74
+ expect(File.exists?("#{tmpdir}/jobs.deployment.yml")).to be true
75
+ end
52
76
  end
53
77
 
54
- it "config and secret are order independent" do
55
- output = File.read('spec/support/web-env.yml')
56
- expect($stdout).to receive(:<<).with(output)
57
- KY::Cli.new.env('spec/support/config.yml', 'spec/support/decoded.yml')
78
+ describe "encodes secrets.yml when compiling from Procfile without image_tag" do
79
+ it "to directory" do
80
+ instance = KY::Cli.new
81
+ instance.compile('spec/support/Procfile', 'spec/support/config.yml', 'spec/support/decoded.yml', tmpdir)
82
+ expect(File.exists?("#{tmpdir}/global.secret.yml")).to be true
83
+ YAML.load(File.read("#{tmpdir}/global.secret.yml"))['data'].each do |_k, v|
84
+ expect(v).to match(KY::Manipulation::BASE_64_DETECTION_REGEX)
85
+ end
86
+ end
58
87
  end
59
88
 
60
- it "to file" do
61
- output = File.read('spec/support/web-env.yml')
62
- KY::Cli.new.env('spec/support/config.yml', 'spec/support/decoded.yml', tmpfile_path)
63
- expect(File.read(tmpfile_path)).to eq(output)
89
+ describe "encodes secrets.yml when compiling from Procfile with image_tag" do
90
+ it "to directory" do
91
+ instance = KY::Cli.new
92
+ instance.options = {image_tag: fake_tag}
93
+ instance.compile('spec/support/Procfile', 'spec/support/config.yml', 'spec/support/decoded.yml', tmpdir)
94
+ expect(File.exists?("#{tmpdir}/global.secret.yml")).to be true
95
+ YAML.load(File.read("#{tmpdir}/global.secret.yml"))['data'].each do |_k, v|
96
+ expect(v).to match(KY::Manipulation::BASE_64_DETECTION_REGEX)
97
+ end
98
+ end
64
99
  end
65
- end
66
100
 
67
- describe "compiles Procfile and env secrets/configs into entire deployments" do
68
- let(:tmpdir) { 'spec/support/tmpdir' }
69
- it "to directory" do
70
- KY::Cli.new.compile('spec/support/Procfile', 'spec/support/config.yml', 'spec/support/decoded.yml', tmpdir)
71
- expect(File.exists?("#{tmpdir}/web.deployment.yml")).to be true
72
- expect(File.exists?("#{tmpdir}/worker.deployment.yml")).to be true
73
- expect(File.exists?("#{tmpdir}/jobs.deployment.yml")).to be true
74
- `rm -r #{tmpdir}`
101
+ describe "uses image_tag when passed in as option" do
102
+ let(:tmpdir) { 'spec/support/tmp2dir' }
103
+ it "to directory" do
104
+ instance = KY::Cli.new
105
+ instance.options = {image_tag: fake_tag}
106
+ instance.compile('spec/support/Procfile', 'spec/support/config.yml', 'spec/support/decoded.yml', tmpdir)
107
+ expect(File.exists?("#{tmpdir}/web.deployment.yml")).to be true
108
+ expect(File.read("#{tmpdir}/web.deployment.yml")).to match(fake_tag)
109
+ end
75
110
  end
76
- end
77
111
 
112
+ end
78
113
  end
79
114
 
@@ -5,20 +5,11 @@ spec:
5
5
  containers:
6
6
  - env:
7
7
  - name: TZ
8
- valueFrom:
9
- configMapKeyRef:
10
- name: test
11
- key: tz
8
+ value: EST
12
9
  - name: REST_API_ID
13
- valueFrom:
14
- configMapKeyRef:
15
- name: test
16
- key: rest-api-id
10
+ value: 1234abcd
17
11
  - name: USE_SSL
18
- valueFrom:
19
- configMapKeyRef:
20
- name: test
21
- key: use-ssl
12
+ value: true
22
13
  - name: DATABASE_URL
23
14
  valueFrom:
24
15
  secretKeyRef:
@@ -23,20 +23,11 @@ spec:
23
23
  - bundle exec rake assets:precompile && bundle exec puma -C ./config/puma.rb
24
24
  env:
25
25
  - name: TZ
26
- valueFrom:
27
- configMapKeyRef:
28
- name: test
29
- key: tz
26
+ value: EST
30
27
  - name: REST_API_ID
31
- valueFrom:
32
- configMapKeyRef:
33
- name: test
34
- key: rest-api-id
28
+ value: 1234abcd
35
29
  - name: USE_SSL
36
- valueFrom:
37
- configMapKeyRef:
38
- name: test
39
- key: use-ssl
30
+ value: true
40
31
  - name: DATABASE_URL
41
32
  valueFrom:
42
33
  secretKeyRef:
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ky
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Glusman