bcome 1.4.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/bcome.rb +7 -0
- data/lib/objects/bcome/version.rb +3 -3
- data/lib/objects/bootup.rb +4 -3
- data/lib/objects/driver/base.rb +16 -2
- data/lib/objects/driver/ec2.rb +11 -2
- data/lib/objects/driver/gcp.rb +49 -5
- data/lib/objects/driver/gcp/authentication/base.rb +36 -0
- data/lib/objects/driver/gcp/authentication/oauth.rb +24 -29
- data/lib/objects/driver/gcp/authentication/oauth_client_config.rb +22 -0
- data/lib/objects/driver/gcp/authentication/oauth_session_store.rb +22 -0
- data/lib/objects/driver/gcp/authentication/service_account.rb +57 -2
- data/lib/objects/driver/gcp/authentication/signet/service_account.rb +27 -0
- data/lib/objects/driver/gcp/authentication/utilities.rb +42 -0
- data/lib/objects/encryptor.rb +83 -0
- data/lib/objects/exception/base.rb +10 -3
- data/lib/objects/exception/ec2_driver_missing_authorization_keys.rb +11 -0
- data/lib/objects/exception/empty_namespace_tree.rb +11 -0
- data/lib/objects/exception/gcp_auth_service_account_missing_credentials.rb +11 -0
- data/lib/objects/exception/invalid_metadata_encryption_key.rb +1 -1
- data/lib/objects/exception/missing_gcp_service_account_credentials_filename.rb +11 -0
- data/lib/objects/exception/user_orchestration_error.rb +11 -0
- data/lib/objects/initialization/factory.rb +36 -0
- data/lib/objects/initialization/structure.rb +18 -0
- data/lib/objects/initialization/utils.rb +20 -0
- data/lib/objects/loading_bar/handler.rb +1 -1
- data/lib/objects/loading_bar/indicator/base.rb +1 -0
- data/lib/objects/modules/draw.rb +49 -0
- data/lib/objects/modules/tree.rb +157 -0
- data/lib/objects/modules/workspace_commands.rb +2 -32
- data/lib/objects/modules/workspace_menu.rb +113 -48
- data/lib/objects/node/attributes.rb +6 -0
- data/lib/objects/node/base.rb +27 -7
- data/lib/objects/node/cache_handler.rb +1 -1
- data/lib/objects/node/factory.rb +15 -11
- data/lib/objects/node/inventory/base.rb +9 -3
- data/lib/objects/node/inventory/defined.rb +18 -15
- data/lib/objects/node/inventory/merge.rb +9 -1
- data/lib/objects/node/inventory/subselect.rb +6 -4
- data/lib/objects/node/meta_data_factory.rb +1 -1
- data/lib/objects/node/meta_data_loader.rb +2 -2
- data/lib/objects/node/resources/inventory.rb +19 -0
- data/lib/objects/node/resources/merged.rb +23 -14
- data/lib/objects/node/resources/sub_inventory.rb +6 -5
- data/lib/objects/node/server/base.rb +35 -22
- data/lib/objects/node/server/dynamic/ec2.rb +0 -1
- data/lib/objects/node/server/dynamic/gcp.rb +0 -1
- data/lib/objects/node/server/static.rb +22 -9
- data/lib/objects/orchestration/base.rb +7 -1
- data/lib/objects/orchestration/interactive_terraform.rb +10 -16
- data/lib/objects/registry/command/external.rb +6 -2
- data/lib/objects/registry/command/group.rb +5 -1
- data/lib/objects/registry/loader.rb +3 -0
- data/lib/objects/ssh/command.rb +4 -8
- data/lib/objects/ssh/command_exec.rb +3 -1
- data/lib/objects/ssh/connection_wrangler.rb +34 -17
- data/lib/objects/ssh/connector.rb +17 -9
- data/lib/objects/ssh/driver.rb +7 -18
- data/lib/objects/ssh/driver_concerns/connection.rb +3 -11
- data/lib/objects/ssh/driver_concerns/functions.rb +7 -7
- data/lib/objects/ssh/proxy_chain.rb +19 -0
- data/lib/objects/ssh/proxy_chain_link.rb +26 -0
- data/lib/objects/ssh/proxy_hop.rb +47 -18
- data/lib/objects/ssh/script_exec.rb +9 -11
- data/lib/objects/startup.rb +7 -1
- data/lib/objects/terraform/output.rb +5 -1
- data/lib/objects/workspace.rb +10 -0
- data/patches/irb.rb +35 -1
- data/patches/string.rb +13 -0
- metadata +71 -25
- data/lib/objects/driver/static.rb +0 -6
@@ -35,7 +35,7 @@ module ::Bcome::Ssh
|
|
35
35
|
ssh_connect!
|
36
36
|
{ success: true }
|
37
37
|
rescue Exception => e
|
38
|
-
{ success: false, error: e }
|
38
|
+
{ success: false, error: e, backtrace: e.backtrace }
|
39
39
|
end
|
40
40
|
|
41
41
|
def scp
|
@@ -57,17 +57,17 @@ module ::Bcome::Ssh
|
|
57
57
|
nil
|
58
58
|
end
|
59
59
|
|
60
|
-
def put_str(string, remote_path)
|
61
|
-
raise Bcome::Exception::MissingParamsForScp, "'put' requires a string and a remote_path" if string.
|
60
|
+
def put_str(string, remote_path, silence_progress = false)
|
61
|
+
raise Bcome::Exception::MissingParamsForScp, "'put' requires a string and a remote_path" if string.nil? || remote_path.to_s.empty?
|
62
62
|
|
63
|
-
puts "\n(#{@context_node.namespace})\s".namespace + "Uploading from string to #{remote_path}\n".informational
|
63
|
+
puts "\n(#{@context_node.namespace})\s".namespace + "Uploading from string to #{remote_path}\n".informational unless silence_progress
|
64
64
|
|
65
65
|
begin
|
66
66
|
scp.upload!(StringIO.new(string), remote_path) do |_ch, name, sent, total|
|
67
|
-
puts "#{name}: #{sent}/#{total}".progress
|
67
|
+
puts "#{name}: #{sent}/#{total}".progress unless silence_progress
|
68
68
|
end
|
69
|
-
rescue
|
70
|
-
|
69
|
+
rescue StandardError => e
|
70
|
+
raise ::Bcome::Exception::Generic, e.message
|
71
71
|
end
|
72
72
|
nil
|
73
73
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bcome::Ssh
|
4
|
+
class ProxyChain
|
5
|
+
attr_reader :hops
|
6
|
+
|
7
|
+
def initialize(wrangler)
|
8
|
+
@hops = wrangler.hops
|
9
|
+
end
|
10
|
+
|
11
|
+
def eql?(other_chain)
|
12
|
+
hops == other_chain.hops
|
13
|
+
end
|
14
|
+
|
15
|
+
def ==(other_chain)
|
16
|
+
eql?(other_chain)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bcome::Ssh
|
4
|
+
class ProxyChainLink
|
5
|
+
attr_reader :link
|
6
|
+
|
7
|
+
def initialize(node)
|
8
|
+
@link = {}
|
9
|
+
init(node.machines)
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
def init(machines)
|
15
|
+
machines.each do |machine|
|
16
|
+
proxy_chain = machine.proxy_chain
|
17
|
+
|
18
|
+
if key = @link.keys.detect { |key| key.eql?(proxy_chain) }
|
19
|
+
@link[key] << machine
|
20
|
+
else
|
21
|
+
@link[proxy_chain] = [machine]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -2,23 +2,33 @@
|
|
2
2
|
|
3
3
|
module Bcome::Ssh
|
4
4
|
class ProxyHop
|
5
|
-
|
5
|
+
include Bcome::Draw
|
6
|
+
|
7
|
+
attr_reader :parent, :config, :host, :bcome_proxy_node
|
6
8
|
|
7
9
|
def initialize(config, context_node, parent)
|
8
10
|
@config = config
|
9
11
|
@context_node = context_node
|
10
12
|
@parent = parent
|
13
|
+
set_host
|
11
14
|
end
|
12
15
|
|
13
16
|
def proxy_details
|
14
17
|
@config.merge(
|
15
18
|
proxy_host: host,
|
16
19
|
user: user
|
17
|
-
)
|
20
|
+
).except!(:bastion_host_user, :fallback_bastion_host_user)
|
18
21
|
end
|
19
22
|
|
20
|
-
def
|
21
|
-
|
23
|
+
def pretty_proxy_details(n = 1)
|
24
|
+
lines = ["proxy\s".bc_cyan + "[#{n}]"]
|
25
|
+
|
26
|
+
lines << "bcome node\s".bc_yellow + @bcome_proxy_node.keyed_namespace if @bcome_proxy_node
|
27
|
+
|
28
|
+
lines << "host\s".bc_yellow + host
|
29
|
+
lines << "user\s".bc_yellow + user
|
30
|
+
|
31
|
+
lines
|
22
32
|
end
|
23
33
|
|
24
34
|
def user
|
@@ -29,6 +39,14 @@ module Bcome::Ssh
|
|
29
39
|
!parent.nil?
|
30
40
|
end
|
31
41
|
|
42
|
+
def ==(other)
|
43
|
+
config == other.config
|
44
|
+
end
|
45
|
+
|
46
|
+
def eql?(other)
|
47
|
+
config == other.config
|
48
|
+
end
|
49
|
+
|
32
50
|
def get_ssh_string(_is_first_hop = false)
|
33
51
|
con_str = "#{user}@#{host}"
|
34
52
|
con_str
|
@@ -63,39 +81,50 @@ module Bcome::Ssh
|
|
63
81
|
end
|
64
82
|
|
65
83
|
def get_user
|
66
|
-
|
84
|
+
# If an explicit user has been set for this hop, use it.
|
85
|
+
return @config[:bastion_host_user] if @config[:bastion_host_user]
|
86
|
+
|
87
|
+
# Otherwise, if our proxy hop is a defined bcome server, i.e. it exists in the network map, we can infer the user and so we'll use that.
|
88
|
+
return @bcome_proxy_node.ssh_driver.user if @bcome_proxy_node
|
89
|
+
|
90
|
+
# Otherwise, we'll fallback
|
91
|
+
@config[:fallback_bastion_host_user]
|
67
92
|
end
|
68
93
|
|
69
|
-
def
|
70
|
-
raise Bcome::Exception::InvalidProxyConfig, 'Missing host id or namespace' unless @config[:host_id] || @config[:namespace]
|
94
|
+
def set_host
|
95
|
+
raise Bcome::Exception::InvalidProxyConfig, 'Missing host id or namespace' unless @config[:node_identifier] || @config[:host_id] || @config[:namespace]
|
71
96
|
raise Bcome::Exception::InvalidProxyConfig, 'Missing host lookup method' unless @config[:host_lookup]
|
72
97
|
|
73
98
|
host_lookup_method = valid_host_lookups[@config[:host_lookup].to_sym]
|
74
99
|
raise Bcome::Exception::InvalidProxyConfig, "#{@config[:host_lookup]} is not a valid host lookup method" unless host_lookup_method
|
75
100
|
|
76
|
-
|
77
|
-
|
78
|
-
h
|
101
|
+
@host = send(host_lookup_method)
|
79
102
|
end
|
80
103
|
|
81
104
|
def get_host_or_ip_from_config
|
82
105
|
@config[:host_id]
|
83
106
|
end
|
84
107
|
|
108
|
+
# Older lookup - within same parent-child tree only. Retained for backwards compatibility
|
85
109
|
def get_host_by_inventory_node
|
86
|
-
identifier = @config[:host_id]
|
87
|
-
|
88
|
-
raise Bcome::Exception::CantFindProxyHostByIdentifier, identifier unless
|
89
|
-
raise Bcome::Exception::ProxyHostNodeDoesNotHavePublicIp, identifier unless
|
110
|
+
identifier = @config[:host_id] || @config[:node_identifier]
|
111
|
+
@bcome_proxy_node = @context_node.recurse_resource_for_identifier(identifier)
|
112
|
+
raise Bcome::Exception::CantFindProxyHostByIdentifier, identifier unless @bcome_proxy_node
|
113
|
+
raise Bcome::Exception::ProxyHostNodeDoesNotHavePublicIp, identifier unless @bcome_proxy_node.public_ip_address
|
90
114
|
|
91
|
-
|
115
|
+
bcome_node_host
|
92
116
|
end
|
93
117
|
|
118
|
+
# Newer lookup - across entire network
|
94
119
|
def get_host_by_namespace
|
95
|
-
|
96
|
-
raise Bcome::Exception::CantFindProxyHostByNamespace, @config[:namespace] unless
|
120
|
+
@bcome_proxy_node = ::Bcome::Orchestrator.instance.get(@config[:namespace])
|
121
|
+
raise Bcome::Exception::CantFindProxyHostByNamespace, @config[:namespace] unless @bcome_proxy_node
|
122
|
+
|
123
|
+
bcome_node_host
|
124
|
+
end
|
97
125
|
|
98
|
-
|
126
|
+
def bcome_node_host
|
127
|
+
@bcome_proxy_node.public_ip_address || @bcome_proxy_node.internal_ip_address
|
99
128
|
end
|
100
129
|
end
|
101
130
|
end
|
@@ -2,19 +2,18 @@
|
|
2
2
|
|
3
3
|
module ::Bcome::Ssh
|
4
4
|
class ScriptExec
|
5
|
-
SCRIPTS_PATH = 'bcome/scripts'
|
6
|
-
|
7
5
|
class << self
|
8
|
-
def execute(server,
|
9
|
-
executor = new(server,
|
6
|
+
def execute(server, path_to_script)
|
7
|
+
executor = new(server, path_to_script)
|
10
8
|
executor.execute
|
11
9
|
end
|
12
10
|
end
|
13
11
|
|
14
|
-
def initialize(server,
|
12
|
+
def initialize(server, path_to_script)
|
15
13
|
@server = server
|
16
|
-
@
|
14
|
+
@path_to_script = path_to_script
|
17
15
|
@ssh_driver = server.ssh_driver
|
16
|
+
@output_string = ''
|
18
17
|
end
|
19
18
|
|
20
19
|
def execute
|
@@ -24,23 +23,22 @@ module ::Bcome::Ssh
|
|
24
23
|
end
|
25
24
|
|
26
25
|
def execute_command
|
27
|
-
|
28
|
-
raise Bcome::Exception::OrchestrationScriptDoesNotExist, local_path_to_script unless File.exist?(local_path_to_script)
|
26
|
+
raise Bcome::Exception::OrchestrationScriptDoesNotExist, @path_to_script unless File.exist?(@path_to_script)
|
29
27
|
|
30
|
-
execute_script_command = "#{@ssh_driver.ssh_command} \"bash -s\" < #{
|
28
|
+
execute_script_command = "#{@ssh_driver.ssh_command} \"bash -s\" < #{@path_to_script}"
|
31
29
|
command = ::Bcome::Command::Local.run(execute_script_command)
|
32
30
|
command
|
33
31
|
end
|
34
32
|
|
35
33
|
def pretty_print(command)
|
36
|
-
output_append("\n(#{@server.namespace})$".terminal_prompt + "> ./#{
|
34
|
+
output_append("\n(#{@server.namespace})$".terminal_prompt + "> ./#{@path_to_script} - \s#{command.pretty_result}\n")
|
37
35
|
output_append(command.stdout) # append stderr
|
38
36
|
output_append "\nSTDERR: #{command.stderr}" if command.failed?
|
39
37
|
puts "\n\n#{@output_string}\n\n"
|
40
38
|
end
|
41
39
|
|
42
40
|
def output_append(output_string)
|
43
|
-
@output_string
|
41
|
+
@output_string += "#{@output_string}#{output_string}"
|
44
42
|
end
|
45
43
|
end
|
46
44
|
end
|
data/lib/objects/startup.rb
CHANGED
@@ -15,9 +15,15 @@ module Bcome
|
|
15
15
|
::Bcome::Encryptor.instance.pack
|
16
16
|
when 'unpack_metadata'
|
17
17
|
::Bcome::Encryptor.instance.unpack
|
18
|
+
when 'diff_metadata'
|
19
|
+
::Bcome::Encryptor.instance.diff
|
20
|
+
when 'init'
|
21
|
+
::Bcome::Initialization::Factory.do
|
18
22
|
else
|
19
23
|
bootup
|
20
24
|
end
|
25
|
+
rescue Bcome::Exception::Base => e
|
26
|
+
e.pretty_display
|
21
27
|
end
|
22
28
|
|
23
29
|
def bootup
|
@@ -26,7 +32,7 @@ module Bcome
|
|
26
32
|
clean_up
|
27
33
|
rescue ::Bcome::Exception::Base => e
|
28
34
|
clean_up
|
29
|
-
|
35
|
+
e.pretty_display
|
30
36
|
rescue Excon::Error::Socket => e
|
31
37
|
clean_up
|
32
38
|
puts "\nNo network access - please check your connection and try again\n".error
|
@@ -25,7 +25,11 @@ module Bcome::Terraform
|
|
25
25
|
|
26
26
|
# Until this feature is officially featured, failure to get terraform data will fail silently
|
27
27
|
# One thing not decided upon yet is how to indicate that we wish to load terraform data or not.
|
28
|
-
|
28
|
+
if get_output_result.failed?
|
29
|
+
raise "Received authorisation error retrieving metadata from Terraform outputs for namespace #{@namespace}. Command was '#{get_output_command}'. Are you authorised to access the TFstate?" if get_output_result.stderr =~ /HTTP response code 401/
|
30
|
+
|
31
|
+
return {}
|
32
|
+
end
|
29
33
|
|
30
34
|
JSON.parse(get_output_result.stdout)
|
31
35
|
end
|
data/lib/objects/workspace.rb
CHANGED
@@ -22,10 +22,20 @@ class ::Bcome::Workspace
|
|
22
22
|
|
23
23
|
@context.irb_workspace = main_context.workspace if main_context
|
24
24
|
@context.previous_irb_workspace = params[:current_context] if params[:current_context]
|
25
|
+
|
26
|
+
show_welcome if params[:show_welcome]
|
27
|
+
|
25
28
|
spawn_into_console_for_context
|
26
29
|
nil
|
27
30
|
end
|
28
31
|
|
32
|
+
def show_welcome
|
33
|
+
puts "\n\n"
|
34
|
+
puts "Welcome to bcome v#{::Bcome::Version.release}".bc_yellow
|
35
|
+
puts "\nType\s" + 'menu'.underline + "\sfor a command list, or\s" + 'registry'.underline + "\sfor your custom tasks."
|
36
|
+
puts "\n\n"
|
37
|
+
end
|
38
|
+
|
29
39
|
def console_set!
|
30
40
|
@console_set = true
|
31
41
|
end
|
data/patches/irb.rb
CHANGED
@@ -40,9 +40,43 @@ module IRB
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
module ExtendCommandBundle
|
44
|
+
class << self
|
45
|
+
# Allow us to redefine 'quit' by preventing it getting aliased in the first place.
|
46
|
+
def overriden_extend_object(*params)
|
47
|
+
# Remove 'quit', as we want to write our own
|
48
|
+
@ALIASES.delete([:quit, :irb_exit, 1])
|
49
|
+
|
50
|
+
original_extend_object(*params)
|
51
|
+
end
|
52
|
+
alias original_extend_object extend_object
|
53
|
+
alias extend_object overriden_extend_object
|
54
|
+
end
|
55
|
+
|
56
|
+
def quit(*_params)
|
57
|
+
::Bcome::Bootup.instance.close_ssh_connections
|
58
|
+
::Bcome::Ssh::TunnelKeeper.instance.close_tunnels
|
59
|
+
::Bcome::LoadingBar::PidBucket.instance.stop_all
|
60
|
+
exit!
|
61
|
+
end
|
62
|
+
|
63
|
+
def back
|
64
|
+
# Allow navigation back up a namespace tree, or 'exit' if at the highest level, or at the point of entry
|
65
|
+
irb_exit(0)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
43
69
|
class Context
|
44
70
|
def overriden_evaluate(*_params)
|
45
|
-
|
71
|
+
if _params.last.is_a?(Hash)
|
72
|
+
# Ruby 2.7.0 compatibility: "Using the last argument as keyword parameters is deprecated" ; hence splat the last argument
|
73
|
+
last = _params.pop
|
74
|
+
without_last = _params - [last]
|
75
|
+
evaluate_without_overriden(*without_last, **last)
|
76
|
+
else
|
77
|
+
# previous rubies...
|
78
|
+
evaluate_without_overriden(*_params)
|
79
|
+
end
|
46
80
|
rescue ::Bcome::Exception::Base => e
|
47
81
|
puts e.pretty_display
|
48
82
|
end
|
data/patches/string.rb
CHANGED
@@ -1,10 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rainbow'
|
4
|
+
require 'fileutils'
|
4
5
|
|
5
6
|
class String
|
6
7
|
include StringColourStylesheet
|
7
8
|
|
9
|
+
def ansi?
|
10
|
+
Strings::ANSI.ansi?(self)
|
11
|
+
end
|
12
|
+
|
13
|
+
def sanitize
|
14
|
+
ansi? ? Strings::ANSI.sanitize(self) : self
|
15
|
+
end
|
16
|
+
|
17
|
+
def is_file_or_directory?
|
18
|
+
File.directory?(self) || File.exist?(self)
|
19
|
+
end
|
20
|
+
|
8
21
|
# with thanks to http://simianuprising.com/wp-content/uploads/2012/08/solarized-reference-horizontal.png
|
9
22
|
def colour_codes
|
10
23
|
{
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bcome
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
autorequire:
|
7
|
+
- Webzakimbo
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 5.2.3
|
19
|
+
version: 5.2.4.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 5.2.3
|
26
|
+
version: 5.2.4.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: diffy
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
33
|
+
version: 3.1.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
40
|
+
version: 3.1.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: fog-aws
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,6 +128,20 @@ dependencies:
|
|
128
128
|
- - '='
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: 1.1.1
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: pry
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - '='
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: 0.12.2
|
138
|
+
type: :runtime
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - '='
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: 0.12.2
|
131
145
|
- !ruby/object:Gem::Dependency
|
132
146
|
name: rainbow
|
133
147
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,7 +171,7 @@ dependencies:
|
|
157
171
|
- !ruby/object:Gem::Version
|
158
172
|
version: 1.3.3
|
159
173
|
- !ruby/object:Gem::Dependency
|
160
|
-
name:
|
174
|
+
name: strings-ansi
|
161
175
|
requirement: !ruby/object:Gem::Requirement
|
162
176
|
requirements:
|
163
177
|
- - '='
|
@@ -171,22 +185,25 @@ dependencies:
|
|
171
185
|
- !ruby/object:Gem::Version
|
172
186
|
version: 0.2.0
|
173
187
|
- !ruby/object:Gem::Dependency
|
174
|
-
name:
|
188
|
+
name: tty-cursor
|
175
189
|
requirement: !ruby/object:Gem::Requirement
|
176
190
|
requirements:
|
177
191
|
- - '='
|
178
192
|
- !ruby/object:Gem::Version
|
179
|
-
version: 0.
|
193
|
+
version: 0.2.0
|
180
194
|
type: :runtime
|
181
195
|
prerelease: false
|
182
196
|
version_requirements: !ruby/object:Gem::Requirement
|
183
197
|
requirements:
|
184
198
|
- - '='
|
185
199
|
- !ruby/object:Gem::Version
|
186
|
-
version: 0.
|
187
|
-
description:
|
200
|
+
version: 0.2.0
|
201
|
+
description: Generate custom management interfaces from simple configuration and Ruby
|
202
|
+
code. On-premise, cloud, hybrid & multi-cloud. Amazon AWS (EC2) & Google Cloud (GCP)
|
203
|
+
integration with more cloud providers coming. Fully extensible. Free for commercial
|
204
|
+
and non-commercial use.
|
188
205
|
email:
|
189
|
-
-
|
206
|
+
- info@webzakimbo.com
|
190
207
|
executables:
|
191
208
|
- bcome
|
192
209
|
extensions: []
|
@@ -203,9 +220,13 @@ files:
|
|
203
220
|
- lib/objects/driver/ec2.rb
|
204
221
|
- lib/objects/driver/gcp.rb
|
205
222
|
- lib/objects/driver/gcp/authentication/api_key.rb
|
223
|
+
- lib/objects/driver/gcp/authentication/base.rb
|
206
224
|
- lib/objects/driver/gcp/authentication/oauth.rb
|
225
|
+
- lib/objects/driver/gcp/authentication/oauth_client_config.rb
|
226
|
+
- lib/objects/driver/gcp/authentication/oauth_session_store.rb
|
207
227
|
- lib/objects/driver/gcp/authentication/service_account.rb
|
208
|
-
- lib/objects/driver/
|
228
|
+
- lib/objects/driver/gcp/authentication/signet/service_account.rb
|
229
|
+
- lib/objects/driver/gcp/authentication/utilities.rb
|
209
230
|
- lib/objects/encryptor.rb
|
210
231
|
- lib/objects/exception/argument_error_invoking_method_from_command_line.rb
|
211
232
|
- lib/objects/exception/base.rb
|
@@ -223,8 +244,11 @@ files:
|
|
223
244
|
- lib/objects/exception/could_not_retrieve_terraform_output.rb
|
224
245
|
- lib/objects/exception/deprecation_warning.rb
|
225
246
|
- lib/objects/exception/duplicate_command_line_argument_key.rb
|
247
|
+
- lib/objects/exception/ec2_driver_missing_authorization_keys.rb
|
226
248
|
- lib/objects/exception/ec2_driver_missing_provisioning_region.rb
|
249
|
+
- lib/objects/exception/empty_namespace_tree.rb
|
227
250
|
- lib/objects/exception/failed_to_run_local_command.rb
|
251
|
+
- lib/objects/exception/gcp_auth_service_account_missing_credentials.rb
|
228
252
|
- lib/objects/exception/generic.rb
|
229
253
|
- lib/objects/exception/interactive_session_halt.rb
|
230
254
|
- lib/objects/exception/invalid_bcome_breadcrumb.rb
|
@@ -254,6 +278,7 @@ files:
|
|
254
278
|
- lib/objects/exception/missing_description_on_view.rb
|
255
279
|
- lib/objects/exception/missing_execute_on_registry_object.rb
|
256
280
|
- lib/objects/exception/missing_gcp_authentication_scheme.rb
|
281
|
+
- lib/objects/exception/missing_gcp_service_account_credentials_filename.rb
|
257
282
|
- lib/objects/exception/missing_gcp_service_scopes.rb
|
258
283
|
- lib/objects/exception/missing_identifier_on_view.rb
|
259
284
|
- lib/objects/exception/missing_inventory_contributors.rb
|
@@ -271,6 +296,10 @@ files:
|
|
271
296
|
- lib/objects/exception/proxy_host_node_does_not_have_public_ip_address.rb
|
272
297
|
- lib/objects/exception/unknown_dynamic_server_type.rb
|
273
298
|
- lib/objects/exception/unknown_method_for_namespace.rb
|
299
|
+
- lib/objects/exception/user_orchestration_error.rb
|
300
|
+
- lib/objects/initialization/factory.rb
|
301
|
+
- lib/objects/initialization/structure.rb
|
302
|
+
- lib/objects/initialization/utils.rb
|
274
303
|
- lib/objects/interactive/session.rb
|
275
304
|
- lib/objects/interactive/session_item/base.rb
|
276
305
|
- lib/objects/interactive/session_item/capture_input.rb
|
@@ -281,7 +310,9 @@ files:
|
|
281
310
|
- lib/objects/loading_bar/indicator/progress.rb
|
282
311
|
- lib/objects/loading_bar/pid_bucket.rb
|
283
312
|
- lib/objects/modules/context.rb
|
313
|
+
- lib/objects/modules/draw.rb
|
284
314
|
- lib/objects/modules/registry_management.rb
|
315
|
+
- lib/objects/modules/tree.rb
|
285
316
|
- lib/objects/modules/ui_output.rb
|
286
317
|
- lib/objects/modules/workspace_commands.rb
|
287
318
|
- lib/objects/modules/workspace_menu.rb
|
@@ -338,6 +369,8 @@ files:
|
|
338
369
|
- lib/objects/ssh/driver_concerns/connection.rb
|
339
370
|
- lib/objects/ssh/driver_concerns/functions.rb
|
340
371
|
- lib/objects/ssh/driver_concerns/user.rb
|
372
|
+
- lib/objects/ssh/proxy_chain.rb
|
373
|
+
- lib/objects/ssh/proxy_chain_link.rb
|
341
374
|
- lib/objects/ssh/proxy_hop.rb
|
342
375
|
- lib/objects/ssh/script_exec.rb
|
343
376
|
- lib/objects/ssh/tunnel/local_port_forward.rb
|
@@ -351,13 +384,25 @@ files:
|
|
351
384
|
- patches/string-encrypt.rb
|
352
385
|
- patches/string.rb
|
353
386
|
- patches/string_stylesheet.rb
|
354
|
-
homepage: https://
|
387
|
+
homepage: https://bcome.com
|
355
388
|
licenses:
|
356
|
-
-
|
389
|
+
- Nonstandard
|
357
390
|
metadata:
|
358
|
-
documentation_uri: https://bcome
|
359
|
-
|
360
|
-
|
391
|
+
documentation_uri: https://docs.bcome.com/en/2.0.0
|
392
|
+
homepage_uri: https://bcome.com
|
393
|
+
source_code_uri: https://github.com/webzakimbo/bcome
|
394
|
+
post_install_message: |2+
|
395
|
+
|
396
|
+
Welcome to Bcome, the DevOps Control Panel Framework
|
397
|
+
|
398
|
+
2.0.0 introduces a wealth of new features (including GCP integration), and some breaking changes.
|
399
|
+
|
400
|
+
Visit our new documentation site here: https://docs.bcome.com/en/2.0.0
|
401
|
+
|
402
|
+
See implementation demos at our guides site: https://guides.bcome.com/en/2.0.0
|
403
|
+
|
404
|
+
For full release notes see: https://github.com/webzakimbo/bcome/releases/tag/2.0.0
|
405
|
+
|
361
406
|
rdoc_options: []
|
362
407
|
require_paths:
|
363
408
|
- lib
|
@@ -365,15 +410,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
365
410
|
requirements:
|
366
411
|
- - ">="
|
367
412
|
- !ruby/object:Gem::Version
|
368
|
-
version:
|
413
|
+
version: 2.5.0
|
369
414
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
370
415
|
requirements:
|
371
416
|
- - ">="
|
372
417
|
- !ruby/object:Gem::Version
|
373
418
|
version: '0'
|
374
419
|
requirements: []
|
375
|
-
rubygems_version: 3.0.
|
376
|
-
signing_key:
|
420
|
+
rubygems_version: 3.0.8
|
421
|
+
signing_key:
|
377
422
|
specification_version: 4
|
378
|
-
summary:
|
423
|
+
summary: The DevOps Control Panel Framework
|
379
424
|
test_files: []
|
425
|
+
...
|