vagrant-service-manager 1.0.2 → 1.1.0.beta.1
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 +4 -4
- data/.config/cucumber.yml +12 -0
- data/.gitignore +14 -1
- data/CHANGELOG.md +10 -1
- data/CONTRIBUTING.adoc +110 -0
- data/Gemfile +9 -4
- data/README.adoc +269 -0
- data/Rakefile +112 -1
- data/features/box-command.feature +45 -0
- data/features/debug-flag.feature +30 -0
- data/features/env-command.feature +51 -0
- data/features/help-command.feature +86 -0
- data/features/openshift.feature +51 -0
- data/features/service-operation.feature +40 -0
- data/features/status-command.feature +31 -0
- data/features/support/env.rb +138 -0
- data/lib/vagrant-service-manager/action/setup_network.rb +1 -1
- data/lib/vagrant-service-manager/command.rb +29 -18
- data/lib/vagrant-service-manager/config.rb +1 -1
- data/lib/vagrant-service-manager/plugin.rb +1 -1
- data/lib/vagrant-service-manager/plugin_logger.rb +32 -0
- data/lib/vagrant-service-manager/plugin_util.rb +15 -12
- data/lib/vagrant-service-manager/service.rb +3 -1
- data/lib/vagrant-service-manager/services/docker.rb +4 -1
- data/lib/vagrant-service-manager/services/kubernetes.rb +1 -1
- data/lib/vagrant-service-manager/services/open_shift.rb +4 -2
- data/lib/vagrant-service-manager/version.rb +2 -2
- data/lib/vagrant-service-manager.rb +1 -1
- data/locales/en.yml +19 -13
- data/plugins/guests/redhat/cap/box_version.rb +4 -2
- data/plugins/guests/redhat/cap/machine_ip.rb +3 -0
- data/plugins/guests/redhat/plugin.rb +1 -0
- data/vagrant-service-manager.gemspec +1 -1
- metadata +16 -6
- data/CONTRIBUTING.md +0 -77
- data/README.md +0 -120
@@ -0,0 +1,51 @@
|
|
1
|
+
Feature: Command output from env command
|
2
|
+
service-manager should return the correct output from env commands
|
3
|
+
|
4
|
+
@env
|
5
|
+
Scenario Outline: Boot and execute env commands
|
6
|
+
Given box is <box>
|
7
|
+
And provider is <provider>
|
8
|
+
And a file named "Vagrantfile" with:
|
9
|
+
"""
|
10
|
+
require 'vagrant-libvirt'
|
11
|
+
|
12
|
+
Vagrant.configure('2') do |config|
|
13
|
+
config.vm.box = '<box>'
|
14
|
+
config.vm.box_url = 'file://../boxes/<box>-<provider>.box'
|
15
|
+
config.vm.network :private_network, ip: '<ip>'
|
16
|
+
config.vm.synced_folder '.', '/vagrant', disabled: true
|
17
|
+
config.servicemanager.services = 'docker'
|
18
|
+
end
|
19
|
+
"""
|
20
|
+
|
21
|
+
When I successfully run `bundle exec vagrant up --provider <provider>`
|
22
|
+
And I successfully run `bundle exec vagrant service-manager env`
|
23
|
+
Then stdout from "bundle exec vagrant service-manager env" should be evaluable in a shell
|
24
|
+
|
25
|
+
When I successfully run `bundle exec vagrant service-manager env --script-readable`
|
26
|
+
Then stdout from "bundle exec vagrant service-manager env --script-readable" should be script readable
|
27
|
+
|
28
|
+
When I successfully run `bundle exec vagrant service-manager env docker`
|
29
|
+
Then stdout from "bundle exec vagrant service-manager env docker" should be evaluable in a shell
|
30
|
+
And stdout from "bundle exec vagrant service-manager env docker" should contain "export DOCKER_HOST=tcp://<ip>:2376"
|
31
|
+
And stdout from "bundle exec vagrant service-manager env docker" should match /export DOCKER_CERT_PATH=.*\/.vagrant\/machines\/cdk\/virtualbox\/docker/
|
32
|
+
And stdout from "bundle exec vagrant service-manager env docker" should contain "export DOCKER_TLS_VERIFY=1"
|
33
|
+
And stdout from "bundle exec vagrant service-manager env docker" should contain "export DOCKER_API_VERSION=1.21"
|
34
|
+
And stdout from "bundle exec vagrant service-manager env docker" should match /# eval "\$\(vagrant service-manager env docker\)"/
|
35
|
+
|
36
|
+
When I successfully run `bundle exec vagrant service-manager env docker --script-readable`
|
37
|
+
Then stdout from "bundle exec vagrant service-manager env docker --script-readable" should be script readable
|
38
|
+
|
39
|
+
When I run `bundle exec vagrant service-manager env openshift`
|
40
|
+
Then the exit status should be 126
|
41
|
+
And stderr from "bundle exec vagrant service-manager env openshift" should contain:
|
42
|
+
"""
|
43
|
+
# OpenShift service is not running in the vagrant box.
|
44
|
+
"""
|
45
|
+
|
46
|
+
Examples:
|
47
|
+
| box | provider | ip |
|
48
|
+
| cdk | virtualbox | 10.10.10.42 |
|
49
|
+
| adb | virtualbox | 10.10.10.42 |
|
50
|
+
| cdk | libvirt | 10.10.10.42 |
|
51
|
+
| adb | libvirt | 10.10.10.42 |
|
@@ -0,0 +1,86 @@
|
|
1
|
+
Feature: Command output from help command
|
2
|
+
service-manager should return the correct output from its help commands
|
3
|
+
|
4
|
+
@help
|
5
|
+
Scenario Outline: Boot and execute help commands
|
6
|
+
Given box is <box>
|
7
|
+
And provider is <provider>
|
8
|
+
And a file named "Vagrantfile" with:
|
9
|
+
"""
|
10
|
+
require 'vagrant-libvirt'
|
11
|
+
|
12
|
+
Vagrant.configure('2') do |config|
|
13
|
+
config.vm.box = '<box>'
|
14
|
+
config.vm.box_url = 'file://../boxes/<box>-<provider>.box'
|
15
|
+
config.vm.network :private_network, ip: '<ip>'
|
16
|
+
config.vm.synced_folder '.', '/vagrant', disabled: true
|
17
|
+
config.servicemanager.services = 'docker'
|
18
|
+
end
|
19
|
+
"""
|
20
|
+
|
21
|
+
When I successfully run `bundle exec vagrant up --provider <provider>`
|
22
|
+
And I successfully run `bundle exec vagrant service-manager --help`
|
23
|
+
Then stdout from "bundle exec vagrant service-manager --help" should contain:
|
24
|
+
"""
|
25
|
+
Usage: vagrant service-manager <command> [options]
|
26
|
+
|
27
|
+
Commands:
|
28
|
+
env displays connection information for services in the box
|
29
|
+
box displays box related information like version, release, IP etc
|
30
|
+
restart restarts the given service in the box
|
31
|
+
start starts the given service in the box
|
32
|
+
stop stops the given service in the box
|
33
|
+
status list services and their running state
|
34
|
+
|
35
|
+
Options:
|
36
|
+
-h, --help print this help
|
37
|
+
|
38
|
+
For help on any individual command run `vagrant service-manager COMMAND -h`
|
39
|
+
"""
|
40
|
+
|
41
|
+
When I successfully run `bundle exec vagrant service-manager -h`
|
42
|
+
Then stdout from "bundle exec vagrant service-manager -h" should contain:
|
43
|
+
"""
|
44
|
+
Usage: vagrant service-manager <command> [options]
|
45
|
+
|
46
|
+
Commands:
|
47
|
+
env displays connection information for services in the box
|
48
|
+
box displays box related information like version, release, IP etc
|
49
|
+
restart restarts the given service in the box
|
50
|
+
start starts the given service in the box
|
51
|
+
stop stops the given service in the box
|
52
|
+
status list services and their running state
|
53
|
+
|
54
|
+
Options:
|
55
|
+
-h, --help print this help
|
56
|
+
|
57
|
+
For help on any individual command run `vagrant service-manager COMMAND -h`
|
58
|
+
"""
|
59
|
+
|
60
|
+
When I run `bundle exec vagrant service-manager`
|
61
|
+
Then the exit status should be 1
|
62
|
+
And stdout from "bundle exec vagrant service-manager -h" should contain:
|
63
|
+
"""
|
64
|
+
Usage: vagrant service-manager <command> [options]
|
65
|
+
|
66
|
+
Commands:
|
67
|
+
env displays connection information for services in the box
|
68
|
+
box displays box related information like version, release, IP etc
|
69
|
+
restart restarts the given service in the box
|
70
|
+
start starts the given service in the box
|
71
|
+
stop stops the given service in the box
|
72
|
+
status list services and their running state
|
73
|
+
|
74
|
+
Options:
|
75
|
+
-h, --help print this help
|
76
|
+
|
77
|
+
For help on any individual command run `vagrant service-manager COMMAND -h`
|
78
|
+
"""
|
79
|
+
|
80
|
+
Examples:
|
81
|
+
| box | provider | ip |
|
82
|
+
| cdk | virtualbox | 10.10.10.42 |
|
83
|
+
| adb | virtualbox | 10.10.10.42 |
|
84
|
+
| cdk | libvirt | 10.10.10.42 |
|
85
|
+
| adb | libvirt | 10.10.10.42 |
|
86
|
+
|
@@ -0,0 +1,51 @@
|
|
1
|
+
Feature: Command output from various OpenShift related commands
|
2
|
+
service-manager should return the correct output from commands affecting OpenShift
|
3
|
+
|
4
|
+
@openshift
|
5
|
+
Scenario Outline: Boot and execute commands
|
6
|
+
Given box is <box>
|
7
|
+
And provider is <provider>
|
8
|
+
And a file named "Vagrantfile" with:
|
9
|
+
"""
|
10
|
+
require 'vagrant-libvirt'
|
11
|
+
|
12
|
+
Vagrant.configure('2') do |config|
|
13
|
+
config.vm.box = '<box>'
|
14
|
+
config.vm.box_url = 'file://../boxes/<box>-<provider>.box'
|
15
|
+
config.vm.network :private_network, ip: '<ip>'
|
16
|
+
config.vm.synced_folder '.', '/vagrant', disabled: true
|
17
|
+
config.servicemanager.services = 'docker'
|
18
|
+
config.vm.provision "shell", inline: <<-SHELL
|
19
|
+
systemctl enable openshift 2>&1
|
20
|
+
systemctl start openshift | true
|
21
|
+
SHELL
|
22
|
+
end
|
23
|
+
"""
|
24
|
+
|
25
|
+
When I successfully run `bundle exec vagrant up --provider <provider>`
|
26
|
+
# TODO, for some reason I can not use 'successfully' here. Seems the exit code is not 0 in this case!?
|
27
|
+
And I run `bundle exec vagrant service-manager env openshift`
|
28
|
+
Then stdout from "bundle exec vagrant service-manager env openshift" should be evaluable in a shell
|
29
|
+
And stdout from "bundle exec vagrant service-manager env openshift" should contain:
|
30
|
+
"""
|
31
|
+
# You can access the OpenShift console on: https://<ip>:8443/console
|
32
|
+
# To use OpenShift CLI, run: oc login https://<ip>:8443
|
33
|
+
export OPENSHIFT_URL=https://<ip>:8443
|
34
|
+
export OPENSHIFT_WEB_CONSOLE=https://<ip>:8443/console
|
35
|
+
|
36
|
+
# run following command to configure your shell:
|
37
|
+
# eval "$(vagrant service-manager env openshift)"
|
38
|
+
"""
|
39
|
+
|
40
|
+
When I successfully run `bundle exec vagrant service-manager env openshift --script-readable`
|
41
|
+
Then stdout from "bundle exec vagrant service-manager env openshift --script-readable" should be script readable
|
42
|
+
And stdout from "bundle exec vagrant service-manager env openshift --script-readable" should contain:
|
43
|
+
"""
|
44
|
+
OPENSHIFT_URL=https://<ip>:8443
|
45
|
+
OPENSHIFT_WEB_CONSOLE=https://<ip>:8443/console
|
46
|
+
"""
|
47
|
+
|
48
|
+
Examples:
|
49
|
+
| box | provider | ip |
|
50
|
+
| cdk | virtualbox | 10.10.10.42 |
|
51
|
+
| cdk | libvirt | 10.10.10.42 |
|
@@ -0,0 +1,40 @@
|
|
1
|
+
Feature: Command output from service operations like stop/start/restart
|
2
|
+
service-manager should return the correct exit code from stop/start/restart command
|
3
|
+
|
4
|
+
@operation
|
5
|
+
Scenario Outline: Boot and execute service operations like stop/start/restart
|
6
|
+
Given box is <box>
|
7
|
+
And provider is <provider>
|
8
|
+
And a file named "Vagrantfile" with:
|
9
|
+
"""
|
10
|
+
require 'vagrant-libvirt'
|
11
|
+
|
12
|
+
Vagrant.configure('2') do |config|
|
13
|
+
config.vm.box = '<box>'
|
14
|
+
config.vm.box_url = 'file://../boxes/<box>-<provider>.box'
|
15
|
+
config.vm.network :private_network, ip: '<ip>'
|
16
|
+
config.vm.synced_folder '.', '/vagrant', disabled: true
|
17
|
+
config.servicemanager.services = 'docker'
|
18
|
+
end
|
19
|
+
"""
|
20
|
+
|
21
|
+
When I successfully run `bundle exec vagrant up --provider <provider>`
|
22
|
+
And the "docker" service is running
|
23
|
+
And I successfully run `bundle exec vagrant service-manager stop docker`
|
24
|
+
Then the service "docker" should be stopped
|
25
|
+
|
26
|
+
When the "docker" service is not running
|
27
|
+
And I successfully run `bundle exec vagrant service-manager start docker`
|
28
|
+
Then the service "docker" should be running
|
29
|
+
|
30
|
+
When the "docker" service is running
|
31
|
+
And I successfully run `bundle exec vagrant service-manager restart docker`
|
32
|
+
Then the service "docker" should be running
|
33
|
+
And have a new pid for "docker" service
|
34
|
+
|
35
|
+
Examples:
|
36
|
+
| box | provider | ip |
|
37
|
+
| cdk | virtualbox | 10.10.10.42 |
|
38
|
+
| adb | virtualbox | 10.10.10.42 |
|
39
|
+
| cdk | libvirt | 10.10.10.42 |
|
40
|
+
| adb | libvirt | 10.10.10.42 |
|
@@ -0,0 +1,31 @@
|
|
1
|
+
Feature: Command output from status command
|
2
|
+
service-manager should return the correct output from status command
|
3
|
+
|
4
|
+
@status
|
5
|
+
Scenario Outline: Boot and execute status command
|
6
|
+
Given box is <box>
|
7
|
+
And provider is <provider>
|
8
|
+
And a file named "Vagrantfile" with:
|
9
|
+
"""
|
10
|
+
require 'vagrant-libvirt'
|
11
|
+
|
12
|
+
Vagrant.configure('2') do |config|
|
13
|
+
config.vm.box = '<box>'
|
14
|
+
config.vm.box_url = 'file://../boxes/<box>-<provider>.box'
|
15
|
+
config.vm.network :private_network, ip: '<ip>'
|
16
|
+
config.vm.synced_folder '.', '/vagrant', disabled: true
|
17
|
+
config.servicemanager.services = 'docker'
|
18
|
+
end
|
19
|
+
"""
|
20
|
+
|
21
|
+
When I successfully run `bundle exec vagrant up --provider <provider>`
|
22
|
+
And I successfully run `bundle exec vagrant service-manager status`
|
23
|
+
Then stdout from "bundle exec vagrant service-manager status" should contain "docker - running"
|
24
|
+
Then stdout from "bundle exec vagrant service-manager status" should contain "openshift - stopped"
|
25
|
+
|
26
|
+
Examples:
|
27
|
+
| box | provider | ip |
|
28
|
+
| cdk | virtualbox | 10.10.10.42 |
|
29
|
+
| adb | virtualbox | 10.10.10.42 |
|
30
|
+
| cdk | libvirt | 10.10.10.42 |
|
31
|
+
| adb | libvirt | 10.10.10.42 |
|
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'aruba/cucumber'
|
2
|
+
require 'komenda'
|
3
|
+
|
4
|
+
###############################################################################
|
5
|
+
# Aruba config and Cucumber hooks
|
6
|
+
###############################################################################
|
7
|
+
|
8
|
+
Aruba.configure do |config|
|
9
|
+
config.exit_timeout = 300
|
10
|
+
config.activate_announcer_on_command_failure = [:stdout, :stderr]
|
11
|
+
config.working_directory = 'build/aruba'
|
12
|
+
end
|
13
|
+
|
14
|
+
After do |_scenario|
|
15
|
+
if File.exist?(File.join(aruba.config.working_directory, 'Vagrantfile'))
|
16
|
+
Komenda.run('bundle exec vagrant destroy -f', cwd: aruba.config.working_directory, fail_on_fail: true)
|
17
|
+
if ENV.has_key?('CUCUMBER_RUN_PROVIDER')
|
18
|
+
# if we have more than one provider we need to wait between scenarios in order to allow for proper cleanup/shutdown
|
19
|
+
# of virtualization framework
|
20
|
+
sleep 10
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
Before do |scenario|
|
26
|
+
@scenario_name = scenario.name
|
27
|
+
end
|
28
|
+
|
29
|
+
###############################################################################
|
30
|
+
# Some helper functions
|
31
|
+
###############################################################################
|
32
|
+
# When running Vagrant from within a plugin development environment, Vagrant
|
33
|
+
# prints a warning which we can ignore
|
34
|
+
def stdout_without_plugin_context(raw_stdout)
|
35
|
+
raw_stdout.lines.to_a[6..-1].join
|
36
|
+
end
|
37
|
+
|
38
|
+
def output_is_evaluable(raw_stdout)
|
39
|
+
console_out = stdout_without_plugin_context(raw_stdout)
|
40
|
+
console_out.each_line do |line|
|
41
|
+
expect(line).to match(/^#.*|^export [a-zA-Z_]+=.*|^\n/)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def output_is_script_readable(raw_stdout)
|
46
|
+
console_out = stdout_without_plugin_context(raw_stdout)
|
47
|
+
console_out.each_line do |line|
|
48
|
+
expect(line).to match(/^[a-zA-Z_]+=.*$/)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def extract_process_id(data)
|
53
|
+
tokens = data.scan(/Main PID: ([0-9]+) \(/)
|
54
|
+
tokens.last.first.to_i unless tokens.empty?
|
55
|
+
end
|
56
|
+
|
57
|
+
###############################################################################
|
58
|
+
# Some shared step definitions
|
59
|
+
##############################################################################
|
60
|
+
Given /provider is (.*)/ do |current_provider|
|
61
|
+
requested_provider = ENV.has_key?('PROVIDER') ? ENV['PROVIDER']: 'virtualbox'
|
62
|
+
|
63
|
+
unless requested_provider.include?(current_provider)
|
64
|
+
#puts "Skipping scenario '#{@scenario_name}' for provider '#{current_provider}', since this provider is not explicitly enabled via environment variable 'PROVIDER'"
|
65
|
+
skip_this_scenario
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
Given /box is (.*)/ do |current_box|
|
70
|
+
requested_box = ENV.has_key?('BOX') ? ENV['BOX']: 'adb'
|
71
|
+
|
72
|
+
unless requested_box.include?(current_box)
|
73
|
+
#puts "Skipping scenario '#{@scenario_name}' for box '#{current_box}', since this box is not explicitly enabled via environment variable 'BOX'"
|
74
|
+
skip_this_scenario
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
Then(/^stdout from "([^"]*)" should be evaluable in a shell$/) do |cmd|
|
79
|
+
output_is_evaluable(aruba.command_monitor.find(Aruba.platform.detect_ruby(cmd)).send(:stdout))
|
80
|
+
end
|
81
|
+
|
82
|
+
Then(/^stdout from "([^"]*)" should be script readable$/) do |cmd|
|
83
|
+
output_is_script_readable(aruba.command_monitor.find(Aruba.platform.detect_ruby(cmd)).send(:stdout))
|
84
|
+
end
|
85
|
+
|
86
|
+
Then(/^stdout from "([^"]*)" should match \/(.*)\/$/) do |cmd, regexp|
|
87
|
+
aruba.command_monitor.find(Aruba.platform.detect_ruby(cmd)).send(:stdout) =~ /#{regexp}/
|
88
|
+
end
|
89
|
+
|
90
|
+
# track service process ID
|
91
|
+
@service_current_process_id = -1
|
92
|
+
|
93
|
+
# Note: Only for services supported through systemctl. Not for 'kubernetes'.
|
94
|
+
Then(/^the service "([^"]*)" should be ([^"]*)$/) do |service, operation|
|
95
|
+
run("vagrant ssh -c \"sudo systemctl status #{service}\"")
|
96
|
+
|
97
|
+
if ['running', 'restarted'].include? operation
|
98
|
+
exit_code = 0
|
99
|
+
regexp = /Active: active \(running\)/
|
100
|
+
elsif operation == 'stopped'
|
101
|
+
exit_code = 3
|
102
|
+
regexp = /Active: inactive\(dead\)/
|
103
|
+
end
|
104
|
+
|
105
|
+
expect(last_command_started).to have_exit_status(exit_code)
|
106
|
+
aruba.command_monitor.find(Aruba.platform.detect_ruby(last_command_started)).send(:stdout) =~ regexp
|
107
|
+
end
|
108
|
+
|
109
|
+
# Note: Only for services supported through systemctl. Not for 'kubernetes'.
|
110
|
+
When(/^the "([^"]*)" service is( not)? running$/) do |service, negated|
|
111
|
+
run("vagrant ssh -c \"sudo systemctl status #{service}\"")
|
112
|
+
|
113
|
+
if negated
|
114
|
+
expect(last_command_started).to have_exit_status(3)
|
115
|
+
else
|
116
|
+
expect(last_command_started).to have_exit_status(0)
|
117
|
+
stdout = aruba.command_monitor.find(Aruba.platform.detect_ruby(last_command_started)).send(:stdout)
|
118
|
+
@service_current_process_id = extract_process_id(stdout)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# Note: Only for services supported through systemctl. Not for 'kubernetes'.
|
123
|
+
When(/^the "([^"]*)" service is \*not\* running$/) do |service|
|
124
|
+
# Stop the service
|
125
|
+
run("vagrant ssh -c \"sudo systemctl stop #{service}\"")
|
126
|
+
|
127
|
+
expect(last_command_started).to have_exit_status(0)
|
128
|
+
step "the \"docker\" service is not running"
|
129
|
+
end
|
130
|
+
|
131
|
+
# Note: Only for services supported through systemctl. Not for 'kubernetes'.
|
132
|
+
Then(/^have a new pid for "([^"]*)" service$/) do |service|
|
133
|
+
run("vagrant ssh -c \"sudo systemctl status #{service}\"")
|
134
|
+
|
135
|
+
expect(last_command_started).to have_exit_status(0)
|
136
|
+
stdout = aruba.command_monitor.find(Aruba.platform.detect_ruby(last_command_started)).send(:stdout)
|
137
|
+
expect(@service_current_process_id).not_to eq(extract_process_id(stdout))
|
138
|
+
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
require_relative 'os'
|
2
2
|
require 'digest'
|
3
3
|
require_relative 'plugin_util'
|
4
|
+
require_relative 'plugin_logger'
|
4
5
|
|
5
|
-
module
|
6
|
+
module VagrantPlugins
|
6
7
|
module ServiceManager
|
7
8
|
DOCKER_PATH = '/home/vagrant/.docker'
|
8
9
|
SUPPORTED_SERVICES = ['docker', 'openshift', 'kubernetes']
|
9
|
-
SCCLI_SERVICES = ['openshift', 'k8s']
|
10
|
-
KUBE_NAMES = ['kubernetes', 'k8s']
|
11
10
|
KUBE_SERVICES = [
|
12
11
|
'etcd', 'kube-apiserver', 'kube-controller-manager', 'kube-scheduler',
|
13
12
|
'kubelet', 'kube-proxy', 'docker'
|
@@ -29,6 +28,7 @@ module Vagrant
|
|
29
28
|
def exit_if_machine_not_running
|
30
29
|
# Exit from plugin with status 3 if machine is not running
|
31
30
|
with_target_vms(nil, single_target: true) do |machine|
|
31
|
+
PluginLogger.debug("machine state - #{machine.state.id || 'nil'}")
|
32
32
|
if machine.state.id != :running
|
33
33
|
@env.ui.error I18n.t('servicemanager.machine_should_running')
|
34
34
|
exit 3
|
@@ -37,8 +37,16 @@ module Vagrant
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def execute
|
40
|
-
|
40
|
+
argv = ARGV.dup
|
41
|
+
# Don't propagate --debug argument to case operation
|
42
|
+
if ARGV.include? '--debug'
|
43
|
+
PluginLogger.enable_debug_mode
|
44
|
+
PluginLogger.set_logger(@logger)
|
45
|
+
argv.delete('--debug')
|
46
|
+
end
|
41
47
|
|
48
|
+
# Remove first argument i.e plugin name
|
49
|
+
command, subcommand, option = argv.drop(1)
|
42
50
|
case command
|
43
51
|
when 'env'
|
44
52
|
exit_if_machine_not_running
|
@@ -102,13 +110,13 @@ module Vagrant
|
|
102
110
|
else
|
103
111
|
print_help(type: command, exit_status: 1)
|
104
112
|
end
|
105
|
-
when 'restart'
|
113
|
+
when 'restart', 'start', 'stop'
|
106
114
|
exit_if_machine_not_running
|
107
115
|
case subcommand
|
108
116
|
when '--help', '-h'
|
109
|
-
print_help(type: command)
|
117
|
+
print_help(type: 'operation', operation: command)
|
110
118
|
else
|
111
|
-
|
119
|
+
perform_service(command, subcommand)
|
112
120
|
end
|
113
121
|
when '--help', '-h', 'help'
|
114
122
|
print_help
|
@@ -127,7 +135,7 @@ module Vagrant
|
|
127
135
|
config[:type] ||= 'default'
|
128
136
|
config[:exit_status] ||= 0
|
129
137
|
|
130
|
-
@env.ui.info(I18n.t("servicemanager.commands.help.#{config[:type]}"))
|
138
|
+
@env.ui.info(I18n.t("servicemanager.commands.help.#{config[:type]}", operation: config[:operation]))
|
131
139
|
exit config[:exit_status]
|
132
140
|
end
|
133
141
|
|
@@ -151,11 +159,11 @@ module Vagrant
|
|
151
159
|
|
152
160
|
running_service_classes.each do |service_class|
|
153
161
|
service = service_class.to_s.split('::').last.downcase
|
154
|
-
unless options[:script_readable] ||
|
162
|
+
unless options[:script_readable] || service == 'kubernetes'
|
155
163
|
@env.ui.info("\n# #{service} env:")
|
156
164
|
end
|
157
165
|
# since we do not have feature to show the Kube connection information
|
158
|
-
unless
|
166
|
+
unless service == 'kubernetes'
|
159
167
|
service_class.info(machine, @env.ui, options)
|
160
168
|
end
|
161
169
|
end
|
@@ -165,25 +173,28 @@ module Vagrant
|
|
165
173
|
end
|
166
174
|
|
167
175
|
def print_vagrant_box_version(script_readable = false)
|
176
|
+
options = { script_readable: script_readable }
|
177
|
+
|
168
178
|
with_target_vms(nil, single_target: true) do |machine|
|
169
|
-
@env.ui.info machine.guest.capability(:box_version,
|
179
|
+
@env.ui.info machine.guest.capability(:box_version, options)
|
170
180
|
end
|
171
181
|
end
|
172
182
|
|
173
|
-
def
|
183
|
+
def perform_service(operation, service)
|
174
184
|
if service.nil?
|
175
|
-
help_msg = I18n.t('servicemanager.commands.help.
|
176
|
-
service_missing_msg = I18n.t('servicemanager.commands.
|
177
|
-
@env.ui.error help_msg.gsub(
|
185
|
+
help_msg = I18n.t('servicemanager.commands.help.operation', operation: operation)
|
186
|
+
service_missing_msg = I18n.t('servicemanager.commands.operation.service_missing')
|
187
|
+
@env.ui.error help_msg.gsub(/#{operation}s the service/, service_missing_msg)
|
178
188
|
exit 126
|
179
189
|
end
|
180
190
|
|
181
|
-
command = if
|
191
|
+
command = if SUPPORTED_SERVICES.include? service
|
182
192
|
# TODO : Handle the case where user wants to pass extra arguments
|
183
193
|
# to OpenShift service
|
184
|
-
"sccli #{service}"
|
194
|
+
"sccli #{service} #{operation}"
|
185
195
|
else
|
186
|
-
|
196
|
+
@env.ui.error I18n.t('servicemanager.commands.operation.sccli_only_support')
|
197
|
+
exit 126
|
187
198
|
end
|
188
199
|
|
189
200
|
with_target_vms(nil, single_target: true) do |machine|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module PluginLogger
|
3
|
+
@debug = false
|
4
|
+
|
5
|
+
def self.debug_mode?
|
6
|
+
@debug
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.logger
|
10
|
+
@logger
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.enable_debug_mode
|
14
|
+
@debug = true
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.set_logger(logger)
|
18
|
+
@logger = logger
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.command
|
22
|
+
(ARGV.drop(1) - ['--debug', '--script-readable']).join(' ')
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.debug(message = nil)
|
26
|
+
if debug_mode?
|
27
|
+
message = "#{command}" if message.nil?
|
28
|
+
logger.debug "[ service-manager: #{message} ]"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
|
-
module
|
1
|
+
module VagrantPlugins
|
2
2
|
module ServiceManager
|
3
3
|
module PluginUtil
|
4
|
+
|
4
5
|
def self.service_class(service)
|
5
6
|
SERVICES_MAP[service]
|
6
7
|
end
|
@@ -62,16 +63,8 @@ module Vagrant
|
|
62
63
|
running_services
|
63
64
|
end
|
64
65
|
|
65
|
-
def self.kube_running?(machine)
|
66
|
-
KUBE_SERVICES.each do |service|
|
67
|
-
return false unless service_running?(machine, service)
|
68
|
-
end
|
69
|
-
true
|
70
|
-
end
|
71
|
-
|
72
66
|
def self.service_running?(machine, service)
|
73
|
-
|
74
|
-
command = "systemctl status #{service}"
|
67
|
+
command = "sudo sccli #{service} status"
|
75
68
|
machine.communicate.test(command)
|
76
69
|
end
|
77
70
|
|
@@ -81,14 +74,24 @@ module Vagrant
|
|
81
74
|
end
|
82
75
|
|
83
76
|
def self.execute_and_exit_on_fail(machine, ui, command)
|
84
|
-
|
85
|
-
|
77
|
+
errors = []
|
78
|
+
logged = false # Log one time only
|
79
|
+
|
80
|
+
exit_code = machine.communicate.sudo(command) do |type, data|
|
81
|
+
PluginLogger.debug unless logged
|
82
|
+
errors << data if type == :stderr
|
83
|
+
logged = true
|
86
84
|
end
|
85
|
+
|
87
86
|
unless exit_code.zero?
|
88
87
|
ui.error errors.join("\n")
|
88
|
+
PluginLogger.debug("#{command} exited with code #{exit_code}")
|
89
89
|
exit exit_code
|
90
90
|
end
|
91
|
+
|
91
92
|
exit_code
|
93
|
+
rescue StandardError => e
|
94
|
+
ui.error e.message.squeeze
|
92
95
|
end
|
93
96
|
|
94
97
|
def self.print_shell_configure_info(ui, command = '')
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Loads all services
|
2
2
|
Dir["#{File.dirname(__FILE__)}/services/*.rb"].each { |f| require_relative f }
|
3
3
|
|
4
|
-
module
|
4
|
+
module VagrantPlugins
|
5
5
|
module ServiceManager
|
6
6
|
SUPPORTED_BOXES = ['adb', 'cdk']
|
7
7
|
|
@@ -30,6 +30,8 @@ module Vagrant
|
|
30
30
|
@openshift_hook.execute
|
31
31
|
end
|
32
32
|
end
|
33
|
+
rescue Vagrant::Errors::GuestCapabilityNotFound
|
34
|
+
# Do nothing if supported box variant not found
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module VagrantPlugins
|
2
2
|
module ServiceManager
|
3
3
|
class Docker
|
4
4
|
# Hard Code the Docker port because it is fixed on the VM
|
@@ -42,6 +42,7 @@ module Vagrant
|
|
42
42
|
docker_api_version_cmd.gsub!(/APIVersion/, 'ApiVersion')
|
43
43
|
end
|
44
44
|
|
45
|
+
PluginLogger.debug
|
45
46
|
machine.communicate.execute(docker_api_version_cmd) do |type, data|
|
46
47
|
options[:api_version] = data.chomp if type == :stdout
|
47
48
|
end
|
@@ -56,6 +57,8 @@ module Vagrant
|
|
56
57
|
end
|
57
58
|
|
58
59
|
def self.print_env_info(ui, options)
|
60
|
+
PluginLogger.debug("script_readable: #{options[:script_readable] || false}")
|
61
|
+
|
59
62
|
label = PluginUtil.env_label(options[:script_readable])
|
60
63
|
options[:secrets_path] = PluginUtil.windows_path(options[:secrets_path]) unless OS.unix?
|
61
64
|
message = I18n.t("servicemanager.commands.env.docker.#{label}",
|