lorj_cloud 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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