kontena-cli 0.7.3 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/bin/kontena +64 -2
  4. data/kontena-cli.gemspec +4 -2
  5. data/lib/kontena/cli/app_command.rb +20 -0
  6. data/lib/kontena/cli/apps/common.rb +53 -0
  7. data/lib/kontena/cli/{stacks/stacks.rb → apps/deploy_command.rb} +17 -31
  8. data/lib/kontena/cli/apps/init_command.rb +101 -0
  9. data/lib/kontena/cli/apps/list_command.rb +41 -0
  10. data/lib/kontena/cli/apps/logs_command.rb +58 -0
  11. data/lib/kontena/cli/apps/remove_command.rb +64 -0
  12. data/lib/kontena/cli/apps/start_command.rb +38 -0
  13. data/lib/kontena/cli/apps/stop_command.rb +38 -0
  14. data/lib/kontena/cli/container_command.rb +9 -0
  15. data/lib/kontena/cli/containers/{containers.rb → exec_command.rb} +5 -5
  16. data/lib/kontena/cli/deploy_command.rb +159 -0
  17. data/lib/kontena/cli/external_registries/add_command.rb +22 -0
  18. data/lib/kontena/cli/external_registries/delete_command.rb +13 -0
  19. data/lib/kontena/cli/external_registries/list_command.rb +16 -0
  20. data/lib/kontena/cli/external_registry_command.rb +14 -0
  21. data/lib/kontena/cli/forgot_password_command.rb +13 -0
  22. data/lib/kontena/cli/grid_command.rb +27 -0
  23. data/lib/kontena/cli/grids/add_user_command.rb +17 -0
  24. data/lib/kontena/cli/grids/{audit_log.rb → audit_log_command.rb} +7 -6
  25. data/lib/kontena/cli/grids/common.rb +24 -0
  26. data/lib/kontena/cli/grids/create_command.rb +26 -0
  27. data/lib/kontena/cli/grids/current_command.rb +18 -0
  28. data/lib/kontena/cli/grids/list_command.rb +26 -0
  29. data/lib/kontena/cli/grids/list_users_command.rb +18 -0
  30. data/lib/kontena/cli/grids/remove_command.rb +26 -0
  31. data/lib/kontena/cli/grids/remove_user_command.rb +16 -0
  32. data/lib/kontena/cli/grids/show_command.rb +19 -0
  33. data/lib/kontena/cli/grids/use_command.rb +21 -0
  34. data/lib/kontena/cli/invite_command.rb +13 -0
  35. data/lib/kontena/cli/login_command.rb +114 -0
  36. data/lib/kontena/cli/logout_command.rb +8 -0
  37. data/lib/kontena/cli/node_command.rb +21 -0
  38. data/lib/kontena/cli/nodes/digital_ocean/create_command.rb +31 -0
  39. data/lib/kontena/cli/nodes/digital_ocean/restart_command.rb +26 -0
  40. data/lib/kontena/cli/nodes/digital_ocean/terminate_command.rb +18 -0
  41. data/lib/kontena/cli/nodes/digital_ocean_command.rb +15 -0
  42. data/lib/kontena/cli/nodes/list_command.rb +28 -0
  43. data/lib/kontena/cli/nodes/remove_command.rb +15 -0
  44. data/lib/kontena/cli/nodes/show_command.rb +31 -0
  45. data/lib/kontena/cli/nodes/update_command.rb +18 -0
  46. data/lib/kontena/cli/nodes/vagrant/create_command.rb +26 -0
  47. data/lib/kontena/cli/nodes/vagrant/restart_command.rb +25 -0
  48. data/lib/kontena/cli/nodes/vagrant/ssh_command.rb +20 -0
  49. data/lib/kontena/cli/nodes/vagrant/start_command.rb +25 -0
  50. data/lib/kontena/cli/nodes/vagrant/stop_command.rb +25 -0
  51. data/lib/kontena/cli/nodes/vagrant/terminate_command.rb +16 -0
  52. data/lib/kontena/cli/nodes/vagrant_command.rb +21 -0
  53. data/lib/kontena/cli/register_command.rb +21 -0
  54. data/lib/kontena/cli/{grids/registry.rb → registry/create_command.rb} +32 -35
  55. data/lib/kontena/cli/registry/delete_command.rb +15 -0
  56. data/lib/kontena/cli/registry_command.rb +11 -0
  57. data/lib/kontena/cli/reset_password_command.rb +17 -0
  58. data/lib/kontena/cli/service_command.rb +33 -0
  59. data/lib/kontena/cli/services/container_command.rb +9 -0
  60. data/lib/kontena/cli/services/containers_command.rb +31 -0
  61. data/lib/kontena/cli/services/create_command.rb +62 -0
  62. data/lib/kontena/cli/services/delete_command.rb +17 -0
  63. data/lib/kontena/cli/services/deploy_command.rb +23 -0
  64. data/lib/kontena/cli/services/list_command.rb +20 -0
  65. data/lib/kontena/cli/services/logs_command.rb +51 -0
  66. data/lib/kontena/cli/services/restart_command.rb +16 -0
  67. data/lib/kontena/cli/services/scale_command.rb +20 -0
  68. data/lib/kontena/cli/services/services_helper.rb +94 -0
  69. data/lib/kontena/cli/services/show_command.rb +17 -0
  70. data/lib/kontena/cli/services/start_command.rb +16 -0
  71. data/lib/kontena/cli/services/{stats.rb → stats_command.rb} +11 -10
  72. data/lib/kontena/cli/services/stop_command.rb +16 -0
  73. data/lib/kontena/cli/services/update_command.rb +51 -0
  74. data/lib/kontena/cli/verify_account_command.rb +13 -0
  75. data/lib/kontena/cli/version_command.rb +8 -0
  76. data/lib/kontena/cli/vpn/config_command.rb +12 -0
  77. data/lib/kontena/cli/{grids/vpn.rb → vpn/create_command.rb} +12 -29
  78. data/lib/kontena/cli/vpn/delete_command.rb +15 -0
  79. data/lib/kontena/cli/vpn_command.rb +13 -0
  80. data/lib/kontena/cli/whoami_command.rb +19 -0
  81. data/lib/kontena/client.rb +14 -11
  82. data/lib/kontena/machine/common.rb +17 -0
  83. data/lib/kontena/machine/digital_ocean.rb +11 -0
  84. data/lib/kontena/machine/digital_ocean/cloudinit.yml +66 -0
  85. data/lib/kontena/machine/digital_ocean/node_destroyer.rb +38 -0
  86. data/lib/kontena/machine/digital_ocean/node_provisioner.rb +74 -0
  87. data/lib/kontena/machine/random_name.rb +42 -0
  88. data/lib/kontena/machine/vagrant.rb +10 -0
  89. data/lib/kontena/machine/vagrant/Vagrantfile.coreos.rb.erb +32 -0
  90. data/lib/kontena/machine/vagrant/cloudinit.yml +65 -0
  91. data/lib/kontena/machine/vagrant/node_destroyer.rb +36 -0
  92. data/lib/kontena/machine/vagrant/node_provisioner.rb +68 -0
  93. data/lib/kontena/scripts/completer +5 -5
  94. data/spec/kontena/cli/app/deploy_command_spec.rb +227 -0
  95. data/spec/kontena/cli/deploy_command_spec.rb +213 -0
  96. data/spec/kontena/cli/login_command_spec.rb +22 -0
  97. data/spec/kontena/cli/register_command_spec.rb +57 -0
  98. data/spec/spec_helper.rb +5 -1
  99. metadata +132 -36
  100. data/lib/kontena/cli/commands.rb +0 -20
  101. data/lib/kontena/cli/containers/commands.rb +0 -12
  102. data/lib/kontena/cli/grids/commands.rb +0 -169
  103. data/lib/kontena/cli/grids/external_registries.rb +0 -40
  104. data/lib/kontena/cli/grids/grids.rb +0 -108
  105. data/lib/kontena/cli/grids/users.rb +0 -32
  106. data/lib/kontena/cli/nodes/commands.rb +0 -27
  107. data/lib/kontena/cli/nodes/nodes.rb +0 -64
  108. data/lib/kontena/cli/server/commands.rb +0 -69
  109. data/lib/kontena/cli/server/server.rb +0 -45
  110. data/lib/kontena/cli/server/user.rb +0 -174
  111. data/lib/kontena/cli/services/commands.rb +0 -138
  112. data/lib/kontena/cli/services/containers.rb +0 -24
  113. data/lib/kontena/cli/services/logs.rb +0 -44
  114. data/lib/kontena/cli/services/services.rb +0 -175
  115. data/lib/kontena/cli/stacks/commands.rb +0 -13
  116. data/spec/kontena/cli/server/user_spec.rb +0 -59
  117. data/spec/kontena/cli/stacks/stacks_spec.rb +0 -212
@@ -1,44 +0,0 @@
1
- require 'kontena/client'
2
- require_relative '../common'
3
-
4
- module Kontena::Cli::Services
5
- class Logs
6
- include Kontena::Cli::Common
7
-
8
- ##
9
- # @param [String] service_id
10
- def show(service_id, options)
11
- require_api_url
12
- token = require_token
13
- last_id = nil
14
- loop do
15
- query_params = last_id.nil? ? '' : "from=#{last_id}"
16
- result = client(token).get("services/#{current_grid}/#{service_id}/container_logs?#{query_params}")
17
- result['logs'].each do |log|
18
- color = color_for_container(log['name'])
19
- puts "#{log['name'][0..12].colorize(color)} | #{log['data']}"
20
- last_id = log['id']
21
- end
22
- break unless options.follow
23
- sleep(2)
24
- end
25
- end
26
-
27
- def color_for_container(container_id)
28
- color_maps[container_id] = colors.shift unless color_maps[container_id]
29
- color_maps[container_id].to_sym
30
- end
31
-
32
- def color_maps
33
- @color_maps ||= {}
34
- end
35
-
36
- def colors
37
- if(@colors.nil? || @colors.size == 0)
38
- @colors = [:green, :yellow, :magenta, :cyan, :red,
39
- :light_green, :light_yellow, :ligh_magenta, :light_cyan, :light_red]
40
- end
41
- @colors
42
- end
43
- end
44
- end
@@ -1,175 +0,0 @@
1
- require 'kontena/client'
2
- require_relative '../common'
3
- require_relative 'services_helper'
4
-
5
- module Kontena::Cli::Services
6
- class Services
7
- include Kontena::Cli::Common
8
- include Kontena::Cli::Services::ServicesHelper
9
-
10
- def list
11
- require_api_url
12
- token = require_token
13
-
14
- grids = client(token).get("grids/#{current_grid}/services")
15
- puts "%-30.30s %-40.40s %-10s %-8s" % ['NAME', 'IMAGE', 'INSTANCES', 'STATEFUL']
16
- grids['services'].each do |service|
17
- state = service['stateful'] ? 'yes' : 'no'
18
- puts "%-30.30s %-40.40s %-10.10s %-8s" % [service['name'], service['image'], service['container_count'], state]
19
- end
20
- end
21
-
22
- def show(service_id)
23
- require_api_url
24
- token = require_token
25
-
26
- service = get_service(token, service_id)
27
- puts "#{service['id']}:"
28
- puts " status: #{service['state'] }"
29
- puts " stateful: #{service['stateful'] == true ? 'yes' : 'no' }"
30
- puts " scaling: #{service['container_count'] }"
31
- puts " image: #{service['image']}"
32
- if service['cmd']
33
- puts " cmd: #{service['cmd'].join(' ')}"
34
- else
35
- puts " cmd: -"
36
- end
37
-
38
- puts " env: "
39
- if service['env']
40
- service['env'].each{|e| puts " - #{e}"}
41
- end
42
- puts " ports:"
43
- service['ports'].each do |p|
44
- puts " - #{p['node_port']}:#{p['container_port']}/#{p['protocol']}"
45
- end
46
- puts " links: "
47
- if service['links']
48
- service['links'].each do |l|
49
- puts " - #{l['alias']}"
50
- end
51
- end
52
- puts " containers:"
53
- result = client(token).get("services/#{parse_service_id(service_id)}/containers")
54
- result['containers'].each do |container|
55
- puts " #{container['name']}:"
56
- puts " rev: #{container['deploy_rev']}"
57
- puts " node: #{container['node']['name']}"
58
- puts " dns: #{container['name']}.kontena.local"
59
- puts " ip: #{container['network_settings']['ip_address']}"
60
- puts " public ip: #{container['node']['public_ip']}"
61
- if container['status'] == 'unknown'
62
- puts " status: #{container['status'].colorize(:yellow)}"
63
- else
64
- puts " status: #{container['status']}"
65
- end
66
- end
67
- end
68
-
69
- def scale(service_id, count, options)
70
- client(require_token).put("services/#{parse_service_id(service_id)}", {container_count: count})
71
- self.deploy(service_id, options)
72
- end
73
-
74
- def deploy(service_id, options)
75
- require_api_url
76
- token = require_token
77
- data = {}
78
- data[:strategy] = options.strategy if options.strategy
79
- data[:wait_for_port] = options.wait_for_port if options.wait_for_port
80
- deploy_service(token, service_id, data)
81
- self.show(service_id)
82
- end
83
-
84
-
85
- def restart(service_id)
86
- require_api_url
87
- token = require_token
88
- result = client(token).post("services/#{parse_service_id(service_id)}/restart", {})
89
- end
90
-
91
- def stop(service_id)
92
- require_api_url
93
- token = require_token
94
- result = client(token).post("services/#{parse_service_id(service_id)}/stop", {})
95
- end
96
-
97
- def start(service_id)
98
- require_api_url
99
- token = require_token
100
-
101
- result = client(token).post("services/#{parse_service_id(service_id)}/start", {})
102
- end
103
-
104
- def create(name, image, options)
105
- require_api_url
106
- token = require_token
107
- data = {
108
- name: name,
109
- image: image,
110
- stateful: !!options.stateful
111
- }
112
- data.merge!(parse_data_from_options(options))
113
- create_service(token, current_grid, data)
114
- end
115
-
116
-
117
- def update(service_id, options)
118
- require_api_url
119
- token = require_token
120
-
121
- data = parse_data_from_options(options)
122
- update_service(token, service_id, data)
123
- end
124
-
125
- def destroy(service_id)
126
- require_api_url
127
- token = require_token
128
-
129
- result = client(token).delete("services/#{parse_service_id(service_id)}")
130
- end
131
-
132
- private
133
-
134
- ##
135
- # parse given options to hash
136
- # @return [Hash]
137
- def parse_data_from_options(options)
138
- data = {}
139
- data[:ports] = parse_ports(options.ports) if options.ports
140
- data[:links] = parse_links(options.link) if options.link
141
- data[:volumes] = options.volume if options.volume
142
- data[:volumes_from] = options.volumes_from if options.volumes_from
143
- data[:memory] = parse_memory(options.memory) if options.memory
144
- data[:memory_swap] = parse_memory(options.memory_swap) if options.memory_swap
145
- data[:cpu_shares] = options.cpu_shares if options.cpu_shares
146
- data[:affinity] = options.affinity if options.affinity
147
- data[:env] = parse_env_options(options.env) if options.env
148
- data[:container_count] = options.instances if options.instances
149
- data[:cmd] = options.cmd.split(" ") if options.cmd
150
- data[:user] = options.user if options.user
151
- data[:image] = options.image if options.image
152
- data[:cap_add] = options.cap_add if options.cap_add
153
- data[:cap_drop] = options.cap_drop if options.cap_drop
154
- data
155
- end
156
-
157
- ##
158
- # @param [Array<String>] values
159
- # @return [Array<String>]
160
- def parse_env_options(values)
161
- copy = values.dup
162
- copy.each_index do |i|
163
- key, value = copy[i].split("=", 2)
164
- if value.nil?
165
- copy[i] = "#{values[i - 1]},#{values[i]}"
166
- elsif key != key.upcase
167
- copy[i - 1] = "#{values[i - 1]},#{values[i]}"
168
- copy.delete_at(i)
169
- end
170
- end
171
-
172
- copy
173
- end
174
- end
175
- end
@@ -1,13 +0,0 @@
1
- module Kontena::Cli::Stacks; end;
2
- require_relative 'stacks'
3
-
4
- command 'deploy' do |c|
5
- c.syntax = 'kontena deploy'
6
- c.description = 'Create and deploy multiple services from YAML file'
7
- c.option '-f', '--file String', 'path to kontena.yml file, default: current directory'
8
- c.option '-p', '--prefix String', 'prefix of service names, default: name of the current directory'
9
- c.option '-s', '--service Array', Array, 'Services to deploy'
10
- c.action do |args, options|
11
- Kontena::Cli::Stacks::Stacks.new.deploy(options)
12
- end
13
- end
@@ -1,59 +0,0 @@
1
- require_relative "../../../spec_helper"
2
- require "kontena/cli/server/user"
3
-
4
- module Kontena::Cli::Server
5
- describe User do
6
- describe '#register' do
7
-
8
- let(:auth_client) do
9
- double(Kontena::Client)
10
- end
11
-
12
- it 'asks email' do
13
- expect(subject).to receive(:ask).once.and_return('john.doe@acme.io')
14
- allow(subject).to receive(:password).and_return('secret')
15
- allow(Kontena::Client).to receive(:new).and_return(auth_client)
16
- allow(auth_client).to receive(:post)
17
- subject.register(nil, {})
18
- end
19
-
20
- it 'asks password twice' do
21
- allow(subject).to receive(:ask).once.and_return('john.doe@acme.io')
22
- expect(subject).to receive(:password).twice.and_return('secret')
23
- allow(Kontena::Client).to receive(:new).and_return(auth_client)
24
- allow(auth_client).to receive(:post)
25
- subject.register(nil, {})
26
- end
27
-
28
- it 'validates given passwords' do
29
- allow(subject).to receive(:ask).once.and_return('john.doe@acme.io')
30
- expect(subject).to receive(:password).twice.and_return('secret', 'secret2')
31
- expect{subject.register(nil, {})}.to raise_error(ArgumentError)
32
- end
33
-
34
- it 'uses https://auth.kontena.io as default auth provider' do
35
- allow(subject).to receive(:ask).and_return('john.doe@acme.io')
36
- allow(subject).to receive(:password).and_return('secret')
37
- expect(Kontena::Client).to receive(:new).with('https://auth.kontena.io').and_return(auth_client)
38
- allow(auth_client).to receive(:post)
39
- subject.register(nil, {})
40
- end
41
-
42
- it 'uses given auth provider' do
43
- allow(subject).to receive(:ask).and_return('john.doe@acme.io')
44
- allow(subject).to receive(:password).and_return('secret')
45
- expect(Kontena::Client).to receive(:new).with('http://custom.auth-provider.io').and_return(auth_client)
46
- allow(auth_client).to receive(:post)
47
- subject.register('http://custom.auth-provider.io', {})
48
- end
49
-
50
- it 'sends register request to auth provider' do
51
- allow(subject).to receive(:ask).and_return('john.doe@acme.io')
52
- allow(subject).to receive(:password).and_return('secret')
53
- allow(Kontena::Client).to receive(:new).with('https://auth.kontena.io').and_return(auth_client)
54
- expect(auth_client).to receive(:post).with('users', {email: 'john.doe@acme.io', password: 'secret'})
55
- subject.register(nil, {})
56
- end
57
- end
58
- end
59
- end
@@ -1,212 +0,0 @@
1
- require_relative "../../../spec_helper"
2
- require "kontena/cli/stacks/stacks"
3
-
4
- module Kontena::Cli::Stacks
5
- describe Stacks do
6
- let(:settings) do
7
- {'server' => {'url' => 'http://kontena.test', 'token' => token}}
8
- end
9
-
10
- let(:token) do
11
- '1234567'
12
- end
13
-
14
- let(:yml) do
15
- content = <<content
16
- wordpress:
17
- image: wordpress:4.1
18
- stateful: true
19
- ports:
20
- - 80:80
21
- links:
22
- - mysql:mysql
23
- environment:
24
- - WORDPRESS_DB_PASSWORD=%{prefix}_secret
25
- instances: 2
26
- deploy:
27
- strategy: ha
28
- mysql:
29
- image: mysql:5.6
30
- stateful: true
31
- environment:
32
- - MYSQL_ROOT_PASSWORD=%{prefix}_secret
33
- content
34
- content
35
- end
36
-
37
- let(:services) do
38
- {
39
- 'wordpress' => {
40
- 'image' => 'wordpress:latest',
41
- 'links' => ['mysql:db'],
42
- 'ports' => ['80:80'],
43
- 'instances' => 2,
44
- 'deploy' => {
45
- 'strategy' => 'ha'
46
- }
47
- },
48
- 'mysql' => {
49
- 'image' => 'mysql:5.6',
50
- 'stateful' => true
51
- }
52
- }
53
- end
54
-
55
- let(:client) do
56
- double
57
- end
58
-
59
- let(:options) do
60
- options = double({prefix: false, file: false, service: nil})
61
- end
62
-
63
- let(:env_vars) do
64
- ["#comment line", "TEST_ENV_VAR=test", "MYSQL_ADMIN_PASSWORD=abcdef"]
65
- end
66
-
67
- let(:dot_env) do
68
- ["TEST_ENV_VAR=test2","", "TEST_ENV_VAR2=test3"]
69
- end
70
-
71
- describe '#deploy' do
72
- context 'when api_url is nil' do
73
- it 'raises error' do
74
- allow(subject).to receive(:settings).and_return({'server' => {}})
75
- expect{subject.deploy({})}.to raise_error(ArgumentError)
76
- end
77
- end
78
-
79
- context 'when token is nil' do
80
- it 'raises error' do
81
- allow(subject).to receive(:settings).and_return({'server' => {'url' => 'http://kontena.test'}})
82
- expect{subject.deploy({})}.to raise_error(ArgumentError)
83
- end
84
- end
85
-
86
- context 'when api url and token are valid' do
87
- before(:each) do
88
- allow(subject).to receive(:settings).and_return(settings)
89
- allow(File).to receive(:read).and_return(yml)
90
- allow(subject).to receive(:get_service).and_raise(Kontena::Errors::StandardError.new(404, 'Not Found'))
91
- allow(subject).to receive(:create_service).and_return({'id' => 'kontena-test-mysql'},{'id' => 'kontena-test-wordpress'})
92
- allow(subject).to receive(:current_grid).and_return('1')
93
- allow(subject).to receive(:deploy_service).and_return(nil)
94
- end
95
-
96
- it 'reads ./kontena.yml file by default' do
97
- allow(subject).to receive(:settings).and_return(settings)
98
- expect(File).to receive(:read).with('./kontena.yml').and_return(yml)
99
- expect(options).to receive(:file).once.and_return(false)
100
- subject.deploy(options)
101
- end
102
-
103
- it 'reads given yml file' do
104
- expect(options).to receive(:file).once.and_return('custom.yml')
105
- expect(File).to receive(:read).with('custom.yml').and_return(yml)
106
- subject.deploy(options)
107
- end
108
-
109
- it 'uses current directory as service name prefix by default' do
110
- current_dir = '/kontena/tests/stacks'
111
- allow(Dir).to receive(:getwd).and_return(current_dir)
112
- expect(File).to receive(:basename).with(current_dir).and_return('stacks')
113
- subject.deploy(options)
114
- end
115
-
116
- context 'when yml file has multiple env files' do
117
- it 'merges environment variables correctly' do
118
- allow(subject).to receive(:current_dir).and_return("kontena-test")
119
- allow(YAML).to receive(:load).and_return(services)
120
- services['wordpress']['environment'] = ['MYSQL_ADMIN_PASSWORD=password']
121
- services['wordpress']['env_file'] = %w(/path/to/env_file .env)
122
-
123
- expect(File).to receive(:readlines).with('/path/to/env_file').and_return(env_vars)
124
- expect(File).to receive(:readlines).with('.env').and_return(dot_env)
125
-
126
- data = {
127
- :name =>"kontena-test-wordpress",
128
- :image=>"wordpress:latest",
129
- :env=>["MYSQL_ADMIN_PASSWORD=password", "TEST_ENV_VAR=test", "TEST_ENV_VAR2=test3"],
130
- :container_count=>2,
131
- :stateful=>false,
132
- :links=>[{:name=>"kontena-test-mysql", :alias=>"db"}],
133
- :ports=>[{:container_port=>"80", :node_port=>"80", :protocol=>"tcp"}]
134
- }
135
-
136
- expect(subject).to receive(:create_service).with('1234567', '1', data)
137
- subject.deploy(options)
138
- end
139
- end
140
-
141
- context 'when yml file has one env file' do
142
- it 'merges environment variables correctly' do
143
- allow(subject).to receive(:current_dir).and_return("kontena-test")
144
- allow(YAML).to receive(:load).and_return(services)
145
- services['wordpress']['environment'] = ['MYSQL_ADMIN_PASSWORD=password']
146
- services['wordpress']['env_file'] = '/path/to/env_file'
147
-
148
- expect(File).to receive(:readlines).with('/path/to/env_file').and_return(env_vars)
149
-
150
- data = {
151
- :name =>"kontena-test-wordpress",
152
- :image=>"wordpress:latest",
153
- :env=>["MYSQL_ADMIN_PASSWORD=password", "TEST_ENV_VAR=test"],
154
- :container_count=>2,
155
- :stateful=>false,
156
- :links=>[{:name=>"kontena-test-mysql", :alias=>"db"}],
157
- :ports=>[{:container_port=>"80", :node_port=>"80", :protocol=>"tcp"}]
158
- }
159
-
160
- expect(subject).to receive(:create_service).with('1234567', '1', data)
161
- subject.deploy(options)
162
- end
163
- end
164
-
165
- it 'creates mysql service before wordpress' do
166
- allow(subject).to receive(:current_dir).and_return("kontena-test")
167
- data = {:name =>"kontena-test-mysql", :image=>'mysql:5.6', :env=>["MYSQL_ROOT_PASSWORD=kontena-test_secret"], :container_count=>nil, :stateful=>true}
168
- expect(subject).to receive(:create_service).with('1234567', '1', data)
169
-
170
- subject.deploy(options)
171
- end
172
-
173
- it 'creates wordpress service' do
174
- allow(subject).to receive(:current_dir).and_return("kontena-test")
175
-
176
- data = {
177
- :name =>"kontena-test-wordpress",
178
- :image=>"wordpress:4.1",
179
- :env=>["WORDPRESS_DB_PASSWORD=kontena-test_secret"],
180
- :container_count=>2,
181
- :stateful=>true,
182
- :links=>[{:name=>"kontena-test-mysql", :alias=>"mysql"}],
183
- :ports=>[{:container_port=>"80", :node_port=>"80", :protocol=>"tcp"}]
184
- }
185
- expect(subject).to receive(:create_service).with('1234567', '1', data)
186
-
187
- subject.deploy(options)
188
- end
189
-
190
- it 'deploys services' do
191
- allow(subject).to receive(:current_dir).and_return("kontena-test")
192
- expect(subject).to receive(:deploy_service).with('1234567', 'kontena-test-mysql', {})
193
- expect(subject).to receive(:deploy_service).with('1234567', 'kontena-test-wordpress', {:strategy => 'ha'})
194
- subject.deploy(options)
195
- end
196
-
197
- context 'when giving service option' do
198
- it 'deploys only given services' do
199
- allow(subject).to receive(:current_dir).and_return("kontena-test")
200
- allow(options).to receive(:service).and_return(['wordpress'])
201
- allow(subject).to receive(:deploy_services).and_return({})
202
- expect(subject).to receive(:create).once.with('wordpress', anything).and_return({})
203
- expect(subject).not_to receive(:create).with('mysql', services['mysql'])
204
-
205
- subject.deploy(options)
206
- end
207
- end
208
- end
209
-
210
- end
211
- end
212
- end