bcome 1.4.0 → 2.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/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
|
+
...
|