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.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rubocop.yml +12 -0
  4. data/Gemfile +12 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +268 -0
  7. data/Rakefile +6 -0
  8. data/Vagrantfile +29 -0
  9. data/examples/Vagrantfile +18 -0
  10. data/examples/Vagrantfile.chef_server +33 -0
  11. data/examples/Vagrantfile.lx +22 -0
  12. data/examples/Vagrantfile.rsync +23 -0
  13. data/files/gz_vnic/create_gz_vnic +15 -0
  14. data/files/smf/create-gz-vnic.xml +31 -0
  15. data/files/smf/zonegate.xml +34 -0
  16. data/files/zonegate/zonegate +60 -0
  17. data/files/zonegate/zonemon +15 -0
  18. data/files/zonegate/zonenat +153 -0
  19. data/lib/vagrant/smartos/locales/en.yml +41 -0
  20. data/lib/vagrant/smartos/zones/action/configure_zone_synced_folders.rb +53 -0
  21. data/lib/vagrant/smartos/zones/action/create_gz_vnic.rb +28 -0
  22. data/lib/vagrant/smartos/zones/action/forward_gz_ports.rb +46 -0
  23. data/lib/vagrant/smartos/zones/action/helper.rb +33 -0
  24. data/lib/vagrant/smartos/zones/action/imgadm_import.rb +24 -0
  25. data/lib/vagrant/smartos/zones/action/virtualbox/platform_iso.rb +57 -0
  26. data/lib/vagrant/smartos/zones/action/zone/create.rb +25 -0
  27. data/lib/vagrant/smartos/zones/action/zone/start.rb +25 -0
  28. data/lib/vagrant/smartos/zones/action/zone/stop.rb +25 -0
  29. data/lib/vagrant/smartos/zones/action/zone_gate/enable.rb +26 -0
  30. data/lib/vagrant/smartos/zones/action/zone_gate/install.rb +26 -0
  31. data/lib/vagrant/smartos/zones/action.rb +75 -0
  32. data/lib/vagrant/smartos/zones/cap/base.rb +29 -0
  33. data/lib/vagrant/smartos/zones/cap/create_gz_vnic.rb +45 -0
  34. data/lib/vagrant/smartos/zones/cap/imgadm_import.rb +30 -0
  35. data/lib/vagrant/smartos/zones/cap/platform_image/install.rb +17 -0
  36. data/lib/vagrant/smartos/zones/cap/platform_image/latest.rb +19 -0
  37. data/lib/vagrant/smartos/zones/cap/platform_image/list.rb +17 -0
  38. data/lib/vagrant/smartos/zones/cap/zone/base.rb +32 -0
  39. data/lib/vagrant/smartos/zones/cap/zone/create.rb +45 -0
  40. data/lib/vagrant/smartos/zones/cap/zone/start.rb +29 -0
  41. data/lib/vagrant/smartos/zones/cap/zone/stop.rb +29 -0
  42. data/lib/vagrant/smartos/zones/cap/zone_gate/enable.rb +20 -0
  43. data/lib/vagrant/smartos/zones/cap/zone_gate/install.rb +46 -0
  44. data/lib/vagrant/smartos/zones/commands/dataset.rb +91 -0
  45. data/lib/vagrant/smartos/zones/commands/global_zone.rb +43 -0
  46. data/lib/vagrant/smartos/zones/commands/multi_command.rb +46 -0
  47. data/lib/vagrant/smartos/zones/commands/smartos.rb +70 -0
  48. data/lib/vagrant/smartos/zones/commands/zlogin.rb +35 -0
  49. data/lib/vagrant/smartos/zones/commands/zones.rb +136 -0
  50. data/lib/vagrant/smartos/zones/communicator/smartos.rb +87 -0
  51. data/lib/vagrant/smartos/zones/config/global_zone.rb +26 -0
  52. data/lib/vagrant/smartos/zones/config/zone.rb +33 -0
  53. data/lib/vagrant/smartos/zones/errors.rb +9 -0
  54. data/lib/vagrant/smartos/zones/guest.rb +25 -0
  55. data/lib/vagrant/smartos/zones/hooks.rb +41 -0
  56. data/lib/vagrant/smartos/zones/models/dataset.rb +27 -0
  57. data/lib/vagrant/smartos/zones/models/snapshot.rb +71 -0
  58. data/lib/vagrant/smartos/zones/models/zone.rb +80 -0
  59. data/lib/vagrant/smartos/zones/models/zone_group.rb +11 -0
  60. data/lib/vagrant/smartos/zones/models/zone_user.rb +11 -0
  61. data/lib/vagrant/smartos/zones/plugin.rb +118 -0
  62. data/lib/vagrant/smartos/zones/util/checksum.rb +22 -0
  63. data/lib/vagrant/smartos/zones/util/downloader.rb +48 -0
  64. data/lib/vagrant/smartos/zones/util/global_zone/connection.rb +192 -0
  65. data/lib/vagrant/smartos/zones/util/global_zone/helper.rb +33 -0
  66. data/lib/vagrant/smartos/zones/util/global_zone/ssh_info.rb +85 -0
  67. data/lib/vagrant/smartos/zones/util/platform_images.rb +132 -0
  68. data/lib/vagrant/smartos/zones/util/public_key.rb +14 -0
  69. data/lib/vagrant/smartos/zones/util/snapshots.rb +63 -0
  70. data/lib/vagrant/smartos/zones/util/zone_group.rb +34 -0
  71. data/lib/vagrant/smartos/zones/util/zone_info.rb +72 -0
  72. data/lib/vagrant/smartos/zones/util/zone_json.rb +77 -0
  73. data/lib/vagrant/smartos/zones/util/zone_project.rb +25 -0
  74. data/lib/vagrant/smartos/zones/util/zone_user.rb +63 -0
  75. data/lib/vagrant/smartos/zones/version.rb +7 -0
  76. data/lib/vagrant/smartos/zones.rb +10 -0
  77. data/vagrant-smartos-zones.gemspec +24 -0
  78. metadata +163 -0
@@ -0,0 +1,77 @@
1
+ module Vagrant
2
+ module Smartos
3
+ module Zones
4
+ module Util
5
+ class ZoneJson
6
+ attr_reader :machine
7
+
8
+ def initialize(machine)
9
+ @machine = machine
10
+ end
11
+
12
+ def to_json
13
+ zone_info
14
+ .merge(generics)
15
+ .merge(kernel_version)
16
+ .merge(resolvers)
17
+ .merge(nics).to_json
18
+ end
19
+
20
+ def zone_info
21
+ {
22
+ 'brand' => machine.config.zone.brand,
23
+ 'alias' => machine.config.zone.name,
24
+ 'dataset_uuid' => machine.config.zone.image,
25
+ 'quota' => machine.config.zone.disk_size || 1,
26
+ 'max_physical_memory' => machine.config.zone.memory || 64
27
+ }
28
+ end
29
+
30
+ def generics
31
+ {
32
+ 'fs_allowed' => 'vboxfs'
33
+ }
34
+ end
35
+
36
+ def kernel_version
37
+ return {} unless lx_brand?
38
+ {
39
+ 'kernel_version' => machine.config.zone.kernel_version
40
+ }
41
+ end
42
+
43
+ def resolvers
44
+ {
45
+ 'resolvers' => [
46
+ '8.8.8.8',
47
+ '8.8.4.4'
48
+ ]
49
+ }
50
+ end
51
+
52
+ def nics
53
+ {
54
+ 'nics' => [nic_info('stub0', '10.0.0.2')]
55
+ }
56
+ end
57
+
58
+ def nic_info(tag, ip)
59
+ {
60
+ 'nic_tag' => tag,
61
+ 'ip' => ip,
62
+ 'netmask' => '255.255.255.0',
63
+ 'gateway' => '10.0.0.1',
64
+ 'allow_ip_spoofing' => true
65
+ }
66
+ end
67
+
68
+ private
69
+
70
+ def lx_brand?
71
+ machine.config.zone.brand == 'lx'
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,25 @@
1
+ require 'vagrant/smartos/zones/util/global_zone/helper'
2
+ require 'vagrant/smartos/zones/util/public_key'
3
+
4
+ module Vagrant
5
+ module Smartos
6
+ module Zones
7
+ module Util
8
+ class ZoneProject
9
+ include GlobalZone::Helper
10
+
11
+ attr_reader :machine, :zone
12
+
13
+ def initialize(machine, zone)
14
+ @machine = machine
15
+ @zone = zone
16
+ end
17
+
18
+ def create(project, users, comment)
19
+ zone.zlogin("projadd -c \"#{comment}\" -U #{users.join(',')} #{project}")
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,63 @@
1
+ require 'vagrant/smartos/zones/models/zone_user'
2
+ require 'vagrant/smartos/zones/util/global_zone/helper'
3
+ require 'vagrant/smartos/zones/util/public_key'
4
+
5
+ module Vagrant
6
+ module Smartos
7
+ module Zones
8
+ module Util
9
+ class ZoneUser
10
+ include GlobalZone::Helper
11
+
12
+ attr_reader :machine, :zone
13
+
14
+ def initialize(machine, zone)
15
+ @machine = machine
16
+ @zone = zone
17
+ end
18
+
19
+ def find(username)
20
+ Models::ZoneUser.new.tap do |u|
21
+ u.name = username
22
+ machine.communicate.gz_execute("#{sudo} zlogin #{zone.uuid} id -u #{username}") do |_type, output|
23
+ u.uid = output.chomp
24
+ end
25
+ end
26
+ end
27
+
28
+ def create(username, group, role = nil)
29
+ zone.zlogin("useradd #{flags(group)} #{username}")
30
+ grant_role(username, role)
31
+ install_public_key(group)
32
+ end
33
+
34
+ private
35
+
36
+ def flags(group)
37
+ return "-m -s /bin/bash -g #{group}" if zone.lx_brand?
38
+ "-m -s /bin/bash -g #{group} -G other"
39
+ end
40
+
41
+ def grant_role(username, role)
42
+ if zone.lx_brand?
43
+ return if zone.test(%('test -f /etc/sudoers.d/vagrant'))
44
+ zone.zlogin(%('echo "#{username} ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers.d/vagrant'))
45
+ else
46
+ zone.zlogin("usermod -P\\'#{role}\\' #{username}") if role
47
+ zone.zlogin('cp /opt/local/etc/sudoers.d/admin /opt/local/etc/sudoers.d/vagrant')
48
+ zone.zlogin('sed -i -e \\\'s@admin@vagrant@\\\' /opt/local/etc/sudoers.d/vagrant')
49
+ end
50
+ end
51
+
52
+ def install_public_key(group)
53
+ zone.zlogin('mkdir -p /home/vagrant/.ssh')
54
+ zone.zlogin('touch /home/vagrant/.ssh/authorized_keys')
55
+ zone.zlogin(%('echo "#{PublicKey.new}" > /home/vagrant/.ssh/authorized_keys'))
56
+ zone.zlogin("chown -R vagrant:#{group} /home/vagrant/.ssh")
57
+ zone.zlogin('chmod 600 /home/vagrant/.ssh/authorized_keys')
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,7 @@
1
+ module Vagrant
2
+ module Smartos
3
+ module Zones
4
+ VERSION = '0.0.1.pre.21'
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ require 'vagrant/smartos/zones/version'
2
+ require 'vagrant/smartos/zones/plugin'
3
+ require 'pry' if ENV['PRY']
4
+
5
+ module Vagrant
6
+ module Smartos
7
+ module Zones
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'vagrant/smartos/zones/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'vagrant-smartos-zones'
8
+ spec.version = Vagrant::Smartos::Zones::VERSION
9
+ spec.authors = ['Eric Saxby']
10
+ spec.email = ['sax@livinginthepast.org']
11
+ spec.summary = 'Manage SmartOS zones in Vagrant'
12
+ spec.description = 'Manage SmartOS zones in Vagrant'
13
+ spec.homepage = 'https://github.com/vagrant-smartos/vagrant-smartos-zones'
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(/^(test|spec|features)\//)
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.5'
22
+ spec.add_development_dependency 'pry-nav'
23
+ spec.add_development_dependency 'rake'
24
+ end
metadata ADDED
@@ -0,0 +1,163 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagrant-smartos-zones
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.pre.21
5
+ platform: ruby
6
+ authors:
7
+ - Eric Saxby
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry-nav
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Manage SmartOS zones in Vagrant
56
+ email:
57
+ - sax@livinginthepast.org
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rubocop.yml"
64
+ - Gemfile
65
+ - LICENSE.txt
66
+ - README.md
67
+ - Rakefile
68
+ - Vagrantfile
69
+ - examples/Vagrantfile
70
+ - examples/Vagrantfile.chef_server
71
+ - examples/Vagrantfile.lx
72
+ - examples/Vagrantfile.rsync
73
+ - files/gz_vnic/create_gz_vnic
74
+ - files/smf/create-gz-vnic.xml
75
+ - files/smf/zonegate.xml
76
+ - files/zonegate/zonegate
77
+ - files/zonegate/zonemon
78
+ - files/zonegate/zonenat
79
+ - lib/vagrant/smartos/locales/en.yml
80
+ - lib/vagrant/smartos/zones.rb
81
+ - lib/vagrant/smartos/zones/action.rb
82
+ - lib/vagrant/smartos/zones/action/configure_zone_synced_folders.rb
83
+ - lib/vagrant/smartos/zones/action/create_gz_vnic.rb
84
+ - lib/vagrant/smartos/zones/action/forward_gz_ports.rb
85
+ - lib/vagrant/smartos/zones/action/helper.rb
86
+ - lib/vagrant/smartos/zones/action/imgadm_import.rb
87
+ - lib/vagrant/smartos/zones/action/virtualbox/platform_iso.rb
88
+ - lib/vagrant/smartos/zones/action/zone/create.rb
89
+ - lib/vagrant/smartos/zones/action/zone/start.rb
90
+ - lib/vagrant/smartos/zones/action/zone/stop.rb
91
+ - lib/vagrant/smartos/zones/action/zone_gate/enable.rb
92
+ - lib/vagrant/smartos/zones/action/zone_gate/install.rb
93
+ - lib/vagrant/smartos/zones/cap/base.rb
94
+ - lib/vagrant/smartos/zones/cap/create_gz_vnic.rb
95
+ - lib/vagrant/smartos/zones/cap/imgadm_import.rb
96
+ - lib/vagrant/smartos/zones/cap/platform_image/install.rb
97
+ - lib/vagrant/smartos/zones/cap/platform_image/latest.rb
98
+ - lib/vagrant/smartos/zones/cap/platform_image/list.rb
99
+ - lib/vagrant/smartos/zones/cap/zone/base.rb
100
+ - lib/vagrant/smartos/zones/cap/zone/create.rb
101
+ - lib/vagrant/smartos/zones/cap/zone/start.rb
102
+ - lib/vagrant/smartos/zones/cap/zone/stop.rb
103
+ - lib/vagrant/smartos/zones/cap/zone_gate/enable.rb
104
+ - lib/vagrant/smartos/zones/cap/zone_gate/install.rb
105
+ - lib/vagrant/smartos/zones/commands/dataset.rb
106
+ - lib/vagrant/smartos/zones/commands/global_zone.rb
107
+ - lib/vagrant/smartos/zones/commands/multi_command.rb
108
+ - lib/vagrant/smartos/zones/commands/smartos.rb
109
+ - lib/vagrant/smartos/zones/commands/zlogin.rb
110
+ - lib/vagrant/smartos/zones/commands/zones.rb
111
+ - lib/vagrant/smartos/zones/communicator/smartos.rb
112
+ - lib/vagrant/smartos/zones/config/global_zone.rb
113
+ - lib/vagrant/smartos/zones/config/zone.rb
114
+ - lib/vagrant/smartos/zones/errors.rb
115
+ - lib/vagrant/smartos/zones/guest.rb
116
+ - lib/vagrant/smartos/zones/hooks.rb
117
+ - lib/vagrant/smartos/zones/models/dataset.rb
118
+ - lib/vagrant/smartos/zones/models/snapshot.rb
119
+ - lib/vagrant/smartos/zones/models/zone.rb
120
+ - lib/vagrant/smartos/zones/models/zone_group.rb
121
+ - lib/vagrant/smartos/zones/models/zone_user.rb
122
+ - lib/vagrant/smartos/zones/plugin.rb
123
+ - lib/vagrant/smartos/zones/util/checksum.rb
124
+ - lib/vagrant/smartos/zones/util/downloader.rb
125
+ - lib/vagrant/smartos/zones/util/global_zone/connection.rb
126
+ - lib/vagrant/smartos/zones/util/global_zone/helper.rb
127
+ - lib/vagrant/smartos/zones/util/global_zone/ssh_info.rb
128
+ - lib/vagrant/smartos/zones/util/platform_images.rb
129
+ - lib/vagrant/smartos/zones/util/public_key.rb
130
+ - lib/vagrant/smartos/zones/util/snapshots.rb
131
+ - lib/vagrant/smartos/zones/util/zone_group.rb
132
+ - lib/vagrant/smartos/zones/util/zone_info.rb
133
+ - lib/vagrant/smartos/zones/util/zone_json.rb
134
+ - lib/vagrant/smartos/zones/util/zone_project.rb
135
+ - lib/vagrant/smartos/zones/util/zone_user.rb
136
+ - lib/vagrant/smartos/zones/version.rb
137
+ - vagrant-smartos-zones.gemspec
138
+ homepage: https://github.com/vagrant-smartos/vagrant-smartos-zones
139
+ licenses:
140
+ - MIT
141
+ metadata: {}
142
+ post_install_message:
143
+ rdoc_options: []
144
+ require_paths:
145
+ - lib
146
+ required_ruby_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">"
154
+ - !ruby/object:Gem::Version
155
+ version: 1.3.1
156
+ requirements: []
157
+ rubyforge_project:
158
+ rubygems_version: 2.4.4
159
+ signing_key:
160
+ specification_version: 4
161
+ summary: Manage SmartOS zones in Vagrant
162
+ test_files: []
163
+ has_rdoc: