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
@@ -0,0 +1,26 @@
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
+ # Specific openstack process added to the application process.
18
+ class OpenstackProcess
19
+ def openstack_get_tenant(sObjectType, hParams)
20
+ tenant_name = hParams[:tenant]
21
+ query = { :name => tenant_name }
22
+ PrcLib.state("searching for tenant '%s'", tenant_name)
23
+ list = query_single(sObjectType, query, tenant_name)
24
+ return list[0] if list.length > 0
25
+ end
26
+ end
@@ -0,0 +1,96 @@
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
+ # Defined Openstack object query.
18
+ class OpenstackController
19
+ def self.def_basic_query(connection, name, property_name = nil)
20
+ property_name = property_name.nil? ? name.to_s + 's' : property_name.to_s
21
+
22
+ define_method("query_#{name}") do |hParams, _query|
23
+ required?(hParams, connection)
24
+ hParams[connection].send(property_name).all
25
+ end
26
+ end
27
+
28
+ # Implementation of API supporting query Hash
29
+ def self.def_simple_query(connection, name, property_name = nil)
30
+ property_name = property_name.nil? ? name.to_s + 's' : property_name.to_s
31
+
32
+ define_method("query_#{name}") do |hParams, query|
33
+ required?(hParams, connection)
34
+ hParams[connection].send(property_name).all query
35
+ end
36
+ end
37
+
38
+ # Implementation of API NOT supporting query Hash
39
+ # The function will filter itself.
40
+ def self.def_complex_query(connection, name, property_name = nil)
41
+ property_name = property_name.nil? ? name.to_s + 's' : property_name.to_s
42
+
43
+ define_method("query_#{name}") do |hParams, query|
44
+ required?(hParams, connection)
45
+
46
+ key_pairs = hParams[connection].send(property_name).all
47
+ results = []
48
+ key_pairs.each do |sElem|
49
+ selected = true
50
+ attributes = sElem.instance_variable_get(:@attributes)
51
+ query.each do |key, value|
52
+ if attributes[key] != value
53
+ selected = false
54
+ break
55
+ end
56
+ end
57
+ results.push sElem if selected
58
+ end
59
+ results
60
+ end
61
+ end
62
+
63
+ def_simple_query :compute_connection, :tenant
64
+
65
+ def_simple_query :compute_connection, :image
66
+
67
+ def_simple_query :compute_connection, :flavor
68
+
69
+ def_simple_query :compute_connection, :server
70
+
71
+ def_simple_query :network_connection, :network
72
+
73
+ def_simple_query :network_connection, :subnetwork, :subnets
74
+
75
+ def_simple_query :network_connection, :router
76
+
77
+ def_simple_query :network_connection, :port
78
+
79
+ # def_simple_query :network_connection, :security_groups, :security_groups
80
+
81
+ def_simple_query :network_connection, :rule, :security_group_rules
82
+
83
+ def_complex_query :compute_connection, :keypairs, :key_pairs
84
+
85
+ def_complex_query :compute_connection, :public_ip, :addresses
86
+
87
+ def_complex_query :compute_connection, :tenants, :tenants
88
+
89
+ def query_security_groups(hParams, query)
90
+ required?(hParams, :network_connection)
91
+ required?(hParams, :tenants)
92
+
93
+ query[:tenant_id] = hParams[:tenants].id
94
+ hParams[:network_connection].send(:security_groups).all query
95
+ end
96
+ end
@@ -0,0 +1,35 @@
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
+ # Define Openstack update controller
18
+ class OpenstackController
19
+ def update_router(obj_to_save, _hParams)
20
+ router = obj_to_save[:object]
21
+ # The optional external_gateway_info must be a The network_id for the
22
+ # external gateway. It cannot be a Hash
23
+ # See API : http://developer.openstack.org/api-ref-networking-v2.html
24
+ router.external_gateway_info = router.external_gateway_info['network_id']
25
+ # Save will restore the Hash.
26
+ begin
27
+ router.save
28
+ true
29
+ rescue => e
30
+ Lorj.error "OpenStack: Router save error.\n%s\n%s",
31
+ e.message, e.backtrace.join("\n")
32
+ false
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,40 @@
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
+ # This file is given as an example.
18
+ # This class is automatically derived from ForjCloudBase and ForjProcess
19
+ class Mycloud
20
+ def provider_compute_new
21
+ # My fog connection
22
+ # hget_cloudObjMapping() is a ForjCloudBase function which will build a
23
+ # hash from data required with needed mapped keys(see core.rb)
24
+ Fog::Compute.new({ :provider => :mycloud }.merge(hget_cloudObjMapping))
25
+
26
+ # If you do not want to get data mapped automatically, you can use
27
+ # @oForjAccount.get()
28
+ # This means in following declaration in your core.rb:
29
+ # obj_needs(:data, :<CloudDataKey},{:mapping => :<MyCloudKeyMapped>})
30
+ # can be updated by removing the mapping => <Value>
31
+ Fog::Compute.new(
32
+ :provider => :mycloud,
33
+ :user => @oForjAccount.get(:account_id),
34
+ :pwd => @oForjAccount.get(:account_key),
35
+ :auth_uri => @oForjAccount.get(:auth_uri),
36
+ :project => @oForjAccount.get(:tenant),
37
+ :compute_service => @oForjAccount.get(:compute)
38
+ )
39
+ end
40
+ end
@@ -0,0 +1,72 @@
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
+ # This file is given as an example.
18
+
19
+ # require 'fog' # We can use fog to access a cloud
20
+
21
+ cloud_path = File.expand_path(File.dirname(__FILE__))
22
+
23
+ require File.join(cloud_path, 'compute.rb')
24
+ require File.join(cloud_path, 'network.rb')
25
+
26
+ # Defines Meta MyCloud object
27
+ class Mycloud
28
+ # Defines Object structure and function stored on the Hpcloud class object.
29
+
30
+ # ForjCloud has a list of predefined object, like compute_connection, network
31
+ # , ...
32
+ # See lib/providers/core/cloud_data_pref.rb
33
+
34
+ # Compute Object
35
+ define_obj :compute_connection
36
+ # Defines Data used by compute.
37
+ obj_needs(:data, :account_id, :mapping => :user)
38
+ obj_needs(:data, :account_key, :mapping => :pwd)
39
+ obj_needs(:data, :auth_uri, :mapping => :auth_uri)
40
+ obj_needs(:data, :tenant, :mapping => :project)
41
+ obj_needs(:data, :compute, :mapping => :compute_service)
42
+
43
+ define_obj :network_connection
44
+ obj_needs(:data, :account_id, :mapping => :user)
45
+ obj_needs(:data, :account_key, :mapping => :pwd)
46
+ obj_needs(:data, :auth_uri, :mapping => :auth_uri)
47
+ obj_needs(:data, :tenant, :mapping => :project)
48
+ obj_needs(:data, :network, :mapping => :network_service)
49
+
50
+ define_obj :network
51
+ obj_needs(:CloudObject, :network_connection)
52
+ obj_needs(:data, :network_name)
53
+
54
+ # defines setup Cloud data
55
+ # This definition is required only if you need to change the predefined data.
56
+ # To get details on what kind of parameters can be applied to a CloudData, see
57
+ # lib/defaults.yaml
58
+ define_data(:account_id, :provisioned_by => :setup,
59
+ :desc => 'MyCloud username')
60
+ define_data(:account_key, :provisioned_by => :setup,
61
+ :desc => 'HPCloud secret Key')
62
+ define_data(:auth_uri, :provisioned_by => :setup,
63
+ :desc => 'HPCloud Authentication service URL')
64
+ define_data(:tenant, :provisioned_by => :setup,
65
+ :desc => 'HPCloud Tenant ID')
66
+ define_data(:compute, :provisioned_by => :setup,
67
+ :desc => 'HPCloud Compute service zone (Ex: '\
68
+ 'region-a.geo-1)')
69
+ define_data(:network, :provisioned_by => :setup,
70
+ :desc => 'HPCloud Network service zone (Ex: '\
71
+ 'region-a.geo-1)')
72
+ end
@@ -0,0 +1,32 @@
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
+ # This file is given as an example.
18
+
19
+ # This class is automatically derived from ForjCloudBase and ForjProcess
20
+ class Mycloud
21
+ def provider_network_new
22
+ Fog::Network.new({ :provider => :mycloud }.merge(hget_cloudObjMapping))
23
+ end
24
+
25
+ def provider_query_network(oNetwork, name)
26
+ oNetwork.networks.all(:name => name)
27
+ end
28
+
29
+ def provider_create_network(oNetwork, name)
30
+ oNetwork.networks.create(:name => name)
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'lorj_cloud/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "lorj_cloud"
8
+ spec.version = LorjCloud::VERSION
9
+ spec.authors = ["Christophe Larsonneur"]
10
+ spec.email = ["clarsonneur@gmail.com"]
11
+
12
+ spec.summary = %q{Lorj cloud process.}
13
+ spec.description = %q{simplify cloud management, thanks to predefined process to manage cloud obj and make it work. }
14
+ spec.homepage = "https://github.com/forj-oss/lorj_cloud"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ # if spec.respond_to?(:metadata)
22
+ # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server."
23
+ # end
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.9"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+
28
+ spec.add_runtime_dependency "lorj", "~> 1.0.10"
29
+ spec.add_runtime_dependency "fog", "~> 1.26.0"
30
+ spec.add_development_dependency "rspec", "~> 3.1.0"
31
+ spec.add_development_dependency "rubocop", "~> 0.30.0"
32
+ end
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lorj_cloud
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Christophe Larsonneur
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-04-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: lorj
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.10
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.10
55
+ - !ruby/object:Gem::Dependency
56
+ name: fog
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.26.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 1.26.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 3.1.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 3.1.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 0.30.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 0.30.0
97
+ description: 'simplify cloud management, thanks to predefined process to manage cloud
98
+ obj and make it work. '
99
+ email:
100
+ - clarsonneur@gmail.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - .gitignore
106
+ - .gitreview
107
+ - .rspec
108
+ - .rubocop.yml
109
+ - Gemfile
110
+ - README.md
111
+ - Rakefile
112
+ - bin/console
113
+ - bin/setup
114
+ - lib/data.yaml
115
+ - lib/defaults.yaml
116
+ - lib/lorj_cloud.rb
117
+ - lib/lorj_cloud/version.rb
118
+ - lib/process/cloud/process/common.rb
119
+ - lib/process/cloud/process/connection.rb
120
+ - lib/process/cloud/process/external_network.rb
121
+ - lib/process/cloud/process/flavor.rb
122
+ - lib/process/cloud/process/images.rb
123
+ - lib/process/cloud/process/internet_network.rb
124
+ - lib/process/cloud/process/internet_server.rb
125
+ - lib/process/cloud/process/keypairs.rb
126
+ - lib/process/cloud/process/network.rb
127
+ - lib/process/cloud/process/public_ip.rb
128
+ - lib/process/cloud/process/router.rb
129
+ - lib/process/cloud/process/rules.rb
130
+ - lib/process/cloud/process/security_groups.rb
131
+ - lib/process/cloud/process/server.rb
132
+ - lib/process/cloud/process/server_log.rb
133
+ - lib/process/cloud/process/subnetwork.rb
134
+ - lib/process/cloud_process.rb
135
+ - lib/providers/hpcloud/compute.rb
136
+ - lib/providers/hpcloud/hpcloud.rb
137
+ - lib/providers/hpcloud/network.rb
138
+ - lib/providers/hpcloud/security_groups.rb
139
+ - lib/providers/mock/mock.rb
140
+ - lib/providers/openstack/openstack.rb
141
+ - lib/providers/openstack/openstack_create.rb
142
+ - lib/providers/openstack/openstack_delete.rb
143
+ - lib/providers/openstack/openstack_get.rb
144
+ - lib/providers/openstack/openstack_process.rb
145
+ - lib/providers/openstack/openstack_query.rb
146
+ - lib/providers/openstack/openstack_update.rb
147
+ - lib/providers/templates/compute.rb
148
+ - lib/providers/templates/mycloud.rb
149
+ - lib/providers/templates/network.rb
150
+ - lorj_cloud.gemspec
151
+ homepage: https://github.com/forj-oss/lorj_cloud
152
+ licenses: []
153
+ metadata: {}
154
+ post_install_message:
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - '>='
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ requirements: []
169
+ rubyforge_project:
170
+ rubygems_version: 2.1.11
171
+ signing_key:
172
+ specification_version: 4
173
+ summary: Lorj cloud process.
174
+ test_files: []
175
+ has_rdoc: