lorj_cloud 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.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.gitreview +4 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +46 -0
  6. data/Gemfile +4 -0
  7. data/README.md +39 -0
  8. data/Rakefile +43 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +7 -0
  11. data/lib/data.yaml +0 -0
  12. data/lib/defaults.yaml +0 -0
  13. data/lib/lorj_cloud/version.rb +4 -0
  14. data/lib/lorj_cloud.rb +6 -0
  15. data/lib/process/cloud/process/common.rb +60 -0
  16. data/lib/process/cloud/process/connection.rb +92 -0
  17. data/lib/process/cloud/process/external_network.rb +90 -0
  18. data/lib/process/cloud/process/flavor.rb +97 -0
  19. data/lib/process/cloud/process/images.rb +99 -0
  20. data/lib/process/cloud/process/internet_network.rb +33 -0
  21. data/lib/process/cloud/process/internet_server.rb +29 -0
  22. data/lib/process/cloud/process/keypairs.rb +332 -0
  23. data/lib/process/cloud/process/network.rb +107 -0
  24. data/lib/process/cloud/process/public_ip.rb +106 -0
  25. data/lib/process/cloud/process/router.rb +267 -0
  26. data/lib/process/cloud/process/rules.rb +120 -0
  27. data/lib/process/cloud/process/security_groups.rb +120 -0
  28. data/lib/process/cloud/process/server.rb +127 -0
  29. data/lib/process/cloud/process/server_log.rb +34 -0
  30. data/lib/process/cloud/process/subnetwork.rb +96 -0
  31. data/lib/process/cloud_process.rb +30 -0
  32. data/lib/providers/hpcloud/compute.rb +105 -0
  33. data/lib/providers/hpcloud/hpcloud.rb +463 -0
  34. data/lib/providers/hpcloud/network.rb +115 -0
  35. data/lib/providers/hpcloud/security_groups.rb +68 -0
  36. data/lib/providers/mock/mock.rb +144 -0
  37. data/lib/providers/openstack/openstack.rb +410 -0
  38. data/lib/providers/openstack/openstack_create.rb +206 -0
  39. data/lib/providers/openstack/openstack_delete.rb +28 -0
  40. data/lib/providers/openstack/openstack_get.rb +39 -0
  41. data/lib/providers/openstack/openstack_process.rb +26 -0
  42. data/lib/providers/openstack/openstack_query.rb +96 -0
  43. data/lib/providers/openstack/openstack_update.rb +35 -0
  44. data/lib/providers/templates/compute.rb +40 -0
  45. data/lib/providers/templates/mycloud.rb +72 -0
  46. data/lib/providers/templates/network.rb +32 -0
  47. data/lorj_cloud.gemspec +32 -0
  48. metadata +175 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4233f4744a02510e08773415b97e9e2c1d22a573
4
+ data.tar.gz: 65f7e65ab5b524739d081bfd6fac667a0b92e815
5
+ SHA512:
6
+ metadata.gz: 6942511c15d7ca200f7994f3e78db471cc1d051aef996d68118694e2512e6decae0310f14b1b470aa725cc3079cdeaf5b037d5986f0db54d6e5afcd8a2c748f2
7
+ data.tar.gz: b6e027ec8f848aec4be5ad2bd8a241c2f1e65699bcf5234b0c815b85f2979230336b0960503deb2dd442e8a114d21e4d7267a164ab50d84571ab99475c5400f5
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.gitreview ADDED
@@ -0,0 +1,4 @@
1
+ [gerrit]
2
+ host=review.forj.forj.io
3
+ port=29418
4
+ project=forj-oss/lorj-cloud.git
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.rubocop.yml ADDED
@@ -0,0 +1,46 @@
1
+ # Copyright 2013 Hewlett-Packard Development Company, L.P.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # use: rubocop --show-cops
16
+ # to validate configuration.
17
+ # rubocop config
18
+ AllCops:
19
+ Include:
20
+ - '**/Rakefile'
21
+ - '**/config.ru'
22
+ Exclude:
23
+ - 'docker/**/*'
24
+ - 'bin/scripts/**/*'
25
+ - 'git/**/*'
26
+ - 'tmp/**/*'
27
+ #Documentation:
28
+ # Enabled: false
29
+ #Metrics/LineLength:
30
+ # Max: 99
31
+ Style/HashSyntax:
32
+ EnforcedStyle: hash_rockets
33
+
34
+ # lets start with 40, but 10 is way to small..
35
+ Metrics/MethodLength:
36
+ Max: 40
37
+ # If Method length is increased, class length need to be extended as well.
38
+ Metrics/ClassLength:
39
+ Max: 150
40
+
41
+ # allow arguments to be longer than 15
42
+ Metrics/AbcSize:
43
+ Max: 40
44
+ # forj-docker binary name gets an exception
45
+ Style/FileName:
46
+ Exclude: ['bin/forj-docker', 'lib/**/forj-docker.rb']
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in lorj_cloud.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # LorjCloud
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/lorj_cloud`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'lorj_cloud'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install lorj_cloud
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ 1. Fork it ( https://github.com/[my-github-username]/lorj_cloud/fork )
36
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
37
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
38
+ 4. Push to the branch (`git push origin my-new-feature`)
39
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,43 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
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.
16
+
17
+ require 'bundler/gem_tasks'
18
+ require 'rspec/core/rake_task'
19
+ require 'rubocop/rake_task'
20
+ require 'rdoc/task'
21
+
22
+ task :default => [:lint, :spec]
23
+
24
+ desc 'Generate lorj documentation'
25
+ RDoc::Task.new do |rdoc|
26
+ rdoc.main = 'README.md'
27
+ rdoc.rdoc_files.include('README.md', 'lib', 'example', 'bin')
28
+ end
29
+
30
+ desc 'Run the specs.'
31
+ RSpec::Core::RakeTask.new do |t|
32
+ t.pattern = 'spec/*_spec.rb'
33
+ t.rspec_opts = '-f doc'
34
+ end
35
+
36
+ desc 'Run RuboCop on the project'
37
+ RuboCop::RakeTask.new(:lint) do |task|
38
+ task.formatters = ['progress']
39
+ task.verbose = true
40
+ task.fail_on_error = true
41
+ end
42
+
43
+ task :build => [:lint, :spec]
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'lorj_cloud'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
data/lib/data.yaml ADDED
File without changes
data/lib/defaults.yaml ADDED
File without changes
@@ -0,0 +1,4 @@
1
+ # LorjCloud module
2
+ module LorjCloud
3
+ VERSION = '0.1.0'
4
+ end
data/lib/lorj_cloud.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'lorj_cloud/version'
2
+
3
+ require 'lorj'
4
+
5
+ Lorj.declare_process('cloud', File.dirname(__FILE__),
6
+ :controllers_dir => 'providers')
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ # It requires Core objects to be defined + default ForjProcess functions.
19
+
20
+ # Common definition
21
+ class Lorj::BaseDefinition # rubocop: disable Style/ClassAndModuleChildren
22
+ # All objects used by this process are built from a Controller
23
+ process_default :use_controller => true
24
+ end
25
+
26
+ # Class to manage retry on errors before failing
27
+ class SSLErrorMgt
28
+ def initialize(iMaxRetry = 5)
29
+ @retry = 0
30
+ @max_retry = iMaxRetry
31
+ end
32
+
33
+ def wait(message, issue = nil)
34
+ if @retry < @max_retry
35
+ sleep(2)
36
+ @retry += 1
37
+ if PrcLib.level == 0
38
+ msg = format('%s/%s try... ', @retry, @max_retry)
39
+ msg += issue unless issue.nil?
40
+ print msg
41
+ end
42
+ return false
43
+ else
44
+ PrcLib.error('Too many retry. %s', message)
45
+ return true
46
+ end
47
+ end
48
+
49
+ def error_detected(message, backtrace, e)
50
+ if message.match('SSLv2/v3 read server hello A: unknown protocol')
51
+ return wait(message, "'unknown protocol' SSL Error")
52
+ elsif e.is_a?(Excon::Errors::InternalServerError)
53
+ return wait(message, ANSI.red(e.class))
54
+ else
55
+ PrcLib.error("Exception %s: %s\n%s", e.class, message,
56
+ backtrace.join("\n"))
57
+ return true
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+
18
+ # It requires Core objects to be defined + default ForjProcess functions.
19
+
20
+ # rubocop: disable Style/ClassAndModuleChildren
21
+
22
+ # Connection process code
23
+ class CloudProcess
24
+ def connect(sCloudObj, hParams)
25
+ ssl_error_obj = SSLErrorMgt.new # Retry object
26
+ PrcLib.debug("%s:%s Connecting to '%s' "\
27
+ "- Project '%s'",
28
+ self.class, sCloudObj, config[:provider], hParams[:tenant])
29
+ begin
30
+ controller_connect(sCloudObj)
31
+ rescue => e
32
+ retry unless ssl_error_obj.error_detected(e.message, e.backtrace, e)
33
+
34
+ PrcLib.error('%s:%s: Unable to connect.\n%s',
35
+ self.class, sCloudObj, e.message)
36
+ nil
37
+ end
38
+ end
39
+ end
40
+
41
+ # Define services model
42
+ class Lorj::BaseDefinition
43
+ # predefined list of objects.
44
+ # Links between objects is not predefined. To do it, use needs declaration
45
+ # in your provider class.
46
+
47
+ # object to get list of services
48
+ # Defines Process handler to call
49
+ define_obj(:services,
50
+
51
+ :create_e => :connect
52
+ )
53
+ obj_needs :data, :auth_uri
54
+ obj_needs :data, :account_id
55
+ obj_needs :data, :account_key
56
+ obj_needs :data, :tenant
57
+
58
+ undefine_attribute :id # Do not return any predefined ID
59
+ undefine_attribute :name # Do not return any predefined NAME
60
+ end
61
+
62
+ # compute_connection
63
+ class Lorj::BaseDefinition
64
+ define_obj(:compute_connection,
65
+
66
+ :create_e => :connect # Will call ForjProcess connect
67
+ )
68
+ obj_needs :data, :account_id
69
+ obj_needs :data, :account_key
70
+ obj_needs :data, :auth_uri
71
+ obj_needs :data, :tenant
72
+ obj_needs :data, :compute
73
+
74
+ undefine_attribute :id # Do not return any predefined ID
75
+ undefine_attribute :name # Do not return any predefined NAME
76
+ end
77
+
78
+ # network_connection
79
+ class Lorj::BaseDefinition
80
+ define_obj(:network_connection,
81
+
82
+ :create_e => :connect
83
+ )
84
+ obj_needs :data, :account_id
85
+ obj_needs :data, :account_key
86
+ obj_needs :data, :auth_uri
87
+ obj_needs :data, :tenant
88
+ obj_needs :data, :network
89
+
90
+ undefine_attribute :id # Do not return any predefined ID
91
+ undefine_attribute :name # Do not return any predefined NAME
92
+ end
@@ -0,0 +1,90 @@
1
+ # encoding: UTF-8
2
+
3
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
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.
16
+
17
+ # It requires Core objects to be defined + default ForjProcess functions.
18
+
19
+ # rubocop: disable Style/ClassAndModuleChildren
20
+
21
+ # External network process attached to a network
22
+ class CloudProcess
23
+ def forj_get_or_create_ext_net(sCloudObj, hParams)
24
+ PrcLib.state("Checking router '%s' gateway", hParams[:router, :name])
25
+
26
+ router_obj = hParams[:router]
27
+ router_name = hParams[:router, :name]
28
+ network_id = hParams[:router, :gateway_network_id]
29
+ if network_id
30
+ external_network = forj_query_external_network(sCloudObj,
31
+ { :id => network_id },
32
+ hParams)
33
+ PrcLib.info("Router '%s' is attached to the "\
34
+ "external gateway '%s'.", router_name,
35
+ external_network[:name])
36
+ else
37
+ PrcLib.info("Router '%s' needs to be attached to an "\
38
+ 'external gateway.', router_name)
39
+ PrcLib.state('Attaching')
40
+ external_network = forj_query_external_network(:network, {}, hParams)
41
+ if !external_network.empty?
42
+ router_obj[:gateway_network_id] = external_network[:id]
43
+ controller_update(:router, router_obj)
44
+ PrcLib.info("Router '%s' attached to the "\
45
+ "external network '%s'.",
46
+ router_name, external_network[:name])
47
+ else
48
+ PrcLib.fatal(1, "Unable to attach router '%s' to an external gateway. "\
49
+ 'Required for boxes to get internet access. ',
50
+ get_data(:router, :name))
51
+ end
52
+ end
53
+
54
+ # Need to keep the :network object as :external_network object type.
55
+ external_network.type = sCloudObj
56
+ external_network
57
+ end
58
+
59
+ def forj_query_external_network(_sCloudObj, sQuery, _hParams)
60
+ PrcLib.state('Identifying External gateway')
61
+ begin
62
+ # Searching for external network
63
+ query = sQuery.merge(:external => true)
64
+ info = {
65
+ :notfound => 'No external network found',
66
+ :checkmatch => 'Found 1 %s. Checking if it is an %s.',
67
+ :nomatch => 'No %s identified as %s match',
68
+ :found => "Found external %s '%s'.",
69
+ :more => 'Found several %s. Searching for the first one to be an %s.'
70
+ }
71
+ networks = query_single(:network, query, 'external network', info)
72
+ return Lorj::Data.new if networks.length == 0
73
+ networks[0]
74
+ rescue => e
75
+ PrcLib.error("%s\n%s", e.message, e.backtrace.join("\n"))
76
+ end
77
+ end
78
+ end
79
+
80
+ # Identify an external network thanks to the network router.
81
+ class Lorj::BaseDefinition
82
+ define_obj(:external_network,
83
+
84
+ :create_e => :forj_get_or_create_ext_net,
85
+ :query_e => :forj_query_external_network
86
+ )
87
+
88
+ obj_needs :CloudObject, :network_connection
89
+ obj_needs :CloudObject, :router
90
+ end
@@ -0,0 +1,97 @@
1
+ # encoding: UTF-8
2
+
3
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
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.
16
+
17
+ # It requires Core objects to be defined + default ForjProcess functions.
18
+
19
+ # ---------------------------------------------------------------------------
20
+ # flavor management
21
+ # ---------------------------------------------------------------------------
22
+ class CloudProcess
23
+ # Depending on clouds/rights, we can create flavor or not.
24
+ # Usually, flavor records already exists, and the controller may map them
25
+ # CloudProcess predefines some values. Consult CloudProcess.rb for details
26
+ def forj_get_or_create_flavor(sCloudObj, hParams)
27
+ flavor_name = hParams[:flavor_name]
28
+ PrcLib.state("Searching for flavor '%s'", flavor_name)
29
+
30
+ flavors = query_flavor(sCloudObj, { :name => flavor_name }, hParams)
31
+ if flavors.length == 0
32
+ if !hParams[:create]
33
+ PrcLib.error("Unable to create %s '%s'. Creation is not "\
34
+ 'supported.', sCloudObj, flavor_name)
35
+ ForjLib::Data.new.set(nil, sCloudObj)
36
+ else
37
+ create_flavor(sCloudObj, hParams)
38
+ end
39
+ else
40
+ flavors[0]
41
+ end
42
+ end
43
+
44
+ # Should return 1 or 0 flavor.
45
+ def query_flavor(sCloudObj, sQuery, hParams)
46
+ flavor_name = hParams[:flavor_name]
47
+ # list = forj_query_flavor(sCloudObj, sQuery, hParams)
48
+ # query_single(sCloudObj, list, sQuery, flavor_name)
49
+ query_single(sCloudObj, sQuery, flavor_name)
50
+ end
51
+
52
+ # Should return 1 or 0 flavor.
53
+ def forj_query_flavor(sCloudObj, sQuery, _hParams)
54
+ ssl_error_obj = SSLErrorMgt.new
55
+ begin
56
+ list = controller_query(sCloudObj, sQuery)
57
+ rescue => e
58
+ retry unless ssl_error_obj.error_detected(e.message, e.backtrace, e)
59
+ end
60
+ list
61
+ end
62
+ end
63
+
64
+ # Flavor Object
65
+ # Identify flavor
66
+ class Lorj::BaseDefinition # rubocop: disable ClassAndModuleChildren
67
+ define_obj(:flavor,
68
+
69
+ :create_e => :forj_get_or_create_flavor,
70
+ :query_e => :forj_query_flavor
71
+ # :get_e => :forj_get_flavor,
72
+ # :update_e => :forj_update_flavor,
73
+ # :delete_e => :forj_delete_flavor
74
+ )
75
+
76
+ obj_needs :CloudObject, :compute_connection
77
+ obj_needs :data, :flavor_name, :for => [:create_e]
78
+ # Cloud provider will need to map to one of those predefined flavors.
79
+ # limitation values may match exactly or at least ensure those limitation
80
+ # are under provider limitation
81
+ # ie, at least the CloudProcess limitation can less than the
82
+ # Cloud provider defines.
83
+ # CloudProcess EHD = 160, then Provider EHD = 200 is ok
84
+ # but Provider EHD = 150 is not ok.
85
+ predefine_data_value('tiny', :desc => 'VCU: 1, RAM:512M, HD:1G, '\
86
+ 'EHD: 0G, Swap: 0G')
87
+ predefine_data_value('xsmall', :desc => 'VCU: 1, RAM:1G, HD:10G, '\
88
+ 'EHD: 10G, Swap: 0G')
89
+ predefine_data_value('small', :desc => 'VCU: 2, RAM:2G, HD:30G, '\
90
+ 'EHD: 10G, Swap: 0G')
91
+ predefine_data_value('medium', :desc => 'VCU: 2, RAM:4G, HD:30G, '\
92
+ 'EHD: 50G, Swap: 0G')
93
+ predefine_data_value('large', :desc => 'VCU: 4, RAM:8G, HD:30G, '\
94
+ 'EHD: 100G, Swap: 0G')
95
+ predefine_data_value('xlarge', :desc => 'VCU: 8, RAM:16G, HD:30G, '\
96
+ 'EHD: 200G, Swap: 0G')
97
+ end
@@ -0,0 +1,99 @@
1
+ # encoding: UTF-8
2
+
3
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
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.
16
+
17
+ # It requires Core objects to be defined + default ForjProcess functions.
18
+
19
+ # ---------------------------------------------------------------------------
20
+ # Image management
21
+ # ---------------------------------------------------------------------------
22
+ class CloudProcess
23
+ def forj_get_or_create_image(sCloudObj, hParams)
24
+ image_name = hParams[:image_name]
25
+ PrcLib.state("Searching for image '%s'", image_name)
26
+
27
+ search_the_image(sCloudObj, { :name => image_name }, hParams)
28
+ # No creation possible.
29
+ end
30
+
31
+ def search_the_image(sCloudObj, sQuery, hParams)
32
+ image_name = hParams[:image_name]
33
+ images = forj_query_image(sCloudObj, sQuery, hParams)
34
+ case images.length
35
+ when 0
36
+ PrcLib.info("No image '%s' found", image_name)
37
+ nil
38
+ when 1
39
+ PrcLib.info("Found image '%s'.", image_name)
40
+ images[0, :ssh_user] = ssh_user(images[0, :name])
41
+ images[0]
42
+ else
43
+ PrcLib.info("Found several images '%s'. Selecting the first "\
44
+ "one '%s'", image_name, images[0, :name])
45
+ images[0, :ssh_user] = ssh_user(images[0, :name])
46
+ images[0]
47
+ end
48
+ end
49
+
50
+ def forj_query_image(sCloudObj, sQuery, _hParams)
51
+ ssl_error_obj = SSLErrorMgt.new
52
+ begin
53
+ images = controller_query(sCloudObj, sQuery)
54
+ rescue => e
55
+ retry unless ssl_error_obj.error_detected(e.message, e.backtrace, e)
56
+ end
57
+ add_ssh_user(images)
58
+ images
59
+ end
60
+
61
+ def add_ssh_user(images)
62
+ images.each do |image|
63
+ image[:ssh_user] = ssh_user(image[:name])
64
+ end
65
+ end
66
+
67
+ def ssh_user(image_name)
68
+ return 'fedora' if image_name =~ /fedora/i
69
+ return 'centos' if image_name =~ /centos/i
70
+ 'ubuntu'
71
+ end
72
+
73
+ def forj_get_image(sCloudObj, sId, _hParams)
74
+ ssl_error_obj = SSLErrorMgt.new
75
+ begin
76
+ image = controller_get(sCloudObj, sId)
77
+ rescue => e
78
+ retry unless ssl_error_obj.error_detected(e.message, e.backtrace, e)
79
+ end
80
+ add_ssh_user([image])
81
+ image
82
+ end
83
+ end
84
+
85
+ # ************************************ Image Object
86
+ # Identify image
87
+ class Lorj::BaseDefinition # rubocop: disable Style/ClassAndModuleChildren
88
+ define_obj(:image,
89
+
90
+ :create_e => :forj_get_or_create_image,
91
+ :query_e => :forj_query_image,
92
+ :get_e => :forj_get_image
93
+ # :update_e => :forj_update_image
94
+ # :delete_e => :forj_delete_image
95
+ )
96
+
97
+ obj_needs :CloudObject, :compute_connection
98
+ obj_needs :data, :image_name, :for => [:create_e]
99
+ end
@@ -0,0 +1,33 @@
1
+ # encoding: UTF-8
2
+
3
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
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.
16
+
17
+ # It requires Core objects to be defined + default ForjProcess functions.
18
+
19
+ # rubocop: disable Style/ClassAndModuleChildren
20
+
21
+ # Internet network Object
22
+ # Define Internet network
23
+ #
24
+ # This object contains the logic to ensure the router's network has a gateway
25
+ # to the external network (internet)
26
+ # is capable to connect to internet
27
+ # And to create this connection if possible.
28
+ class Lorj::BaseDefinition # rubocop: disable ClassAndModuleChildren
29
+ define_obj(:internet_network, :nohandler => true)
30
+
31
+ obj_needs :CloudObject, :external_network # External network to connect if
32
+ # needed.
33
+ end