bcome 0.7.0 → 1.0.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.
- checksums.yaml +4 -4
- data/bin/bcome +8 -39
- data/lib/bcome.rb +12 -3
- data/lib/objects/bcome/version.rb +3 -0
- data/lib/objects/bootup.rb +81 -0
- data/lib/objects/command/local.rb +40 -0
- data/lib/objects/config_factory.rb +36 -0
- data/lib/objects/driver/base.rb +30 -0
- data/lib/objects/driver/bucket.rb +20 -0
- data/lib/objects/driver/ec2.rb +44 -0
- data/lib/objects/driver/static.rb +4 -0
- data/lib/objects/exception/argument_error_invoking_method_from_command_line.rb +7 -0
- data/lib/objects/exception/base.rb +15 -0
- data/lib/objects/exception/can_only_subselect_on_inventory.rb +7 -0
- data/lib/objects/exception/cannot_find_internal_registry_klass.rb +7 -0
- data/lib/objects/exception/cannot_find_subselection_parent.rb +7 -0
- data/lib/objects/exception/cant_find_key_in_cloud_tags.rb +7 -0
- data/lib/objects/exception/cant_find_key_in_metadata.rb +7 -0
- data/lib/objects/exception/cant_find_proxy_host_by_identifier.rb +7 -0
- data/lib/objects/exception/cant_find_proxy_host_by_namespace.rb +7 -0
- data/lib/objects/exception/could_not_initiate_ssh_connection.rb +7 -0
- data/lib/objects/exception/could_not_initiate_ssh_connection_through_backend_proxy.rb +7 -0
- data/lib/objects/exception/deprecation_warning.rb +11 -0
- data/lib/objects/exception/duplicate_command_line_argument_key.rb +7 -0
- data/lib/objects/exception/ec2_driver_missing_provisioning_region.rb +7 -0
- data/lib/objects/exception/failed_to_run_local_command.rb +7 -0
- data/lib/objects/exception/interactive_session_halt.rb +4 -0
- data/lib/objects/exception/invalid_bcome_breadcrumb.rb +7 -0
- data/lib/objects/exception/invalid_breadcrumb.rb +7 -0
- data/lib/objects/exception/invalid_context_command.rb +7 -0
- data/lib/objects/exception/invalid_identifier.rb +7 -0
- data/lib/objects/exception/invalid_machines_cache_config.rb +7 -0
- data/lib/objects/exception/invalid_matcher_query.rb +7 -0
- data/lib/objects/exception/invalid_meta_data_config.rb +7 -0
- data/lib/objects/exception/invalid_network_config.rb +7 -0
- data/lib/objects/exception/invalid_network_driver_type.rb +7 -0
- data/lib/objects/exception/invalid_proxy_config.rb +7 -0
- data/lib/objects/exception/invalid_regexp_matcher_in_registry.rb +7 -0
- data/lib/objects/exception/invalid_registry_arguments_type.rb +7 -0
- data/lib/objects/exception/invalid_registry_data_config.rb +7 -0
- data/lib/objects/exception/invalid_restriction_key_in_registry.rb +7 -0
- data/lib/objects/exception/invalid_ssh_config.rb +7 -0
- data/lib/objects/exception/inventories_cannot_have_subviews.rb +7 -0
- data/lib/objects/exception/malformed_command_line_arguments.rb +7 -0
- data/lib/objects/exception/method_invocation_requires_parameter.rb +7 -0
- data/lib/objects/exception/method_name_conflict_in_registry.rb +7 -0
- data/lib/objects/exception/missing_argument_for_registry_command.rb +7 -0
- data/lib/objects/exception/missing_description_on_view.rb +7 -0
- data/lib/objects/exception/missing_execute_on_registry_object.rb +7 -0
- data/lib/objects/exception/missing_identifier_on_view.rb +7 -0
- data/lib/objects/exception/missing_ip_address_on_server.rb +7 -0
- data/lib/objects/exception/missing_network_config.rb +7 -0
- data/lib/objects/exception/missing_params_for_rsync.rb +7 -0
- data/lib/objects/exception/missing_params_for_scp.rb +7 -0
- data/lib/objects/exception/missing_subselection_key.rb +7 -0
- data/lib/objects/exception/missing_type_on_view.rb +7 -0
- data/lib/objects/exception/no_node_found_for_breadcrumb.rb +7 -0
- data/lib/objects/exception/no_node_named_by_identifier.rb +7 -0
- data/lib/objects/exception/node_identifiers_must_be_unique.rb +7 -0
- data/lib/objects/exception/orchestration_script_does_not_exist.rb +7 -0
- data/lib/objects/exception/proxy_host_node_does_not_have_public_ip_address.rb +7 -0
- data/lib/objects/exception/unknown_method_for_namespace.rb +7 -0
- data/lib/objects/interactive/session.rb +45 -0
- data/lib/objects/interactive/session_item/base.rb +36 -0
- data/lib/objects/interactive/session_item/capture_input.rb +20 -0
- data/lib/objects/interactive/session_item/transparent_ssh.rb +111 -0
- data/lib/objects/modules/context.rb +13 -0
- data/lib/objects/modules/registry_management.rb +14 -0
- data/lib/objects/modules/ui_output.rb +9 -0
- data/lib/objects/modules/workspace_commands.rb +198 -0
- data/lib/objects/modules/workspace_menu.rb +128 -0
- data/lib/objects/node/attributes.rb +47 -0
- data/lib/objects/node/base.rb +248 -0
- data/lib/objects/node/cache_handler.rb +24 -0
- data/lib/objects/node/collection.rb +51 -0
- data/lib/objects/node/factory.rb +108 -0
- data/lib/objects/node/inventory/base.rb +88 -0
- data/lib/objects/node/inventory/defined.rb +112 -0
- data/lib/objects/node/inventory/subselect.rb +54 -0
- data/lib/objects/node/meta/base.rb +36 -0
- data/lib/objects/node/meta/cloud.rb +4 -0
- data/lib/objects/node/meta/local.rb +4 -0
- data/lib/objects/node/meta_data_factory.rb +23 -0
- data/lib/objects/node/meta_data_loader.rb +32 -0
- data/lib/objects/node/resources/base.rb +98 -0
- data/lib/objects/node/resources/inventory.rb +25 -0
- data/lib/objects/node/resources/sub_inventory.rb +56 -0
- data/lib/objects/node/server/base.rb +218 -0
- data/lib/objects/node/server/dynamic.rb +39 -0
- data/lib/objects/node/server/static.rb +31 -0
- data/lib/objects/orchestration/base.rb +13 -0
- data/lib/objects/orchestrator.rb +24 -0
- data/lib/objects/parser/bread_crumb.rb +31 -0
- data/lib/objects/progress_bar.rb +30 -0
- data/lib/objects/registry/arguments/base.rb +36 -0
- data/lib/objects/registry/arguments/command_line.rb +35 -0
- data/lib/objects/registry/arguments/console.rb +15 -0
- data/lib/objects/registry/command/base.rb +66 -0
- data/lib/objects/registry/command/external.rb +55 -0
- data/lib/objects/registry/command/group.rb +76 -0
- data/lib/objects/registry/command/internal.rb +34 -0
- data/lib/objects/registry/command_list.rb +33 -0
- data/lib/objects/registry/loader.rb +70 -0
- data/lib/objects/ssh/bootstrap.rb +19 -0
- data/lib/objects/ssh/command.rb +46 -0
- data/lib/objects/ssh/command_exec.rb +65 -0
- data/lib/objects/ssh/connection_handler.rb +101 -0
- data/lib/objects/ssh/driver.rb +204 -0
- data/lib/objects/ssh/proxy_data.rb +56 -0
- data/lib/objects/ssh/script_exec.rb +43 -0
- data/lib/objects/system/local.rb +30 -0
- data/lib/objects/workspace.rb +75 -0
- data/patches/irb.rb +20 -7
- data/patches/string.rb +75 -0
- data/patches/string_stylesheet.rb +61 -0
- metadata +175 -93
- data/bin/bcome-bash-setup +0 -18
- data/bin/bcome-setup +0 -43
- data/bin/boot.rb +0 -148
- data/bin/boot_no_shell.rb +0 -3
- data/filters/ec2_filter.rb +0 -12
- data/lib/bcome/version.rb +0 -3
- data/lib/become_object.rb +0 -111
- data/lib/boot.rb +0 -13
- data/lib/command.rb +0 -56
- data/lib/context_functions.rb +0 -65
- data/lib/filters/base.rb +0 -10
- data/lib/filters/ec2_filter.rb +0 -4
- data/lib/functions.rb +0 -70
- data/lib/helpers/command_helper.rb +0 -13
- data/lib/helpers/environment_ssh.rb +0 -122
- data/lib/helpers/fog_helper.rb +0 -108
- data/lib/helpers/instance_command.rb +0 -71
- data/lib/helpers/instance_ssh.rb +0 -83
- data/lib/helpers/selections.rb +0 -117
- data/lib/interactive/interactive_session_halt.rb +0 -4
- data/lib/interactive/session.rb +0 -44
- data/lib/interactive/session_item/base.rb +0 -30
- data/lib/interactive/session_item/transparent_ssh.rb +0 -133
- data/lib/nodes/base.rb +0 -60
- data/lib/nodes/environment.rb +0 -30
- data/lib/nodes/estate.rb +0 -44
- data/lib/nodes/instance.rb +0 -94
- data/lib/nodes/platform.rb +0 -17
- data/lib/nodes/view.rb +0 -31
- data/lib/object.rb +0 -21
- data/lib/orchestrator/command_group/base.rb +0 -56
- data/lib/orchestrator/command_group/custom.rb +0 -13
- data/lib/orchestrator/command_group/direct.rb +0 -53
- data/lib/orchestrator/direct_command/group.rb +0 -21
- data/lib/orchestrator/direct_command/instance.rb +0 -19
- data/lib/orchestrator/factory.rb +0 -38
- data/lib/orchestrator/loader.rb +0 -47
- data/lib/orchestrator/node_target/all.rb +0 -14
- data/lib/orchestrator/node_target/all_excluding_roles.rb +0 -14
- data/lib/orchestrator/node_target/all_with_roles.rb +0 -14
- data/lib/orchestrator/node_target/base.rb +0 -43
- data/lib/orchestrator/node_target/single.rb +0 -12
- data/lib/orchestrator/recipe.rb +0 -60
- data/lib/orchestrator/registry.rb +0 -37
- data/lib/orchestrator/validate_and_set.rb +0 -10
- data/lib/patches/string.rb +0 -86
- data/lib/progress_bar.rb +0 -31
- data/lib/render_irb.rb +0 -53
- data/lib/scp.rb +0 -40
- data/lib/ssh.rb +0 -51
- data/lib/stack/base.rb +0 -148
- data/lib/stack/environment.rb +0 -222
- data/lib/stack/estate.rb +0 -50
- data/lib/stack/instance.rb +0 -130
- data/lib/stack/platform.rb +0 -74
- data/lib/stack/view.rb +0 -56
- data/lib/workspace_context.rb +0 -40
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6b13dea68c96da6c50cd9f911836c141f6b27720
|
|
4
|
+
data.tar.gz: 9cbb87e356a39489d29dac89e2a5720131d442a2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ef0390c136034e31889cc7f18727340106f713448696403e163b33cf10b55d02a27d00123017a9c1b20055cade92ce23aa87fcd9a98e25b38a99e17e5211225b
|
|
7
|
+
data.tar.gz: 7be2d171f7e899da877709792b6f6750e5db8dc8477a4649eef4b44250cffbc52c6cc5542db9d351f5ae567c66552bbbe58e5d1545c71304d5b171f45cba4e72
|
data/bin/bcome
CHANGED
|
@@ -1,46 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
# (C) Guillaume Roderick (webzakimbo)
|
|
4
|
-
# MIT licence.
|
|
5
|
-
|
|
6
|
-
## Load & Boot into namespace
|
|
7
|
-
require 'irb'
|
|
8
|
-
require "irb/completion"
|
|
9
3
|
require 'bcome'
|
|
10
4
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
require 'irb/ext/multi-irb'
|
|
16
|
-
IRB.parse_opts_with_ignoring_script
|
|
17
|
-
irb_method = (@direct_command && @direct_shell_commands.include?(@direct_command)) ? @direct_command.to_sym : nil
|
|
18
|
-
IRB.irb irb_method, @context_object
|
|
19
|
-
end
|
|
5
|
+
begin
|
|
6
|
+
spawn_into_console = true
|
|
7
|
+
arguments = ARGV - [ARGV[0]]
|
|
8
|
+
::Bcome::Bootup.set_and_do({ breadcrumbs: ARGV[0], arguments: arguments }, spawn_into_console)
|
|
20
9
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
## We're SSH'ing directly to a node, indicated by an 'ssh' key at the end of our context breadcrumb
|
|
24
|
-
# called with, e.g. bcome platform:environment:node_name:ssh
|
|
25
|
-
@direct_command_on.node.ssh
|
|
26
|
-
elsif @direct_command == "run"
|
|
27
|
-
## We're directly excuting a command on a n node indicated by a 'run' key at the end of our context breadrumb
|
|
28
|
-
# called with, e.g. bcome platform:environment:node_name:run "command to execute"
|
|
29
|
-
params = ARGV[(1..(ARGV.size))].join("\s")
|
|
30
|
-
@direct_command_on.node.run(params)
|
|
31
|
-
else
|
|
32
|
-
@direct_command_on.send(@direct_command)
|
|
33
|
-
end
|
|
34
|
-
end
|
|
10
|
+
# close any trailing connections
|
|
11
|
+
Bcome::Bootup.instance.estate.close_ssh_connections
|
|
35
12
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
## e,g, bcome platform:environment:node_name:bootstrap
|
|
39
|
-
if @context_object && @direct_execute_method
|
|
40
|
-
if ARGV && ARGV.size > 1
|
|
41
|
-
arguments = ARGV[1..ARGV.size]
|
|
42
|
-
@context_object.send(@direct_execute_method, arguments)
|
|
43
|
-
else
|
|
44
|
-
@context_object.send(@direct_execute_method)
|
|
45
|
-
end
|
|
13
|
+
rescue ::Bcome::Exception::Base
|
|
14
|
+
puts "bcome terminated unexpectedly".warning
|
|
46
15
|
end
|
data/lib/bcome.rb
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
|
+
require 'irb'
|
|
2
|
+
require 'irb/completion'
|
|
1
3
|
require 'rainbow'
|
|
2
|
-
require 'aws-sdk'
|
|
3
4
|
require 'net/scp'
|
|
4
5
|
require 'net/ssh/proxy/command'
|
|
5
6
|
require 'fog/aws'
|
|
6
7
|
require 'require_all'
|
|
7
8
|
require 'pmap'
|
|
9
|
+
require 'singleton'
|
|
10
|
+
require 'active_support'
|
|
11
|
+
require 'active_support/core_ext'
|
|
12
|
+
require 'pp'
|
|
13
|
+
require 'awesome_print'
|
|
8
14
|
|
|
9
|
-
require_all "#{File.dirname(__FILE__)}/../
|
|
10
|
-
require_all "#{File.dirname(__FILE__)}/../
|
|
15
|
+
require_all "#{File.dirname(__FILE__)}/../patches"
|
|
16
|
+
require_all "#{File.dirname(__FILE__)}/../lib/objects"
|
|
11
17
|
|
|
18
|
+
# Load in any user defined orchestration
|
|
19
|
+
path_to_bcome_orchestration_configs = "#{Dir.getwd}/bcome/orchestration"
|
|
20
|
+
require_all path_to_bcome_orchestration_configs if File.directory?(path_to_bcome_orchestration_configs)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
module Bcome
|
|
2
|
+
class Bootup
|
|
3
|
+
def self.set_and_do(params, spawn_into_console = true)
|
|
4
|
+
instance.set(params, spawn_into_console)
|
|
5
|
+
instance.do
|
|
6
|
+
rescue Bcome::Exception::Base => e
|
|
7
|
+
puts e.pretty_display
|
|
8
|
+
rescue Excon::Error::Socket => e
|
|
9
|
+
puts "\nNo network access - please check your connection and try again\n".red
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.traverse(breadcrumbs = nil, _spawn_into_console = false)
|
|
13
|
+
spawn_into_console = false
|
|
14
|
+
::Bcome::Bootup.set_and_do({ breadcrumbs: breadcrumbs }, spawn_into_console)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
include Singleton
|
|
18
|
+
|
|
19
|
+
attr_reader :breadcrumbs, :arguments
|
|
20
|
+
|
|
21
|
+
def set(params, spawn_into_console = false)
|
|
22
|
+
@breadcrumbs = params[:breadcrumbs]
|
|
23
|
+
@arguments = params[:arguments]
|
|
24
|
+
@spawn_into_console = spawn_into_console
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def do
|
|
28
|
+
context = crumbs.empty? ? init_context(estate) : traverse(estate)
|
|
29
|
+
context
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def init_context(context)
|
|
33
|
+
if @spawn_into_console
|
|
34
|
+
::Bcome::Workspace.instance.set(context: context)
|
|
35
|
+
else
|
|
36
|
+
context
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def traverse(_starting_context)
|
|
41
|
+
starting_context = estate
|
|
42
|
+
crumbs.each_with_index do |crumb, _index|
|
|
43
|
+
# Some contexts' resources are loaded dynamically and do not come from the estate config. As we're traversing, we'll need to load
|
|
44
|
+
# them if necessary
|
|
45
|
+
starting_context.load_nodes if starting_context.inventory? && !starting_context.nodes_loaded?
|
|
46
|
+
|
|
47
|
+
# Attempt to load our next context resource
|
|
48
|
+
next_context = starting_context.resource_for_identifier(crumb)
|
|
49
|
+
|
|
50
|
+
# Our current breadcrumb is not a node, and so we'll attempt to invoke a method call on the previous
|
|
51
|
+
# e.g. given resource:foo, then invoke 'foo' on 'resource'
|
|
52
|
+
unless next_context
|
|
53
|
+
starting_context.invoke(crumb, @arguments)
|
|
54
|
+
return
|
|
55
|
+
end
|
|
56
|
+
starting_context = next_context
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Set our workspace to our last context - we're not invoking a method call and so we're entering a console session
|
|
60
|
+
init_context(starting_context)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def estate
|
|
64
|
+
@estate ||= ::Bcome::Node::Factory.instance.init_tree
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def parser
|
|
68
|
+
::Bcome::Parser::BreadCrumb.new(@breadcrumbs)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def crumbs
|
|
72
|
+
parser.crumbs
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
private
|
|
76
|
+
|
|
77
|
+
def teardown!
|
|
78
|
+
@estate = nil
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'open3'
|
|
2
|
+
|
|
3
|
+
module Bcome::Command
|
|
4
|
+
class Local
|
|
5
|
+
def self.run(raw_command, _success_exit_codes = [0])
|
|
6
|
+
command = new(raw_command)
|
|
7
|
+
command.syscall
|
|
8
|
+
command
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
attr_reader :stdout, :stderr
|
|
12
|
+
|
|
13
|
+
def initialize(command, success_exit_codes = [0])
|
|
14
|
+
@command = command
|
|
15
|
+
@success_exit_codes = success_exit_codes
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def syscall
|
|
19
|
+
@stdout, @stderr, @process_status = Open3.capture3(@command)
|
|
20
|
+
rescue Exception => e
|
|
21
|
+
@stderr = e.message
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def exit_code
|
|
25
|
+
@process_status ? @process_status.exitstatus : 1
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def is_success?
|
|
29
|
+
@success_exit_codes.include?(exit_code)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def failed?
|
|
33
|
+
!is_success?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def pretty_result
|
|
37
|
+
is_success? ? "success / exit code: #{exit_code}".success : "failure / exit code: #{exit_code}".error
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
class Bcome::ConfigFactory
|
|
2
|
+
attr_reader :tree
|
|
3
|
+
|
|
4
|
+
def initialize
|
|
5
|
+
@tree = { views: [] }
|
|
6
|
+
@collections = []
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def flattened
|
|
10
|
+
@tree[:views].first
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def add_crumbs(crumbs, data)
|
|
14
|
+
views = @tree
|
|
15
|
+
number_crumbs = crumbs.size
|
|
16
|
+
|
|
17
|
+
crumbs.each_with_index do |crumb, index|
|
|
18
|
+
is_last_crumb = number_crumbs == (index + 1)
|
|
19
|
+
if this_view = hash_for_identifier_from_view(crumb, views)
|
|
20
|
+
views = this_view
|
|
21
|
+
else
|
|
22
|
+
this_view = { identifier: crumb }
|
|
23
|
+
this_view[:views] = [] unless is_last_crumb && data[:type].to_sym == :inventory
|
|
24
|
+
views[:views] << this_view
|
|
25
|
+
views = hash_for_identifier_from_view(crumb, views)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
this_view.merge!(data) if is_last_crumb
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def hash_for_identifier_from_view(identifier, views)
|
|
33
|
+
raise Bcome::Exception::InventoriesCannotHaveSubViews, 'Inventories cannot hold other inventories - invalid network config' unless views.key?(:views)
|
|
34
|
+
views[:views].select { |v| v[:identifier].to_s == identifier.to_s }.first
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Bcome::Driver
|
|
2
|
+
class Base
|
|
3
|
+
class << self
|
|
4
|
+
def create_from_config(config)
|
|
5
|
+
raise Bcome::Exception::InvalidNetworkDriverType, 'Your network configurtion is invalid' unless config.is_a?(Hash)
|
|
6
|
+
raise Bcome::Exception::InvalidNetworkDriverType, "Missing config parameter 'type'" unless config[:type]
|
|
7
|
+
config_klass_key = config[:type].to_sym
|
|
8
|
+
driver_klass = klass_for_type[config_klass_key]
|
|
9
|
+
raise Bcome::Exception::InvalidNetworkDriverType, config unless driver_klass
|
|
10
|
+
driver = driver_klass.new(config)
|
|
11
|
+
driver
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def klass_for_type
|
|
15
|
+
{
|
|
16
|
+
static: ::Bcome::Driver::Static,
|
|
17
|
+
ec2: ::Bcome::Driver::Ec2
|
|
18
|
+
}
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def initialize(params)
|
|
23
|
+
@params = params
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def config
|
|
27
|
+
@params
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Bcome::Driver
|
|
2
|
+
class Bucket
|
|
3
|
+
include Singleton
|
|
4
|
+
|
|
5
|
+
def initialize
|
|
6
|
+
@drivers = []
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def driver_for_network_data(network_data)
|
|
10
|
+
found_driver = @drivers.select { |driver| driver.config == network_data }.first
|
|
11
|
+
found_driver ? found_driver : create_network_driver(network_data)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def create_network_driver(network_data)
|
|
15
|
+
driver = ::Bcome::Driver::Base.create_from_config(network_data)
|
|
16
|
+
@drivers << driver
|
|
17
|
+
driver
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module Bcome::Driver
|
|
2
|
+
class Ec2 < Bcome::Driver::Base
|
|
3
|
+
def initialize(*params)
|
|
4
|
+
super
|
|
5
|
+
raise Bcome::Exception::Ec2DriverMissingProvisioningRegion, params.inspect unless provisioning_region
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def fog_client
|
|
9
|
+
@fog_client ||= get_fog_client
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def fetch_server_list(filters)
|
|
13
|
+
servers = unfiltered_server_list.all(filters)
|
|
14
|
+
servers
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def unfiltered_server_list
|
|
18
|
+
@unfiltered_server_list ||= fog_client.servers.all({})
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def loading
|
|
22
|
+
fog_client.servers.all({})
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def credentials_key
|
|
26
|
+
@params[:credentials_key]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def provisioning_region
|
|
30
|
+
@params[:provisioning_region]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
protected
|
|
34
|
+
|
|
35
|
+
def get_fog_client
|
|
36
|
+
::Fog.credential = credentials_key
|
|
37
|
+
client = ::Fog::Compute.new(
|
|
38
|
+
provider: 'AWS',
|
|
39
|
+
region: provisioning_region
|
|
40
|
+
)
|
|
41
|
+
client
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Bcome::Exception
|
|
2
|
+
class Base < RuntimeError
|
|
3
|
+
def initialize(message_suffix = nil)
|
|
4
|
+
@message_suffix = message_suffix
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def message
|
|
8
|
+
"#{message_prefix}#{@message_suffix ? ": #{@message_suffix}" : ''}"
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def pretty_display
|
|
12
|
+
puts "\n#{message}\n".error
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|