vzlimit 0.0.1

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.
data/History.txt ADDED
@@ -0,0 +1,7 @@
1
+ === 0.0.1 2010-01-30
2
+
3
+ * Initial release
4
+ * Listing/configuriong resources
5
+ * Memory Limits (privvmpages)
6
+ * Disk limits
7
+ * ATTENTION: May only work on x86 and x86_64 hardware yet!
data/Manifest.txt ADDED
@@ -0,0 +1,17 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.rdoc
4
+ Rakefile
5
+ bin/vzlimit
6
+ config/website.yml
7
+ lib/vzlimit.rb
8
+ lib/vzlimit/cli.rb
9
+ script/console
10
+ script/destroy
11
+ script/generate
12
+ script/txt2html
13
+ test/test_helper.rb
14
+ test/test_vzlimit.rb
15
+ test/test_vzlimit_cli.rb
16
+ vzlimit.gemspec
17
+ website/index.html
data/README.rdoc ADDED
@@ -0,0 +1,25 @@
1
+ = vzlimit
2
+
3
+ * http://vzlimit.rubyforge.org/
4
+
5
+ == DESCRIPTION:
6
+
7
+ vzlimit simplifies the resource management of the virtualization system 'OpenVZ'. It allows to list all the configured limits as well as changing them in human readable/writable units.
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ * FIX (list of features or problems)
12
+
13
+ == SYNOPSIS:
14
+
15
+ vzlimit list
16
+
17
+ == REQUIREMENTS:
18
+
19
+ * highline
20
+ * rubyforge
21
+ * hirb
22
+
23
+ == INSTALL:
24
+
25
+ * sudo gem install vzlimit
data/Rakefile ADDED
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.1.0'
3
+ require 'hoe'
4
+ require 'fileutils'
5
+ require './lib/vzlimit'
6
+
7
+ Hoe.plugin :newgem
8
+ Hoe.plugin :website
9
+ # Hoe.plugin :cucumberfeatures
10
+
11
+ # Generate all the Rake tasks
12
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
13
+ $hoe = Hoe.spec 'vzlimit' do
14
+ self.developer 'Remo Fritzsche', 'dev@remofritzsche.com'
15
+ #self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
16
+ self.rubyforge_name = 'vzlimit' # TODO this is default value
17
+ self.extra_deps = [['highline','>= 1.5.1'], ['rubyforge','>= 2.0.3'], ['hirb', '>= 0.2.9']]
18
+ end
19
+
20
+ require 'newgem/tasks'
21
+ Dir['tasks/**/*.rake'].each { |t| load t }
22
+
23
+ # TODO - want other tests/tasks run by default? Add them to the list
24
+ # remove_task :default
25
+ # task :default => [:spec, :features]
data/bin/vzlimit ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created by Remo Fritzsche on 2010-1-30.
4
+ # Copyright (c) 2010. All rights reserved.
5
+
6
+ require 'rubygems'
7
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/vzlimit")
8
+ require "vzlimit/cli"
9
+
10
+ Vzlimit::CLI.new(STDOUT, ARGV)
@@ -0,0 +1,2 @@
1
+ host: remofritzsche@vzlimit.rubyforge.org
2
+ remote_dir: /var/www/gforge-projects/vzlimit
@@ -0,0 +1,201 @@
1
+ require 'optparse'
2
+ require 'highline'
3
+ require 'hirb'
4
+
5
+ module Vzlimit
6
+ class CLI
7
+ ACTIONS = [:limit, :list]
8
+ VZ_CONF_DIR = '/etc/vz/conf'
9
+
10
+ def initialize(stdout, arguments)
11
+ @stdout = stdout
12
+ @arguments = arguments
13
+ @h = HighLine.new
14
+
15
+ begin
16
+ # Check action argument
17
+ if !@arguments[0] ||! ACTIONS.include?(@arguments[0].to_sym)
18
+ usage
19
+ end
20
+
21
+ # list
22
+ if @arguments[0].to_sym == :list
23
+ list
24
+ end
25
+
26
+ # limit
27
+ if @arguments[0].to_sym == :limit
28
+ limit
29
+ end
30
+ rescue
31
+ @h.say $!
32
+ end
33
+ end
34
+
35
+ def list
36
+ # Scan directory /etc/vz/conf/
37
+ conf_files = Dir.entries(VZ_CONF_DIR)
38
+
39
+ vps_list = []
40
+
41
+ conf_files.each do |file|
42
+ if !(file =~ /^\d\d+\.conf$/)
43
+ next;
44
+ end
45
+
46
+ vpsid = /^(\d\d+)/.match(file)[0]
47
+ conf = File.open(VZ_CONF_DIR + '/' + file, "rb").read
48
+
49
+ # Get memory limits
50
+ null, memory_soft, memory_hard = /\nPRIVVMPAGES="(\d+):(\d+)"\n/.match(conf).to_a
51
+ memory_soft = (memory_soft.to_f / 1024 * 4).to_i.to_s
52
+ memory_hard = (memory_hard.to_f / 1024 * 4).to_i.to_s
53
+
54
+ # Get diskspace limits
55
+ null, diskspace_soft, diskspace_hard = /\nDISKSPACE="(\d+):(\d+)"\n/.match(conf).to_a
56
+ diskspace_soft = (diskspace_soft.to_f / 1024).to_i.to_s
57
+ diskspace_hard = (diskspace_hard.to_f / 1024).to_i.to_s
58
+
59
+ # Get ip
60
+ ip = /\nIP_ADDRESS="(\d+\.\d+\.\d+\.\d+)"\n/.match(conf)[1]
61
+
62
+ vps_list << {
63
+ :vpsid => vpsid,
64
+ :ip => ip,
65
+ :memory_soft => @h.color(memory_soft + ' MB', :yellow),
66
+ :memory_hard => @h.color(memory_hard + ' MB', :red),
67
+ :diskspace_soft => @h.color(diskspace_soft + ' MB', :yellow),
68
+ :diskspace_hard => @h.color(diskspace_hard + ' MB', :red)
69
+ }
70
+
71
+ #vps_list << [
72
+ # vpsid + "e[32mDONEe[0m",
73
+ # ip,
74
+ # memory_soft,
75
+ # memory_hard,
76
+ # diskspace_soft,
77
+ # diskspace_hard
78
+ #]
79
+ end
80
+
81
+ #@h.say Hirb::Helpers::Table.render(vps_list,
82
+ # :fields => [:vpsid, :ip, :memory_soft, :memory_hard, :diskspace_soft, :diskspace_hard],
83
+ # :headers => {:vpsid => 'CTID', :ip => 'IP', :memory_soft => 'MEMORY SOFT LIMIT', :memory_hard => 'MEMORY HARD LIMIT', :diskspace_soft => 'DISKSPACE SOFT LIMIT', :diskspace_hard => 'DISKSPACE HARD LIMIT'}
84
+ #)
85
+ HighLine.use_color=false
86
+
87
+ @h.say sprintf("%-8s\t%-15s\t%-20s\t%-20s\t%-20s\t%-20s", 'CTID', 'IP', 'MEMORY SOFT LIMIT', 'MEMORY HARD LIMIT', 'DISKSPACE SOFT LIMIT', 'DISKSPACE HARD LIMIT') + "\n"
88
+ @h.say sprintf("%-8s\t%-15s\t%-17s\t%-17s\t%-20s\t%-20s", '='*8, '='*15, '='*17, '='*17, '='*20, '='*20) + "\n"
89
+
90
+ vps_list.each do |vps|
91
+ @h.say sprintf("%-8s\t%-15s\t%-17s\t\t%-17s\t\t%-20s\t\t%-20s", vps[:vpsid], vps[:ip], vps[:memory_soft], vps[:memory_hard], vps[:diskspace_soft], vps[:diskspace_hard]) + "\n"
92
+ end
93
+
94
+ #@h.say sprintf("%10sworld", "hello");
95
+ #@h.say @h.list vps_list, :columns_down
96
+
97
+ end
98
+
99
+ def limit
100
+ @arguments.shift
101
+ usage = 'Usage: vzlimit limit vpsid [options]'
102
+ raise usage unless @arguments[0]
103
+
104
+ vpsid = @arguments.shift
105
+ memory = nil
106
+ disk = nil
107
+
108
+ while (arg = @arguments.shift) do
109
+ if ['-m', '--memory'].include? arg
110
+ memory = @arguments.shift
111
+
112
+ if !(memory =~ /^[-+]?[0-9]*\.?[0-9]+:[-+]?[0-9]*\.?[0-9]+$/)
113
+ raise "Usage: vzlimit limit vpsid #{arg} soft:hard"
114
+ end
115
+ elsif ['-d', '--diskspace'].include? arg
116
+ disk = @arguments.shift
117
+
118
+ if !(disk =~ /^\d+:\d+$/)
119
+ raise "Usage: vzlimit limit vpsid #{arg} soft:hard"
120
+ end
121
+ else
122
+ raise "Argument #{arg} not valid for action limit."
123
+ end
124
+ end
125
+
126
+ if !memory &&! disk
127
+ raise "Nothing to set."
128
+ end
129
+
130
+ # Limit memory
131
+ limit_memory(vpsid, memory) if memory
132
+
133
+ # Limit disk space
134
+ limit_disk_space(vpsid, disk) if disk
135
+ end
136
+
137
+ def limit_memory(vpsid, memory)
138
+ # Get separate soft and hard limit
139
+ soft_mb, hard_mb = memory.split(':')
140
+
141
+ # Desaster validation
142
+ if soft_mb.to_f > hard_mb.to_f || soft_mb.to_f < 0 || hard_mb.to_f < 0
143
+ raise "Memory limits not valid."
144
+ end
145
+
146
+ # Convert MB limits to mempages
147
+ soft = (soft_mb.to_f * 1024 / 4).to_i
148
+ hard = (soft_mb.to_f * 1024 / 4).to_i
149
+
150
+ # Execute command
151
+ execute "vzctl set #{vpsid} --privvmpages #{soft}:#{hard} --save"
152
+
153
+ # Success message
154
+ @h.say @h.color "Memory limits have been set:", :green
155
+ @h.say " VPS-ID: #{vpsid}"
156
+ @h.say " Soft memory limit: #{soft_mb} MB"
157
+ @h.say " Hard memory limit: #{hard_mb} MB"
158
+ end
159
+
160
+ def limit_disk_space(vpsid, disk)
161
+ # Get separate soft and hard limit
162
+ soft_mb, hard_mb = disk.split(':')
163
+
164
+ # Desaster validation
165
+ if soft_mb.to_f > hard_mb.to_f || soft_mb.to_f < 0 || hard_mb.to_f < 0
166
+ raise "Disk limits not valid."
167
+ end
168
+
169
+ # Convert MB limits to 1K-block
170
+ soft = (soft_mb.to_f * 1024).to_i
171
+ hard = (soft_mb.to_f * 1024).to_i
172
+
173
+ # Execute command
174
+ execute "vzctl set #{vpsid} --diskspace #{soft}:#{hard} --save"
175
+
176
+ # Success message
177
+ @h.say @h.color "Diskspace limits have been set:", :green
178
+ @h.say " VPS-ID: #{vpsid}"
179
+ @h.say " Soft memory limit: #{soft_mb} MB"
180
+ @h.say " Hard memory limit: #{hard_mb} MB"
181
+ end
182
+
183
+ def execute(command)
184
+ @h.say "Will execute the following command:"
185
+ @h.say "=================================================================================="
186
+ @h.say command
187
+ @h.say "=================================================================================="
188
+
189
+ unless @h.agree @h.color("Execute this command?", :red) + " [yes/no] "
190
+ raise 'User aborted.'
191
+ end
192
+
193
+ retval = system command
194
+ raise @h.color "Error: Command execution failed, exit status #{$?}.", :red unless retval
195
+ end
196
+
197
+ def usage
198
+ @h.say "Usage: vzlimit action [params...]"
199
+ end
200
+ end
201
+ end
data/lib/vzlimit.rb ADDED
@@ -0,0 +1,9 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'rubygems'
5
+
6
+ module Vzlimit
7
+ VERSION = '0.0.1'
8
+
9
+ end
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/vzlimit.rb'}"
9
+ puts "Loading vzlimit gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
data/script/txt2html ADDED
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ load File.dirname(__FILE__) + "/../Rakefile"
4
+ require 'rubyforge'
5
+ require 'redcloth'
6
+ require 'syntax/convertors/html'
7
+ require 'erb'
8
+
9
+ download = "http://rubyforge.org/projects/#{$hoe.rubyforge_name}"
10
+ version = $hoe.version
11
+
12
+ def rubyforge_project_id
13
+ RubyForge.new.configure.autoconfig["group_ids"][$hoe.rubyforge_name]
14
+ end
15
+
16
+ class Fixnum
17
+ def ordinal
18
+ # teens
19
+ return 'th' if (10..19).include?(self % 100)
20
+ # others
21
+ case self % 10
22
+ when 1: return 'st'
23
+ when 2: return 'nd'
24
+ when 3: return 'rd'
25
+ else return 'th'
26
+ end
27
+ end
28
+ end
29
+
30
+ class Time
31
+ def pretty
32
+ return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
33
+ end
34
+ end
35
+
36
+ def convert_syntax(syntax, source)
37
+ return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
38
+ end
39
+
40
+ if ARGV.length >= 1
41
+ src, template = ARGV
42
+ template ||= File.join(File.dirname(__FILE__), '/../website/template.html.erb')
43
+ else
44
+ puts("Usage: #{File.split($0).last} source.txt [template.html.erb] > output.html")
45
+ exit!
46
+ end
47
+
48
+ template = ERB.new(File.open(template).read)
49
+
50
+ title = nil
51
+ body = nil
52
+ File.open(src) do |fsrc|
53
+ title_text = fsrc.readline
54
+ body_text_template = fsrc.read
55
+ body_text = ERB.new(body_text_template).result(binding)
56
+ syntax_items = []
57
+ body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</\1>!m){
58
+ ident = syntax_items.length
59
+ element, syntax, source = $1, $2, $3
60
+ syntax_items << "<#{element} class='syntax'>#{convert_syntax(syntax, source)}</#{element}>"
61
+ "syntax-temp-#{ident}"
62
+ }
63
+ title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
64
+ body = RedCloth.new(body_text).to_html
65
+ body.gsub!(%r!(?:<pre><code>)?syntax-temp-(\d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
66
+ end
67
+ stat = File.stat(src)
68
+ created = stat.ctime
69
+ modified = stat.mtime
70
+
71
+ $stdout << template.result(binding)
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/vzlimit'
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestVzlimit < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper.rb")
2
+ require 'vzlimit/cli'
3
+
4
+ class TestVzlimitCli < Test::Unit::TestCase
5
+ def setup
6
+ Vzlimit::CLI.execute(@stdout_io = StringIO.new, [])
7
+ @stdout_io.rewind
8
+ @stdout = @stdout_io.read
9
+ end
10
+
11
+ def test_print_default_output
12
+ assert_match(/To update this executable/, @stdout)
13
+ end
14
+ end
data/vzlimit.gemspec ADDED
@@ -0,0 +1,49 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{vzlimit}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Remo Fritzsche"]
9
+ s.date = %q{2010-01-30}
10
+ s.default_executable = %q{vzlimit}
11
+ s.description = %q{FIX (describe your package)}
12
+ s.email = ["dev@remofritzsche.com"]
13
+ s.executables = ["vzlimit"]
14
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "PostInstall.txt", "website/index.txt"]
15
+ s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "bin/vzlimit", "config/website.yml.sample", "lib/vzlimit.rb", "lib/vzlimit/cli.rb", "script/console", "script/destroy", "script/generate", "script/txt2html", "test/test_helper.rb", "test/test_vzlimit.rb", "test/test_vzlimit_cli.rb", "website/index.html", "website/index.txt", "website/javascripts/rounded_corners_lite.inc.js", "website/stylesheets/screen.css", "website/template.html.erb"]
16
+ s.homepage = %q{http://github.com/#{github_username}/#{project_name}}
17
+ s.post_install_message = %q{PostInstall.txt}
18
+ s.rdoc_options = ["--main", "README.rdoc"]
19
+ s.require_paths = ["lib"]
20
+ s.rubyforge_project = %q{vzlimit}
21
+ s.rubygems_version = %q{1.3.5}
22
+ s.summary = %q{FIX (describe your package)}
23
+ s.test_files = ["test/test_helper.rb", "test/test_vzlimit.rb", "test/test_vzlimit_cli.rb"]
24
+
25
+ if s.respond_to? :specification_version then
26
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
27
+ s.specification_version = 3
28
+
29
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
30
+ s.add_runtime_dependency(%q<highline>, [">= 1.5.1"])
31
+ s.add_runtime_dependency(%q<rubyforge>, [">= 2.0.3"])
32
+ s.add_development_dependency(%q<rubyforge>, [">= 2.0.3"])
33
+ s.add_development_dependency(%q<gemcutter>, [">= 0.3.0"])
34
+ s.add_development_dependency(%q<hoe>, [">= 2.5.0"])
35
+ else
36
+ s.add_dependency(%q<highline>, [">= 1.5.1"])
37
+ s.add_dependency(%q<rubyforge>, [">= 2.0.3"])
38
+ s.add_dependency(%q<rubyforge>, [">= 2.0.3"])
39
+ s.add_dependency(%q<gemcutter>, [">= 0.3.0"])
40
+ s.add_dependency(%q<hoe>, [">= 2.5.0"])
41
+ end
42
+ else
43
+ s.add_dependency(%q<highline>, [">= 1.5.1"])
44
+ s.add_dependency(%q<rubyforge>, [">= 2.0.3"])
45
+ s.add_dependency(%q<rubyforge>, [">= 2.0.3"])
46
+ s.add_dependency(%q<gemcutter>, [">= 0.3.0"])
47
+ s.add_dependency(%q<hoe>, [">= 2.5.0"])
48
+ end
49
+ end
@@ -0,0 +1,15 @@
1
+ <html>
2
+ <head>
3
+ <title>vzlimit - managing OpenVZ limits with comfort</title>
4
+ <style type="text/css">
5
+ body
6
+ {
7
+ font-family: Georgia;
8
+ }
9
+ </style>
10
+ </head>
11
+ <body>
12
+ <h1>vzlimit</h1>
13
+ <p>Website comming soon.</p>
14
+ </body>
15
+ </html>
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vzlimit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Remo Fritzsche
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-30 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: highline
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.5.1
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rubyforge
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.0.3
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: hirb
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.2.9
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: rubyforge
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 2.0.3
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: gemcutter
57
+ type: :development
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 0.3.0
64
+ version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: hoe
67
+ type: :development
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 2.5.0
74
+ version:
75
+ description: vzlimit simplifies the resource management of the virtualization system 'OpenVZ'. It allows to list all the configured limits as well as changing them in human readable/writable units.
76
+ email:
77
+ - dev@remofritzsche.com
78
+ executables:
79
+ - vzlimit
80
+ extensions: []
81
+
82
+ extra_rdoc_files:
83
+ - History.txt
84
+ - Manifest.txt
85
+ files:
86
+ - History.txt
87
+ - Manifest.txt
88
+ - README.rdoc
89
+ - Rakefile
90
+ - bin/vzlimit
91
+ - config/website.yml
92
+ - lib/vzlimit.rb
93
+ - lib/vzlimit/cli.rb
94
+ - script/console
95
+ - script/destroy
96
+ - script/generate
97
+ - script/txt2html
98
+ - test/test_helper.rb
99
+ - test/test_vzlimit.rb
100
+ - test/test_vzlimit_cli.rb
101
+ - vzlimit.gemspec
102
+ - website/index.html
103
+ has_rdoc: true
104
+ homepage: http://vzlimit.rubyforge.org/
105
+ licenses: []
106
+
107
+ post_install_message:
108
+ rdoc_options:
109
+ - --main
110
+ - README.rdoc
111
+ require_paths:
112
+ - lib
113
+ required_ruby_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: "0"
118
+ version:
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: "0"
124
+ version:
125
+ requirements: []
126
+
127
+ rubyforge_project: vzlimit
128
+ rubygems_version: 1.3.5
129
+ signing_key:
130
+ specification_version: 3
131
+ summary: vzlimit simplifies the resource management of the virtualization system 'OpenVZ'
132
+ test_files:
133
+ - test/test_helper.rb
134
+ - test/test_vzlimit.rb
135
+ - test/test_vzlimit_cli.rb