kontena-cli 0.14.1 → 0.14.2

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
  SHA1:
3
- metadata.gz: 271ff6357fc144663ce26127000670ee955591f9
4
- data.tar.gz: 3c649adbd8e51c377d91f2ccff9e1cddaf83d198
3
+ metadata.gz: f71c08239bc2780793aa394f980332a5b497d8c0
4
+ data.tar.gz: 932ba40653c1709ad494e21d8eb863a0269307f4
5
5
  SHA512:
6
- metadata.gz: a324873b2090e75da968425299e6d15581d5d0632be85e53f1664501b212c8c0aca79f11a7f42c0e1a10cb90f4cf2c325452d0a32047f849d9d87ef0ed50b867
7
- data.tar.gz: 3b60be978cfbb2a686f02e9e1353a62627ea11fd4bc71854018b65d1d542da2ac0a303197b10b0712dfc05531564f041899ea657d96976f213125e3d3b44f41b
6
+ metadata.gz: a6169ec0c9621c1c3ab5ed29bffa0e1714e37bfccb80e1ba19d2093a7cbd1c166ffe870b635418163ea285be928593ccab0eccec430bbf187d5a29780b109685
7
+ data.tar.gz: 9d1affd436e49874e937671d8bdfc11c1547916c2cb0444a9adeb4c6097b65c5ed141f1667a6f6a7ad463f552ef6e8da2f5bc53f81eed6e058a94bfae72d5dd8
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.14.1
1
+ 0.14.2
@@ -56,7 +56,7 @@ module Kontena::Cli::Apps
56
56
 
57
57
  def project_name_from_yaml(file)
58
58
  reader = YAML::Reader.new(file, true)
59
- outcome = reader.execute
59
+ outcome = reader.execute
60
60
  if outcome[:version] == '2'
61
61
  outcome[:name]
62
62
  else
@@ -100,10 +100,8 @@ module Kontena::Cli::Apps
100
100
  def app_json
101
101
  if !@app_json && File.exist?('app.json')
102
102
  @app_json = JSON.parse(File.read('app.json'))
103
- else
104
- @app_json = {}
105
103
  end
106
- @app_json
104
+ @app_json ||= {}
107
105
  end
108
106
 
109
107
  def display_notifications(messages, color = :yellow)
@@ -14,36 +14,48 @@ module Kontena::Cli::Apps
14
14
  def generate(procfile, addons, env_file)
15
15
  if procfile.keys.size > 0
16
16
  # generate services found in Procfile
17
- docker_compose = {}
18
- procfile.keys.each do |service|
19
- docker_compose[service] = {'build' => '.' }
17
+ docker_compose = {
18
+ 'version' => '2'
19
+ }
20
+ services = {}
21
+ procfile.each do |service, command|
22
+ services[service] = {'build' => '.' }
20
23
  if app_json && service == 'web' # Heroku generates PORT env variable so should we do too
21
- docker_compose[service]['environment'] = ['PORT=5000']
22
- docker_compose[service]['ports'] = ['5000:5000']
24
+ services[service]['environment'] = ['PORT=5000']
25
+ services[service]['ports'] = ['5000:5000']
23
26
  end
24
- docker_compose[service]['command'] = "/start #{service}" if service != 'web'
25
- docker_compose[service]['env_file'] = env_file if env_file
27
+ services[service]['command'] = "/start #{service}" if service != 'web'
28
+ services[service]['env_file'] = env_file if env_file
26
29
 
27
30
  # generate addon services
28
31
  addons.each do |addon|
29
32
  addon_service = addon.split(":")[0]
30
33
  addon_service.slice!('heroku-')
31
34
  if valid_addons.has_key?(addon_service)
32
- docker_compose[service]['links'] = [] unless docker_compose[service]['links']
33
- docker_compose[service]['links'] << "#{addon_service}:#{addon_service}"
34
- docker_compose[service]['environment'] = [] unless docker_compose[service]['environment']
35
- docker_compose[service]['environment'] += valid_addons[addon_service]['environment']
36
- docker_compose[addon_service] = {'image' => valid_addons[addon_service]['image']}
35
+ services[service]['links'] = [] unless services[service]['links']
36
+ services[service]['links'] << "#{addon_service}:#{addon_service}"
37
+ services[service]['environment'] = [] unless services[service]['environment']
38
+ services[service]['environment'] += valid_addons[addon_service]['environment']
39
+ services[addon_service] = {'image' => valid_addons[addon_service]['image']}
37
40
  end
38
41
  end
39
42
  end
43
+ docker_compose['services'] = services
40
44
  else
41
45
  # no Procfile found, create dummy web service
42
- docker_compose = {'web' => { 'build' => '.'}}
43
- docker_compose['web']['env_file'] = env_file if env_file
46
+ docker_compose = {
47
+ 'version' => '2',
48
+ 'services' => {
49
+ 'web' => {
50
+ 'build' => '.'
51
+ }
52
+ }
53
+ }
54
+
55
+ docker_compose['services']['web']['env_file'] = env_file if env_file
44
56
  end
45
57
  # create docker-compose.yml file
46
58
  create_yml(docker_compose, docker_compose_file)
47
59
  end
48
60
  end
49
- end
61
+ end
@@ -27,12 +27,12 @@ module Kontena::Cli::Apps
27
27
  end
28
28
 
29
29
  if File.exist?('Procfile')
30
- procfile = YAML.load(File.read('Procfile'))
30
+ procfile = ::YAML.load(File.read('Procfile'))
31
31
  else
32
32
  procfile = {}
33
33
  end
34
34
 
35
- app_env = create_env_file(app_json)
35
+ app_env = create_env_file(app_json['env']) if app_json['env']
36
36
  addons = app_json['addons'] || []
37
37
 
38
38
  if File.exist?(docker_compose_file)
@@ -62,26 +62,26 @@ module Kontena::Cli::Apps
62
62
 
63
63
  protected
64
64
 
65
+ def service_prefix
66
+ @service_prefix ||= project_name || current_dir
67
+ end
68
+
65
69
  def create_dockerfile?
66
70
  ['', 'y', 'yes'].include? ask('Dockerfile not found. Do you want to create it? [Yn]: ').downcase
67
71
  end
68
72
 
69
- def create_env_file(app_json)
70
-
71
- if app_json['env']
72
- app_env = File.new('.env', 'w')
73
- app_json['env'].each do |key, env|
74
- if env['generator'] == 'secret'
75
- value = SecureRandom.hex(64)
76
- else
77
- value = env['value']
78
- end
79
- app_env.puts "#{key}=#{value}"
73
+ def create_env_file(env)
74
+ app_env = File.new('.env', 'w')
75
+ app_json['env'].each do |key, env|
76
+ if env['generator'] == 'secret'
77
+ value = SecureRandom.hex(64)
78
+ else
79
+ value = env['value']
80
80
  end
81
- app_env.close
82
- return '.env'
81
+ app_env.puts "#{key}=#{value}"
83
82
  end
84
- nil
83
+ app_env.close
84
+ '.env'
85
85
  end
86
86
 
87
87
  def create_docker_compose_yml?
@@ -16,8 +16,8 @@ module Kontena::Cli::Apps
16
16
  services = {}
17
17
  # extend services from docker-compose.yml
18
18
  file = File.read(docker_compose_file)
19
- compose_services = YAML.load(file)
20
- compose_services.each do |name, options|
19
+
20
+ yml_services(file).each do |name, options|
21
21
  services[name] = {'extends' => { 'file' => 'docker-compose.yml', 'service' => name }}
22
22
  if options.has_key?('build')
23
23
  image = image_name || "registry.kontena.local/#{File.basename(Dir.getwd)}:latest"
@@ -42,7 +42,15 @@ module Kontena::Cli::Apps
42
42
  end
43
43
  end
44
44
  create_yml(services, 'kontena.yml')
45
+ end
45
46
 
47
+ def yml_services(file)
48
+ yml = ::YAML.load(file)
49
+ if yml['version'] == '2'
50
+ yml['services']
51
+ else
52
+ yml
53
+ end
46
54
  end
47
55
 
48
56
  def generate(procfile, addons, env_file)
@@ -79,17 +87,20 @@ module Kontena::Cli::Apps
79
87
  end
80
88
 
81
89
  def create_yml(services, filename)
82
- if File.exist?(filename)
83
- kontena_services = YAML.load(File.read(filename))
90
+ if File.exist?(filename) && !File.zero?(filename)
91
+ kontena_services = yml_services(File.read(filename))
84
92
  services.each do |name, options|
85
93
  if kontena_services[name]
86
94
  services[name].merge!(kontena_services[name])
87
95
  end
88
96
  end
89
97
  end
90
- super(services, filename)
98
+ kontena_services = {
99
+ 'version' => '2',
100
+ 'name' => service_prefix,
101
+ 'services' => services
102
+ }
103
+ super(kontena_services, filename)
91
104
  end
92
-
93
-
94
105
  end
95
- end
106
+ end
@@ -12,6 +12,7 @@ module Kontena::Cli::Registry
12
12
  option '--s3-region', 'S3_REGION', 'S3 region', default: 'eu-west-1'
13
13
  option '--s3-encrypt', :flag, 'Encrypt S3 objects', default: false
14
14
  option '--s3-secure', :flag, 'Use secure connection in S3', default: true
15
+ option '--s3-v4auth', :flag, 'Use v4auth on S3', default: false
15
16
  option '--azure-account-name', 'AZURE_ACCOUNT_NAME', 'Azure account name'
16
17
  option '--azure-container-name', 'AZURE_CONTAINER_NAME', 'Azure container name'
17
18
 
@@ -38,7 +39,8 @@ module Kontena::Cli::Registry
38
39
  "REGISTRY_STORAGE_S3_REGION=#{s3_region}",
39
40
  "REGISTRY_STORAGE_S3_BUCKET=#{s3_bucket}",
40
41
  "REGISTRY_STORAGE_S3_ENCRYPT=#{s3_encrypt?}",
41
- "REGISTRY_STORAGE_S3_SECURE=#{s3_secure?}"
42
+ "REGISTRY_STORAGE_S3_SECURE=#{s3_secure?}",
43
+ "REGISTRY_STORAGE_S3_V4AUTH=#{s3_v4auth?}"
42
44
  ]
43
45
  secrets = [
44
46
  {secret: 'REGISTRY_STORAGE_S3_ACCESSKEY', name: 'REGISTRY_STORAGE_S3_ACCESSKEY', type: 'env'},
@@ -6,24 +6,17 @@ module Kontena::Cli::Vpn
6
6
  include Kontena::Cli::GridOptions
7
7
 
8
8
  option '--node', 'NODE', 'Node name where VPN is deployed'
9
- option '--ip', 'IP', 'Node ip-address'
9
+ option '--ip', 'IP', 'Node ip-address to use in VPN service configuration'
10
10
 
11
11
  def execute
12
12
  require_api_url
13
13
  token = require_token
14
14
  preferred_node = node
15
-
15
+
16
16
  vpn = client(token).get("services/#{current_grid}/vpn") rescue nil
17
17
  abort('Vpn already exists') if vpn
18
18
 
19
- nodes = client(token).get("grids/#{current_grid}/nodes")
20
- if preferred_node.nil?
21
- node = nodes['nodes'].find{|n| n['connected']}
22
- abort('Cannot find any online nodes') if node.nil?
23
- else
24
- node = nodes['nodes'].find{|n| n['connected'] && n['name'] == preferred_node }
25
- abort('Node not found') if node.nil?
26
- end
19
+ node = find_node(token, preferred_node)
27
20
 
28
21
  vpn_ip = node_vpn_ip(node)
29
22
  data = {
@@ -50,16 +43,30 @@ module Kontena::Cli::Vpn
50
43
  puts "Use 'kontena vpn config' to fetch OpenVPN client config to your machine (it takes a while until config is ready)."
51
44
  end
52
45
 
46
+
47
+ def find_node(token, preferred_node = nil)
48
+ nodes = client(token).get("grids/#{current_grid}/nodes")
49
+
50
+ if preferred_node.nil?
51
+ node = nodes['nodes'].find{|n| n['connected'] && !n['public_ip'].to_s.empty?}
52
+ abort('Cannot find any online nodes with public ip. If you want to connect with private address, please use --node and/or --ip options.') if node.nil?
53
+ else
54
+ node = nodes['nodes'].find{|n| n['connected'] && n['name'] == preferred_node }
55
+ abort('Node not found') if node.nil?
56
+ end
57
+ node
58
+ end
59
+
53
60
  # @param [Hash] node
54
61
  # @return [String]
55
62
  def node_vpn_ip(node)
56
63
  return ip unless ip.nil?
57
-
64
+
58
65
  # vagrant
59
- if api_url == 'http://192.168.66.100:8080'
60
- node['private_ip']
66
+ if node['labels'] && node['labels'].include?('provider=vagrant')
67
+ node['private_ip'].to_s
61
68
  else
62
- node['public_ip']
69
+ node['public_ip'].to_s.empty? ? node['private_ip'].to_s : node['public_ip'].to_s
63
70
  end
64
71
  end
65
72
  end
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "Small Sharp Tool",
3
+ "description": "This app does one little thing, and does it well.",
4
+ "keywords": [
5
+ "productivity",
6
+ "HTML5",
7
+ "scalpel"
8
+ ],
9
+ "website": "https://small-sharp-tool.com/",
10
+ "repository": "https://github.com/jane-doe/small-sharp-tool",
11
+ "logo": "https://small-sharp-tool.com/logo.svg",
12
+ "success_url": "/welcome",
13
+ "scripts": {
14
+ "postdeploy": "bundle exec rake bootstrap"
15
+ },
16
+ "env": {
17
+ "SECRET_TOKEN": {
18
+ "description": "A secret key for verifying the integrity of signed cookies.",
19
+ "generator": "secret"
20
+ },
21
+ "WEB_CONCURRENCY": {
22
+ "description": "The number of processes to run.",
23
+ "value": "5"
24
+ }
25
+ },
26
+ "formation": {
27
+ "web": {
28
+ "quantity": 2,
29
+ "size": "Performance-M"
30
+ }
31
+ },
32
+ "image": "heroku/ruby",
33
+ "addons": [
34
+ "openredis",
35
+ "mongolab:shared-single-small"
36
+ ],
37
+ "buildpacks": [
38
+ {
39
+ "url": "https://github.com/stomita/heroku-buildpack-phantomjs"
40
+ }
41
+ ]
42
+ }
@@ -0,0 +1,110 @@
1
+ require_relative "../../../spec_helper"
2
+ require 'kontena/cli/apps/init_command'
3
+
4
+ describe Kontena::Cli::Apps::InitCommand do
5
+ include FixturesHelpers
6
+
7
+ let(:subject) do
8
+ described_class.new(File.basename($0))
9
+ end
10
+
11
+ let(:app_json) do
12
+ fixture('app.json')
13
+ end
14
+
15
+ before(:each) do
16
+ allow(File).to receive(:exist?).and_return false
17
+ allow(subject).to receive(:create_yml).and_return nil
18
+ allow(subject).to receive(:create_dockerfile?).and_return false
19
+ allow(subject).to receive(:create_env_file).and_return nil
20
+ allow(subject).to receive(:create_docker_compose_yml?).and_return false
21
+ allow(Kontena::Cli::Apps::KontenaYmlGenerator).to receive(:new).and_return spy
22
+ end
23
+
24
+ describe '#execute' do
25
+ it 'detects Dockerfile' do
26
+ expect(File).to receive(:exist?).with('Dockerfile').once.and_return true
27
+ subject.run([])
28
+ end
29
+
30
+ it 'reads Procfile' do
31
+ allow(File).to receive(:exist?).with('Procfile').once.and_return true
32
+ expect(File).to receive(:read).with('Procfile').once.and_return 'web: bundle exec rails s'
33
+ subject.run([])
34
+ end
35
+
36
+ it 'reads app.json file' do
37
+ allow(File).to receive(:exist?).with('app.json').once.and_return true
38
+ expect(File).to receive(:read).with('app.json').once.and_return '{}'
39
+ subject.run([])
40
+ end
41
+
42
+ it 'asks creation of docker-compose.yml' do
43
+ expect(subject).to receive(:create_docker_compose_yml?).and_return false
44
+ subject.run([])
45
+ end
46
+
47
+ it 'creates docker-compose.yml if accepted' do
48
+ allow(subject).to receive(:create_docker_compose_yml?).and_return true
49
+ generator = spy
50
+ generator_klass = Kontena::Cli::Apps::DockerComposeGenerator
51
+ expect(generator_klass).to receive(:new).with('docker-compose.yml').and_return(generator)
52
+ expect(generator).to receive(:generate).with({}, [], nil)
53
+ subject.run([])
54
+ end
55
+
56
+ it 'passes Procfile services to docker-compose.yml creation' do
57
+ allow(File).to receive(:exist?).with('Procfile').once.and_return true
58
+ allow(File).to receive(:read).with('Procfile').once.and_return 'web: bundle exec rails s'
59
+ allow(subject).to receive(:create_docker_compose_yml?).and_return true
60
+ generator = spy
61
+ generator_klass = Kontena::Cli::Apps::DockerComposeGenerator
62
+ expect(generator_klass).to receive(:new).with('docker-compose.yml').and_return(generator)
63
+ expect(generator).to receive(:generate).with({ 'web' => 'bundle exec rails s' }, [], nil)
64
+ subject.run([])
65
+ end
66
+
67
+ it 'passes app.json options to docker-compose.yml creation' do
68
+ expect(File).to receive(:exist?).with('app.json').and_return true
69
+ expect(File).to receive(:read).with('app.json').and_return app_json
70
+ allow(subject).to receive(:create_docker_compose_yml?).and_return true
71
+ generator = spy
72
+ generator_klass = Kontena::Cli::Apps::DockerComposeGenerator
73
+ expect(generator_klass).to receive(:new).with('docker-compose.yml').and_return(generator)
74
+ expect(generator).to receive(:generate).with({}, ["openredis","mongolab:shared-single-small"], nil)
75
+ subject.run([])
76
+ end
77
+
78
+ it 'creates .env file' do
79
+ allow(File).to receive(:exist?).with('app.json').and_return true
80
+ allow(File).to receive(:read).with('app.json').and_return app_json
81
+ allow(subject).to receive(:create_docker_compose_yml?).and_return true
82
+ generator = spy
83
+ generator_klass = Kontena::Cli::Apps::DockerComposeGenerator
84
+ allow(generator_klass).to receive(:new).with('docker-compose.yml').and_return(generator)
85
+ app_env = JSON.parse(app_json)['env']
86
+ expect(subject).to receive(:create_env_file).with(app_env).and_return nil
87
+ subject.run([])
88
+ end
89
+
90
+ it 'creates kontena.yml from docker-compose.yml' do
91
+ allow(File).to receive(:exist?).with('docker-compose.yml').and_return true
92
+ generator = spy
93
+ generator_klass = Kontena::Cli::Apps::KontenaYmlGenerator
94
+ expect(generator_klass).to receive(:new).with(nil, 'cli').and_return(generator)
95
+ expect(generator).to receive(:generate_from_compose_file).with('docker-compose.yml')
96
+ subject.run([])
97
+ end
98
+
99
+ context 'when docker-compose.yml not created' do
100
+ it 'creates dummy kontena.yml' do
101
+ allow(File).to receive(:exist?).with('docker-compose.yml').and_return false
102
+ generator = spy
103
+ generator_klass = Kontena::Cli::Apps::KontenaYmlGenerator
104
+ expect(generator_klass).to receive(:new).with(nil, 'cli').and_return(generator)
105
+ expect(generator).to receive(:generate).with({}, [], nil)
106
+ subject.run([])
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,116 @@
1
+ require_relative "../../../spec_helper"
2
+ require "kontena/cli/vpn/create_command"
3
+
4
+ describe Kontena::Cli::Vpn::CreateCommand do
5
+
6
+ include ClientHelpers
7
+
8
+ let(:subject) { described_class.new(File.basename($0)) }
9
+
10
+ describe '#execute' do
11
+ it 'should abort if vpn already exists' do
12
+ expect(client).to receive(:get).with("services/test-grid/vpn").and_return({vpn: true})
13
+
14
+ expect {
15
+ subject.execute
16
+ }.to raise_error SystemExit
17
+ end
18
+
19
+
20
+ end
21
+
22
+ describe '#find_node' do
23
+
24
+ it 'should abort if no online nodes exists' do
25
+ expect(client).to receive(:get).with("grids/test-grid/nodes").and_return(
26
+ {
27
+ 'nodes' => [
28
+ {'connected' => false},
29
+ {'connected' => false, 'public_ip' => '1.2.3.4'}
30
+ ]
31
+ })
32
+
33
+ expect {
34
+ subject.find_node(token, nil)
35
+ }.to raise_error SystemExit
36
+ end
37
+
38
+ it 'should return first online node with public ip' do
39
+ expect(client).to receive(:get).with("grids/test-grid/nodes").and_return(
40
+ {
41
+ 'nodes' => [
42
+ {'connected' => true},
43
+ {'connected' => true, 'public_ip' => '1.2.3.4'}
44
+ ]
45
+ })
46
+
47
+ node = subject.find_node(token, nil)
48
+ expect(node['public_ip']).to eq('1.2.3.4')
49
+ end
50
+
51
+ it 'should return preferred node' do
52
+ expect(client).to receive(:get).with("grids/test-grid/nodes").and_return(
53
+ {
54
+ 'nodes' => [
55
+ {'connected' => true},
56
+ {'name' => 'preferred', 'connected' => true, 'public_ip' => '1.2.3.4'}
57
+ ]
58
+ })
59
+
60
+ node = subject.find_node(token, 'preferred')
61
+ expect(node['name']).to eq('preferred')
62
+ end
63
+
64
+ it 'should abort if no online nodes exists' do
65
+ expect(client).to receive(:get).with("grids/test-grid/nodes").and_return(
66
+ {
67
+ 'nodes' => [
68
+ {'connected' => true},
69
+ {'name' => 'preferred', 'connected' => true, 'public_ip' => '1.2.3.4'}
70
+ ]
71
+ })
72
+
73
+ expect {
74
+ subject.find_node(token, 'foobar')
75
+ }.to raise_error SystemExit
76
+ end
77
+
78
+ end
79
+
80
+ describe '#node_vpn_ip' do
81
+
82
+ it 'return ip when set' do
83
+ allow(subject).to receive(:ip).and_return('1.2.3.4')
84
+
85
+ expect(subject.node_vpn_ip(nil)).to eq('1.2.3.4')
86
+ end
87
+
88
+ it 'return public ip when set on node' do
89
+ allow(subject).to receive(:ip).and_return(nil)
90
+ node = {
91
+ 'public_ip' => '8.8.8.8',
92
+ 'private_ip' => '10.1.1.2'
93
+ }
94
+ expect(subject.node_vpn_ip(node)).to eq('8.8.8.8')
95
+ end
96
+
97
+ it 'return private ip when public not set on node' do
98
+ allow(subject).to receive(:ip).and_return(nil)
99
+ node = {
100
+ 'private_ip' => '10.1.1.2'
101
+ }
102
+ expect(subject.node_vpn_ip(node)).to eq('10.1.1.2')
103
+ end
104
+
105
+ it 'return private on vagrant nodes' do
106
+ allow(subject).to receive(:ip).and_return(nil)
107
+ node = {
108
+ 'public_ip' => '8.8.8.8',
109
+ 'private_ip' => '10.1.1.2',
110
+ 'labels' => ['provider=vagrant']
111
+ }
112
+ expect(subject.node_vpn_ip(node)).to eq('10.1.1.2')
113
+ end
114
+
115
+ end
116
+ end
data/spec/spec_helper.rb CHANGED
@@ -7,6 +7,7 @@
7
7
 
8
8
  require 'clamp'
9
9
  require 'kontena/cli/common'
10
+ require 'kontena/cli/grid_options'
10
11
  require 'kontena/client'
11
12
 
12
13
  RSpec.configure do |config|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kontena-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.1
4
+ version: 0.14.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kontena, Inc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-03 00:00:00.000000000 Z
11
+ date: 2016-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -402,6 +402,7 @@ files:
402
402
  - lib/kontena/machine/vagrant/node_provisioner.rb
403
403
  - lib/kontena/scripts/completer
404
404
  - lib/kontena/scripts/init
405
+ - spec/fixtures/app.json
405
406
  - spec/fixtures/docker-compose.yml
406
407
  - spec/fixtures/docker-compose_v2.yml
407
408
  - spec/fixtures/kontena-invalid.yml
@@ -416,6 +417,7 @@ files:
416
417
  - spec/kontena/cli/app/config_command_spec.rb
417
418
  - spec/kontena/cli/app/deploy_command_spec.rb
418
419
  - spec/kontena/cli/app/docker_helper_spec.rb
420
+ - spec/kontena/cli/app/init_command_spec.rb
419
421
  - spec/kontena/cli/app/scale_spec.rb
420
422
  - spec/kontena/cli/app/service_generator_spec.rb
421
423
  - spec/kontena/cli/app/service_generator_v2_spec.rb
@@ -444,6 +446,7 @@ files:
444
446
  - spec/kontena/cli/services/unlink_command_spec.rb
445
447
  - spec/kontena/cli/services/update_command_spec.rb
446
448
  - spec/kontena/cli/version_command_spec.rb
449
+ - spec/kontena/cli/vpn/create_command_spec.rb
447
450
  - spec/spec_helper.rb
448
451
  - spec/support/client_helpers.rb
449
452
  - spec/support/fixtures_helpers.rb
@@ -473,6 +476,7 @@ signing_key:
473
476
  specification_version: 4
474
477
  summary: Kontena command line tool
475
478
  test_files:
479
+ - spec/fixtures/app.json
476
480
  - spec/fixtures/docker-compose.yml
477
481
  - spec/fixtures/docker-compose_v2.yml
478
482
  - spec/fixtures/kontena-invalid.yml
@@ -487,6 +491,7 @@ test_files:
487
491
  - spec/kontena/cli/app/config_command_spec.rb
488
492
  - spec/kontena/cli/app/deploy_command_spec.rb
489
493
  - spec/kontena/cli/app/docker_helper_spec.rb
494
+ - spec/kontena/cli/app/init_command_spec.rb
490
495
  - spec/kontena/cli/app/scale_spec.rb
491
496
  - spec/kontena/cli/app/service_generator_spec.rb
492
497
  - spec/kontena/cli/app/service_generator_v2_spec.rb
@@ -515,6 +520,7 @@ test_files:
515
520
  - spec/kontena/cli/services/unlink_command_spec.rb
516
521
  - spec/kontena/cli/services/update_command_spec.rb
517
522
  - spec/kontena/cli/version_command_spec.rb
523
+ - spec/kontena/cli/vpn/create_command_spec.rb
518
524
  - spec/spec_helper.rb
519
525
  - spec/support/client_helpers.rb
520
526
  - spec/support/fixtures_helpers.rb