vagrant-zones 0.0.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 +7 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- data/.github/dependabot.yml +6 -0
- data/.github/workflows/codeql-analysis.yml +72 -0
- data/.github/workflows/lint-release-and-publish.yml +70 -0
- data/.github/workflows/ruby-lint.yml +35 -0
- data/.gitignore +35 -0
- data/.rspec +2 -0
- data/.rubocop.yml +143 -0
- data/CHANGELOG.md +0 -0
- data/CODE_OF_CONDUCT.md +128 -0
- data/CONTRIBUTING.md +96 -0
- data/Gemfile +14 -0
- data/LICENSE +651 -0
- data/PULL_REQUEST_TEMPLATE.md +39 -0
- data/README.md +81 -0
- data/RELEASE.md +15 -0
- data/Rakefile +32 -0
- data/SECURITY.md +19 -0
- data/docs/CNAME +1 -0
- data/docs/_config.yml +1 -0
- data/docs/css/main.css +55 -0
- data/docs/css/styles.css +8678 -0
- data/docs/index.html +127 -0
- data/lib/vagrant-zones/action/create.rb +29 -0
- data/lib/vagrant-zones/action/destroy.rb +27 -0
- data/lib/vagrant-zones/action/halt.rb +24 -0
- data/lib/vagrant-zones/action/import.rb +112 -0
- data/lib/vagrant-zones/action/is_created.rb +22 -0
- data/lib/vagrant-zones/action/network.rb +26 -0
- data/lib/vagrant-zones/action/not_created.rb +20 -0
- data/lib/vagrant-zones/action/package.rb +134 -0
- data/lib/vagrant-zones/action/prepare_nfs_valid_ids.rb +24 -0
- data/lib/vagrant-zones/action/restart.rb +53 -0
- data/lib/vagrant-zones/action/setup.rb +26 -0
- data/lib/vagrant-zones/action/shutdown.rb +47 -0
- data/lib/vagrant-zones/action/start.rb +25 -0
- data/lib/vagrant-zones/action/wait_till_boot.rb +59 -0
- data/lib/vagrant-zones/action/wait_till_up.rb +65 -0
- data/lib/vagrant-zones/action.rb +204 -0
- data/lib/vagrant-zones/command/configure_snapshots.rb +49 -0
- data/lib/vagrant-zones/command/console.rb +63 -0
- data/lib/vagrant-zones/command/create_snapshots.rb +46 -0
- data/lib/vagrant-zones/command/delete_snapshots.rb +38 -0
- data/lib/vagrant-zones/command/guest_power_controls.rb +58 -0
- data/lib/vagrant-zones/command/list_snapshots.rb +44 -0
- data/lib/vagrant-zones/command/restart_guest.rb +29 -0
- data/lib/vagrant-zones/command/shutdown_guest.rb +29 -0
- data/lib/vagrant-zones/command/vnc_console.rb +48 -0
- data/lib/vagrant-zones/command/webvnc_console.rb +49 -0
- data/lib/vagrant-zones/command/zfssnapshot.rb +67 -0
- data/lib/vagrant-zones/command/zlogin_console.rb +40 -0
- data/lib/vagrant-zones/command/zone.rb +73 -0
- data/lib/vagrant-zones/config.rb +78 -0
- data/lib/vagrant-zones/driver.rb +1710 -0
- data/lib/vagrant-zones/errors.rb +61 -0
- data/lib/vagrant-zones/executor.rb +38 -0
- data/lib/vagrant-zones/plugin.rb +79 -0
- data/lib/vagrant-zones/provider.rb +83 -0
- data/lib/vagrant-zones/util/subprocess.rb +31 -0
- data/lib/vagrant-zones/util/timer.rb +19 -0
- data/lib/vagrant-zones/version.rb +7 -0
- data/lib/vagrant-zones.rb +29 -0
- data/locales/en.yml +326 -0
- data/vagrant-zones.gemspec +51 -0
- metadata +412 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module ProviderZone
|
5
|
+
module Command
|
6
|
+
# This is used to shutdown the guest from inside the guest
|
7
|
+
class ShutdownGuest < Vagrant.plugin('2', :command)
|
8
|
+
def execute
|
9
|
+
opts = OptionParser.new do |o|
|
10
|
+
o.banner = 'Usage: vagrant zone control shutdown [options]'
|
11
|
+
end
|
12
|
+
|
13
|
+
argv = parse_options(opts)
|
14
|
+
return unless argv
|
15
|
+
|
16
|
+
unless argv.empty?
|
17
|
+
@env.ui.info(opts.help)
|
18
|
+
return
|
19
|
+
end
|
20
|
+
|
21
|
+
## Wait for VM up
|
22
|
+
with_target_vms(argv, provider: :zone) do |machine|
|
23
|
+
machine.action('shutdown')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module ProviderZone
|
5
|
+
module Command
|
6
|
+
# This is used to start a VNC console to the guest
|
7
|
+
class VNCConsole < Vagrant.plugin('2', :command)
|
8
|
+
def execute
|
9
|
+
options = {}
|
10
|
+
opts = OptionParser.new do |o|
|
11
|
+
o.banner = 'Usage: vagrant zone console vnc [options]'
|
12
|
+
o.on('--ip <host_ip>', 'Specify host IP to listen on') do |p|
|
13
|
+
options[:ip] = p
|
14
|
+
end
|
15
|
+
o.on('--port <port>', 'Specify port to listen on') do |p|
|
16
|
+
options[:port] = p
|
17
|
+
end
|
18
|
+
o.on('--detach <yes/no>', 'Run console server in background') do |p|
|
19
|
+
options[:detach] = p
|
20
|
+
end
|
21
|
+
o.on('--kill <yes/no>', 'Kill the previous background console session') do |p|
|
22
|
+
options[:kill] = p
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
argv = parse_options(opts)
|
27
|
+
return unless argv
|
28
|
+
|
29
|
+
unless argv.length <= 4
|
30
|
+
@env.ui.info(opts.help)
|
31
|
+
return
|
32
|
+
end
|
33
|
+
|
34
|
+
options[:port] = nil unless options[:port] =~ /\d/
|
35
|
+
with_target_vms(argv, provider: :zone) do |machine|
|
36
|
+
driver = machine.provider.driver
|
37
|
+
detach = 'yes'
|
38
|
+
detach = 'no' unless options[:detach] == 'yes'
|
39
|
+
kill = 'yes'
|
40
|
+
kill = 'no' unless options[:kill] == 'yes'
|
41
|
+
exit = { detach: detach, kill: kill }
|
42
|
+
driver.console(@env.ui, 'vnc', options[:ip], options[:port], exit)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'resolv'
|
4
|
+
module VagrantPlugins
|
5
|
+
module ProviderZone
|
6
|
+
module Command
|
7
|
+
# This is used to start a WebVNC console to the guest
|
8
|
+
class WebVNCConsole < Vagrant.plugin('2', :command)
|
9
|
+
def execute
|
10
|
+
options = {}
|
11
|
+
opts = OptionParser.new do |o|
|
12
|
+
o.banner = 'Usage: vagrant zone console webvnc [options]'
|
13
|
+
o.on('--ip <host_ip>', 'Specify host IP to listen on') do |p|
|
14
|
+
options[:ip] = p
|
15
|
+
end
|
16
|
+
o.on('--port <port>', 'Specify port to listen on') do |p|
|
17
|
+
options[:port] = p
|
18
|
+
end
|
19
|
+
o.on('--detach <yes/no>', 'Run console server in background') do |p|
|
20
|
+
options[:detach] = p
|
21
|
+
end
|
22
|
+
o.on('--kill <yes/no>', 'Kill the previous background console session') do |p|
|
23
|
+
options[:kill] = p
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
argv = parse_options(opts)
|
28
|
+
return unless argv
|
29
|
+
|
30
|
+
unless argv.length <= 4
|
31
|
+
@env.ui.info(opts.help)
|
32
|
+
return
|
33
|
+
end
|
34
|
+
|
35
|
+
options[:port] = nil unless options[:port] =~ /\d/
|
36
|
+
with_target_vms(argv, provider: :zone) do |machine|
|
37
|
+
driver = machine.provider.driver
|
38
|
+
detach = 'yes'
|
39
|
+
detach = 'no' unless options[:detach] == 'yes'
|
40
|
+
kill = 'yes'
|
41
|
+
kill = 'no' unless options[:kill] == 'yes'
|
42
|
+
exit = { detach: detach, kill: kill }
|
43
|
+
driver.console(@env.ui, 'webvnc', options[:ip], options[:port], exit)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module ProviderZone
|
5
|
+
module Command
|
6
|
+
# This is used to manage ZFS snapshtos for the zone
|
7
|
+
class ZFSSnapshot < Vagrant.plugin('2', :command)
|
8
|
+
def initialize(argv, env)
|
9
|
+
@main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
|
10
|
+
|
11
|
+
@subcommands = Vagrant::Registry.new
|
12
|
+
@subcommands.register(:list) do
|
13
|
+
require File.expand_path('list_snapshots', __dir__)
|
14
|
+
ListSnapshots
|
15
|
+
end
|
16
|
+
@subcommands.register(:create) do
|
17
|
+
require File.expand_path('create_snapshots', __dir__)
|
18
|
+
CreateSnapshots
|
19
|
+
end
|
20
|
+
@subcommands.register(:delete) do
|
21
|
+
require File.expand_path('delete_snapshots', __dir__)
|
22
|
+
DeleteSnapshots
|
23
|
+
end
|
24
|
+
@subcommands.register(:configure) do
|
25
|
+
require File.expand_path('configure_snapshots', __dir__)
|
26
|
+
ConfigureSnapshots
|
27
|
+
end
|
28
|
+
super(argv, env)
|
29
|
+
end
|
30
|
+
|
31
|
+
def execute
|
32
|
+
if @main_args.include?('-h') || @main_args.include?('--help')
|
33
|
+
# Print the help for all the vagrant-zones commands.
|
34
|
+
return help
|
35
|
+
end
|
36
|
+
|
37
|
+
command_class = @subcommands.get(:create) if @sub_command.nil?
|
38
|
+
command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
|
39
|
+
|
40
|
+
subargs = @sub_args unless @sub_args.nil?
|
41
|
+
@logger.debug("Invoking command class: #{command_class} #{subargs.inspect}")
|
42
|
+
|
43
|
+
# Initialize and execute the command class
|
44
|
+
command_class.new(subargs, @env).execute
|
45
|
+
end
|
46
|
+
|
47
|
+
def help
|
48
|
+
opts = OptionParser.new do |subopts|
|
49
|
+
subopts.banner = 'Usage: vagrant zone zfssnapshot <subcommand> [<args>]'
|
50
|
+
subopts.separator ''
|
51
|
+
subopts.separator 'Available subcommands:'
|
52
|
+
# Add the available subcommands as separators in order to print them
|
53
|
+
# out as well.
|
54
|
+
keys = []
|
55
|
+
@subcommands.each { |key, _value| keys << key.to_s }
|
56
|
+
keys.sort.each do |key|
|
57
|
+
subopts.separator " #{key}"
|
58
|
+
end
|
59
|
+
subopts.separator ''
|
60
|
+
subopts.separator 'For help on any individual subcommand run `vagrant zone zfssnapshot <subcommand> -h`'
|
61
|
+
end
|
62
|
+
@env.ui.info(opts.help, :prefix => false)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module ProviderZone
|
5
|
+
module Command
|
6
|
+
# This is used to acces the zone via console, zlogin
|
7
|
+
class ZloginConsole < Vagrant.plugin('2', :command)
|
8
|
+
def execute
|
9
|
+
options = {}
|
10
|
+
opts = OptionParser.new do |o|
|
11
|
+
o.banner = 'Usage: vagrant zone console zlogin [options]'
|
12
|
+
o.on('--ip <host_ip>', 'Specify host IP to listen on') do |p|
|
13
|
+
options[:ip] = p
|
14
|
+
end
|
15
|
+
o.on('--port <port>', 'Specify port to listen on') do |p|
|
16
|
+
options[:port] = p
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
argv = parse_options(opts)
|
21
|
+
return unless argv
|
22
|
+
|
23
|
+
unless argv.length <= 4
|
24
|
+
@env.ui.info(opts.help)
|
25
|
+
return
|
26
|
+
end
|
27
|
+
|
28
|
+
options[:port] = nil unless options[:port] =~ /\d/
|
29
|
+
with_target_vms(argv, provider: :zone) do |machine|
|
30
|
+
driver = machine.provider.driver
|
31
|
+
detach = 'no'
|
32
|
+
kill = 'no'
|
33
|
+
exit = { detach: detach, kill: kill }
|
34
|
+
driver.console(@env.ui, 'zlogin', options[:ip], options[:port], exit)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'vagrant-zones/action'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module ProviderZone
|
7
|
+
module Command
|
8
|
+
# This is used manage the zone where vagrant cannot
|
9
|
+
class Zone < Vagrant.plugin('2', :command)
|
10
|
+
def self.synopsis
|
11
|
+
'Manage zones and query zone information'
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(argv, env)
|
15
|
+
@main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
|
16
|
+
|
17
|
+
@subcommands = Vagrant::Registry.new
|
18
|
+
|
19
|
+
@subcommands.register(:zfssnapshot) do
|
20
|
+
require File.expand_path('zfssnapshot', __dir__)
|
21
|
+
ZFSSnapshot
|
22
|
+
end
|
23
|
+
@subcommands.register(:control) do
|
24
|
+
require File.expand_path('guest_power_controls', __dir__)
|
25
|
+
GuestPowerControls
|
26
|
+
end
|
27
|
+
@subcommands.register(:console) do
|
28
|
+
require File.expand_path('console', __dir__)
|
29
|
+
Console
|
30
|
+
end
|
31
|
+
super(argv, env)
|
32
|
+
end
|
33
|
+
|
34
|
+
def execute
|
35
|
+
if @main_args.include?('-h') || @main_args.include?('--help')
|
36
|
+
# Print the help for all the vagrant-zones commands.
|
37
|
+
return help
|
38
|
+
end
|
39
|
+
|
40
|
+
command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
|
41
|
+
return help if !command_class || !@sub_command
|
42
|
+
|
43
|
+
@logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
|
44
|
+
|
45
|
+
# Initialize and execute the command class
|
46
|
+
command_class.new(@sub_args, @env).execute
|
47
|
+
end
|
48
|
+
|
49
|
+
def help
|
50
|
+
opts = OptionParser.new do |subopts|
|
51
|
+
subopts.banner = 'Usage: vagrant zone <subcommand> [<args>]'
|
52
|
+
subopts.separator ''
|
53
|
+
subopts.separator 'Available subcommands:'
|
54
|
+
|
55
|
+
# Add the available subcommands as separators in order to print them
|
56
|
+
# out as well.
|
57
|
+
keys = []
|
58
|
+
@subcommands.each { |key, _value| keys << key.to_s }
|
59
|
+
|
60
|
+
keys.sort.each do |key|
|
61
|
+
subopts.separator " #{key}"
|
62
|
+
end
|
63
|
+
|
64
|
+
subopts.separator ''
|
65
|
+
subopts.separator 'For help on any individual subcommand run `vagrant zone <subcommand> -h`'
|
66
|
+
end
|
67
|
+
|
68
|
+
@env.ui.info(opts.help, :prefix => false)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'vagrant'
|
4
|
+
## Do not Modify this File! Modify the Hosts.yml, Hosts.rb, or Vagrantfile!
|
5
|
+
module VagrantPlugins
|
6
|
+
module ProviderZone
|
7
|
+
# This is used define the variables for the project
|
8
|
+
class Config < Vagrant.plugin('2', :config)
|
9
|
+
# rubocop:disable Layout/LineLength
|
10
|
+
attr_accessor :brand, :autoboot, :setup_method, :safe_restart, :allowed_address, :safe_shutdown, :boxshortname, :kernel, :debug, :debug_boot, :private_network, :winalcheck, :winlcheck, :lcheck, :alcheck, :snapshot_script, :diskif, :netif, :cdroms, :disk1path, :disk1size, :cpus, :cpu_configuration, :boot, :complex_cpu_conf, :memory, :vagrant_user, :vagrant_user_private_key_path, :setup_wait, :clean_shutdown_time, :dhcp, :vagrant_user_pass, :firmware_type, :vm_type, :partition_id, :shared_disk_enabled, :shared_dir, :acpi, :os_type, :console, :consolehost, :consoleport, :console_onboot, :hostbridge, :sshport, :rdpport, :override, :additional_disks, :cloud_init_resolvers, :cloud_init_enabled, :cloud_init_dnsdomain, :cloud_init_password, :cloud_init_sshkey, :cloud_init_conf, :dns, :box, :vagrant_cloud_creator, :winbooted_string, :booted_string, :zunlockbootkey, :zunlockboot, :xhci_enabled
|
11
|
+
|
12
|
+
# rubocop:enable Layout/LineLength
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
super
|
16
|
+
@brand = 'bhyve'
|
17
|
+
@additional_disks = UNSET_VALUE
|
18
|
+
@autoboot = true
|
19
|
+
@kernel = UNSET_VALUE
|
20
|
+
@boxshortname = UNSET_VALUE
|
21
|
+
@cdroms = nil
|
22
|
+
@shared_dir = nil
|
23
|
+
@os_type = 'generic'
|
24
|
+
@lcheck = UNSET_VALUE
|
25
|
+
@booted_string = UNSET_VALUE
|
26
|
+
@winbooted_string = UNSET_VALUE
|
27
|
+
@allowed_address = true
|
28
|
+
@alcheck = 'login: '
|
29
|
+
@winalcheck = 'EVENT: The CMD command is now available.'
|
30
|
+
@winlcheck = 'EVENT: The CMD command is now available.'
|
31
|
+
@zunlockbootkey = ''
|
32
|
+
@zunlockboot = false
|
33
|
+
@safe_restart = nil
|
34
|
+
@safe_shutdown = nil
|
35
|
+
@debug_boot = nil
|
36
|
+
@debug = nil
|
37
|
+
@shared_disk_enabled = true
|
38
|
+
@consoleport = nil
|
39
|
+
@consolehost = '0.0.0.0'
|
40
|
+
@console_onboot = 'false'
|
41
|
+
@console = 'webvnc'
|
42
|
+
@memory = '4G'
|
43
|
+
@diskif = 'virtio-blk'
|
44
|
+
@netif = 'virtio-net-viona'
|
45
|
+
@cpus = 2
|
46
|
+
@cpu_configuration = 'simple'
|
47
|
+
@complex_cpu_conf = UNSET_VALUE
|
48
|
+
@boot = UNSET_VALUE
|
49
|
+
@hostbridge = 'i440fx'
|
50
|
+
@acpi = 'on'
|
51
|
+
@setup_wait = 90
|
52
|
+
@box = UNSET_VALUE
|
53
|
+
@clean_shutdown_time = 300
|
54
|
+
@dns = [{ 'nameserver' => '1.1.1.1' }, { 'nameserver' => '1.0.0.1' }]
|
55
|
+
@vmtype = 'production'
|
56
|
+
@partition_id = '0000'
|
57
|
+
@sshport = '22'
|
58
|
+
@rdpport = '3389'
|
59
|
+
@vagrant_user = 'vagrant'
|
60
|
+
@vagrant_user_pass = 'vagrant'
|
61
|
+
@vagrant_user_private_key_path = './id_rsa'
|
62
|
+
@xhci_enabled = 'off'
|
63
|
+
@override = false
|
64
|
+
@cloud_init_enabled = false
|
65
|
+
@cloud_init_conf = 'on'
|
66
|
+
@cloud_init_dnsdomain = nil
|
67
|
+
@cloud_init_password = nil
|
68
|
+
@cloud_init_resolvers = nil
|
69
|
+
@cloud_init_sshkey = nil
|
70
|
+
@private_network = nil
|
71
|
+
@firmware_type = 'compatability'
|
72
|
+
@vm_type = 'production'
|
73
|
+
@setup_method = nil
|
74
|
+
@snapshot_script = '/opt/vagrant/bin/Snapshooter.sh'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|