vagrant-smartos-zones 0.0.1.pre.21
Sign up to get free protection for your applications and to get access to all the features.
- 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,153 @@
|
|
1
|
+
#!/usr/node/bin/node
|
2
|
+
// -*- mode: javascript; tab-width: 4; indent-tabs-mode: 1; st-rulers: [80] -*-
|
3
|
+
|
4
|
+
// require
|
5
|
+
var exec = require('child_process').exec;
|
6
|
+
|
7
|
+
// global
|
8
|
+
var zone;
|
9
|
+
var state;
|
10
|
+
var adminIp;
|
11
|
+
var privateIp;
|
12
|
+
var zoneIp;
|
13
|
+
|
14
|
+
function executeNat(mapCmd, rdrCmd, cb)
|
15
|
+
{
|
16
|
+
exec(mapCmd, function (err, _stdout, _stderr) {
|
17
|
+
if (err) {
|
18
|
+
cb(err);
|
19
|
+
} else {
|
20
|
+
exec(rdrCmd, function (err, _stdout, _stderr) {
|
21
|
+
if (err) {
|
22
|
+
cb(err);
|
23
|
+
} else {
|
24
|
+
cb();
|
25
|
+
}
|
26
|
+
});
|
27
|
+
}
|
28
|
+
});
|
29
|
+
}
|
30
|
+
|
31
|
+
function enableAdminNat(cb)
|
32
|
+
{
|
33
|
+
var mapCmd = 'echo "map e1000g0 0/0 -> ' + adminIp + '/32" | ipnat -f -';
|
34
|
+
var rdrCmd = 'echo "rdr e1000g0 0/0 -> ' + zoneIp + '" | ipnat -f -';
|
35
|
+
|
36
|
+
executeNat(mapCmd, rdrCmd, cb);
|
37
|
+
}
|
38
|
+
|
39
|
+
function disableAdminNat(cb)
|
40
|
+
{
|
41
|
+
var mapCmd = 'echo "map e1000g0 0/0 -> ' + adminIp + '/32" | ipnat -r -f -';
|
42
|
+
var rdrCmd = 'echo "rdr e1000g0 0/0 -> ' + zoneIp + '" | ipnat -r -f -';
|
43
|
+
|
44
|
+
executeNat(mapCmd, rdrCmd, cb);
|
45
|
+
}
|
46
|
+
|
47
|
+
function enablePrivateNat(cb)
|
48
|
+
{
|
49
|
+
if (!privateIp) {
|
50
|
+
cb();
|
51
|
+
return;
|
52
|
+
}
|
53
|
+
|
54
|
+
var mapCmd = 'echo "map e1000g1 0/0 -> ' + privateIp + '/32" | ipnat -f -';
|
55
|
+
var rdrCmd = 'echo "rdr e1000g1 0/0 -> ' + zoneIp + '" | ipnat -f -';
|
56
|
+
|
57
|
+
executeNat(mapCmd, rdrCmd, cb);
|
58
|
+
}
|
59
|
+
|
60
|
+
function disablePrivateNat(cb)
|
61
|
+
{
|
62
|
+
if (!privateIp) {
|
63
|
+
cb();
|
64
|
+
return;
|
65
|
+
}
|
66
|
+
|
67
|
+
var mapCmd = 'echo "map e1000g1 0/0 -> ' + privateIp + '/32" | ipnat -r -f -';
|
68
|
+
var rdrCmd = 'echo "rdr e1000g1 0/0 -> ' + zoneIp + '" | ipnat -r -f -';
|
69
|
+
|
70
|
+
executeNat(mapCmd, rdrCmd, cb);
|
71
|
+
}
|
72
|
+
|
73
|
+
function probeAddresses(cb)
|
74
|
+
{
|
75
|
+
var finished = function () {
|
76
|
+
if (adminIp != null && privateIp != null && zoneIp != null) {
|
77
|
+
cb();
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
// probe adminIp
|
82
|
+
exec("ipadm show-addr e1000g0/ -p -o ADDR | sed 's/\\\/.*//'", function (err, stdout, stderr) {
|
83
|
+
if (err) {
|
84
|
+
adminIp = false;
|
85
|
+
} else {
|
86
|
+
adminIp = stdout.trim();
|
87
|
+
}
|
88
|
+
finished();
|
89
|
+
});
|
90
|
+
|
91
|
+
// probe privateIP
|
92
|
+
exec("ipadm show-addr e1000g1/ -p -o ADDR | sed 's/\\\/.*//'", function (err, stdout, stderr) {
|
93
|
+
if (err) {
|
94
|
+
privateIp = false;
|
95
|
+
} else {
|
96
|
+
privateIp = stdout.trim();
|
97
|
+
}
|
98
|
+
finished();
|
99
|
+
});
|
100
|
+
|
101
|
+
// probe zoneIP
|
102
|
+
exec('vmadm get ' + zone + ' | json nics[0].ip', function (err, stdout, stderr) {
|
103
|
+
if (err) {
|
104
|
+
zoneIp = false;
|
105
|
+
} else {
|
106
|
+
zoneIp = stdout.trim();
|
107
|
+
}
|
108
|
+
finished();
|
109
|
+
});
|
110
|
+
}
|
111
|
+
|
112
|
+
function main()
|
113
|
+
{
|
114
|
+
var data = process.argv[2];
|
115
|
+
|
116
|
+
if (!data) {
|
117
|
+
process.exit(1);
|
118
|
+
}
|
119
|
+
|
120
|
+
data = data.trim().split(':');
|
121
|
+
|
122
|
+
zone = data[0];
|
123
|
+
state = data[1];
|
124
|
+
|
125
|
+
probeAddresses(function () {
|
126
|
+
if (state == 'up') {
|
127
|
+
enableAdminNat(function (err) {
|
128
|
+
if (err) {
|
129
|
+
console.log('error enabling admin nat: ' + err.message);
|
130
|
+
}
|
131
|
+
});
|
132
|
+
enablePrivateNat(function (err) {
|
133
|
+
if (err) {
|
134
|
+
console.log('error enabling private nat: ' + err.message);
|
135
|
+
}
|
136
|
+
});
|
137
|
+
} else {
|
138
|
+
disableAdminNat(function (err) {
|
139
|
+
if (err) {
|
140
|
+
console.log('error disabling admin nat: ' + err.message);
|
141
|
+
}
|
142
|
+
});
|
143
|
+
disablePrivateNat(function (err) {
|
144
|
+
if (err) {
|
145
|
+
console.log('error disabling private nat: ' + err.message);
|
146
|
+
}
|
147
|
+
});
|
148
|
+
}
|
149
|
+
});
|
150
|
+
|
151
|
+
}
|
152
|
+
|
153
|
+
main();
|
@@ -0,0 +1,41 @@
|
|
1
|
+
en:
|
2
|
+
vagrant:
|
3
|
+
smartos:
|
4
|
+
zones:
|
5
|
+
commands:
|
6
|
+
zones:
|
7
|
+
list: |-
|
8
|
+
name state uuid
|
9
|
+
%{zones}
|
10
|
+
create: |-
|
11
|
+
Created zone with name %{name}
|
12
|
+
uuid: %{uuid}
|
13
|
+
state: %{state}
|
14
|
+
brand: %{brand}
|
15
|
+
image: %{image}
|
16
|
+
destroyed: |-
|
17
|
+
Zone destroyed %{name} %{uuid}
|
18
|
+
show: |-
|
19
|
+
name: %{name}
|
20
|
+
state: %{state}
|
21
|
+
uuid: %{uuid}
|
22
|
+
brand: %{brand}
|
23
|
+
image: %{image}
|
24
|
+
snapshot:
|
25
|
+
list: |-
|
26
|
+
name created at used zone
|
27
|
+
%{snapshots}
|
28
|
+
create: |-
|
29
|
+
Creating snapshot with name %{name}
|
30
|
+
destroy: |-
|
31
|
+
Destroying snapshot with name %{name}
|
32
|
+
rollback: |-
|
33
|
+
Rolling back zone %{zonename} to snapshot %{name}
|
34
|
+
start: |-
|
35
|
+
Started zone %{name} %{uuid}
|
36
|
+
stop: |-
|
37
|
+
Stopped zone %{name} %{uuid}
|
38
|
+
warning:
|
39
|
+
zone_not_found: |-
|
40
|
+
Unable to find zone with name %{name}
|
41
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'vagrant/smartos/zones/models/zone'
|
2
|
+
require 'vagrant/smartos/zones/util/zone_user'
|
3
|
+
require 'vagrant/smartos/zones/util/zone_group'
|
4
|
+
require 'vagrant/smartos/zones/action/helper'
|
5
|
+
|
6
|
+
# rubocop:disable all
|
7
|
+
module Vagrant
|
8
|
+
module Smartos
|
9
|
+
module Zones
|
10
|
+
module Action
|
11
|
+
class ConfigureZoneSyncedFolders
|
12
|
+
include Helper
|
13
|
+
|
14
|
+
def initialize(app, env)
|
15
|
+
@app = app
|
16
|
+
@env = env
|
17
|
+
end
|
18
|
+
|
19
|
+
def call(env)
|
20
|
+
app.call(env)
|
21
|
+
|
22
|
+
if zones_supported?
|
23
|
+
zone = Vagrant::Smartos::Zones::Models::Zone.find(machine, machine.config.zone.name)
|
24
|
+
machine.config.zone.synced_folders.each do |folder|
|
25
|
+
configure_synced_folder(zone, folder)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def configure_synced_folder(zone, folder)
|
31
|
+
host_path, guest_path, args = folder
|
32
|
+
path = "/zones/#{zone.uuid}/root#{guest_path}"
|
33
|
+
type = args.delete(:type) { |el| :rsync }
|
34
|
+
|
35
|
+
username = args[:owner] || 'vagrant'
|
36
|
+
groupname = args[:group] || 'vagrant'
|
37
|
+
user = Vagrant::Smartos::Zones::Util::ZoneUser.new(machine, zone).find(username)
|
38
|
+
group = Vagrant::Smartos::Zones::Util::ZoneGroup.new(machine, zone).find(groupname)
|
39
|
+
|
40
|
+
machine.config.vm.synced_folders[path] = {
|
41
|
+
disabled: false,
|
42
|
+
guestpath: path,
|
43
|
+
hostpath: host_path,
|
44
|
+
type: type.to_sym,
|
45
|
+
owner: user.uid,
|
46
|
+
group: group.gid
|
47
|
+
}.merge(args || {})
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'vagrant/smartos/zones/action/helper'
|
2
|
+
|
3
|
+
# This action installs a vnic in the global zone, used by
|
4
|
+
# local zones. The executed code needs to happen after
|
5
|
+
# networks have been configured in the global zone.
|
6
|
+
#
|
7
|
+
# Zone creation is hooked onto this.
|
8
|
+
module Vagrant
|
9
|
+
module Smartos
|
10
|
+
module Zones
|
11
|
+
module Action
|
12
|
+
class CreateGZVnic
|
13
|
+
include Helper
|
14
|
+
|
15
|
+
def initialize(app, env)
|
16
|
+
@app = app
|
17
|
+
@env = env
|
18
|
+
end
|
19
|
+
|
20
|
+
def call(env)
|
21
|
+
app.call(env)
|
22
|
+
guest.capability(:create_gz_vnic) if zones_supported?
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'vagrant/smartos/zones/action/helper'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Action
|
7
|
+
class ForwardGZPorts
|
8
|
+
include VagrantPlugins::ProviderVirtualBox::Util::CompileForwardedPorts
|
9
|
+
include Helper
|
10
|
+
|
11
|
+
def initialize(app, env)
|
12
|
+
@app = app
|
13
|
+
@env = env
|
14
|
+
end
|
15
|
+
|
16
|
+
# This middleware sets up a VirtualBox port forward to 2222 in the global zone.
|
17
|
+
# ipnat in the global zone is configured to route this to 22 in the global zone,
|
18
|
+
# even when all other ports are forwarded to a zone.
|
19
|
+
def call(env)
|
20
|
+
configure_gz_port_forward if zone_configured?
|
21
|
+
|
22
|
+
app.call(env)
|
23
|
+
end
|
24
|
+
|
25
|
+
def configure_gz_port_forward
|
26
|
+
machine.ui.info 'Configuring a port forward to talk to the Global Zone'
|
27
|
+
machine.config.vm.network :forwarded_port, port_forward_options
|
28
|
+
end
|
29
|
+
|
30
|
+
def network
|
31
|
+
machine.config.vm.networks.first
|
32
|
+
end
|
33
|
+
|
34
|
+
def port_forward_options
|
35
|
+
scoped_hash_override(network[1], :virtualbox).merge(
|
36
|
+
id: 'gz_ssh',
|
37
|
+
guest: machine.config.global_zone.ssh_port,
|
38
|
+
host: machine.config.global_zone.forwarded_ssh_port,
|
39
|
+
auto_correct: true
|
40
|
+
)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Smartos
|
3
|
+
module Zones
|
4
|
+
module Action
|
5
|
+
module Helper
|
6
|
+
attr_reader :app, :env
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def machine
|
11
|
+
@machine ||= env[:machine]
|
12
|
+
end
|
13
|
+
|
14
|
+
def guest
|
15
|
+
@guest ||= machine.guest
|
16
|
+
end
|
17
|
+
|
18
|
+
def zones_supported?
|
19
|
+
@zones_supported ||= guest.capability?(:imgadm_import)
|
20
|
+
end
|
21
|
+
|
22
|
+
def zone_configured?
|
23
|
+
!!machine.config.zone.name
|
24
|
+
end
|
25
|
+
|
26
|
+
def single_zone_mode?
|
27
|
+
!!machine.config.zone.name
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'vagrant/smartos/zones/action/helper'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Action
|
7
|
+
class ImgadmImport
|
8
|
+
include Helper
|
9
|
+
|
10
|
+
def initialize(app, env)
|
11
|
+
@app = app
|
12
|
+
@env = env
|
13
|
+
end
|
14
|
+
|
15
|
+
def call(env)
|
16
|
+
app.call(env)
|
17
|
+
env[:ui].info "Checking if machine supports zones: #{zones_supported? ? 'yes' : 'no'}"
|
18
|
+
guest.capability(:imgadm_import) if zones_supported?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'vagrant/smartos/zones/action/helper'
|
2
|
+
require 'vagrant/smartos/zones/util/platform_images'
|
3
|
+
|
4
|
+
module Vagrant
|
5
|
+
module Smartos
|
6
|
+
module Zones
|
7
|
+
module Action
|
8
|
+
module VirtualBox
|
9
|
+
class PlatformISO
|
10
|
+
include Helper
|
11
|
+
|
12
|
+
attr_accessor :app, :env, :machine
|
13
|
+
def initialize(app, _env)
|
14
|
+
@app = app
|
15
|
+
end
|
16
|
+
|
17
|
+
def call(env)
|
18
|
+
@env = env
|
19
|
+
@machine = env[:machine]
|
20
|
+
|
21
|
+
if requires_platform_iso?
|
22
|
+
env[:ui].warn 'Remapping platform ISO'
|
23
|
+
machine.provider_config.customizations << remove_dvddrive
|
24
|
+
machine.provider_config.customizations << add_platform_image
|
25
|
+
end
|
26
|
+
|
27
|
+
@app.call(env)
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def requires_platform_iso?
|
33
|
+
machine.config.global_zone.platform_image &&
|
34
|
+
machine.config.vm.communicator == :smartos
|
35
|
+
end
|
36
|
+
|
37
|
+
def remove_dvddrive
|
38
|
+
['pre-boot',
|
39
|
+
['storageattach', :id, '--storagectl', 'IDE Controller', '--port', 1, '--device',
|
40
|
+
0, '--medium', 'none']]
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_platform_image
|
44
|
+
['pre-boot', ['storageattach', :id, '--storagectl', 'IDE Controller',
|
45
|
+
'--port', 1, '--device', 0, '--type', 'dvddrive',
|
46
|
+
'--medium', platform_image.to_s]]
|
47
|
+
end
|
48
|
+
|
49
|
+
def platform_image
|
50
|
+
Util::PlatformImages.new(env, machine).get_platform_image(machine.config.global_zone.platform_image)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'vagrant/smartos/zones/action/helper'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Action
|
7
|
+
module Zone
|
8
|
+
class Create
|
9
|
+
include Helper
|
10
|
+
|
11
|
+
def initialize(app, env)
|
12
|
+
@app = app
|
13
|
+
@env = env
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
app.call(env)
|
18
|
+
guest.capability(:zone__create) if zones_supported?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'vagrant/smartos/zones/action/helper'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Action
|
7
|
+
module Zone
|
8
|
+
class Start
|
9
|
+
include Helper
|
10
|
+
|
11
|
+
def initialize(app, env)
|
12
|
+
@app = app
|
13
|
+
@env = env
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
app.call(env)
|
18
|
+
guest.capability(:zone__start) if zones_supported?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'vagrant/smartos/zones/action/helper'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Action
|
7
|
+
module Zone
|
8
|
+
class Stop
|
9
|
+
include Helper
|
10
|
+
|
11
|
+
def initialize(app, env)
|
12
|
+
@app = app
|
13
|
+
@env = env
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
guest.capability(:zone__stop) if zones_supported?
|
18
|
+
app.call(env)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'vagrant/smartos/zones/action/helper'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Action
|
7
|
+
module ZoneGate
|
8
|
+
class Enable
|
9
|
+
include Helper
|
10
|
+
|
11
|
+
def initialize(app, env)
|
12
|
+
@app = app
|
13
|
+
@env = env
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
app.call(env)
|
18
|
+
return unless guest.capability?(:zone_gate_enable)
|
19
|
+
guest.capability(:zone_gate_enable) if single_zone_mode?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'vagrant/smartos/zones/action/helper'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Smartos
|
5
|
+
module Zones
|
6
|
+
module Action
|
7
|
+
module ZoneGate
|
8
|
+
class Install
|
9
|
+
include Helper
|
10
|
+
|
11
|
+
def initialize(app, env)
|
12
|
+
@app = app
|
13
|
+
@env = env
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
app.call(env)
|
18
|
+
return unless guest.capability?(:zone_gate_install)
|
19
|
+
guest.capability(:zone_gate_install) if zones_supported?
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Smartos
|
3
|
+
module Zones
|
4
|
+
module Action
|
5
|
+
require_relative 'action/configure_zone_synced_folders'
|
6
|
+
require_relative 'action/create_gz_vnic'
|
7
|
+
require_relative 'action/forward_gz_ports'
|
8
|
+
require_relative 'action/imgadm_import'
|
9
|
+
require_relative 'action/zone/create'
|
10
|
+
require_relative 'action/zone/start'
|
11
|
+
require_relative 'action/zone/stop'
|
12
|
+
require_relative 'action/zone_gate/enable'
|
13
|
+
require_relative 'action/zone_gate/install'
|
14
|
+
require_relative 'action/virtualbox/platform_iso'
|
15
|
+
|
16
|
+
class << self
|
17
|
+
def configure_zone_synced_folders
|
18
|
+
@configure_zone_synced_folders ||= ::Vagrant::Action::Builder.new.tap do |b|
|
19
|
+
b.use Vagrant::Smartos::Zones::Action::ConfigureZoneSyncedFolders
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def create_gz_vnic
|
24
|
+
@configure_zone_synced_folders ||= ::Vagrant::Action::Builder.new.tap do |b|
|
25
|
+
b.use Vagrant::Smartos::Zones::Action::CreateGZVnic
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def enable_zone_gate
|
30
|
+
@enable_zone_gate ||= ::Vagrant::Action::Builder.new.tap do |b|
|
31
|
+
b.use Vagrant::Smartos::Zones::Action::ZoneGate::Enable
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def forward_gz_ports
|
36
|
+
@forward_gz_ports ||= ::Vagrant::Action::Builder.new.tap do |b|
|
37
|
+
b.use Vagrant::Smartos::Zones::Action::ForwardGZPorts
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def install_zone_gate
|
42
|
+
@install_zone_gate ||= ::Vagrant::Action::Builder.new.tap do |b|
|
43
|
+
b.use Vagrant::Smartos::Zones::Action::ZoneGate::Install
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def virtualbox_platform_iso
|
48
|
+
@virtualbox_platform_iso ||= ::Vagrant::Action::Builder.new.tap do |b|
|
49
|
+
b.use Vagrant::Smartos::Zones::Action::VirtualBox::PlatformISO
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def zone_create
|
54
|
+
@zone_create ||= ::Vagrant::Action::Builder.new.tap do |b|
|
55
|
+
b.use Vagrant::Smartos::Zones::Action::Zone::Create
|
56
|
+
b.use Vagrant::Smartos::Zones::Action::ImgadmImport
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def zone_start
|
61
|
+
@zone_start ||= ::Vagrant::Action::Builder.new.tap do |b|
|
62
|
+
b.use Vagrant::Smartos::Zones::Action::Zone::Start
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def zone_stop
|
67
|
+
@zone_stop ||= ::Vagrant::Action::Builder.new.tap do |b|
|
68
|
+
b.use Vagrant::Smartos::Zones::Action::Zone::Stop
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Smartos
|
3
|
+
module Zones
|
4
|
+
module Cap
|
5
|
+
class Base
|
6
|
+
attr_reader :machine
|
7
|
+
|
8
|
+
def self.cap_method(method_name)
|
9
|
+
self.class.send :define_method, method_name do |machine|
|
10
|
+
new(machine).execute
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(machine)
|
15
|
+
@machine = machine
|
16
|
+
end
|
17
|
+
|
18
|
+
def ui
|
19
|
+
machine.ui
|
20
|
+
end
|
21
|
+
|
22
|
+
def sudo
|
23
|
+
machine.config.smartos.suexec_cmd
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|