miasma 0.3.2 → 0.3.4
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +4 -0
- data/LICENSE +1 -1
- data/README.md +5 -2
- data/lib/miasma.rb +14 -15
- data/lib/miasma/error.rb +17 -10
- data/lib/miasma/models.rb +9 -9
- data/lib/miasma/models/auto_scale.rb +5 -7
- data/lib/miasma/models/auto_scale/group.rb +8 -13
- data/lib/miasma/models/auto_scale/groups.rb +2 -4
- data/lib/miasma/models/block_storage.rb +1 -0
- data/lib/miasma/models/compute.rb +4 -6
- data/lib/miasma/models/compute/server.rb +5 -6
- data/lib/miasma/models/compute/servers.rb +2 -4
- data/lib/miasma/models/dns.rb +1 -0
- data/lib/miasma/models/load_balancer.rb +5 -7
- data/lib/miasma/models/load_balancer/balancer.rb +9 -11
- data/lib/miasma/models/load_balancer/balancers.rb +2 -4
- data/lib/miasma/models/monitoring.rb +1 -0
- data/lib/miasma/models/orchestration.rb +37 -7
- data/lib/miasma/models/orchestration/event.rb +2 -5
- data/lib/miasma/models/orchestration/events.rb +5 -7
- data/lib/miasma/models/orchestration/plan.rb +87 -0
- data/lib/miasma/models/orchestration/plans.rb +52 -0
- data/lib/miasma/models/orchestration/resource.rb +8 -10
- data/lib/miasma/models/orchestration/resources.rb +3 -5
- data/lib/miasma/models/orchestration/stack.rb +106 -20
- data/lib/miasma/models/orchestration/stacks.rb +3 -5
- data/lib/miasma/models/queues.rb +1 -0
- data/lib/miasma/models/queuing.rb +72 -0
- data/lib/miasma/models/queuing/queue.rb +77 -0
- data/lib/miasma/models/queuing/queues.rb +32 -0
- data/lib/miasma/models/storage.rb +8 -9
- data/lib/miasma/models/storage/bucket.rb +4 -7
- data/lib/miasma/models/storage/buckets.rb +2 -4
- data/lib/miasma/models/storage/file.rb +13 -16
- data/lib/miasma/models/storage/files.rb +3 -5
- data/lib/miasma/specs.rb +4 -4
- data/lib/miasma/specs/compute_abstract.rb +24 -33
- data/lib/miasma/specs/load_balancer_abstract.rb +17 -27
- data/lib/miasma/specs/orchestration_abstract.rb +26 -37
- data/lib/miasma/specs/storage_abstract.rb +21 -27
- data/lib/miasma/types.rb +6 -8
- data/lib/miasma/types/api.rb +28 -31
- data/lib/miasma/types/collection.rb +8 -10
- data/lib/miasma/types/data.rb +2 -5
- data/lib/miasma/types/model.rb +13 -16
- data/lib/miasma/types/thin_model.rb +7 -10
- data/lib/miasma/utils.rb +7 -7
- data/lib/miasma/utils/animal_strings.rb +1 -3
- data/lib/miasma/utils/api_methoding.rb +2 -5
- data/lib/miasma/utils/immutable.rb +2 -6
- data/lib/miasma/utils/lazy.rb +2 -2
- data/lib/miasma/utils/memoization.rb +1 -1
- data/lib/miasma/utils/smash.rb +1 -1
- data/lib/miasma/version.rb +1 -1
- data/miasma.gemspec +21 -19
- metadata +44 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b6ec4c699bde261e0e44469339a19cdcb55f58faad4c5ccbde0439321a22da83
|
4
|
+
data.tar.gz: d1d2c89ce389385c6e5a5a6462e201299e00b0f21da5d17ca9013e1149fe8df6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 564daaf08564aff07e67fdd1fe0b117ab86dad1fa3a9f17a34baf9774e456fb771ee3351de708e719446fd3a5c316a1b3c8cbcd686de98fa2f1c76dec9a8f8ad
|
7
|
+
data.tar.gz: 10832fe2f29d56c4096384e2486f2b6e71c9c0c7bd741f315cc6fc3b5a54766f24f45c3a378969df59cedc225381343e274f6b24c2a0b455acf09059c05279e1
|
data/CHANGELOG.md
CHANGED
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -148,9 +148,12 @@ should provide a simple feature matrix for a quick
|
|
148
148
|
check on support availability:
|
149
149
|
|
150
150
|
* [AWS](https://github.com/miasma-rb/miasma-aws)
|
151
|
-
* [
|
152
|
-
* [
|
151
|
+
* [Azure](https://github.com/miasma-rb/miasma-azure)
|
152
|
+
* [Google](https://github.com/miasma-rb/miasma-google)
|
153
153
|
* [Local](https://github.com/miasma-rb/miasma-local)
|
154
|
+
* [OpenStack](https://github.com/miasma-rb/miasma-open-stack)
|
155
|
+
* [Rackspace](https://github.com/miasma-rb/miasma-rackspace)
|
156
|
+
* [Terraform](https://github.com/miasma-rb/miasma-terraform)
|
154
157
|
|
155
158
|
## Info
|
156
159
|
|
data/lib/miasma.rb
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
# Load in dependencies
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
2
|
+
require "http"
|
3
|
+
require "bogo"
|
4
|
+
require "bogo/http_proxy"
|
5
|
+
require "multi_json"
|
6
|
+
require "multi_xml"
|
7
7
|
|
8
8
|
# Make version available
|
9
|
-
require
|
9
|
+
require "miasma/version"
|
10
10
|
|
11
11
|
module Miasma
|
12
|
-
autoload :Error,
|
13
|
-
autoload :Models,
|
14
|
-
autoload :Types,
|
15
|
-
autoload :Utils,
|
12
|
+
autoload :Error, "miasma/error"
|
13
|
+
autoload :Models, "miasma/models"
|
14
|
+
autoload :Types, "miasma/types"
|
15
|
+
autoload :Utils, "miasma/utils"
|
16
16
|
|
17
17
|
# Generate and API connection
|
18
18
|
#
|
@@ -20,10 +20,10 @@ module Miasma
|
|
20
20
|
# @option args [String, Symbol] :type API type (:compute, :dns, etc)
|
21
21
|
# @option args [String, Symbol] :provider Service provider
|
22
22
|
# @option args [Hash] :credentials Service provider credentials
|
23
|
-
def self.api(args={})
|
23
|
+
def self.api(args = {})
|
24
24
|
args = Utils::Smash.new(args)
|
25
25
|
[:type, :provider].each do |key|
|
26
|
-
unless
|
26
|
+
unless args[key]
|
27
27
|
raise ArgumentError.new "Missing required api argument `#{key.inspect}`!"
|
28
28
|
end
|
29
29
|
end
|
@@ -37,9 +37,9 @@ module Miasma
|
|
37
37
|
end
|
38
38
|
begin
|
39
39
|
base_klass = Models.const_get(args[:type])
|
40
|
-
if
|
40
|
+
if base_klass
|
41
41
|
api_klass = base_klass.const_get(args[:provider])
|
42
|
-
if
|
42
|
+
if api_klass
|
43
43
|
api_klass.new(args[:credentials].to_smash)
|
44
44
|
else
|
45
45
|
raise Error.new "Failed to locate #{args[:type]} API for #{args[:provider].inspect}"
|
@@ -51,5 +51,4 @@ module Miasma
|
|
51
51
|
raise Error.new "Failed to load requested API type #{args[:type].inspect} (Reason: #{e.class} - #{e})"
|
52
52
|
end
|
53
53
|
end
|
54
|
-
|
55
54
|
end
|
data/lib/miasma/error.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "miasma"
|
2
2
|
|
3
3
|
module Miasma
|
4
4
|
# Generic Error class
|
@@ -9,7 +9,7 @@ module Miasma
|
|
9
9
|
# @param msg [String] error message
|
10
10
|
# @param args [Hash] optional arguments
|
11
11
|
# @return [self]
|
12
|
-
def initialize(msg, args={})
|
12
|
+
def initialize(msg, args = {})
|
13
13
|
super msg
|
14
14
|
end
|
15
15
|
|
@@ -26,7 +26,7 @@ module Miasma
|
|
26
26
|
# @param msg [String] error message
|
27
27
|
# @param args [Hash] optional arguments
|
28
28
|
# @option args [HTTP::Response] :response response from request
|
29
|
-
def initialize(msg, args={})
|
29
|
+
def initialize(msg, args = {})
|
30
30
|
super
|
31
31
|
@response = args.to_smash[:response]
|
32
32
|
@message = msg
|
@@ -35,7 +35,7 @@ module Miasma
|
|
35
35
|
|
36
36
|
# @return [String] provides response error suffix
|
37
37
|
def message
|
38
|
-
[@message, @response_error_msg].compact.join(
|
38
|
+
[@message, @response_error_msg].compact.join(" - ")
|
39
39
|
end
|
40
40
|
|
41
41
|
# Attempt to extract error message from response
|
@@ -47,16 +47,16 @@ module Miasma
|
|
47
47
|
begin
|
48
48
|
content = MultiJson.load(response.body.to_s).to_smash
|
49
49
|
@response_error_msg = [[:error, :message]].map do |path|
|
50
|
-
if
|
50
|
+
if result = content.get(*path)
|
51
51
|
"#{content[:code]}: #{result}"
|
52
52
|
end
|
53
53
|
end.flatten.compact.first
|
54
54
|
rescue MultiJson::ParseError
|
55
55
|
begin
|
56
56
|
content = MultiXml.parse(response.body.to_s).to_smash
|
57
|
-
@response_error_msg = [[
|
58
|
-
if
|
59
|
-
"#{result[
|
57
|
+
@response_error_msg = [["ErrorResponse", "Error"], ["Error"]].map do |path|
|
58
|
+
if result = content.get(*path)
|
59
|
+
"#{result["Code"]}: #{result["Message"]}"
|
60
60
|
end
|
61
61
|
end.compact.first
|
62
62
|
rescue MultiXml::ParseError
|
@@ -74,13 +74,21 @@ module Miasma
|
|
74
74
|
|
75
75
|
# Api authentication error
|
76
76
|
class AuthenticationError < ApiError; end
|
77
|
-
|
78
77
|
end
|
79
78
|
|
80
79
|
# Orchestration error
|
81
80
|
class OrchestrationError < Error
|
82
81
|
# Template failed to validate
|
83
82
|
class InvalidTemplate < OrchestrationError; end
|
83
|
+
|
84
|
+
# Stack is not in correct state for planning
|
85
|
+
class InvalidPlanState < OrchestrationError; end
|
86
|
+
|
87
|
+
# Plan is no longer valid for stack
|
88
|
+
class InvalidStackPlan < OrchestrationError; end
|
89
|
+
|
90
|
+
# Plan already exists
|
91
|
+
class StackPlanExists < OrchestrationError; end
|
84
92
|
end
|
85
93
|
|
86
94
|
# Invalid modification request
|
@@ -88,6 +96,5 @@ module Miasma
|
|
88
96
|
|
89
97
|
# Model has not been persisted
|
90
98
|
class ModelPersistError < Error; end
|
91
|
-
|
92
99
|
end
|
93
100
|
end
|
data/lib/miasma/models.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
require
|
1
|
+
require "miasma"
|
2
2
|
|
3
3
|
module Miasma
|
4
4
|
module Models
|
5
|
-
autoload :AutoScale,
|
6
|
-
autoload :BlockStorage,
|
7
|
-
autoload :Compute,
|
8
|
-
autoload :Dns,
|
9
|
-
autoload :LoadBalancer,
|
10
|
-
autoload :Orchestration,
|
11
|
-
autoload :Queues,
|
12
|
-
autoload :Storage,
|
5
|
+
autoload :AutoScale, "miasma/models/auto_scale"
|
6
|
+
autoload :BlockStorage, "miasma/models/block_storage"
|
7
|
+
autoload :Compute, "miasma/models/compute"
|
8
|
+
autoload :Dns, "miasma/models/dns"
|
9
|
+
autoload :LoadBalancer, "miasma/models/load_balancer"
|
10
|
+
autoload :Orchestration, "miasma/models/orchestration"
|
11
|
+
autoload :Queues, "miasma/models/queues"
|
12
|
+
autoload :Storage, "miasma/models/storage"
|
13
13
|
end
|
14
14
|
end
|
@@ -1,18 +1,17 @@
|
|
1
|
-
require
|
1
|
+
require "miasma"
|
2
2
|
|
3
3
|
module Miasma
|
4
4
|
module Models
|
5
5
|
# Abstract auto scale API
|
6
6
|
class AutoScale < Types::Api
|
7
|
-
|
8
|
-
autoload :
|
9
|
-
autoload :Groups, 'miasma/models/auto_scale/groups'
|
7
|
+
autoload :Group, "miasma/models/auto_scale/group"
|
8
|
+
autoload :Groups, "miasma/models/auto_scale/groups"
|
10
9
|
|
11
10
|
# Auto scale groups
|
12
11
|
#
|
13
12
|
# @param filter [Hash] filtering options
|
14
13
|
# @return [Types::Collection<Models::AutoScale::Groups>] auto scale groups
|
15
|
-
def groups(filter={})
|
14
|
+
def groups(filter = {})
|
16
15
|
memoize(:groups) do
|
17
16
|
Groups.new(self)
|
18
17
|
end
|
@@ -46,10 +45,9 @@ module Miasma
|
|
46
45
|
#
|
47
46
|
# @param options [Hash] filter
|
48
47
|
# @return [Array<Models::AutoScale::Group>]
|
49
|
-
def group_all(options={})
|
48
|
+
def group_all(options = {})
|
50
49
|
raise NotImplementedError
|
51
50
|
end
|
52
|
-
|
53
51
|
end
|
54
52
|
end
|
55
53
|
end
|
@@ -1,13 +1,11 @@
|
|
1
|
-
require
|
1
|
+
require "miasma"
|
2
2
|
|
3
3
|
module Miasma
|
4
4
|
module Models
|
5
5
|
class AutoScale
|
6
6
|
# Abstract group
|
7
7
|
class Group < Types::Model
|
8
|
-
|
9
8
|
class Server < Types::ThinModel
|
10
|
-
|
11
9
|
model Miasma::Models::Compute::Server
|
12
10
|
attribute :name, String
|
13
11
|
|
@@ -18,7 +16,6 @@ module Miasma
|
|
18
16
|
end
|
19
17
|
|
20
18
|
class Balancer < Types::ThinModel
|
21
|
-
|
22
19
|
model Miasma::Models::LoadBalancer::Balancer
|
23
20
|
attribute :name, String
|
24
21
|
|
@@ -26,18 +23,17 @@ module Miasma
|
|
26
23
|
def expand
|
27
24
|
api.api_for(:load_balancer).balancers.get(self.id || self.name)
|
28
25
|
end
|
29
|
-
|
30
26
|
end
|
31
27
|
|
32
28
|
attribute :name, String, :required => true
|
33
|
-
attribute :created, Time, :coerce => lambda{|v| Time.parse(v.to_s)}
|
34
|
-
attribute :load_balancers, Balancer, :multiple => true, :coerce => lambda{|v,obj| Balancer.new(obj.api, v)}
|
35
|
-
attribute :minimum_size, Integer, :coerce => lambda{|v| v.to_i}
|
36
|
-
attribute :maximum_size, Integer, :coerce => lambda{|v| v.to_i}
|
37
|
-
attribute :desired_size, Integer, :coerce => lambda{|v| v.to_i}
|
38
|
-
attribute :current_size, Integer, :coerce => lambda{|v| v.to_i}
|
29
|
+
attribute :created, Time, :coerce => lambda { |v| Time.parse(v.to_s) }
|
30
|
+
attribute :load_balancers, Balancer, :multiple => true, :coerce => lambda { |v, obj| Balancer.new(obj.api, v) }
|
31
|
+
attribute :minimum_size, Integer, :coerce => lambda { |v| v.to_i }
|
32
|
+
attribute :maximum_size, Integer, :coerce => lambda { |v| v.to_i }
|
33
|
+
attribute :desired_size, Integer, :coerce => lambda { |v| v.to_i }
|
34
|
+
attribute :current_size, Integer, :coerce => lambda { |v| v.to_i }
|
39
35
|
attribute :state, Symbol, :allowed_values => []
|
40
|
-
attribute :servers, Server, :multiple => true, :coerce => lambda{|v,obj| Server.new(obj.api_for(:compute), v)}
|
36
|
+
attribute :servers, Server, :multiple => true, :coerce => lambda { |v, obj| Server.new(obj.api_for(:compute), v) }
|
41
37
|
|
42
38
|
on_missing :reload
|
43
39
|
|
@@ -57,7 +53,6 @@ module Miasma
|
|
57
53
|
def perform_destroy
|
58
54
|
api.group_destroy(self)
|
59
55
|
end
|
60
|
-
|
61
56
|
end
|
62
57
|
end
|
63
58
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "miasma"
|
2
2
|
|
3
3
|
module Miasma
|
4
4
|
module Models
|
@@ -11,7 +11,7 @@ module Miasma
|
|
11
11
|
#
|
12
12
|
# @param options [Hash] filter options
|
13
13
|
# @return [Array<Group>]
|
14
|
-
def filter(options={})
|
14
|
+
def filter(options = {})
|
15
15
|
raise NotImplementedError
|
16
16
|
end
|
17
17
|
|
@@ -26,9 +26,7 @@ module Miasma
|
|
26
26
|
def perform_population
|
27
27
|
api.group_all
|
28
28
|
end
|
29
|
-
|
30
29
|
end
|
31
|
-
|
32
30
|
end
|
33
31
|
end
|
34
32
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
|
@@ -1,12 +1,11 @@
|
|
1
|
-
require
|
1
|
+
require "miasma"
|
2
2
|
|
3
3
|
module Miasma
|
4
4
|
module Models
|
5
5
|
# Abstract compute API
|
6
6
|
class Compute < Types::Api
|
7
|
-
|
8
|
-
autoload :
|
9
|
-
autoload :Servers, 'miasma/models/compute/servers'
|
7
|
+
autoload :Server, "miasma/models/compute/server"
|
8
|
+
autoload :Servers, "miasma/models/compute/servers"
|
10
9
|
|
11
10
|
# All compute instances
|
12
11
|
#
|
@@ -22,7 +21,7 @@ module Miasma
|
|
22
21
|
# @param filter [Hash] search filter
|
23
22
|
# @option filter [Symbol] :state state of server `Server::VALID_COMPUTE_STATES`
|
24
23
|
# @return [Array<Server>]
|
25
|
-
def server_filter(filter={})
|
24
|
+
def server_filter(filter = {})
|
26
25
|
end
|
27
26
|
|
28
27
|
# Create new server instance
|
@@ -64,7 +63,6 @@ module Miasma
|
|
64
63
|
def server_change_state(server, action)
|
65
64
|
raise NotImplementedError
|
66
65
|
end
|
67
|
-
|
68
66
|
end
|
69
67
|
end
|
70
68
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "miasma"
|
2
2
|
|
3
3
|
module Miasma
|
4
4
|
module Models
|
@@ -28,11 +28,11 @@ module Miasma
|
|
28
28
|
attribute :flavor_id, [String, Numeric]
|
29
29
|
attribute :state, Symbol, :allowed => VALID_COMPUTE_STATES
|
30
30
|
attribute :status, String
|
31
|
-
attribute :addresses_public, Address, :multiple => true, :coerce => lambda{|v| Address.new(v)}
|
32
|
-
attribute :addresses_private, Address, :multiple => true, :coerce => lambda{|v| Address.new(v)}
|
33
|
-
attribute :networks, Network, :multiple => true, :coerce => lambda{|v| Network.new(v)}
|
31
|
+
attribute :addresses_public, Address, :multiple => true, :coerce => lambda { |v| Address.new(v) }
|
32
|
+
attribute :addresses_private, Address, :multiple => true, :coerce => lambda { |v| Address.new(v) }
|
33
|
+
attribute :networks, Network, :multiple => true, :coerce => lambda { |v| Network.new(v) }
|
34
34
|
attribute :personality, [Hash, String], :default => {}
|
35
|
-
attribute :metadata, Hash, :coerce => lambda{|o| o.to_smash}
|
35
|
+
attribute :metadata, Hash, :coerce => lambda { |o| o.to_smash }
|
36
36
|
attribute :key_name, String
|
37
37
|
|
38
38
|
on_missing :reload
|
@@ -67,7 +67,6 @@ module Miasma
|
|
67
67
|
api.server_destroy(self)
|
68
68
|
end
|
69
69
|
end
|
70
|
-
|
71
70
|
end
|
72
71
|
end
|
73
72
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "miasma"
|
2
2
|
|
3
3
|
module Miasma
|
4
4
|
module Models
|
@@ -12,7 +12,7 @@ module Miasma
|
|
12
12
|
# @param options [Hash] filter options
|
13
13
|
# @option options [String] :state current instance state
|
14
14
|
# @return [Array<Server>]
|
15
|
-
def filter(options={})
|
15
|
+
def filter(options = {})
|
16
16
|
raise NotImplementedError
|
17
17
|
end
|
18
18
|
|
@@ -27,9 +27,7 @@ module Miasma
|
|
27
27
|
def perform_population
|
28
28
|
api.server_all
|
29
29
|
end
|
30
|
-
|
31
30
|
end
|
32
|
-
|
33
31
|
end
|
34
32
|
end
|
35
33
|
end
|
data/lib/miasma/models/dns.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
|
@@ -1,18 +1,17 @@
|
|
1
|
-
require
|
1
|
+
require "miasma"
|
2
2
|
|
3
3
|
module Miasma
|
4
4
|
module Models
|
5
5
|
# Abstract load balancer API
|
6
6
|
class LoadBalancer < Types::Api
|
7
|
-
|
8
|
-
autoload :
|
9
|
-
autoload :Balancers, 'miasma/models/load_balancer/balancers'
|
7
|
+
autoload :Balancer, "miasma/models/load_balancer/balancer"
|
8
|
+
autoload :Balancers, "miasma/models/load_balancer/balancers"
|
10
9
|
|
11
10
|
# Load balancers
|
12
11
|
#
|
13
12
|
# @param filter [Hash] filtering options
|
14
13
|
# @return [Types::Collection<Models::LoadBalancer::Balancer>] auto scale groups
|
15
|
-
def balancers(filter={})
|
14
|
+
def balancers(filter = {})
|
16
15
|
memoize(:balancers) do
|
17
16
|
Balancers.new(self)
|
18
17
|
end
|
@@ -46,10 +45,9 @@ module Miasma
|
|
46
45
|
#
|
47
46
|
# @param options [Hash] filter
|
48
47
|
# @return [Array<Models::LoadBalancer::Balancer>]
|
49
|
-
def balancer_all(options={})
|
48
|
+
def balancer_all(options = {})
|
50
49
|
raise NotImplementedError
|
51
50
|
end
|
52
|
-
|
53
51
|
end
|
54
52
|
end
|
55
53
|
end
|