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
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c7231d953d2c1a01f6e9a8255ca6d60684dd0f47
|
4
|
+
data.tar.gz: 5adb6ac03013fa4a5e9b3455be9ef500a85cf568
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 20d000f49065dedd3c83f338fb59c3ddc07f0def75f35d19d31a9f74e83dcd5eb598481b498808aafd54a4c33a2dd8321cd74b2d4d54d0130ac0acadb8ba60c3
|
7
|
+
data.tar.gz: ea6343b9d7a8de20201bc5be827f0ab2a9c2132f18553fbf1cb44468b396327876c3800e3ae353ee8a884fb146f4eb41922706dbec26238be13c36531e8c21c8
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Eric Saxby
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,268 @@
|
|
1
|
+
vagrant-smartos-zones
|
2
|
+
=====================
|
3
|
+
|
4
|
+
Manage SmartOS zones using Vagrant.
|
5
|
+
|
6
|
+
## Dependencies
|
7
|
+
|
8
|
+
This plugin depends on using a SmartOS global zone built to be vagrant
|
9
|
+
compatible.
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
config.vm.box = "livinginthepast/smartos"
|
13
|
+
```
|
14
|
+
|
15
|
+
See [Vagrant Cloud](https://vagrantcloud.com/livinginthepast) for some boxes.
|
16
|
+
|
17
|
+
This plugin also depends on Vagrant recognizing the SmartOS guest. This
|
18
|
+
is available in Vagrant 1.5.3 or newer.
|
19
|
+
|
20
|
+
Any outstanding issues with SmartOS integration in the current released
|
21
|
+
version of Vagrant can be hacked into shape with the
|
22
|
+
[vagrant-smartos/vagrant-smartos-guest](https://github.com/vagrant-smartos/vagrant-smartos-guest)
|
23
|
+
plugin. This tracks fixes that have been submitted as pull requests to
|
24
|
+
Vagrant but may have not been yet released.
|
25
|
+
|
26
|
+
## Quick Start Installation
|
27
|
+
|
28
|
+
```bash
|
29
|
+
vagrant plugin install vagrant-smartos-zones
|
30
|
+
mkdir <directory_name>
|
31
|
+
cd <directory_name>
|
32
|
+
curl -sO https://raw.githubusercontent.com/vagrant-smartos/vagrant-smartos-zones/master/examples/Vagrantfile
|
33
|
+
vagrant up
|
34
|
+
vagrant ssh
|
35
|
+
```
|
36
|
+
|
37
|
+
|
38
|
+
## Slow Start Installation
|
39
|
+
|
40
|
+
```bash
|
41
|
+
vagrant plugin install vagrant-smartos-zones
|
42
|
+
```
|
43
|
+
|
44
|
+
If you are using a development version of vagrant, or would like to use
|
45
|
+
an unreleased version of this plugin, add the following to your Gemfile.
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
group :plugins do
|
49
|
+
gem 'vagrant-smartos-zones', github: 'vagrant-smartos/vagrant-smartos-zones'
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
In a local checkout of this repository, the following will work:
|
54
|
+
|
55
|
+
```bash
|
56
|
+
gem install bundler
|
57
|
+
bundle
|
58
|
+
bundle exec vagrant up
|
59
|
+
bundle exec vagrant ssh
|
60
|
+
```
|
61
|
+
|
62
|
+
Please note that this will install vagrant into your local ruby
|
63
|
+
environment, which may overwrite or conflict with the normal vagrant
|
64
|
+
version installed in your system.
|
65
|
+
|
66
|
+
|
67
|
+
## Usage
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
Vagrant.configure('2') do |config|
|
71
|
+
config.vm.provider "virtualbox" do |v|
|
72
|
+
v.memory = 3072
|
73
|
+
end
|
74
|
+
|
75
|
+
# See https://vagrantcloud.com/livinginthepast for SmartOS boxes
|
76
|
+
config.vm.box = "livinginthepast/smartos"
|
77
|
+
config.vm.synced_folder ".", "/vagrant", disabled: true
|
78
|
+
|
79
|
+
# This is required for the commands that talk to the global zone
|
80
|
+
config.vm.communicator = 'smartos'
|
81
|
+
|
82
|
+
# livinginthepast boxes include a default platform_image. Set
|
83
|
+
# here to download/use a different image.
|
84
|
+
# config.global_zone.platform_image = 'latest'
|
85
|
+
# config.global_zone.platform_image = '20140312T071408Z'
|
86
|
+
|
87
|
+
config.zone.name = 'base64'
|
88
|
+
config.zone.brand = 'joyent'
|
89
|
+
config.zone.image = 'c353c568-69ad-11e3-a248-db288786ea63'
|
90
|
+
config.zone.memory = 2048
|
91
|
+
config.zone.disk_size = 5
|
92
|
+
|
93
|
+
config.zone.synced_folder ".", "/vagrant", type: 'rsync'
|
94
|
+
end
|
95
|
+
```
|
96
|
+
|
97
|
+
Download or interact with SmartOS platform images:
|
98
|
+
|
99
|
+
```bash
|
100
|
+
vagrant smartos latest
|
101
|
+
vagrant smartos list
|
102
|
+
vagrant smartos install [platform_image]
|
103
|
+
```
|
104
|
+
|
105
|
+
Interact with zones running in a box:
|
106
|
+
|
107
|
+
```bash
|
108
|
+
vagrant zones list
|
109
|
+
vagrant zones show [name]
|
110
|
+
vagrant zones start [name]
|
111
|
+
vagrant zones stop [name]
|
112
|
+
```
|
113
|
+
|
114
|
+
## Single zone usage
|
115
|
+
|
116
|
+
When a single zone is configured (currently the only configuration
|
117
|
+
possible), a `zonegate` service is enabled in the global zone. This
|
118
|
+
makes it so that inbound packets in the global zone are forwarded to the
|
119
|
+
zone.
|
120
|
+
|
121
|
+
#### vagrant ssh
|
122
|
+
|
123
|
+
When `zonegate` is disabled or when a zone is not running, then `vagrant
|
124
|
+
ssh` will access the global zone. When a zone is running while
|
125
|
+
`zonegate` is enabled, then `vagrant ssh` will access the zone.
|
126
|
+
|
127
|
+
```bash
|
128
|
+
vagrant ssh
|
129
|
+
```
|
130
|
+
|
131
|
+
#### vagrant global-zone ssh
|
132
|
+
|
133
|
+
A secondary port forward is installed in VirtualBox, which allows us to
|
134
|
+
access the global zone even when `zonegate` forwards normal ssh to the
|
135
|
+
zone.
|
136
|
+
|
137
|
+
```bash
|
138
|
+
vagrant global-zone ssh
|
139
|
+
```
|
140
|
+
|
141
|
+
#### vagrant zlogin [name]
|
142
|
+
|
143
|
+
This command accesses the zone, but through the global zone. It uses the
|
144
|
+
global zone ssh port to connect to the global zone, then runs `zlogin`
|
145
|
+
to access the zone.
|
146
|
+
|
147
|
+
This can by handy when, for instance, SSH becomes broken in the zone.
|
148
|
+
|
149
|
+
```bash
|
150
|
+
vagrant zlogin [name]
|
151
|
+
```
|
152
|
+
|
153
|
+
## Platform images
|
154
|
+
|
155
|
+
This plugin expects the Vagrant box to boot SmartOS from a mounted ISO
|
156
|
+
file, known as a platform image. To facilitate updates to the platform
|
157
|
+
image without having to continually create new boxes, the plugin
|
158
|
+
downloads platform image into a user's `.vagrant.d` directory, and then
|
159
|
+
swaps out the ISO mounted in the Vagrant box with the one configured in
|
160
|
+
the Vagrantfile.
|
161
|
+
|
162
|
+
To help with this, `vagrant-smartos-zones` provides the `vagrant
|
163
|
+
smartos` subcommand.
|
164
|
+
|
165
|
+
Show the name of the most up-to-date platform version hosted by Joyent:
|
166
|
+
|
167
|
+
```bash
|
168
|
+
vagrant smartos latest
|
169
|
+
```
|
170
|
+
|
171
|
+
List all locally-installed platform images:
|
172
|
+
|
173
|
+
```bash
|
174
|
+
vagrant smartos list
|
175
|
+
```
|
176
|
+
|
177
|
+
Download a new platform image:
|
178
|
+
|
179
|
+
```bash
|
180
|
+
vagrant smartos install [platform-image]
|
181
|
+
```
|
182
|
+
|
183
|
+
#### Using an arbitrary platform image url
|
184
|
+
|
185
|
+
An arbitrary URL can be used to download SmartOS platform images.
|
186
|
+
When doing so, no checksum validation is performed (so if the image
|
187
|
+
is interrupted when downloading, you may end up with a corrupt ISO
|
188
|
+
file).
|
189
|
+
|
190
|
+
When using an arbitrary URL for the platform image, make sure you set
|
191
|
+
both `platform_image` and `platform_image_url` and include the full
|
192
|
+
URL to the ISO file. In this case, `platform_image` will be used to name
|
193
|
+
(and find) the file in the local file system.
|
194
|
+
|
195
|
+
```ruby
|
196
|
+
config.global_zone.platform_image = 'omglol-2131234'
|
197
|
+
config.global_zone.platform_image_url = 'http://example.com/path/to/smartos-2131234.iso'
|
198
|
+
```
|
199
|
+
|
200
|
+
## Synced Folders
|
201
|
+
|
202
|
+
Vagrant allows synced folders into any SmartOS guest. When the guest is
|
203
|
+
a global zone, be aware that the root partition is a RAM disk of a
|
204
|
+
little more than 256M.
|
205
|
+
|
206
|
+
#### VirtualBox guest additions
|
207
|
+
|
208
|
+
Shared folders using VirtualBox guest additions currently do not work.
|
209
|
+
|
210
|
+
#### Rsync
|
211
|
+
|
212
|
+
In single-zone environments, synced folders of type `rsync` work as
|
213
|
+
normal. `zonegate` forwards all packets into the zone, and the built-in
|
214
|
+
synced folders code in Vagrant runs after the zone is configured.
|
215
|
+
|
216
|
+
```ruby
|
217
|
+
# Vagrantfile
|
218
|
+
config.vm.synced_folder ".", "/vagrant", type: "rsync"
|
219
|
+
```
|
220
|
+
|
221
|
+
#### NFS
|
222
|
+
|
223
|
+
Pending.
|
224
|
+
|
225
|
+
## User management
|
226
|
+
|
227
|
+
The vagrant box with the global zone requires a `vagrant` user and
|
228
|
+
group with which to connect. This user should have `Primary
|
229
|
+
Administrator` privileges. When creating a local zone, a `vagrant`
|
230
|
+
user and group are also created in the zone.
|
231
|
+
|
232
|
+
## References / Alternatives
|
233
|
+
|
234
|
+
Any success of this project depends heavily on the work of others,
|
235
|
+
which I've either learned from or pulled in directly.
|
236
|
+
|
237
|
+
* https://github.com/joshado/vagrant-smartos - Vagrant plugin for
|
238
|
+
managing zones on a global zone running on an arbitary IP.
|
239
|
+
* https://github.com/groundwater/vagrant-smartos - Scripts for
|
240
|
+
creating stand-alone boxes where GZ networking is twerked to pretend
|
241
|
+
that the local zone is the only thing in the box.
|
242
|
+
* http://dlc-int.openindiana.org/aszeszo/vagrant - aszeszo's work,
|
243
|
+
which led to the above repo.
|
244
|
+
* http://cuddletech.com/blog/?p=821 - [@benr](https://github.com/benr)'s
|
245
|
+
writeup of the above work.
|
246
|
+
* http://vagrantup.com - Thank you so much to Michell Hashimoto for
|
247
|
+
making Vagrant in the first place.
|
248
|
+
|
249
|
+
Please forgive any lapses of acknowledgment. I've read so many blog
|
250
|
+
posts and so much source code in the course of working on this, many
|
251
|
+
references have fallen by the wayside.
|
252
|
+
|
253
|
+
## Caveats
|
254
|
+
|
255
|
+
* Only one local zone per box. Working on it.
|
256
|
+
* Usage may change with each prerelease version until I get it
|
257
|
+
right. Until a non .pre version is released, check commit logs.
|
258
|
+
|
259
|
+
## Contributing
|
260
|
+
|
261
|
+
1. Fork it ( https://github.com/vagrant-smartos/vagrant-smartos-zones/fork )
|
262
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
263
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
264
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
265
|
+
5. Create new Pull Request
|
266
|
+
|
267
|
+
When creating a new Pull Request, `/cc @sax` in the notes to make sure
|
268
|
+
I get an email about it.
|
data/Rakefile
ADDED
data/Vagrantfile
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# This Vagrantfile exists for the purposes of development on
|
2
|
+
# this plugin.
|
3
|
+
Vagrant.configure('2') do |config|
|
4
|
+
config.vm.provider 'virtualbox' do |v|
|
5
|
+
v.memory = 2048
|
6
|
+
end
|
7
|
+
|
8
|
+
config.ssh.insert_key = false
|
9
|
+
|
10
|
+
# See https://vagrantcloud.com/livinginthepast for SmartOS boxes
|
11
|
+
config.vm.box = 'livinginthepast/smartos-base64'
|
12
|
+
config.vm.communicator = 'smartos'
|
13
|
+
|
14
|
+
# livinginthepast boxes include a default platform_image. Set
|
15
|
+
# here to download/use a different image.
|
16
|
+
config.global_zone.platform_image = 'latest'
|
17
|
+
|
18
|
+
config.zone.name = 'base64'
|
19
|
+
config.zone.brand = 'joyent'
|
20
|
+
config.zone.image = 'd34c301e-10c3-11e4-9b79-5f67ca448df0'
|
21
|
+
config.zone.memory = 1536
|
22
|
+
config.zone.disk_size = 5
|
23
|
+
|
24
|
+
# config.zone.name = 'lx'
|
25
|
+
# config.zone.brand = 'lx'
|
26
|
+
# config.zone.image = 'b7493690-f019-4612-958b-bab5f844283e'
|
27
|
+
# config.zone.memory = 1536
|
28
|
+
# config.zone.disk_size = 5
|
29
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Vagrant.configure('2') do |config|
|
2
|
+
config.vm.provider 'virtualbox' do |v|
|
3
|
+
v.memory = 2048
|
4
|
+
end
|
5
|
+
|
6
|
+
# See https://vagrantcloud.com/livinginthepast for SmartOS boxes
|
7
|
+
config.vm.box = 'livinginthepast/smartos-base64'
|
8
|
+
config.vm.synced_folder '.', '/vagrant', disabled: true
|
9
|
+
config.vm.communicator = 'smartos'
|
10
|
+
|
11
|
+
config.global_zone.platform_image = 'latest'
|
12
|
+
|
13
|
+
config.zone.name = 'base64'
|
14
|
+
config.zone.brand = 'joyent'
|
15
|
+
config.zone.image = 'd34c301e-10c3-11e4-9b79-5f67ca448df0'
|
16
|
+
config.zone.memory = 1536
|
17
|
+
config.zone.disk_size = 5
|
18
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#^ syntax highlighting
|
3
|
+
|
4
|
+
Vagrant.configure('2') do |config|
|
5
|
+
config.vm.provider 'virtualbox' do |v|
|
6
|
+
v.memory = 2048
|
7
|
+
end
|
8
|
+
|
9
|
+
# See https://vagrantcloud.com/livinginthepast for SmartOS boxes
|
10
|
+
config.vm.box = 'livinginthepast/smartos-base64'
|
11
|
+
config.vm.synced_folder '.', '/vagrant', disabled: true
|
12
|
+
config.vm.communicator = 'smartos'
|
13
|
+
|
14
|
+
config.global_zone.platform_image = 'latest'
|
15
|
+
|
16
|
+
config.zone.name = 'base64'
|
17
|
+
config.zone.brand = 'joyent'
|
18
|
+
config.zone.image = 'd34c301e-10c3-11e4-9b79-5f67ca448df0'
|
19
|
+
config.zone.memory = 1536
|
20
|
+
config.zone.disk_size = 5
|
21
|
+
|
22
|
+
config.vm.provision "shell",
|
23
|
+
inline: "sudo pkgin -y install ruby212 build-essential && gem install chef --no-ri --no-rdoc"
|
24
|
+
|
25
|
+
config.vm.provision :chef_client do |chef|
|
26
|
+
chef.chef_server_url = "#{ENV['CHEF_SERVER_URL']}"
|
27
|
+
chef.validation_key_path = "#{ENV['HOME']}/.ssh/#{ENV['VALIDATION_CLIENT_NAME']}.pem"
|
28
|
+
chef.validation_client_name = "#{ENV['VALIDATION_CLIENT_NAME']}"
|
29
|
+
chef.node_name = "#{config.zone.name}-vagrant"
|
30
|
+
chef.provisioning_path = "/etc/chef"
|
31
|
+
chef.add_role("base")
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#^ syntax highlighting
|
3
|
+
|
4
|
+
Vagrant.configure('2') do |config|
|
5
|
+
config.vm.provider 'virtualbox' do |v|
|
6
|
+
v.memory = 2048
|
7
|
+
end
|
8
|
+
|
9
|
+
# See https://vagrantcloud.com/livinginthepast for SmartOS boxes
|
10
|
+
config.vm.box = 'livinginthepast/smartos-base64'
|
11
|
+
config.vm.synced_folder '.', '/vagrant', disabled: true
|
12
|
+
config.vm.communicator = 'smartos'
|
13
|
+
|
14
|
+
config.global_zone.platform_image = 'hourly-20141121'
|
15
|
+
config.global_zone.platform_image_url = 'https://us-east.manta.joyent.com/nahamu/public/smartos/platform-hourly.iso'
|
16
|
+
|
17
|
+
config.zone.name = 'lx'
|
18
|
+
config.zone.brand = 'lx'
|
19
|
+
config.zone.image = 'b7493690-f019-4612-958b-bab5f844283e'
|
20
|
+
config.zone.memory = 1536
|
21
|
+
config.zone.disk_size = 5
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#^ syntax highlighting
|
3
|
+
|
4
|
+
Vagrant.configure('2') do |config|
|
5
|
+
config.vm.provider "virtualbox" do |v|
|
6
|
+
v.memory = 2048
|
7
|
+
end
|
8
|
+
|
9
|
+
# See https://vagrantcloud.com/livinginthepast for SmartOS boxes
|
10
|
+
config.vm.box = "livinginthepast/smartos-base64"
|
11
|
+
config.vm.synced_folder ".", "/vagrant", disabled: true
|
12
|
+
config.vm.communicator = 'smartos'
|
13
|
+
|
14
|
+
config.vm.synced_folder ".", "/vagrant", type: "rsync"
|
15
|
+
|
16
|
+
config.global_zone.platform_image = 'latest'
|
17
|
+
|
18
|
+
config.zone.name = 'base64'
|
19
|
+
config.zone.brand = 'joyent'
|
20
|
+
config.zone.image = 'd34c301e-10c3-11e4-9b79-5f67ca448df0'
|
21
|
+
config.zone.memory = 1536
|
22
|
+
config.zone.disk_size = 5
|
23
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/bash
|
2
|
+
|
3
|
+
dladm create-etherstub stub0
|
4
|
+
dladm create-vnic -l stub0 vnic0
|
5
|
+
ipadm create-if vnic0
|
6
|
+
ipadm create-addr -T static -a 10.0.0.1/24 vnic0/static
|
7
|
+
|
8
|
+
echo 'map e1000g0 10.0.0.0/24 -> 0.0.0.0/32' | ipnat -f -
|
9
|
+
|
10
|
+
# When we SSH into port 2222, ensure that that goes to 22 in the GZ
|
11
|
+
# and is never forwarded to the zone.
|
12
|
+
echo 'rdr e1000g0 0.0.0.0/0 port 2222 -> 10.0.0.1 port 22' | ipnat -f -
|
13
|
+
|
14
|
+
routeadm -u -e ipv4-forwarding
|
15
|
+
routeadm -u -e ipv4-routing
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<?xml version='1.0'?>
|
2
|
+
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
|
3
|
+
<service_bundle type='manifest' name='export'>
|
4
|
+
<service name='vagrant/create-gz-vnic' type='service' version='0'>
|
5
|
+
<create_default_instance enabled='true'/>
|
6
|
+
<single_instance/>
|
7
|
+
<dependency name='fs-local' grouping='require_all' restart_on='error' type='service'>
|
8
|
+
<service_fmri value='svc:/system/filesystem/local'/>
|
9
|
+
</dependency>
|
10
|
+
<dependency name='fs-root' grouping='require_all' restart_on='error' type='service'>
|
11
|
+
<service_fmri value='svc:/system/filesystem/root'/>
|
12
|
+
</dependency>
|
13
|
+
<dependent name='zones' restart_on='none' grouping='optional_all'>
|
14
|
+
<service_fmri value='svc:/system/zones'/>
|
15
|
+
</dependent>
|
16
|
+
<method_context/>
|
17
|
+
<exec_method name='start' type='method' exec='/opt/custom/method/create_gz_vnic' timeout_seconds='60'/>
|
18
|
+
<exec_method name='stop' type='method' exec=':true' timeout_seconds='60'/>
|
19
|
+
<property_group name='startd' type='framework'>
|
20
|
+
<propval name='duration' type='astring' value='transient'/>
|
21
|
+
<propval name='ignore_error' type='astring' value='signal'/>
|
22
|
+
</property_group>
|
23
|
+
<property_group name='application' type='application'/>
|
24
|
+
<stability value='Evolving'/>
|
25
|
+
<template>
|
26
|
+
<common_name>
|
27
|
+
<loctext xml:lang='C'>Ensure </loctext>
|
28
|
+
</common_name>
|
29
|
+
</template>
|
30
|
+
</service>
|
31
|
+
</service_bundle>
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<?xml version='1.0'?>
|
2
|
+
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
|
3
|
+
<service_bundle type='manifest' name='export'>
|
4
|
+
<service name='site/zonegate' type='service' version='0'>
|
5
|
+
<create_default_instance enabled='false'/>
|
6
|
+
<single_instance/>
|
7
|
+
<dependency name='fs-local' grouping='require_all' restart_on='error' type='service'>
|
8
|
+
<service_fmri value='svc:/system/filesystem/local'/>
|
9
|
+
</dependency>
|
10
|
+
<dependency name='fs-root' grouping='require_all' restart_on='error' type='service'>
|
11
|
+
<service_fmri value='svc:/system/filesystem/root'/>
|
12
|
+
</dependency>
|
13
|
+
<dependency name='ipfilter' grouping='require_all' restart_on='error' type='service'>
|
14
|
+
<service_fmri value='svc:/network/ipfilter'/>
|
15
|
+
</dependency>
|
16
|
+
<method_context>
|
17
|
+
<method_environment>
|
18
|
+
<envvar name="PATH" value="/opt/custom/method/zonegate:/usr/bin:/usr/sbin"/>
|
19
|
+
</method_environment>
|
20
|
+
</method_context>
|
21
|
+
<exec_method name='start' type='method' exec='/opt/custom/method/zonegate/zonegate start' timeout_seconds='60'/>
|
22
|
+
<exec_method name='stop' type='method' exec='/opt/custom/method/zonegate/zonegate stop' timeout_seconds='60'/>
|
23
|
+
<property_group name='startd' type='framework'>
|
24
|
+
<propval name='ignore_error' type='astring' value='signal'/>
|
25
|
+
</property_group>
|
26
|
+
<property_group name='application' type='application'/>
|
27
|
+
<stability value='Evolving'/>
|
28
|
+
<template>
|
29
|
+
<common_name>
|
30
|
+
<loctext xml:lang='C'>Ensure </loctext>
|
31
|
+
</common_name>
|
32
|
+
</template>
|
33
|
+
</service>
|
34
|
+
</service_bundle>
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/bash
|
2
|
+
|
3
|
+
. /lib/svc/share/smf_include.sh
|
4
|
+
|
5
|
+
contract() {
|
6
|
+
echo $(svcprop -p restarter/contract $SMF_FMRI)
|
7
|
+
}
|
8
|
+
|
9
|
+
disable_nat_rules() {
|
10
|
+
IFS=$'\n\t'
|
11
|
+
# disable any running nat rules
|
12
|
+
for zone in $(/usr/sbin/zoneadm list -ip | grep running | tail -n +2 | awk -F":" '{ print $2 }');
|
13
|
+
do
|
14
|
+
zonenat "${zone}:down"
|
15
|
+
done
|
16
|
+
}
|
17
|
+
|
18
|
+
start_zonenat() {
|
19
|
+
# then we run a dtrace monitor and pipe the output as we receive it
|
20
|
+
zonemon |
|
21
|
+
while IFS= read -r line
|
22
|
+
do
|
23
|
+
zonenat "$line"
|
24
|
+
done
|
25
|
+
}
|
26
|
+
|
27
|
+
stop_zonenat() {
|
28
|
+
local contract_id=$(contract)
|
29
|
+
smf_kill_contract ${contract_id} TERM
|
30
|
+
}
|
31
|
+
|
32
|
+
nat_existing_zone() {
|
33
|
+
IFS=$'\n\t'
|
34
|
+
# first, we need to nat the zone if it's already running
|
35
|
+
for zone in $(/usr/sbin/zoneadm list -ip | grep running | tail -n +2 | awk -F":" '{ print $2 }');
|
36
|
+
do
|
37
|
+
zonenat "${zone}:up"
|
38
|
+
done
|
39
|
+
}
|
40
|
+
|
41
|
+
start() {
|
42
|
+
echo 'enabling zonegate'
|
43
|
+
nat_existing_zone
|
44
|
+
start_zonenat &
|
45
|
+
}
|
46
|
+
|
47
|
+
stop() {
|
48
|
+
echo 'disabling zonegate'
|
49
|
+
disable_nat_rules
|
50
|
+
stop_zonenat
|
51
|
+
}
|
52
|
+
|
53
|
+
case $SMF_METHOD in
|
54
|
+
start)
|
55
|
+
start
|
56
|
+
;;
|
57
|
+
stop)
|
58
|
+
stop
|
59
|
+
;;
|
60
|
+
esac
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/sbin/dtrace -qs
|
2
|
+
|
3
|
+
/* up */
|
4
|
+
zone_status_set:entry
|
5
|
+
/ (args[0]->zone_id) != 0 && args[1] == 4 /
|
6
|
+
{
|
7
|
+
printf("%s:up\n", stringof(args[0]->zone_name));
|
8
|
+
}
|
9
|
+
|
10
|
+
/* down */
|
11
|
+
zone_status_set:entry
|
12
|
+
/ (args[0]->zone_id) != 0 && args[1] == 7 /
|
13
|
+
{
|
14
|
+
printf("%s:down\n", stringof(args[0]->zone_name));
|
15
|
+
}
|