vagrant-smartos-zones 0.0.1.pre.21
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/.gitignore +19 -0
- data/.rubocop.yml +12 -0
- data/Gemfile +12 -0
- data/LICENSE.txt +22 -0
- data/README.md +268 -0
- data/Rakefile +6 -0
- data/Vagrantfile +29 -0
- data/examples/Vagrantfile +18 -0
- data/examples/Vagrantfile.chef_server +33 -0
- data/examples/Vagrantfile.lx +22 -0
- data/examples/Vagrantfile.rsync +23 -0
- data/files/gz_vnic/create_gz_vnic +15 -0
- data/files/smf/create-gz-vnic.xml +31 -0
- data/files/smf/zonegate.xml +34 -0
- data/files/zonegate/zonegate +60 -0
- data/files/zonegate/zonemon +15 -0
- data/files/zonegate/zonenat +153 -0
- data/lib/vagrant/smartos/locales/en.yml +41 -0
- data/lib/vagrant/smartos/zones/action/configure_zone_synced_folders.rb +53 -0
- data/lib/vagrant/smartos/zones/action/create_gz_vnic.rb +28 -0
- data/lib/vagrant/smartos/zones/action/forward_gz_ports.rb +46 -0
- data/lib/vagrant/smartos/zones/action/helper.rb +33 -0
- data/lib/vagrant/smartos/zones/action/imgadm_import.rb +24 -0
- data/lib/vagrant/smartos/zones/action/virtualbox/platform_iso.rb +57 -0
- data/lib/vagrant/smartos/zones/action/zone/create.rb +25 -0
- data/lib/vagrant/smartos/zones/action/zone/start.rb +25 -0
- data/lib/vagrant/smartos/zones/action/zone/stop.rb +25 -0
- data/lib/vagrant/smartos/zones/action/zone_gate/enable.rb +26 -0
- data/lib/vagrant/smartos/zones/action/zone_gate/install.rb +26 -0
- data/lib/vagrant/smartos/zones/action.rb +75 -0
- data/lib/vagrant/smartos/zones/cap/base.rb +29 -0
- data/lib/vagrant/smartos/zones/cap/create_gz_vnic.rb +45 -0
- data/lib/vagrant/smartos/zones/cap/imgadm_import.rb +30 -0
- data/lib/vagrant/smartos/zones/cap/platform_image/install.rb +17 -0
- data/lib/vagrant/smartos/zones/cap/platform_image/latest.rb +19 -0
- data/lib/vagrant/smartos/zones/cap/platform_image/list.rb +17 -0
- data/lib/vagrant/smartos/zones/cap/zone/base.rb +32 -0
- data/lib/vagrant/smartos/zones/cap/zone/create.rb +45 -0
- data/lib/vagrant/smartos/zones/cap/zone/start.rb +29 -0
- data/lib/vagrant/smartos/zones/cap/zone/stop.rb +29 -0
- data/lib/vagrant/smartos/zones/cap/zone_gate/enable.rb +20 -0
- data/lib/vagrant/smartos/zones/cap/zone_gate/install.rb +46 -0
- data/lib/vagrant/smartos/zones/commands/dataset.rb +91 -0
- data/lib/vagrant/smartos/zones/commands/global_zone.rb +43 -0
- data/lib/vagrant/smartos/zones/commands/multi_command.rb +46 -0
- data/lib/vagrant/smartos/zones/commands/smartos.rb +70 -0
- data/lib/vagrant/smartos/zones/commands/zlogin.rb +35 -0
- data/lib/vagrant/smartos/zones/commands/zones.rb +136 -0
- data/lib/vagrant/smartos/zones/communicator/smartos.rb +87 -0
- data/lib/vagrant/smartos/zones/config/global_zone.rb +26 -0
- data/lib/vagrant/smartos/zones/config/zone.rb +33 -0
- data/lib/vagrant/smartos/zones/errors.rb +9 -0
- data/lib/vagrant/smartos/zones/guest.rb +25 -0
- data/lib/vagrant/smartos/zones/hooks.rb +41 -0
- data/lib/vagrant/smartos/zones/models/dataset.rb +27 -0
- data/lib/vagrant/smartos/zones/models/snapshot.rb +71 -0
- data/lib/vagrant/smartos/zones/models/zone.rb +80 -0
- data/lib/vagrant/smartos/zones/models/zone_group.rb +11 -0
- data/lib/vagrant/smartos/zones/models/zone_user.rb +11 -0
- data/lib/vagrant/smartos/zones/plugin.rb +118 -0
- data/lib/vagrant/smartos/zones/util/checksum.rb +22 -0
- data/lib/vagrant/smartos/zones/util/downloader.rb +48 -0
- data/lib/vagrant/smartos/zones/util/global_zone/connection.rb +192 -0
- data/lib/vagrant/smartos/zones/util/global_zone/helper.rb +33 -0
- data/lib/vagrant/smartos/zones/util/global_zone/ssh_info.rb +85 -0
- data/lib/vagrant/smartos/zones/util/platform_images.rb +132 -0
- data/lib/vagrant/smartos/zones/util/public_key.rb +14 -0
- data/lib/vagrant/smartos/zones/util/snapshots.rb +63 -0
- data/lib/vagrant/smartos/zones/util/zone_group.rb +34 -0
- data/lib/vagrant/smartos/zones/util/zone_info.rb +72 -0
- data/lib/vagrant/smartos/zones/util/zone_json.rb +77 -0
- data/lib/vagrant/smartos/zones/util/zone_project.rb +25 -0
- data/lib/vagrant/smartos/zones/util/zone_user.rb +63 -0
- data/lib/vagrant/smartos/zones/version.rb +7 -0
- data/lib/vagrant/smartos/zones.rb +10 -0
- data/vagrant-smartos-zones.gemspec +24 -0
- metadata +163 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'vagrant/smartos/zones/cap/base'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Cap
|
7
|
+
class CreateGZVnic < Base
|
8
|
+
cap_method :create_gz_vnic
|
9
|
+
|
10
|
+
def execute
|
11
|
+
return unless machine.communicate.test('test -d %s' % vm_tmp_folder)
|
12
|
+
|
13
|
+
ui.info 'Installing vnic in global zone'
|
14
|
+
sudo = machine.config.smartos.suexec_cmd
|
15
|
+
|
16
|
+
machine.communicate.upload(create_vnic_script, '%s/create_gz_vnic' % vm_tmp_folder)
|
17
|
+
machine.communicate.upload(vnic_smf_manifest, '%s/create-gz-vnic.xml' % vm_tmp_folder)
|
18
|
+
|
19
|
+
machine.communicate.execute("#{sudo} mv %s/create_gz_vnic /opt/custom/method" % vm_tmp_folder)
|
20
|
+
machine.communicate.execute("#{sudo} mv %s/create-gz-vnic.xml /opt/custom/smf" % vm_tmp_folder)
|
21
|
+
|
22
|
+
machine.communicate.execute("#{sudo} svccfg import /opt/custom/smf/create-gz-vnic.xml")
|
23
|
+
machine.communicate.execute("#{sudo} svcadm enable -s create-gz-vnic")
|
24
|
+
end
|
25
|
+
|
26
|
+
def local_files_folder
|
27
|
+
File.expand_path('../../../../../../files', __FILE__)
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_vnic_script
|
31
|
+
File.join(local_files_folder, 'gz_vnic', 'create_gz_vnic')
|
32
|
+
end
|
33
|
+
|
34
|
+
def vnic_smf_manifest
|
35
|
+
File.join(local_files_folder, 'smf', 'create-gz-vnic.xml')
|
36
|
+
end
|
37
|
+
|
38
|
+
def vm_tmp_folder
|
39
|
+
'/usbkey/vagrant'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'vagrant/smartos/zones/cap/base'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Cap
|
7
|
+
class ImgadmImport < Base
|
8
|
+
cap_method :imgadm_import
|
9
|
+
|
10
|
+
def execute
|
11
|
+
return ui.info 'No zone image set, skipping import' unless image
|
12
|
+
|
13
|
+
installed = machine.communicate.gz_test("#{sudo} imgadm get #{image}")
|
14
|
+
|
15
|
+
ui.info "Checking for zone image #{image}: #{installed ? 'installed' : 'not installed'}"
|
16
|
+
return if installed
|
17
|
+
|
18
|
+
ui.info ' Importing...'
|
19
|
+
machine.communicate.gz_execute("#{sudo} imgadm sources -a https://updates.joyent.com")
|
20
|
+
machine.communicate.gz_execute("#{sudo} imgadm import #{image}")
|
21
|
+
end
|
22
|
+
|
23
|
+
def image
|
24
|
+
machine.config.zone.image
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'vagrant/smartos/zones/util/platform_images'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Cap
|
7
|
+
module PlatformImage
|
8
|
+
class Install
|
9
|
+
def self.platform_image_install(env, image)
|
10
|
+
Zones::Util::PlatformImages.new(env).install(image)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'vagrant/smartos/zones/util/platform_images'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Cap
|
7
|
+
module PlatformImage
|
8
|
+
class Latest
|
9
|
+
def self.platform_image_latest(env)
|
10
|
+
platform_image = Zones::Util::PlatformImages.new(env).latest
|
11
|
+
env.ui.info 'Unable to find platform image' unless platform_image
|
12
|
+
env.ui.info platform_image
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'vagrant/smartos/zones/util/platform_images'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Cap
|
7
|
+
module PlatformImage
|
8
|
+
class List
|
9
|
+
def self.platform_image_list(env)
|
10
|
+
Zones::Util::PlatformImages.new(env).list
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'vagrant/smartos/zones/cap/base'
|
2
|
+
require 'vagrant/smartos/zones/models/zone'
|
3
|
+
require 'vagrant/smartos/zones/util/zone_info'
|
4
|
+
|
5
|
+
module Vagrant
|
6
|
+
module Smartos
|
7
|
+
module Zones
|
8
|
+
module Cap
|
9
|
+
module Zone
|
10
|
+
class Base < Vagrant::Smartos::Zones::Cap::Base
|
11
|
+
def zone_exists?
|
12
|
+
name = machine.config.zone.name
|
13
|
+
machine.communicate.gz_test("#{sudo} vmadm list -H | awk '{print $5}' | grep #{name}")
|
14
|
+
end
|
15
|
+
|
16
|
+
def zone_valid?
|
17
|
+
machine.config.zone && machine.config.zone.image && machine.config.zone.name
|
18
|
+
end
|
19
|
+
|
20
|
+
def zone_info
|
21
|
+
@zone_info ||= Util::ZoneInfo.new(machine)
|
22
|
+
end
|
23
|
+
|
24
|
+
def zone
|
25
|
+
@zone ||= Models::Zone.find(machine, machine.config.zone.name)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'vagrant/smartos/zones/cap/zone/base'
|
2
|
+
require 'vagrant/smartos/zones/util/zone_json'
|
3
|
+
|
4
|
+
module Vagrant
|
5
|
+
module Smartos
|
6
|
+
module Zones
|
7
|
+
module Cap
|
8
|
+
module Zone
|
9
|
+
class Create < Base
|
10
|
+
cap_method :zone__create
|
11
|
+
|
12
|
+
def execute
|
13
|
+
return warn_zone_config unless zone_valid?
|
14
|
+
return update_zone if zone_exists?
|
15
|
+
create_zone
|
16
|
+
end
|
17
|
+
|
18
|
+
def create_zone
|
19
|
+
zone_info.create(machine.config.zone.name)
|
20
|
+
end
|
21
|
+
|
22
|
+
def update_zone
|
23
|
+
ui.info "Zone #{machine.config.zone.name} exists"
|
24
|
+
zone_info.update(machine.config.zone.name)
|
25
|
+
end
|
26
|
+
|
27
|
+
def warn_zone_config
|
28
|
+
ui.info 'No zone configured, skipping'
|
29
|
+
ui.info ' add the following to your Vagrantfile to configure a local zone:'
|
30
|
+
ui.info " config.zone.name = 'my-zone'"
|
31
|
+
ui.info " config.zone.image = 'uuid'"
|
32
|
+
ui.info " config.zone.brand = 'joyent'"
|
33
|
+
ui.info ' config.zone.memory = 2048'
|
34
|
+
ui.info ' config.zone.disk_size = 5'
|
35
|
+
end
|
36
|
+
|
37
|
+
def zone_json
|
38
|
+
Util::ZoneJson.new(machine).to_json
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'vagrant/smartos/zones/cap/zone/base'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Cap
|
7
|
+
module Zone
|
8
|
+
class Start < Base
|
9
|
+
cap_method :zone__start
|
10
|
+
|
11
|
+
def execute
|
12
|
+
return unless zone_valid?
|
13
|
+
return unless zone_exists?
|
14
|
+
|
15
|
+
start_zone
|
16
|
+
end
|
17
|
+
|
18
|
+
def start_zone
|
19
|
+
return if zone.running?
|
20
|
+
name = machine.config.zone.name
|
21
|
+
ui.info "Starting zone #{name}"
|
22
|
+
zone.start
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'vagrant/smartos/zones/cap/zone/base'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Cap
|
7
|
+
module Zone
|
8
|
+
class Stop < Base
|
9
|
+
cap_method :zone__stop
|
10
|
+
|
11
|
+
def execute
|
12
|
+
return unless zone_valid?
|
13
|
+
return unless zone_exists?
|
14
|
+
|
15
|
+
stop_zone
|
16
|
+
end
|
17
|
+
|
18
|
+
def stop_zone
|
19
|
+
return unless zone.running?
|
20
|
+
name = machine.config.zone.name
|
21
|
+
ui.info "Stopping zone #{name}"
|
22
|
+
zone.stop
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'vagrant/smartos/zones/cap/base'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Cap
|
7
|
+
module ZoneGate
|
8
|
+
class Enable < Cap::Base
|
9
|
+
cap_method :zone_gate_enable
|
10
|
+
|
11
|
+
def execute
|
12
|
+
ui.info 'Enabling ZoneGate'
|
13
|
+
machine.communicate.gz_execute("#{sudo} svcadm enable -s zonegate")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'vagrant/smartos/zones/cap/base'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Cap
|
7
|
+
module ZoneGate
|
8
|
+
class Install < Cap::Base
|
9
|
+
cap_method :zone_gate_install
|
10
|
+
|
11
|
+
LOCAL_FILES_FOLDER = File.expand_path('../../../../../../../files', __FILE__)
|
12
|
+
LOCAL_ZONEGATE_FOLDER = File.join(LOCAL_FILES_FOLDER, 'zonegate')
|
13
|
+
LOCAL_SMF_MANIFEST = File.join(LOCAL_FILES_FOLDER, 'smf', 'zonegate.xml')
|
14
|
+
SMF_TMP_FOLDER = '/usbkey/vagrant'
|
15
|
+
SMF_FOLDER = '/opt/custom/smf'
|
16
|
+
ZONEGATE_FOLDER = '/opt/custom/method'
|
17
|
+
|
18
|
+
def execute
|
19
|
+
ui.info 'Installing ZoneGate'
|
20
|
+
|
21
|
+
create_zonegate_folder
|
22
|
+
upload_zonegate
|
23
|
+
install_zonegate
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_zonegate_folder
|
27
|
+
machine.communicate.execute("#{sudo} mkdir -p %s/zonegate" % ZONEGATE_FOLDER)
|
28
|
+
machine.communicate.execute("#{sudo} chown vagrant:other %s/zonegate" % ZONEGATE_FOLDER)
|
29
|
+
end
|
30
|
+
|
31
|
+
def upload_zonegate
|
32
|
+
machine.communicate.upload(LOCAL_ZONEGATE_FOLDER, ZONEGATE_FOLDER)
|
33
|
+
machine.communicate.upload(LOCAL_SMF_MANIFEST, '%s/zonegate.xml' % SMF_TMP_FOLDER)
|
34
|
+
end
|
35
|
+
|
36
|
+
def install_zonegate
|
37
|
+
machine.communicate.execute("#{sudo} mv %s/zonegate.xml %s/zonegate.xml" % [SMF_TMP_FOLDER, SMF_FOLDER])
|
38
|
+
machine.communicate.execute("#{sudo} chown root:root %s/zonegate.xml" % SMF_FOLDER)
|
39
|
+
machine.communicate.execute("#{sudo} svccfg import %s/zonegate.xml" % SMF_FOLDER)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
require_relative 'multi_command'
|
3
|
+
require 'vagrant/smartos/zones/errors'
|
4
|
+
require 'vagrant/smartos/zones/models/dataset'
|
5
|
+
require 'vagrant/smartos/zones/models/zone'
|
6
|
+
|
7
|
+
module Vagrant
|
8
|
+
module Smartos
|
9
|
+
module Zones
|
10
|
+
module Command
|
11
|
+
class Dataset < Vagrant.plugin('2', :command)
|
12
|
+
include MultiCommand
|
13
|
+
|
14
|
+
attr_accessor :host, :ui
|
15
|
+
|
16
|
+
COMMANDS = %w(list create delete install).freeze
|
17
|
+
|
18
|
+
OPTION_PARSER = OptionParser.new do |o|
|
19
|
+
o.banner = 'Usage: vagrant dataset [subcommand] [options]'
|
20
|
+
o.separator ''
|
21
|
+
o.separator 'Commands:'
|
22
|
+
o.separator ' create [zone] [name] create a local dataset [name] from running zone [zone]'
|
23
|
+
o.separator ' delete [name] delete a local dataset [name]'
|
24
|
+
o.separator ' list show all locally installed datasets'
|
25
|
+
o.separator ' install [url] download a dataset to the local machine'
|
26
|
+
o.separator ''
|
27
|
+
o.separator 'Options:'
|
28
|
+
o.separator ''
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.synopsis
|
32
|
+
'Manage local SmartOS datasets'
|
33
|
+
end
|
34
|
+
|
35
|
+
def execute
|
36
|
+
process_subcommand
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def host
|
42
|
+
@env.host
|
43
|
+
end
|
44
|
+
|
45
|
+
def create(zonename, dataset)
|
46
|
+
with_zone(zonename) do |zone|
|
47
|
+
Models::Dataset.create(dataset, zone)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def delete(dataset_name)
|
52
|
+
return ui.warn('Unable to delete datasets') unless host.capability?(:dataset_delete)
|
53
|
+
host.capability(:dataset_delete, dataset_name)
|
54
|
+
end
|
55
|
+
|
56
|
+
def list(*_args)
|
57
|
+
return ui.warn('Unable to list datasets') unless host.capability?(:dataset_list)
|
58
|
+
host.capability(:dataset_list)
|
59
|
+
end
|
60
|
+
|
61
|
+
def install(url)
|
62
|
+
if url.nil?
|
63
|
+
ui.warn 'No url given'
|
64
|
+
ui.warn ''
|
65
|
+
ui.warn OPTION_PARSER.to_s
|
66
|
+
exit 1
|
67
|
+
end
|
68
|
+
|
69
|
+
return ui.warn('Unable to install dataset') unless host.capability?(:dataset_install)
|
70
|
+
host.capability(:dataset_install, url)
|
71
|
+
end
|
72
|
+
|
73
|
+
def ui
|
74
|
+
@env.ui
|
75
|
+
end
|
76
|
+
|
77
|
+
def with_zone(name)
|
78
|
+
with_target_vms('default', single_target: true) do |machine|
|
79
|
+
Models::Zone.find(machine, name).tap do |zone|
|
80
|
+
yield zone
|
81
|
+
end
|
82
|
+
end
|
83
|
+
rescue ZoneNotFound
|
84
|
+
ui.warn(I18n.t('vagrant.smartos.zones.warning.zone_not_found',
|
85
|
+
name: name), prefix: false)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
require 'vagrant/smartos/zones/util/global_zone/ssh_info'
|
3
|
+
require 'vagrant/util/ssh'
|
4
|
+
require_relative 'multi_command'
|
5
|
+
|
6
|
+
module Vagrant
|
7
|
+
module Smartos
|
8
|
+
module Zones
|
9
|
+
module Command
|
10
|
+
class GlobalZone < Vagrant.plugin('2', :command)
|
11
|
+
include MultiCommand
|
12
|
+
|
13
|
+
COMMANDS = %w(ssh)
|
14
|
+
|
15
|
+
OPTION_PARSER = OptionParser.new do |o|
|
16
|
+
o.banner = 'Usage: vagrant global-zone [command]'
|
17
|
+
o.separator ''
|
18
|
+
o.separator 'Commands:'
|
19
|
+
o.separator ' ssh ssh into the global zone'
|
20
|
+
o.separator ''
|
21
|
+
o.separator 'Options:'
|
22
|
+
o.separator ''
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.synopsis
|
26
|
+
'View and interact with the SmartOS global zone'
|
27
|
+
end
|
28
|
+
|
29
|
+
def execute
|
30
|
+
process_subcommand
|
31
|
+
end
|
32
|
+
|
33
|
+
def ssh(*_args)
|
34
|
+
with_target_vms('default', single_target: true) do |machine|
|
35
|
+
ssh_info = Util::GlobalZone::SSHInfo.new(machine.provider, machine.config, machine.env).to_hash
|
36
|
+
Vagrant::Util::SSH.exec(ssh_info)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Smartos
|
3
|
+
module Zones
|
4
|
+
module Command
|
5
|
+
# Requires
|
6
|
+
#
|
7
|
+
# Define a COMMANDS constant, which is an array of method names:
|
8
|
+
#
|
9
|
+
# COMMANDS = %w(subcommand other_subcommand)
|
10
|
+
#
|
11
|
+
# Define an OPTION_PARSER constant, which is an instance of an
|
12
|
+
# OptionParser
|
13
|
+
#
|
14
|
+
module MultiCommand
|
15
|
+
def process_subcommand
|
16
|
+
args = parse_options(option_parser)
|
17
|
+
exit unless args
|
18
|
+
|
19
|
+
command = args.shift
|
20
|
+
command_method = subcommands.find { |c| c == command }
|
21
|
+
|
22
|
+
unless command_method
|
23
|
+
ui.warn option_parser.to_s, prefix: false
|
24
|
+
exit 1
|
25
|
+
end
|
26
|
+
|
27
|
+
send command, *args
|
28
|
+
end
|
29
|
+
|
30
|
+
def fail_options!
|
31
|
+
ui.warn option_parser.to_s, prefix: false
|
32
|
+
exit 1
|
33
|
+
end
|
34
|
+
|
35
|
+
def option_parser
|
36
|
+
self.class.const_get('OPTION_PARSER')
|
37
|
+
end
|
38
|
+
|
39
|
+
def subcommands
|
40
|
+
self.class.const_get('COMMANDS')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
require_relative 'multi_command'
|
3
|
+
|
4
|
+
module Vagrant
|
5
|
+
module Smartos
|
6
|
+
module Zones
|
7
|
+
module Command
|
8
|
+
class Smartos < Vagrant.plugin('2', :command)
|
9
|
+
include MultiCommand
|
10
|
+
|
11
|
+
attr_accessor :host, :ui
|
12
|
+
|
13
|
+
COMMANDS = %w(latest list install).freeze
|
14
|
+
|
15
|
+
OPTION_PARSER = OptionParser.new do |o|
|
16
|
+
o.banner = 'Usage: vagrant smartos [name]'
|
17
|
+
o.separator ''
|
18
|
+
o.separator 'Commands:'
|
19
|
+
o.separator ' latest show the latest remote SmartOS platform image'
|
20
|
+
o.separator ' list show installed SmartOS platform images'
|
21
|
+
o.separator ' install [image] install SmartOS platform image'
|
22
|
+
o.separator ''
|
23
|
+
o.separator 'Options:'
|
24
|
+
o.separator ''
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.synopsis
|
28
|
+
'Manage SmartOS platform images'
|
29
|
+
end
|
30
|
+
|
31
|
+
def execute
|
32
|
+
process_subcommand
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def host
|
38
|
+
@env.host
|
39
|
+
end
|
40
|
+
|
41
|
+
def install(image)
|
42
|
+
if image.nil?
|
43
|
+
ui.warn 'No image given'
|
44
|
+
ui.warn ''
|
45
|
+
ui.warn OPTION_PARSER.to_s
|
46
|
+
exit 1
|
47
|
+
end
|
48
|
+
|
49
|
+
return ui.warn('Unable to install platform image') unless host.capability?(:platform_image_install)
|
50
|
+
host.capability(:platform_image_install, image)
|
51
|
+
end
|
52
|
+
|
53
|
+
def latest(*_args)
|
54
|
+
return ui.warn('Unable to show latest platform image') unless host.capability?(:platform_image_latest)
|
55
|
+
host.capability(:platform_image_latest)
|
56
|
+
end
|
57
|
+
|
58
|
+
def list(*_args)
|
59
|
+
return ui.warn('Unable to list platform image') unless host.capability?(:platform_image_list)
|
60
|
+
host.capability(:platform_image_list)
|
61
|
+
end
|
62
|
+
|
63
|
+
def ui
|
64
|
+
@env.ui
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
require 'vagrant/smartos/zones/util/global_zone/ssh_info'
|
3
|
+
require 'vagrant/smartos/zones/models/zone'
|
4
|
+
require 'vagrant/util/ssh'
|
5
|
+
|
6
|
+
module Vagrant
|
7
|
+
module Smartos
|
8
|
+
module Zones
|
9
|
+
module Command
|
10
|
+
class Zlogin < Vagrant.plugin('2', :command)
|
11
|
+
OPTION_PARSER = OptionParser.new do |o|
|
12
|
+
o.banner = 'Usage: vagrant zlogin [name]'
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.synopsis
|
16
|
+
'Log into a SmartOS local zone'
|
17
|
+
end
|
18
|
+
|
19
|
+
def execute
|
20
|
+
argv = parse_options(OPTION_PARSER)
|
21
|
+
return unless argv
|
22
|
+
|
23
|
+
zone_alias = argv.shift
|
24
|
+
|
25
|
+
with_target_vms('default', single_target: true) do |machine|
|
26
|
+
ssh_info = Util::GlobalZone::SSHInfo.new(machine.provider, machine.config, machine.env).to_hash
|
27
|
+
zone = Models::Zone.find(machine, zone_alias)
|
28
|
+
Vagrant::Util::SSH.exec(ssh_info, extra_args: ['-t', "pfexec zlogin -l vagrant #{zone.uuid}"])
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|