occi-cli 4.0.0.alpha.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/config/warble.rb ADDED
@@ -0,0 +1,151 @@
1
+ # Disable Rake-environment-task framework detection by uncommenting/setting to false
2
+ # Warbler.framework_detection = false
3
+
4
+ # Warbler web application assembly configuration file
5
+ Warbler::Config.new do |config|
6
+ # Features: additional options controlling how the jar is built.
7
+ # Currently the following features are supported:
8
+ # - gemjar: package the gem repository in a jar file in WEB-INF/lib
9
+ # - executable: embed a web server and make the war executable
10
+ # - compiled: compile .rb files to .class files
11
+ config.features = %w(compiled)
12
+
13
+ # Application directories to be included in the webapp.
14
+ config.dirs = %w(config lib)
15
+
16
+ # Additional files/directories to include, above those in config.dirs
17
+ # config.includes = FileList["db"]
18
+
19
+ # Additional files/directories to exclude
20
+ # config.excludes = FileList["lib/tasks/*"]
21
+
22
+ # Additional Java .jar files to include. Note that if .jar files are placed
23
+ # in lib (and not otherwise excluded) then they need not be mentioned here.
24
+ # JRuby and JRuby-Rack are pre-loaded in this list. Be sure to include your
25
+ # own versions if you directly set the value
26
+ # config.java_libs += FileList["lib/java/*.jar"]
27
+
28
+ # Loose Java classes and miscellaneous files to be included.
29
+ # config.java_classes = FileList["target/classes/**.*"]
30
+
31
+ # One or more pathmaps defining how the java classes should be copied into
32
+ # the archive. The example pathmap below accompanies the java_classes
33
+ # configuration above. See http://rake.rubyforge.org/classes/String.html#M000017
34
+ # for details of how to specify a pathmap.
35
+ # config.pathmaps.java_classes << "%{target/classes/,}p"
36
+
37
+ # Bundler support is built-in. If Warbler finds a Gemfile in the
38
+ # project directory, it will be used to collect the gems to bundle
39
+ # in your application. If you wish to explicitly disable this
40
+ # functionality, uncomment here.
41
+ # config.bundler = false
42
+
43
+ # An array of Bundler groups to avoid including in the war file.
44
+ # Defaults to ["development", "test", "assets"].
45
+ # config.bundle_without = []
46
+
47
+ # Other gems to be included. If you don't use Bundler or a gemspec
48
+ # file, you need to tell Warbler which gems your application needs
49
+ # so that they can be packaged in the archive.
50
+ # For Rails applications, the Rails gems are included by default
51
+ # unless the vendor/rails directory is present.
52
+ # config.gems += ["activerecord-jdbcmysql-adapter", "jruby-openssl"]
53
+ # config.gems << "tzinfo"
54
+
55
+ # Uncomment this if you don't want to package rails gem.
56
+ # config.gems -= ["rails"]
57
+
58
+ # The most recent versions of gems are used.
59
+ # You can specify versions of gems by using a hash assignment:
60
+ # config.gems["rails"] = "2.3.10"
61
+
62
+ # You can also use regexps or Gem::Dependency objects for flexibility or
63
+ # finer-grained control.
64
+ # config.gems << /^merb-/
65
+ # config.gems << Gem::Dependency.new("merb-core", "= 0.9.3")
66
+
67
+ # Include gem dependencies not mentioned specifically. Default is
68
+ # true, uncomment to turn off.
69
+ # config.gem_dependencies = false
70
+
71
+ # Array of regular expressions matching relative paths in gems to be
72
+ # excluded from the war. Defaults to empty, but you can set it like
73
+ # below, which excludes test files.
74
+ # config.gem_excludes = [/^(test|spec)\//]
75
+
76
+ # Pathmaps for controlling how application files are copied into the archive
77
+ # config.pathmaps.application = ["WEB-INF/%p"]
78
+
79
+ # Name of the archive (without the extension). Defaults to the basename
80
+ # of the project directory.
81
+ config.jar_name = "occi"
82
+
83
+ # Name of the MANIFEST.MF template for the war file. Defaults to a simple
84
+ # MANIFEST.MF that contains the version of Warbler used to create the war file.
85
+ # config.manifest_file = "config/MANIFEST.MF"
86
+
87
+ # When using the 'compiled' feature and specified, only these Ruby
88
+ # files will be compiled. Default is to compile all \.rb files in
89
+ # the application.
90
+ # config.compiled_ruby_files = FileList['app/**/*.rb']
91
+
92
+ # === War files only below here ===
93
+
94
+ # Path to the pre-bundled gem directory inside the war file. Default
95
+ # is 'WEB-INF/gems'. Specify path if gems are already bundled
96
+ # before running Warbler. This also sets 'gem.path' inside web.xml.
97
+ # config.gem_path = "WEB-INF/vendor/bundler_gems"
98
+
99
+ # Files for WEB-INF directory (next to web.xml). This contains
100
+ # web.xml by default. If there is an .erb-File it will be processed
101
+ # with webxml-config. You may want to exclude this file via
102
+ # config.excludes.
103
+ # config.webinf_files += FileList["jboss-web.xml"]
104
+
105
+ # Files to be included in the root of the webapp. Note that files in public
106
+ # will have the leading 'public/' part of the path stripped during staging.
107
+ # config.public_html = FileList["public/**/*", "doc/**/*"]
108
+
109
+ # Pathmaps for controlling how public HTML files are copied into the .war
110
+ # config.pathmaps.public_html = ["%{public/,}p"]
111
+
112
+ # Embedded webserver to use with the 'executable' feature. Currently supported
113
+ # webservers are:
114
+ # * <tt>winstone</tt> (default) - Winstone 0.9.10 from sourceforge
115
+ # * <tt>jenkins-ci.winstone</tt> - Improved Winstone from Jenkins CI
116
+ # * <tt>jetty</tt> - Embedded Jetty from Eclipse
117
+ # config.webserver = 'jetty'
118
+
119
+ # Value of RAILS_ENV for the webapp -- default as shown below
120
+ # config.webxml.rails.env = ENV['RAILS_ENV'] || 'production'
121
+
122
+ # Application booter to use, one of :rack, :rails, or :merb (autodetected by default)
123
+ # config.webxml.booter = :rails
124
+
125
+ # Set JRuby to run in 1.9 mode.
126
+ # config.webxml.jruby.compat.version = "1.9"
127
+
128
+ # When using the :rack booter, "Rackup" script to use.
129
+ # - For 'rackup.path', the value points to the location of the rackup
130
+ # script in the web archive file. You need to make sure this file
131
+ # gets included in the war, possibly by adding it to config.includes
132
+ # or config.webinf_files above.
133
+ # - For 'rackup', the rackup script you provide as an inline string
134
+ # is simply embedded in web.xml.
135
+ # The script is evaluated in a Rack::Builder to load the application.
136
+ # Examples:
137
+ # config.webxml.rackup.path = 'WEB-INF/hello.ru'
138
+ # config.webxml.rackup = %{require './lib/demo'; run Rack::Adapter::Camping.new(Demo)}
139
+ # config.webxml.rackup = require 'cgi' && CGI::escapeHTML(File.read("config.ru"))
140
+
141
+ # Control the pool of Rails runtimes. Leaving unspecified means
142
+ # the pool will grow as needed to service requests. It is recommended
143
+ # that you fix these values when running a production server!
144
+ # If you're using threadsafe! mode, you probably don't want to set these values,
145
+ # since 1 runtime(default for threadsafe mode) will be enough.
146
+ # config.webxml.jruby.min.runtimes = 2
147
+ # config.webxml.jruby.max.runtimes = 4
148
+
149
+ # JNDI data source name
150
+ # config.webxml.jndi = 'jdbc/rails'
151
+ end
data/doc/macosx.md ADDED
@@ -0,0 +1,27 @@
1
+ # rOCCI on Mac OS X
2
+
3
+ ## Installation
4
+
5
+ To use a recent version of Ruby on Mac OS X, a few preparations are needed. Installing Ruby on Apple Mac OS X is not as
6
+ straightforward as it is on other platforms, hence following detailed instructions.
7
+
8
+ 1. Install the latest version of Xcode either
9
+ [from the Mac OS X App Store](itms://itunes.apple.com/de/app/xcode/id497799835?mt=12#) or by downloading it from
10
+ [[http://developer.apple.com]] and then installing the package.
11
+ 2. Open Xcode, then download and install the Xcode command line tools (Menu->Xcode->Preferences->Downloads)
12
+ 3. In the Terminal, install RVM with `curl -L https://get.rvm.io | bash -s stable`
13
+ 4. Read the plattform requirements for your specific setup by running `rvm requirements` in the Terminal. Execute any
14
+ tasks mentioned there for installing Ruby 1.9.3 (you can ignore hints for Ruby 1.8.7). If you need to install additional
15
+ packages it is recommended to use Homebew for it (unless you already use MacPorts). To install Homebrew paste the
16
+ following in your Terminal `ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"`
17
+ 5. Install Ruby 1.9.3 with `rvm install ruby-1.9.3`
18
+
19
+ Now that you have Ruby 1.9.3 installed, you can intall rOCCI.
20
+
21
+ To install the most recent stable version
22
+
23
+ gem install occi
24
+
25
+ To install the most recent beta version
26
+
27
+ gem install occi --pre
data/ext/mkrf_conf.rb ADDED
@@ -0,0 +1,34 @@
1
+ require 'rubygems'
2
+ require 'rubygems/command.rb'
3
+ require 'rubygems/dependency_installer.rb'
4
+
5
+ begin
6
+ Gem::Command.build_args = ARGV
7
+ rescue NoMethodError
8
+ # do nothing but warn the user
9
+ warn "Gem::Command doesn't have a method named 'build_args'!"
10
+ end
11
+
12
+ warn 'Installing platform-specific dependencies.'
13
+
14
+ warn 'Installing the most recent version of \'rake\''
15
+ inst = Gem::DependencyInstaller.new
16
+ inst.install "rake"
17
+
18
+ if RUBY_PLATFORM == "java"
19
+ warn 'Installing dependencies specific for jRuby'
20
+
21
+ jrver = (JRUBY_VERSION || "").split('.').map{ |elm| elm.to_i }
22
+ if jrver[0] == 1 && jrver[1] < 7
23
+ warn 'Installing \'jruby-openssl\' for jRuby 1.6.x'
24
+ inst.install "jruby-openssl"
25
+ end
26
+ else
27
+ # Nothing to install for rOCCI-api here
28
+ #warn 'Installing dependencies specific for Ruby'
29
+ end
30
+
31
+ # create dummy rakefile to indicate success
32
+ f = File.open(File.join(File.dirname(__FILE__), "Rakefile"), "w")
33
+ f.write "task :default\n"
34
+ f.close
@@ -0,0 +1,149 @@
1
+ # a bunch of OCCI client helpers for bin/occi
2
+
3
+ def helper_list(options, output = nil)
4
+ found = []
5
+
6
+ if resource_types.include? options.resource
7
+ Occi::Log.debug "#{options.resource} is a resource type."
8
+ found = list options.resource
9
+ elsif mixin_types.include? options.resource
10
+ Occi::Log.debug "#{options.resource} is a mixin type."
11
+ found = mixins options.resource
12
+ else
13
+ Occi::Log.warn "I have no idea what #{options.resource} is ..."
14
+ raise "Unknown resource #{options.resource}, there is nothing to list here!"
15
+ end
16
+
17
+ return found if output.nil?
18
+
19
+ if Occi::Cli::ResourceOutputFactory.allowed_resource_types.include? options.resource.to_sym
20
+ puts output.format(found, :locations, options.resource.to_sym)
21
+ else
22
+ Occi::Log.warn "Not printing, the resource type is not supported!"
23
+ end
24
+ end
25
+
26
+ def helper_describe(options, output = nil)
27
+ found = []
28
+
29
+ if resource_types.include?(options.resource) || options.resource.start_with?(options.endpoint) || options.resource.start_with?('/')
30
+ Occi::Log.debug "#{options.resource} is a resource type or an actual resource."
31
+
32
+ found = describe(options.resource)
33
+ elsif mixin_types.include? options.resource
34
+ Occi::Log.debug "#{options.resourcre} is a mixin type."
35
+
36
+ mixins(options.resource).each do |mxn|
37
+ mxn = mxn.split("#").last
38
+ found << mixin(mxn, options.resource, true)
39
+ end
40
+ elsif mixin_types.include? options.resource.split('#').first
41
+ Occi::Log.debug "#{options.resource} is a specific mixin type."
42
+
43
+ mxn_type,mxn = options.resource.split('#')
44
+ found << mixin(mxn, mxn_type, true)
45
+ else
46
+ Occi::Log.warn "I have no idea what #{options.resource} is ..."
47
+ raise "Unknown resource #{options.resource}, there is nothing to describe here!"
48
+ end
49
+
50
+ return found if output.nil?
51
+
52
+ if options.resource.start_with? options.endpoint
53
+ # resource contains full endpoint URI
54
+ # e.g., http://localhost:3300/network/adfgadf-daf5a6df4afadf-adfad65f4ad
55
+ resource_type = options.resource.split('/')[3].to_sym
56
+ elsif options.resource.start_with? '/'
57
+ # resource contains a path relative to endpoint URI
58
+ # e.g., /network/adfgadf-daf5a6df4afadf-adfad65f4ad
59
+ resource_type = options.resource.split('/')[1].to_sym
60
+ elsif mixin_types.include? options.resource.split('#').first
61
+ # resource contains a mixin with a type
62
+ # e.g., os_tpl#debian6
63
+ resource_type = options.resource.split('#').first.to_sym
64
+ else
65
+ # resource probably contains RAW resource_type
66
+ resource_type = options.resource.to_sym
67
+ end
68
+
69
+ if Occi::Cli::ResourceOutputFactory.allowed_resource_types.include? resource_type
70
+ puts output.format(found, :resources, resource_type)
71
+ else
72
+ Occi::Log.warn "Not printing, the resource type [#{resource_type.to_s}] is not supported!"
73
+ end
74
+ end
75
+
76
+ def helper_create(options, output = nil)
77
+ location = nil
78
+
79
+ if resource_types.include? options.resource
80
+ Occi::Log.debug "#{options.resource} is a resource type."
81
+ raise "Not yet implemented!" unless options.resource.include? "compute"
82
+
83
+ res = resource options.resource
84
+
85
+ Occi::Log.debug "Creating #{options.resource}:\n#{res.inspect}"
86
+
87
+ if options.links
88
+ Occi::Log.debug "with links: #{options.links}"
89
+
90
+ options.links.each do |link|
91
+ link = options.endpoint.chomp('/') + link unless link.start_with? options.endpoint
92
+
93
+ if link.include? "/storage/"
94
+ Occi::Log.debug "Adding storagelink to #{options.resource}"
95
+ res.storagelink link
96
+ elsif link.include? "/network/"
97
+ Occi::Log.debug "Adding networkinterface to #{options.resource}"
98
+ res.networkinterface link
99
+ else
100
+ raise "Unknown link type #{link}, stopping here!"
101
+ end
102
+ end
103
+ end
104
+
105
+ if options.mixins
106
+ Occi::Log.debug "with mixins: #{options.mixins}"
107
+
108
+ options.mixins.keys.each do |type|
109
+ Occi::Log.debug "Adding mixins of type #{type} to #{options.resource}"
110
+
111
+ options.mixins[type].each do |name|
112
+ mxn = mixin name, type
113
+
114
+ raise "Unknown mixin #{type}##{name}, stopping here!" if mxn.nil?
115
+ Occi::Log.debug "Adding mixin #{mxn} to #{options.resource}"
116
+ res.mixins << mxn
117
+ end
118
+ end
119
+ end
120
+
121
+ #TODO: set other attributes
122
+ res.title = options.attributes[:title]
123
+
124
+ Occi::Log.debug "Creating #{options.resource}:\n#{res.inspect}"
125
+
126
+ location = create res
127
+ else
128
+ Occi::Log.warn "I have no idea what #{options.resource} is ..."
129
+ raise "Unknown resource #{options.resource}, there is nothing to create here!"
130
+ end
131
+
132
+ return location if output.nil?
133
+
134
+ puts location
135
+ end
136
+
137
+ def helper_delete(options, output = nil)
138
+ if delete(options.resource)
139
+ Occi::Log.info "Resource #{options.resource} successfully removed!"
140
+ else
141
+ raise "Failed to remove resource #{options.resource}!"
142
+ end
143
+
144
+ true
145
+ end
146
+
147
+ def helper_trigger(options, output = nil)
148
+ raise "Not yet implemented!"
149
+ end