foggy 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c490cca53cfdbed79e0f048f8ce615e77960f0c5
4
- data.tar.gz: 502c5ca73c18bfb40fd40d94a99c164f714b75c6
3
+ metadata.gz: f97e54a3d4728f9dd618c4d1099daedab7b942e4
4
+ data.tar.gz: 20271b9bebfed9e00b4dfa9eccd3fb9970661e48
5
5
  SHA512:
6
- metadata.gz: 169110e34e63973858b061118bfa1ac7d1b200d668d2857b619441e0d2f6eabbea03d9f19f86d3d8c983499b37e9dff11e0e266cf7a50aeaca58cebfa2b69361
7
- data.tar.gz: 38f27b2a2c54f66db58bfb6a3b84879495313ebafeb35133a9990d4f6ba4192d3d16dedb4aecd4cc77c518349d9c5b2b709c269157dbf1fb7aba0dad2d5ce76b
6
+ metadata.gz: 91b5977b3acfa71a4b2fbba2ce65e4b21789fe1da77b79d43aa62743716a951ae279b1e54686fcbc8e627f9c98a3cf6241351ae2f32f4aecc2ddc03fb75c8c49
7
+ data.tar.gz: 6b0da7f3b5814007038926afccecf4a63ee91a13b9cc7b0bc4c003bd2ea274982da233ef20b686130c4d708c1667ee95516abd50d1f51c9e5969fb07bb4a5dc5
data/README.md CHANGED
@@ -1 +1,122 @@
1
- # foggy
1
+ # Introduction
2
+
3
+ Foggy is providing Collections for Openstack.
4
+ Foggy is using Misty for Openstack APIs conduit.
5
+
6
+
7
+ ```ruby
8
+ require 'foggy'
9
+
10
+ auth = {
11
+ :url => "http://192.0.2.21:5000",
12
+ :user => "admin",
13
+ :password => "secret",
14
+ :project => "admin",
15
+ :domain => "default"
16
+ }
17
+
18
+ cloud = Foggy::Cloud.new(:auth => auth)
19
+ ```
20
+
21
+ ```
22
+ pry(main)> cloud.networking.class
23
+ => Foggy::Networking
24
+ ```
25
+
26
+ ```
27
+ pry(main)> cloud.networking.networks.class
28
+ => Foggy::Networking::Networks
29
+ ```
30
+
31
+ ```
32
+ pry(main)> networks = cloud.networking.networks.all
33
+ => [#<Foggy::Networking::Networks::Network:0x007faa5718f2a0
34
+ @admin_state_up=true,
35
+ @availability_zone_hints=[],
36
+ @availability_zones=[],
37
+ @created_at="2016-11-14T04:23:49",
38
+ @description="",
39
+ @id="67ef2b90-6217-4c0d-a022-80e48f7f60e6",
40
+ @ipv4_address_scope=nil,
41
+ @ipv6_address_scope=nil,
42
+ @is_default=false,
43
+ @mtu=1450,
44
+ @name="Test2",
45
+ @port_security_enabled=true,
46
+ @provider={"physical_network"=>nil, "segmentation_id"=>69, "network_type"=>"vxlan"},
47
+ @qos_policy_id=nil,
48
+ @router={"external"=>true},
49
+ @shared=false,
50
+ @status="ACTIVE",
51
+ @subnets=[],
52
+ @tags=[],
53
+ @tenant_id="48985e6b8da145699d411f12a3459fca",
54
+ @updated_at="2016-11-14T04:23:49">,
55
+ #<Foggy::Networking::Networks::Network:0x007faa5718ab38
56
+ @admin_state_up=true,
57
+ @availability_zone_hints=[],
58
+ @availability_zones=["nova"],
59
+ @created_at="2016-11-14T04:06:39",
60
+ @description="",
61
+ @id="f3180183-9e7a-42d7-b76a-23b2c95af121",
62
+ @ipv4_address_scope=nil,
63
+ @ipv6_address_scope=nil,
64
+ @mtu=1450,
65
+ @name="Test1",
66
+ @port_security_enabled=true,
67
+ @provider={"physical_network"=>nil, "segmentation_id"=>75, "network_type"=>"vxlan"},
68
+ @qos_policy_id=nil,
69
+ @router={"external"=>false},
70
+ @shared=false,
71
+ @status="ACTIVE",
72
+ @subnets=["60fe7990-3db3-4149-a46a-d7a6454a3f2e"],
73
+ @tags=[],
74
+ @tenant_id="48985e6b8da145699d411f12a3459fca",
75
+ ```
76
+
77
+ ```
78
+ pry(main)> networks[0].id
79
+ => "67ef2b90-6217-4c0d-a022-80e48f7f60e6"
80
+ ```
81
+
82
+ ```
83
+ pry(main)> networks[0].name
84
+ => "Test1"
85
+ ```
86
+
87
+ ```
88
+ pry(main)> networks[0].class
89
+ => Foggy::Networking::Networks::Network
90
+ ```
91
+
92
+ ```
93
+ pry(main)> network = cloud.networking.networks.get("f3180183-9e7a-42d7-b76a-23b2c95af121")
94
+ ../...
95
+ network.name="new name"
96
+ ```
97
+
98
+ ```
99
+ pry(main)> cloud.networking.networks.reload
100
+ .../...
101
+ ```
102
+
103
+ ```
104
+ pry(main)> subnets = cloud.networking.subnets.all
105
+ => [#<Foggy::Networking::Subnets::Subnet:0x007faa577c3e00
106
+ @allocation_pools=[{"start"=>"10.60.10.2", "end"=>"10.60.10.254"}],
107
+ @cidr="10.60.10.0/24",
108
+ @created_at="2016-11-16T04:36:13",
109
+ @description="",
110
+ @dns_nameservers=[],
111
+ @enable_dhcp=true,
112
+ @gateway_ip="10.60.10.1",
113
+ @host_routes=[],
114
+ @id="60fe7990-3db3-4149-a46a-d7a6454a3f2e",
115
+ @ip_version=4,
116
+ @ipv6_address_mode=nil,
117
+ @ipv6_ra_mode=nil,
118
+ @name="Testsub1",
119
+ @network_id="f3180183-9e7a-42d7-b76a-23b2c95af121",
120
+ @subnetpool_id=nil,
121
+ @tenant_id="48985e6b8da145699d411f12a3459fca",
122
+ ```
data/lib/foggy.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'misty'
2
+ require 'foggy/foggy'
3
+ require 'foggy/autoload'
4
+ require 'foggy/service'
5
+ require 'foggy/collection'
6
+ require 'foggy/element'
@@ -0,0 +1,4 @@
1
+ module Foggy
2
+ autoload :Networking, "foggy/service/networking"
3
+ autoload :Compute, "foggy/service/compute"
4
+ end
@@ -0,0 +1,85 @@
1
+ module Foggy
2
+ module Collection
3
+ def initialize(service, element)
4
+ @element = element
5
+ # For example: Foggy::Networking::
6
+ @element_klass = self.class.const_get(@element.capitalize)
7
+ @service = service
8
+ @collection = build
9
+ end
10
+
11
+ def all
12
+ @collection
13
+ end
14
+
15
+ def get(id)
16
+ element = fetch(id)
17
+ if element
18
+ @element_klass.new(element)
19
+ end
20
+ end
21
+
22
+ def reload
23
+ @collection = fetch_all
24
+ end
25
+
26
+ private
27
+
28
+ def self.create_element_class
29
+ unless class_exists?(name.capitalize)
30
+ self.const_set(name.capitalize, Class.new do
31
+ include Foggy::Element
32
+ end)
33
+ else
34
+ raise RuntimeError, "Error: #{self}::#{name.capitalize} already defined"
35
+ end
36
+ end
37
+
38
+ def build
39
+ list = []
40
+ if collection
41
+ collection.each do |element|
42
+ list << @element_klass.new(element)
43
+ end
44
+ end
45
+ list
46
+ end
47
+
48
+ def collection
49
+ @collection ||= fetch_all
50
+ end
51
+
52
+ def collection_name
53
+ self.class.to_s.split('::')[-1].downcase
54
+ end
55
+
56
+ def collection_prefix
57
+ self.class.to_s.split('::')[-1].downcase
58
+ end
59
+
60
+ def fetch_all
61
+ response = @service.send(name_fetch_all)
62
+ response.body[collection_name] if response.code =~ /200/
63
+ end
64
+
65
+ def fetch(id)
66
+ response = @service.send(name_fetch_element, id)
67
+ response.body[@element] if response.code =~ /200/
68
+ end
69
+
70
+ def name_fetch_all
71
+ "list_#{collection_name}"
72
+ end
73
+
74
+ def name_fetch_element
75
+ "show_#{@element}_details"
76
+ end
77
+
78
+ def service_class
79
+ project = @service.class.to_s.split('::')[-2]
80
+ Misty.services.each do |e|
81
+ return e.name.to_s if e.project == project.downcase.to_sym
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,43 @@
1
+ module Foggy
2
+ module Element
3
+ def initialize(element)
4
+ element.each do |key, value|
5
+ if composite?(key)
6
+ if composed = key.match(/(.*):(.*)/)
7
+ var_name = "@#{composed[1]}"
8
+ if instance_variable_defined?(var_name)
9
+ initial = instance_variable_get(var_name)
10
+ instance_variable_set(var_name, initial.merge(composed[2] => value))
11
+ else
12
+ create_attribute(composed[1], composed[2] => value)
13
+ end
14
+ end
15
+ else
16
+ create_attribute(key, value) unless instance_variable_defined?("@#{key}")
17
+ end
18
+ end
19
+ end
20
+
21
+ def self.getter(key)
22
+ define_method(key) do
23
+ instance_variable_get("@#{key}")
24
+ end
25
+ end
26
+
27
+ def self.setter(key, value)
28
+ define_method("#{key}=") do |value|
29
+ instance_variable_set("@#{key}", value)
30
+ end
31
+ end
32
+
33
+ def create_attribute(key, value)
34
+ instance_variable_set("@#{key}", value)
35
+ Foggy::Element.setter(key, value)
36
+ Foggy::Element.getter(key)
37
+ end
38
+
39
+ def composite?(name)
40
+ true if name =~ /:/
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,29 @@
1
+ require 'misty'
2
+
3
+ module Foggy
4
+ class Cloud
5
+ def initialize(*args)
6
+ @cloud = Misty::Cloud.new(*args)
7
+ end
8
+
9
+ private
10
+
11
+ def method_missing(method_name, *args)
12
+ # Equivalent of
13
+ # @alarming ||= Foggy::Alarming.new(@cloud.alarming)
14
+ if Misty.services.names.include?(method_name)
15
+ klass = Foggy.const_get(method_name.capitalize)
16
+ self.class.send(:define_method, method_name.to_s) do
17
+ unless instance_variable_defined?("@#{method_name}")
18
+ service = @cloud.send(method_name)
19
+ instance_variable_set("@#{method_name}", klass.new(service))
20
+ end
21
+ return instance_variable_get("@#{method_name}")
22
+ end
23
+ return self.send(method_name)
24
+ else
25
+ raise "Undefined method #{method_name}"
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,73 @@
1
+ module Foggy
2
+ class Service
3
+ # By default when a single_name is not provided then the singular name is deducted from the plural_name:
4
+ # - When a name ends with 'ies' it will be replaced with 'y'
5
+ # - Otherwise the last letter is removed
6
+ # In any other case the single name should be provided
7
+ def self.define(plural_name, single_name = nil)
8
+ single_name ||= singular(plural_name, single_name)
9
+ create_collection_class(plural_name.to_s.capitalize, single_name.capitalize)
10
+
11
+ # def subnets
12
+ # @subnets ||= Foggy::Networking::Subnets.new(self)
13
+ # end
14
+ klass = self.const_get(plural_name.capitalize)
15
+ define_method("#{plural_name}") do
16
+ unless instance_variable_defined?("@#{plural_name}")
17
+ instance_variable_set("@#{plural_name}", klass.new(@service, single_name))
18
+ end
19
+ return instance_variable_get("@#{plural_name}")
20
+ end
21
+ end
22
+
23
+ def self.class_exists?(name)
24
+ return true if !!self.const_get(name)
25
+ rescue
26
+ false
27
+ end
28
+
29
+ # module Foggy::Networking example:
30
+ # class Subnets
31
+ # include Foggy::Collection
32
+ #
33
+ # class Subnet
34
+ # include Foggy::Element
35
+ # end
36
+ # end
37
+ def self.create_collection_class(name, single_name)
38
+ unless class_exists?(name)
39
+ self.const_set(name, Class.new do
40
+ include Foggy::Collection
41
+
42
+ self.const_set(single_name, Class.new do
43
+ include Foggy::Element
44
+ end)
45
+ end)
46
+ else
47
+ raise RuntimeError, "Error: #{self}::#{name} already defined"
48
+ end
49
+ end
50
+
51
+ def self.singular(plural_name, single_name)
52
+ unless single_name
53
+ if name =~ /ies$/
54
+ # policies => policy
55
+ plural_name.to_s.sub(/ies$/, 'y')
56
+ else
57
+ # somethings => something
58
+ plural_name.to_s.chop
59
+ end
60
+ else
61
+ single_name
62
+ end
63
+ end
64
+
65
+ def initialize(service)
66
+ @service = service
67
+ end
68
+
69
+ def request(*args)
70
+ @service.send(*args)
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Alarming < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Baremetal < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class BlockStorage < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Clustering < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Compute < Foggy::Service
5
+ collection :servers
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Container < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class DataProcessing < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class DataProtection < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Database < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class DNS < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Identity < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Image < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Messaging < Foggy::Service
5
+ define_collection :images
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Metering < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,24 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Networking < Foggy::Service
5
+ define :extensions
6
+ define :floating_ips
7
+ define :ike_policies, :ike_policy
8
+ define :ipsec_policies, :ipsec_policy
9
+ define :ipsec_site_connections
10
+ define :lb_health_monitors
11
+ define :lb_members
12
+ define :lb_pools
13
+ define :lb_vips
14
+ define :networks
15
+ define :ports
16
+ define :rbac_policies
17
+ define :routers
18
+ define :security_group_rules
19
+ define :security_groups
20
+ define :subnet_pools
21
+ define :subnets
22
+ define :vpn_services
23
+ end
24
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class ObjectStorage < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Orchestration < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class Search < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ require "foggy/service"
2
+
3
+ module Foggy
4
+ class SharedFileSystems < Foggy::Service
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module Foggy
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,19 @@
1
+ require "foggy"
2
+ require 'minitest/autorun'
3
+ require 'vcr'
4
+ require 'webmock/minitest'
5
+
6
+ VCR.configure do |config|
7
+ config.cassette_library_dir = "test/integration/vcr"
8
+ config.hook_into :webmock
9
+ end
10
+
11
+ def auth
12
+ {
13
+ :url => "http://192.0.2.21:5000",
14
+ :user => "admin",
15
+ :password => "CJk9hb2ZFR96Ypu74KFFGWuhv",
16
+ :project => "admin",
17
+ :domain => "default"
18
+ }
19
+ end
@@ -0,0 +1,52 @@
1
+ def auth_response_v3(type, name)
2
+ { 'token' =>
3
+ { 'methods' => ['password'],
4
+ 'roles' => [{ 'id' => 'id_roles', 'name' => 'admin' }],
5
+ 'expires_at' => '2016-11-29T07:45:29.908554Z',
6
+ 'project' => { 'domain' => { 'id' => 'default', 'name' => 'Default' }, 'id' => 'project_id', 'name' => 'admin' },
7
+ 'catalog' =>
8
+ [{ 'endpoints' =>
9
+ [{ 'region_id' => 'regionOne',
10
+ 'url' => 'http://localhost',
11
+ 'region' => 'regionOne',
12
+ 'interface' => 'internal',
13
+ 'id' => 'id_endpoint_internal' },
14
+ { 'region_id' => 'regionOne',
15
+ 'url' => 'http://localhost',
16
+ 'region' => 'regionOne',
17
+ 'interface' => 'public',
18
+ 'id' => 'id_endpoint_public' },
19
+ { 'region_id' => 'regionOne',
20
+ 'url' => 'http://localhost',
21
+ 'region' => 'regionOne',
22
+ 'interface' => 'admin',
23
+ 'id' => 'id_endpoint_admin' }],
24
+ 'type' => type,
25
+ 'id' => 'id_endpoints',
26
+ 'name' => name }],
27
+ 'user' => { 'domain' => { 'id' => 'default', 'name' => 'Default' }, 'id' => 'id_user', 'name' => 'admin' },
28
+ 'audit_ids' => ['id_audits'],
29
+ 'issued_at' => '2016-11-29T06:45:29.908578Z' } }
30
+ end
31
+
32
+ def auth_response_v2(type, name)
33
+ { 'access' =>
34
+ { 'token' =>
35
+ { 'issued_at' => '2016-12-05T10:44:31.454741Z',
36
+ 'expires' => '2016-12-05T11:44:31Z',
37
+ 'id' => '4ae647d3a5294690a3c29bc658e17e26',
38
+ 'tenant' => { 'description' => 'admin tenant', 'enabled' => true, 'id' => 'tenant_id', 'name' => 'admin' },
39
+ 'audit_ids' => ['Ye0Rq1HzTk2ggUAg8nDGbQ'] },
40
+ 'serviceCatalog' =>
41
+ [{ 'endpoints' =>
42
+ [{ 'adminURL' => 'http://localhost',
43
+ 'region' => 'regionOne',
44
+ 'internalURL' => 'http://localhost',
45
+ 'id' => 'id_endpoints',
46
+ 'publicURL' => 'http://localhost' }],
47
+ 'endpoints_links' => [],
48
+ 'type' => type,
49
+ 'name' => name }],
50
+ 'user' => { 'username' => 'admin', 'roles_links' => [], 'id' => 'user_id', 'roles' => [{ 'name' => 'admin' }], 'name' => 'admin' },
51
+ 'metadata' => { 'is_admin' => 0, 'roles' => ['role_id'] } } }
52
+ end
@@ -0,0 +1,32 @@
1
+ require 'test_helper'
2
+ require 'auth_helper'
3
+
4
+ describe "Foggy" do
5
+ let(:auth_v3) do
6
+ {
7
+ :url => "http://localhost:5000",
8
+ :user => "admin",
9
+ :password => "secret",
10
+ :project => "admin",
11
+ :domain => "default"
12
+ }
13
+ end
14
+
15
+ it "#networking" do
16
+ stub_request(:post, "http://localhost:5000/v3/auth/tokens").
17
+ with(:body => "{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":{\"user\":{\"name\":\"admin\",\"domain\":{\"id\":\"default\"},\"password\":\"secret\"}}},\"scope\":{\"project\":{\"name\":\"admin\",\"domain\":{\"id\":\"default\"}}}}}",
18
+ :headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}).
19
+ to_return(:status => 200, :body => JSON.dump(auth_response_v3("networking", "neutron")), :headers => {"x-subject-token"=>"token_data"})
20
+
21
+ stub_request(:get, "http://localhost/v2.0/networks").
22
+ with(:headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby'}).
23
+ to_return(:status => 200, :body => "[]", :headers => {})
24
+
25
+ cloud = Foggy::Cloud.new(:auth => auth_v3)
26
+
27
+ klass = cloud.networking
28
+ klass.must_be_kind_of Foggy::Networking
29
+ cloud.networking.networks.must_be_kind_of Foggy::Networking::Networks
30
+ cloud.networking.networks.all.must_equal ([])
31
+ end
32
+ end
@@ -0,0 +1,4 @@
1
+ require 'minitest/autorun'
2
+ require 'webmock/minitest'
3
+ require "foggy"
4
+ require 'pry-byebug'
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foggy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gilles Dubreuil
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-20 00:00:00.000000000 Z
11
+ date: 2017-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: misty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.7.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.7.0
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -39,19 +53,47 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '10.0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: nokogiri
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '5.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.24'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.24'
83
+ - !ruby/object:Gem::Dependency
84
+ name: vcr
43
85
  requirement: !ruby/object:Gem::Requirement
44
86
  requirements:
45
87
  - - "~>"
46
88
  - !ruby/object:Gem::Version
47
- version: '1.6'
89
+ version: '3.0'
48
90
  type: :development
49
91
  prerelease: false
50
92
  version_requirements: !ruby/object:Gem::Requirement
51
93
  requirements:
52
94
  - - "~>"
53
95
  - !ruby/object:Gem::Version
54
- version: '1.6'
96
+ version: '3.0'
55
97
  - !ruby/object:Gem::Dependency
56
98
  name: pry-byebug
57
99
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +108,7 @@ dependencies:
66
108
  - - "~>"
67
109
  - !ruby/object:Gem::Version
68
110
  version: '3.4'
69
- description: Foggy helps with automation and is coming soon.
111
+ description: Foggy is a collection management for Openstack APIs.
70
112
  email:
71
113
  - gilles@redhat.com
72
114
  executables: []
@@ -77,6 +119,36 @@ extra_rdoc_files:
77
119
  files:
78
120
  - LICENSE.md
79
121
  - README.md
122
+ - lib/foggy.rb
123
+ - lib/foggy/autoload.rb
124
+ - lib/foggy/collection.rb
125
+ - lib/foggy/element.rb
126
+ - lib/foggy/foggy.rb
127
+ - lib/foggy/service.rb
128
+ - lib/foggy/service/alarming.rb
129
+ - lib/foggy/service/baremetal.rb
130
+ - lib/foggy/service/block_storage.rb
131
+ - lib/foggy/service/clustering.rb
132
+ - lib/foggy/service/compute.rb
133
+ - lib/foggy/service/container.rb
134
+ - lib/foggy/service/data_processing.rb
135
+ - lib/foggy/service/data_protection.rb
136
+ - lib/foggy/service/database.rb
137
+ - lib/foggy/service/dns.rb
138
+ - lib/foggy/service/identity.rb
139
+ - lib/foggy/service/image.rb
140
+ - lib/foggy/service/messaging.rb
141
+ - lib/foggy/service/metering.rb
142
+ - lib/foggy/service/networking.rb
143
+ - lib/foggy/service/object_storage.rb
144
+ - lib/foggy/service/orchestration.rb
145
+ - lib/foggy/service/search.rb
146
+ - lib/foggy/service/shared_file_systems.rb
147
+ - lib/foggy/version.rb
148
+ - test/integration/test_helper.rb
149
+ - test/unit/auth_helper.rb
150
+ - test/unit/foggy_test.rb
151
+ - test/unit/test_helper.rb
80
152
  homepage: https://github.com/flystack/foggy
81
153
  licenses:
82
154
  - GPL-3.0
@@ -98,8 +170,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
170
  version: '0'
99
171
  requirements: []
100
172
  rubyforge_project:
101
- rubygems_version: 2.5.1
173
+ rubygems_version: 2.6.11
102
174
  signing_key:
103
175
  specification_version: 4
104
- summary: An exhaustive, robust and sleek coming tool.
176
+ summary: Foggy is a collection management for OpenStack APIs.
105
177
  test_files: []