aix-wpar 0.1.0
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 +2 -0
- data/LICENSE +15 -0
- data/README.md +61 -0
- data/aix-wpar.gemspec +24 -0
- data/examples/list_wpars.rb +14 -0
- data/examples/manage_wpar.rb +28 -0
- data/lib/wpars.rb +97 -0
- data/lib/wpars/device.rb +18 -0
- data/lib/wpars/external.rb +17 -0
- data/lib/wpars/general.rb +31 -0
- data/lib/wpars/mountpoint.rb +15 -0
- data/lib/wpars/name.rb +7 -0
- data/lib/wpars/network.rb +29 -0
- data/lib/wpars/resource_control.rb +40 -0
- data/lib/wpars/security.rb +12 -0
- data/lib/wpars/version.rb +3 -0
- data/lib/wpars/wpar.rb +101 -0
- data/lib/wpars/wrapper/constants.rb +13 -0
- data/lib/wpars/wrapper/converter.rb +16 -0
- data/lib/wpars/wrapper/lswpar.rb +20 -0
- data/lib/wpars/wrapper/lswpar_device.rb +30 -0
- data/lib/wpars/wrapper/lswpar_general.rb +31 -0
- data/lib/wpars/wrapper/lswpar_mountpoint.rb +30 -0
- data/lib/wpars/wrapper/lswpar_network.rb +30 -0
- data/lib/wpars/wrapper/lswpar_resource_control.rb +30 -0
- data/lib/wpars/wrapper/lswpar_security.rb +30 -0
- data/lib/wpars/wrapper/mkwpar.rb +91 -0
- data/lib/wpars/wrapper/rmwpar.rb +19 -0
- data/lib/wpars/wrapper/startwpar.rb +15 -0
- data/lib/wpars/wrapper/stopwpar.rb +19 -0
- data/lib/wpars/wrapper/syncwpar.rb +19 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b0f9c9afb07e4ee297f0e0bda903facff874466c
|
4
|
+
data.tar.gz: 74d10e4f36ea29ebf139e0843d85e5c8168a3807
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: caf767f37009262308c1d639f4ce40735b427287e7d73df46fc590ea2db4444022ee5df6e64c5fbe82d32121d1541524641d632c5d79308736c16bd158553213
|
7
|
+
data.tar.gz: fb0a588276d549634225ebad1cfcbc67a3b627a6ef0ba03b05c2ac9b81dc28b33db914642b8726d15e3efc16e9f9050113f1cab8d37e0c415de6978311f04f0f
|
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Author:: Alain Dejoux (<adejoux@djouxtech.net>)
|
2
|
+
|
3
|
+
Copyright (C) 2016, Alain Dejoux
|
4
|
+
|
5
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
you may not use this file except in compliance with the License.
|
7
|
+
You may obtain a copy of the License at
|
8
|
+
|
9
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
|
11
|
+
Unless required by applicable law or agreed to in writing, software
|
12
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
See the License for the specific language governing permissions and
|
15
|
+
limitations under the License.
|
data/README.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
AX WPAR ruby library
|
2
|
+
|
3
|
+
## description
|
4
|
+
|
5
|
+
This library allows to manage AIX wpars like ruby objects. Most standard operations are supported.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Standard isntallation with internet access:
|
10
|
+
gem install aix-wpar
|
11
|
+
|
12
|
+
Local installation:
|
13
|
+
gem install --local aix-wpar-0.1.0.gem
|
14
|
+
|
15
|
+
## Usage
|
16
|
+
|
17
|
+
~~~ruby
|
18
|
+
require 'wpars'
|
19
|
+
|
20
|
+
#new wpar named testwpar
|
21
|
+
wpar = WPAR::WPAR.new(command: "ssh adxlpar2", name: "testwpar2")
|
22
|
+
#live stream output
|
23
|
+
wpar.live_stream=STDOUT
|
24
|
+
|
25
|
+
#set hostname if different
|
26
|
+
wpar.general.hostname="testwpar2"
|
27
|
+
|
28
|
+
#set auto start
|
29
|
+
wpar.general.auto="yes"
|
30
|
+
|
31
|
+
#create wpar
|
32
|
+
wpar.create
|
33
|
+
|
34
|
+
#stop wpar
|
35
|
+
wpar.stop(force: true)
|
36
|
+
|
37
|
+
#start wpar
|
38
|
+
wpar.start
|
39
|
+
#wpar.update
|
40
|
+
wpar.sync
|
41
|
+
|
42
|
+
#delete
|
43
|
+
wpar.destroy(force: true)
|
44
|
+
~~~
|
45
|
+
|
46
|
+
**live_stream** allows to display the system commands output.
|
47
|
+
|
48
|
+
|
49
|
+
## <a name="authors"></a> Authors
|
50
|
+
|
51
|
+
Created and maintained by [Alain Dejoux][author] (<adejoux@djouxtech.net>)
|
52
|
+
|
53
|
+
## <a name="license"></a> License
|
54
|
+
|
55
|
+
Apache 2.0 (see [LICENSE][license])
|
56
|
+
|
57
|
+
|
58
|
+
[author]: https://github.com/adejoux
|
59
|
+
[issues]: https://github.com/adejoux/aix-wpar/issues
|
60
|
+
[license]: https://github.com/adejoux/aix-wpar/blob/master/LICENSE
|
61
|
+
[repo]: https://github.com/adejoux/aix-wpar
|
data/aix-wpar.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
$:.unshift(File.expand_path('../lib/', __FILE__))
|
2
|
+
require 'wpars/version'
|
3
|
+
|
4
|
+
deps = {
|
5
|
+
'mixlib-shellout' => [ '~> 2' ]
|
6
|
+
}
|
7
|
+
|
8
|
+
Gem::Specification.new do |gem|
|
9
|
+
gem.authors = ["Alain Dejoux"]
|
10
|
+
gem.email = ["adejoux@djouxtech.net"]
|
11
|
+
gem.description = %q{A wrapper for the AIX WPAR administration.}
|
12
|
+
gem.license = "MIT"
|
13
|
+
gem.summary = %q{A ruby library wrapper for the AIX WPAR administration.}
|
14
|
+
gem.homepage = "https://github.com/adejoux/ruby-aix-wpar"
|
15
|
+
gem.files = `git ls-files`.split($\)
|
16
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
|
+
gem.name = "aix-wpar"
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
gem.version = WPAR::VERSION
|
20
|
+
|
21
|
+
deps.each do |dep, constraints|
|
22
|
+
gem.add_runtime_dependency dep, *constraints
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'wpars'
|
2
|
+
wpars = WPAR::WPARS.new(command: "ssh adxlpar2")
|
3
|
+
|
4
|
+
wpars.generals.each do |entry|
|
5
|
+
puts entry.inspect
|
6
|
+
end
|
7
|
+
|
8
|
+
#puts wpars['kitchenwpar'].networks.inspect
|
9
|
+
#puts wpars['kitchenwpar'].devices.inspect
|
10
|
+
#puts wpars['testwpar2'].get_rootvg.inspect
|
11
|
+
|
12
|
+
#start/stop examples
|
13
|
+
#wpars['testwpar2'].start
|
14
|
+
#wpars['testwpar2'].stop(force: true)
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'wpars'
|
2
|
+
|
3
|
+
#new wpar named testwpar
|
4
|
+
wpar = WPAR::WPAR.new(command: "ssh adxlpar2", name: "testwpar2")
|
5
|
+
|
6
|
+
#live stream output
|
7
|
+
wpar.live_stream=STDOUT
|
8
|
+
|
9
|
+
#set hostname if different
|
10
|
+
wpar.general.hostname="testwpar2"
|
11
|
+
|
12
|
+
#set auto start
|
13
|
+
wpar.general.auto="yes"
|
14
|
+
|
15
|
+
#create wpar
|
16
|
+
wpar.create
|
17
|
+
|
18
|
+
#stop wpar
|
19
|
+
wpar.stop(force: true)
|
20
|
+
|
21
|
+
#start wpar
|
22
|
+
wpar.start
|
23
|
+
|
24
|
+
#sync wpar
|
25
|
+
wpar.sync
|
26
|
+
|
27
|
+
#delete
|
28
|
+
wpar.destroy(force: true)
|
data/lib/wpars.rb
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'wpars/external'
|
2
|
+
require 'wpars/version'
|
3
|
+
require 'wpars/wrapper/lswpar_general'
|
4
|
+
require 'wpars/wrapper/lswpar_network'
|
5
|
+
require 'wpars/wrapper/lswpar_device'
|
6
|
+
require 'wpars/wrapper/lswpar_mountpoint'
|
7
|
+
require 'wpars/wrapper/lswpar_resource_control'
|
8
|
+
require 'wpars/wrapper/lswpar_security'
|
9
|
+
require 'wpars/wpar'
|
10
|
+
|
11
|
+
module WPAR
|
12
|
+
class WPARS
|
13
|
+
include Wrapper
|
14
|
+
attr_reader :networks, :devices, :mountpoints, :resource_controls
|
15
|
+
attr_reader :securities, :generals
|
16
|
+
|
17
|
+
VALID_OPTIONS = [
|
18
|
+
:command,
|
19
|
+
:version,
|
20
|
+
:debug
|
21
|
+
]
|
22
|
+
|
23
|
+
def initialize(options={})
|
24
|
+
# handy, thanks net-ssh!
|
25
|
+
invalid_options = options.keys - VALID_OPTIONS
|
26
|
+
if invalid_options.any?
|
27
|
+
raise ArgumentError, "invalid option(s): #{invalid_options.join(', ')}"
|
28
|
+
end
|
29
|
+
|
30
|
+
# default to loading attributes for the current version
|
31
|
+
options[:version] ||= version
|
32
|
+
options[:debug] ||= false
|
33
|
+
@command = options[:command]
|
34
|
+
@generals = LswparGeneral.new(options).list
|
35
|
+
@networks = LswparNetwork.new(options).list
|
36
|
+
@devices = LswparDevice.new(options).list
|
37
|
+
@mountpoints = LswparMountpoint.new(options).list
|
38
|
+
@resource_controls = LswparResourceControl.new(options).list
|
39
|
+
@securities = LswparSecurity.new(options).list
|
40
|
+
end
|
41
|
+
|
42
|
+
def [](name)
|
43
|
+
if get_generals(name).nil?
|
44
|
+
return nil
|
45
|
+
end
|
46
|
+
wpar = WPAR.new(name: name,
|
47
|
+
command: @command,
|
48
|
+
general: get_generals(name),
|
49
|
+
networks: get_networks(name),
|
50
|
+
devices: get_devices(name),
|
51
|
+
mountpoints: get_mountpoints(name),
|
52
|
+
resource_controls: get_resource_controls(name),
|
53
|
+
securities: get_securities(name))
|
54
|
+
return wpar
|
55
|
+
end
|
56
|
+
|
57
|
+
def version
|
58
|
+
VERSION
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_generals(name)
|
62
|
+
begin
|
63
|
+
@generals.select {|o| o.name == name}.first
|
64
|
+
rescue
|
65
|
+
nil
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def get_networks(name)
|
70
|
+
@networks.select {|o| o.name == name}
|
71
|
+
end
|
72
|
+
|
73
|
+
def get_devices(name)
|
74
|
+
@devices.select {|o| o.name == name}
|
75
|
+
end
|
76
|
+
|
77
|
+
def get_mountpoints(name)
|
78
|
+
@mountpoints.select {|o| o.name == name}
|
79
|
+
end
|
80
|
+
|
81
|
+
def get_resource_controls(name)
|
82
|
+
begin
|
83
|
+
@resource_controls.select {|o| o.name == name}.first
|
84
|
+
rescue
|
85
|
+
nil
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def get_securities(name)
|
90
|
+
begin
|
91
|
+
@securities.select {|o| o.name == name}.first
|
92
|
+
rescue
|
93
|
+
nil
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/lib/wpars/device.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
module WPAR
|
2
|
+
class Device
|
3
|
+
attr_reader :name, :devname, :devtype, :vdevname, :devstatus
|
4
|
+
attr_reader :devid, :rootvg, :adapter
|
5
|
+
|
6
|
+
def initialize(params)
|
7
|
+
@command = params[:command]
|
8
|
+
@name = params[:name]
|
9
|
+
@devname = params[:devname]
|
10
|
+
@devtype = params[:devtype]
|
11
|
+
@vdevname = params[:vdevname]
|
12
|
+
@devstatus = params[:devstatus]
|
13
|
+
@devid = params[:devid]
|
14
|
+
@rootvg = params[:rootvg]
|
15
|
+
@adapter = params[:adapter]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'mixlib/shellout'
|
3
|
+
|
4
|
+
module WPAR
|
5
|
+
module External
|
6
|
+
class ExternalFailure < RuntimeError; end
|
7
|
+
|
8
|
+
def cmd(cmd: nil, live_stream: nil)
|
9
|
+
command = Mixlib::ShellOut.new(cmd)
|
10
|
+
command.live_stream=live_stream if live_stream
|
11
|
+
command.run_command
|
12
|
+
command.error!
|
13
|
+
return command.stdout
|
14
|
+
end
|
15
|
+
module_function :cmd
|
16
|
+
end # module External
|
17
|
+
end # module WPAR
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module WPAR
|
2
|
+
class General
|
3
|
+
attr_reader :name, :state, :type, :rootvgwpar, :routing, :uuid
|
4
|
+
attr_reader :vipwpar, :directory, :owner, :script, :privateusr
|
5
|
+
attr_reader :checkpointable, :application, :ostype, :xwparipc, :architecture
|
6
|
+
attr_accessor :hostname, :auto
|
7
|
+
|
8
|
+
def initialize(params)
|
9
|
+
@command = params[:command]
|
10
|
+
@name = params[:name]
|
11
|
+
@state = params[:state]
|
12
|
+
@type = params[:type]
|
13
|
+
@rootvgwpar = params[:rootvgwpar]
|
14
|
+
@hostname = params[:hostname]
|
15
|
+
@routing = params[:routing]
|
16
|
+
@vipwpar = params[:vipwpar]
|
17
|
+
@directory = params[:directory]
|
18
|
+
@owner = params[:owner]
|
19
|
+
@script = params[:script]
|
20
|
+
@auto = params[:auto] || "no"
|
21
|
+
@privateusr = params[:privateusr]
|
22
|
+
@checkpointable = params[:checkpointable]
|
23
|
+
@application = params[:application]
|
24
|
+
@ostype = params[:ostype]
|
25
|
+
@xwparipc = params[:xwparipc]
|
26
|
+
@architecture = params[:architecture]
|
27
|
+
@uuid = params[:uuid]
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module WPAR
|
2
|
+
class Mountpoint
|
3
|
+
attr_reader :name, :mountpoint, :device, :vfs, :nodename, :options
|
4
|
+
|
5
|
+
def initialize(params)
|
6
|
+
@command = params[:command]
|
7
|
+
@name = params[:name]
|
8
|
+
@mountpoint = params[:mountpoint]
|
9
|
+
@device = params[:device]
|
10
|
+
@vfs = params[:vfs]
|
11
|
+
@nodename = params[:nodename]
|
12
|
+
@options = params[:options]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/wpars/name.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
#example of a WPAR network object
|
4
|
+
# <WPAR::Network name="kitchenwpar", interface="en0", address="10.10.10.100", mask_prefix="255.255.255.0", broadcast="10.10.10.255">
|
5
|
+
module WPAR
|
6
|
+
class Network
|
7
|
+
attr_reader :name
|
8
|
+
attr_accessor :interface, :address, :mask_prefix, :broadcast
|
9
|
+
|
10
|
+
def initialize(params)
|
11
|
+
@name = params[:name]
|
12
|
+
@interface = params[:interface]
|
13
|
+
@address = params[:address]
|
14
|
+
@mask_prefix = params[:mask_prefix]
|
15
|
+
@broadcast = params[:broadcast]
|
16
|
+
end
|
17
|
+
|
18
|
+
def empty?
|
19
|
+
wpar_attributes.all?{|k,v| self.send(k).nil?}
|
20
|
+
end
|
21
|
+
|
22
|
+
def wpar_attributes
|
23
|
+
attrs = Network.instance_methods(false) - [:name, :command, :state, :empty?, :wpar_attributes ]
|
24
|
+
attrs - attrs.grep(/=$/)
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module WPAR
|
2
|
+
class ResourceControl
|
3
|
+
attr_reader :name, :state, :active, :rset
|
4
|
+
attr_reader :procvirtmem, :totalvirtmem, :totalprocesses
|
5
|
+
attr_reader :totalptys, :totallargepages, :pct_msgids, :pct_semids
|
6
|
+
attr_reader :pct_pinmem, :totalthreads, :pct_shmids
|
7
|
+
attr_accessor :shares_cpu, :cpu, :shares_memory, :memory
|
8
|
+
|
9
|
+
def initialize(params)
|
10
|
+
@command = params[:command]
|
11
|
+
@name = params[:name]
|
12
|
+
@state = params[:state]
|
13
|
+
@active = params[:active]
|
14
|
+
@rset = params[:rset]
|
15
|
+
@shares_cpu = params[:shares_cpu]
|
16
|
+
@cpu = params[:cpu]
|
17
|
+
@shares_memory = params[:shares_memory]
|
18
|
+
@memory = params[:memory]
|
19
|
+
@procvirtmem = params[:procvirtmem]
|
20
|
+
@totalvirtmem = params[:totalvirtmem]
|
21
|
+
@totalprocesses = params[:totalprocesses]
|
22
|
+
@totalptys = params[:totalptys]
|
23
|
+
@totallargepages = params[:totallargepages]
|
24
|
+
@pct_msgids = params[:pct_msgids]
|
25
|
+
@pct_semids = params[:pct_semids]
|
26
|
+
@pct_pinmem = params[:pct_pinmem]
|
27
|
+
@totalthreads = params[:totalthreads]
|
28
|
+
@pct_shmids = params[:pct_shmids]
|
29
|
+
end
|
30
|
+
|
31
|
+
def empty?
|
32
|
+
wpar_attributes.all?{|k,v| self.send(k).nil?}
|
33
|
+
end
|
34
|
+
|
35
|
+
def wpar_attributes
|
36
|
+
attrs = ResourceControl.instance_methods(false) - [:name, :command, :state, :empty?, :wpar_attributes ]
|
37
|
+
attrs - attrs.grep(/=$/)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/wpars/wpar.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'wpars/external'
|
2
|
+
require 'wpars/version'
|
3
|
+
require 'wpars/general'
|
4
|
+
require 'wpars/network'
|
5
|
+
require 'wpars/device'
|
6
|
+
require 'wpars/mountpoint'
|
7
|
+
require 'wpars/resource_control'
|
8
|
+
require 'wpars/security'
|
9
|
+
require 'wpars/wrapper/lswpar_general'
|
10
|
+
require 'wpars/wrapper/lswpar_network'
|
11
|
+
require 'wpars/wrapper/lswpar_device'
|
12
|
+
require 'wpars/wrapper/lswpar_mountpoint'
|
13
|
+
require 'wpars/wrapper/lswpar_resource_control'
|
14
|
+
require 'wpars/wrapper/lswpar_security'
|
15
|
+
require 'wpars/wrapper/mkwpar'
|
16
|
+
require 'wpars/wrapper/rmwpar'
|
17
|
+
require 'wpars/wrapper/stopwpar'
|
18
|
+
require 'wpars/wrapper/startwpar'
|
19
|
+
require 'wpars/wrapper/syncwpar'
|
20
|
+
|
21
|
+
module WPAR
|
22
|
+
class WPAR
|
23
|
+
include Wrapper
|
24
|
+
|
25
|
+
attr_reader :networks, :devices, :mountpoints, :resource_control
|
26
|
+
attr_reader :security, :general, :name
|
27
|
+
attr_accessor :live_stream
|
28
|
+
|
29
|
+
def initialize(options = {})
|
30
|
+
@command = options[:command]
|
31
|
+
@name = options[:name]
|
32
|
+
@general = options[:general] || General.new(name: @name)
|
33
|
+
@networks = options[:networks] || Array.new([Network.new(name: @name)])
|
34
|
+
@devices = options[:devices] || Array.new([Device.new(name: @name)])
|
35
|
+
@mountpoints = options[:mountpoints] || Array.new([Mountpoint.new(name: @name)])
|
36
|
+
@resource_control = options[:resource_controls] ||ResourceControl.new(name: @name)
|
37
|
+
@security = options[:securities] || Security.new(name: @name)
|
38
|
+
end
|
39
|
+
|
40
|
+
def create(options = {})
|
41
|
+
MkWpar.create( name: @name,
|
42
|
+
command: @command,
|
43
|
+
wpar: self,
|
44
|
+
start: options[:start],
|
45
|
+
rootvg: options[:rootvg],
|
46
|
+
wparvg: options[:wparvg],
|
47
|
+
backupimage: options[:backupimage],
|
48
|
+
live_stream: @live_stream)
|
49
|
+
#update
|
50
|
+
update(options)
|
51
|
+
end
|
52
|
+
|
53
|
+
def destroy(force: nil)
|
54
|
+
RmWpar.destroy(name: @name, force: force, command: @command, live_stream: @live_stream)
|
55
|
+
end
|
56
|
+
|
57
|
+
def stop(force: nil)
|
58
|
+
StopWpar.stop( name: @name, force: force, command: @command, live_stream: @live_stream)
|
59
|
+
|
60
|
+
#update status
|
61
|
+
@general = LswparGeneral.new(command: @command).filter(@name)
|
62
|
+
end
|
63
|
+
|
64
|
+
def start()
|
65
|
+
StartWpar.start( name: @name, command: @command, live_stream: @live_stream)
|
66
|
+
|
67
|
+
#update status
|
68
|
+
@general = LswparGeneral.new(command: @command).filter(@name)
|
69
|
+
end
|
70
|
+
|
71
|
+
def sync(directory: nil)
|
72
|
+
SyncWpar.sync( name: @name, command: @command, directory: directory, live_stream: @live_stream)
|
73
|
+
end
|
74
|
+
|
75
|
+
def update(options = {})
|
76
|
+
options[:command] = @command
|
77
|
+
@general = LswparGeneral.new(options).filter(@name)
|
78
|
+
@networks = LswparNetwork.new(options).filter(@name)
|
79
|
+
@devices = LswparDevice.new(options).filter(@name)
|
80
|
+
@mountpoints = LswparMountpoint.new(options).filter(@name)
|
81
|
+
@resource_control = LswparResourceControl.new(options).filter(@name)
|
82
|
+
@security = LswparSecurity.new(options).filter(@name)
|
83
|
+
end
|
84
|
+
|
85
|
+
def add(address: nil, interface: nil, mask_prefix: nil, broadcast: nil)
|
86
|
+
params={}
|
87
|
+
params[:name] = @name
|
88
|
+
params[:address] = address
|
89
|
+
params[:interface] = interface
|
90
|
+
params[:mask_prefix] = mask_prefix
|
91
|
+
params[:broadcast] = broadcast
|
92
|
+
|
93
|
+
net = WPARS::Network.new(params)
|
94
|
+
@nets += net
|
95
|
+
end
|
96
|
+
|
97
|
+
def get_rootvg
|
98
|
+
@devices.select { |o| o.rootvg == "yes"}
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module WPAR
|
2
|
+
module Wrapper
|
3
|
+
module Constants
|
4
|
+
LSWPAR = '/usr/sbin/lswpar -c'
|
5
|
+
MKWPAR = '/usr/sbin/mkwpar'
|
6
|
+
RMWPAR = '/usr/sbin/rmwpar'
|
7
|
+
CHWPAR = '/usr/sbin/chwpar'
|
8
|
+
STOPWPAR = '/usr/sbin/stopwpar'
|
9
|
+
STARTWPAR = '/usr/sbin/startwpar'
|
10
|
+
SYNCWPAR = '/usr/sbin/syncwpar'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
module WPAR
|
4
|
+
module Wrapper
|
5
|
+
module Converter
|
6
|
+
def self.convert(output)
|
7
|
+
csv = CSV.new(output,
|
8
|
+
:col_sep => ':',
|
9
|
+
:headers => true,
|
10
|
+
:header_converters => :symbol,
|
11
|
+
:converters => :all)
|
12
|
+
csv.to_a.map {|row| row.to_hash }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module WPAR
|
2
|
+
module Wrapper
|
3
|
+
class Lswpar
|
4
|
+
|
5
|
+
def list
|
6
|
+
data = parse(External.cmd(cmd: @command))
|
7
|
+
|
8
|
+
if block_given?
|
9
|
+
return data.each { |obj| yield obj }
|
10
|
+
else
|
11
|
+
return data
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def filter(name)
|
16
|
+
list.select { |o| o.name == name }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'wpars/wrapper/constants'
|
2
|
+
require 'wpars/wrapper/converter'
|
3
|
+
require 'wpars/wrapper/lswpar'
|
4
|
+
require 'wpars/device'
|
5
|
+
|
6
|
+
module WPAR
|
7
|
+
module Wrapper
|
8
|
+
include Constants
|
9
|
+
include Converter
|
10
|
+
class LswparDevice < Lswpar
|
11
|
+
|
12
|
+
def initialize(options)
|
13
|
+
@command = "#{options[:command]} #{Constants::LSWPAR}D #{options[:name]}"
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def parse(output) #:nodoc:
|
18
|
+
devices = []
|
19
|
+
# remove sharp character
|
20
|
+
output.slice!(0)
|
21
|
+
|
22
|
+
Converter.convert(output).each do |dev|
|
23
|
+
device = Device.new(dev)
|
24
|
+
devices << device
|
25
|
+
end
|
26
|
+
return devices
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'wpars/wrapper/constants'
|
2
|
+
require 'wpars/wrapper/converter'
|
3
|
+
require 'wpars/wrapper/lswpar'
|
4
|
+
require 'wpars/general'
|
5
|
+
|
6
|
+
module WPAR
|
7
|
+
module Wrapper
|
8
|
+
include Constants
|
9
|
+
include Converter
|
10
|
+
class LswparGeneral < Lswpar
|
11
|
+
|
12
|
+
def initialize(options)
|
13
|
+
@command = "#{options[:command]} #{Constants::LSWPAR}G #{options[:name]}"
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def parse(output) #:nodoc:
|
18
|
+
generals = []
|
19
|
+
|
20
|
+
# remove sharp character
|
21
|
+
output.slice!(0)
|
22
|
+
|
23
|
+
Converter.convert(output).each do |gen|
|
24
|
+
general = General.new(gen)
|
25
|
+
generals << general
|
26
|
+
end
|
27
|
+
return generals
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'wpars/wrapper/constants'
|
2
|
+
require 'wpars/wrapper/converter'
|
3
|
+
require 'wpars/wrapper/lswpar'
|
4
|
+
require 'wpars/mountpoint'
|
5
|
+
|
6
|
+
module WPAR
|
7
|
+
module Wrapper
|
8
|
+
include Constants
|
9
|
+
include Converter
|
10
|
+
class LswparMountpoint < Lswpar
|
11
|
+
|
12
|
+
def initialize(options)
|
13
|
+
@command = "#{options[:command]} #{Constants::LSWPAR}M #{options[:name]}"
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def parse(output) #:nodoc:
|
18
|
+
mountpoints = []
|
19
|
+
# remove sharp character
|
20
|
+
output.slice!(0)
|
21
|
+
|
22
|
+
Converter.convert(output).each do |mnt|
|
23
|
+
mountpoint = Mountpoint.new(mnt)
|
24
|
+
mountpoints << mountpoint
|
25
|
+
end
|
26
|
+
return mountpoints
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'wpars/wrapper/constants'
|
2
|
+
require 'wpars/wrapper/converter'
|
3
|
+
require 'wpars/wrapper/lswpar'
|
4
|
+
require 'wpars/network'
|
5
|
+
|
6
|
+
module WPAR
|
7
|
+
module Wrapper
|
8
|
+
include Constants
|
9
|
+
include Converter
|
10
|
+
class LswparNetwork < Lswpar
|
11
|
+
|
12
|
+
def initialize(options)
|
13
|
+
@command = "#{options[:command]} #{Constants::LSWPAR}N #{options[:name]}"
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def parse(output) #:nodoc:
|
18
|
+
networks = []
|
19
|
+
# remove sharp character
|
20
|
+
output.slice!(0)
|
21
|
+
|
22
|
+
Converter.convert(output).each do |net|
|
23
|
+
network = Network.new(net)
|
24
|
+
networks << network
|
25
|
+
end
|
26
|
+
return networks
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'wpars/wrapper/constants'
|
2
|
+
require 'wpars/wrapper/converter'
|
3
|
+
require 'wpars/wrapper/lswpar'
|
4
|
+
require 'wpars/resource_control'
|
5
|
+
|
6
|
+
module WPAR
|
7
|
+
module Wrapper
|
8
|
+
include Constants
|
9
|
+
include Converter
|
10
|
+
class LswparResourceControl < Lswpar
|
11
|
+
|
12
|
+
def initialize(options)
|
13
|
+
@command = "#{options[:command]} #{Constants::LSWPAR}R #{options[:name]}"
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def parse(output) #:nodoc:
|
18
|
+
resources = []
|
19
|
+
# remove sharp character
|
20
|
+
output.slice!(0)
|
21
|
+
|
22
|
+
Converter.convert(output).each do |rsc|
|
23
|
+
resource = ResourceControl.new(rsc)
|
24
|
+
resources << resource
|
25
|
+
end
|
26
|
+
return resources
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'wpars/wrapper/constants'
|
2
|
+
require 'wpars/wrapper/converter'
|
3
|
+
require 'wpars/wrapper/lswpar'
|
4
|
+
require 'wpars/security'
|
5
|
+
|
6
|
+
module WPAR
|
7
|
+
module Wrapper
|
8
|
+
include Constants
|
9
|
+
include Converter
|
10
|
+
class LswparSecurity < Lswpar
|
11
|
+
|
12
|
+
def initialize(options)
|
13
|
+
@command = "#{options[:command]} #{Constants::LSWPAR}S #{options[:name]}"
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def parse(output) #:nodoc:
|
18
|
+
securities = []
|
19
|
+
# remove sharp character
|
20
|
+
output.slice!(0)
|
21
|
+
|
22
|
+
Converter.convert(output).each do |sec|
|
23
|
+
security = Security.new(sec)
|
24
|
+
securities << security
|
25
|
+
end
|
26
|
+
return securities
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'wpars/wrapper/constants'
|
2
|
+
|
3
|
+
module WPAR
|
4
|
+
module Wrapper
|
5
|
+
include Constants
|
6
|
+
class MkWpar
|
7
|
+
|
8
|
+
def self.create(options = {})
|
9
|
+
cmd = build_mkwpar_command(options)
|
10
|
+
puts "debug: #{cmd}" unless options[:debug].nil?
|
11
|
+
External.cmd(cmd: cmd, live_stream: options[:live_stream])
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def self.build_mkwpar_command(options = {})
|
16
|
+
wpar = options[:wpar]
|
17
|
+
cmd = "#{options[:command]} #{Constants::MKWPAR} -s -n #{wpar.name}"
|
18
|
+
|
19
|
+
if options[:start] == "yes"
|
20
|
+
cmd += " -a"
|
21
|
+
end
|
22
|
+
|
23
|
+
if wpar.general.auto == "yes"
|
24
|
+
cmd += " -A"
|
25
|
+
end
|
26
|
+
|
27
|
+
unless (wpar.general.hostname.nil? or wpar.general.hostname.empty?)
|
28
|
+
cmd += " -h #{wpar.general.hostname}"
|
29
|
+
end
|
30
|
+
|
31
|
+
unless options[:backupimage].nil?
|
32
|
+
cmd += " -B #{options[:backupimage]}"
|
33
|
+
end
|
34
|
+
|
35
|
+
unless options[:rootvg].nil?
|
36
|
+
cmd += " -D rootvg=yes devname=#{options[:rootvg]}"
|
37
|
+
end
|
38
|
+
|
39
|
+
unless options[:wparvg].nil?
|
40
|
+
cmd += " -g #{options[:wparvg]}"
|
41
|
+
end
|
42
|
+
|
43
|
+
# NETWORK section
|
44
|
+
wpar.networks.each do |net|
|
45
|
+
if net.empty?
|
46
|
+
next
|
47
|
+
end
|
48
|
+
|
49
|
+
cmd += " -N"
|
50
|
+
|
51
|
+
unless net.address.nil?
|
52
|
+
cmd += " address=#{net.address}"
|
53
|
+
end
|
54
|
+
|
55
|
+
unless net.interface.nil?
|
56
|
+
cmd += " interface=#{net.interface}"
|
57
|
+
end
|
58
|
+
|
59
|
+
unless net.mask_prefix.nil?
|
60
|
+
cmd += " netmask=#{net.mask_prefix}"
|
61
|
+
end
|
62
|
+
|
63
|
+
unless net.broadcast.nil?
|
64
|
+
cmd += " broadcast=#{net.interface}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
unless wpar.resource_control.empty?
|
69
|
+
cmd += " -R"
|
70
|
+
unless wpar.resource_control.cpu.nil?
|
71
|
+
cmd += " CPU=#{wpar.resource_control.cpu}"
|
72
|
+
end
|
73
|
+
unless wpar.resource_control.shares_cpu.nil?
|
74
|
+
cmd += " shares_CPU=#{wpar.resource_control.shares_cpu}"
|
75
|
+
end
|
76
|
+
unless wpar.resource_control.memory.nil?
|
77
|
+
cmd += " memory=#{wpar.resource_control.memory}"
|
78
|
+
end
|
79
|
+
unless wpar.resource_control.shares_memory.nil?
|
80
|
+
cmd += " shares_memory=#{wpar.resource_control.shares_memory}"
|
81
|
+
end
|
82
|
+
unless wpar.resource_control.rset.nil?
|
83
|
+
cmd += " rset=#{wpar.resource_control.rset}"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
cmd
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'wpars/wrapper/constants'
|
2
|
+
|
3
|
+
module WPAR
|
4
|
+
module Wrapper
|
5
|
+
include Constants
|
6
|
+
class RmWpar
|
7
|
+
def self.destroy(options = {})
|
8
|
+
unless options[:force].nil?
|
9
|
+
cmd = "#{options[:command]} #{Constants::RMWPAR} -F #{options[:name]}"
|
10
|
+
else
|
11
|
+
cmd = "#{options[:command]} #{Constants::RMWPAR} #{options[:name]}"
|
12
|
+
end
|
13
|
+
|
14
|
+
puts "debug: #{cmd}" unless options[:debug].nil?
|
15
|
+
External.cmd(cmd: cmd, live_stream: options[:live_stream])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'wpars/wrapper/constants'
|
2
|
+
|
3
|
+
module WPAR
|
4
|
+
module Wrapper
|
5
|
+
include Constants
|
6
|
+
class StartWpar
|
7
|
+
def self.start(options = {})
|
8
|
+
cmd = "#{options[:command]} #{Constants::STARTWPAR} #{options[:name]}"
|
9
|
+
|
10
|
+
puts "debug: #{cmd}" unless options[:debug].nil?
|
11
|
+
External.cmd(cmd: cmd, live_stream: options[:live_stream])
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'wpars/wrapper/constants'
|
2
|
+
|
3
|
+
module WPAR
|
4
|
+
module Wrapper
|
5
|
+
include Constants
|
6
|
+
class StopWpar
|
7
|
+
def self.stop(options = {})
|
8
|
+
unless options[:force].nil?
|
9
|
+
cmd = "#{options[:command]} #{Constants::STOPWPAR} -F #{options[:name]}"
|
10
|
+
else
|
11
|
+
cmd = "#{options[:command]} #{Constants::STOPWPAR} #{options[:name]}"
|
12
|
+
end
|
13
|
+
|
14
|
+
puts "debug: #{cmd}" unless options[:debug].nil?
|
15
|
+
External.cmd(cmd: cmd, live_stream: options[:live_stream])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'wpars/wrapper/constants'
|
2
|
+
|
3
|
+
module WPAR
|
4
|
+
module Wrapper
|
5
|
+
include Constants
|
6
|
+
class SyncWpar
|
7
|
+
def self.sync(options = {})
|
8
|
+
if options[:dir].nil?
|
9
|
+
cmd = "#{options[:command]} #{Constants::SYNCWPAR} -X #{options[:name]}"
|
10
|
+
else
|
11
|
+
cmd = "#{options[:command]} #{Constants::SYNCWPAR} -D -d #{options[:dir]} #{options[:name]}"
|
12
|
+
end
|
13
|
+
|
14
|
+
puts "debug: #{cmd}" unless options[:debug].nil?
|
15
|
+
External.cmd(cmd: cmd, live_stream: options[:live_stream])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: aix-wpar
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alain Dejoux
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-06-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mixlib-shellout
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2'
|
27
|
+
description: A wrapper for the AIX WPAR administration.
|
28
|
+
email:
|
29
|
+
- adejoux@djouxtech.net
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".gitignore"
|
35
|
+
- LICENSE
|
36
|
+
- README.md
|
37
|
+
- aix-wpar.gemspec
|
38
|
+
- examples/list_wpars.rb
|
39
|
+
- examples/manage_wpar.rb
|
40
|
+
- lib/wpars.rb
|
41
|
+
- lib/wpars/device.rb
|
42
|
+
- lib/wpars/external.rb
|
43
|
+
- lib/wpars/general.rb
|
44
|
+
- lib/wpars/mountpoint.rb
|
45
|
+
- lib/wpars/name.rb
|
46
|
+
- lib/wpars/network.rb
|
47
|
+
- lib/wpars/resource_control.rb
|
48
|
+
- lib/wpars/security.rb
|
49
|
+
- lib/wpars/version.rb
|
50
|
+
- lib/wpars/wpar.rb
|
51
|
+
- lib/wpars/wrapper/constants.rb
|
52
|
+
- lib/wpars/wrapper/converter.rb
|
53
|
+
- lib/wpars/wrapper/lswpar.rb
|
54
|
+
- lib/wpars/wrapper/lswpar_device.rb
|
55
|
+
- lib/wpars/wrapper/lswpar_general.rb
|
56
|
+
- lib/wpars/wrapper/lswpar_mountpoint.rb
|
57
|
+
- lib/wpars/wrapper/lswpar_network.rb
|
58
|
+
- lib/wpars/wrapper/lswpar_resource_control.rb
|
59
|
+
- lib/wpars/wrapper/lswpar_security.rb
|
60
|
+
- lib/wpars/wrapper/mkwpar.rb
|
61
|
+
- lib/wpars/wrapper/rmwpar.rb
|
62
|
+
- lib/wpars/wrapper/startwpar.rb
|
63
|
+
- lib/wpars/wrapper/stopwpar.rb
|
64
|
+
- lib/wpars/wrapper/syncwpar.rb
|
65
|
+
homepage: https://github.com/adejoux/ruby-aix-wpar
|
66
|
+
licenses:
|
67
|
+
- MIT
|
68
|
+
metadata: {}
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options: []
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
requirements: []
|
84
|
+
rubyforge_project:
|
85
|
+
rubygems_version: 2.5.1
|
86
|
+
signing_key:
|
87
|
+
specification_version: 4
|
88
|
+
summary: A ruby library wrapper for the AIX WPAR administration.
|
89
|
+
test_files: []
|