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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/lib/bcome.rb +7 -0
  3. data/lib/objects/bcome/version.rb +3 -3
  4. data/lib/objects/bootup.rb +4 -3
  5. data/lib/objects/driver/base.rb +16 -2
  6. data/lib/objects/driver/ec2.rb +11 -2
  7. data/lib/objects/driver/gcp.rb +49 -5
  8. data/lib/objects/driver/gcp/authentication/base.rb +36 -0
  9. data/lib/objects/driver/gcp/authentication/oauth.rb +24 -29
  10. data/lib/objects/driver/gcp/authentication/oauth_client_config.rb +22 -0
  11. data/lib/objects/driver/gcp/authentication/oauth_session_store.rb +22 -0
  12. data/lib/objects/driver/gcp/authentication/service_account.rb +57 -2
  13. data/lib/objects/driver/gcp/authentication/signet/service_account.rb +27 -0
  14. data/lib/objects/driver/gcp/authentication/utilities.rb +42 -0
  15. data/lib/objects/encryptor.rb +83 -0
  16. data/lib/objects/exception/base.rb +10 -3
  17. data/lib/objects/exception/ec2_driver_missing_authorization_keys.rb +11 -0
  18. data/lib/objects/exception/empty_namespace_tree.rb +11 -0
  19. data/lib/objects/exception/gcp_auth_service_account_missing_credentials.rb +11 -0
  20. data/lib/objects/exception/invalid_metadata_encryption_key.rb +1 -1
  21. data/lib/objects/exception/missing_gcp_service_account_credentials_filename.rb +11 -0
  22. data/lib/objects/exception/user_orchestration_error.rb +11 -0
  23. data/lib/objects/initialization/factory.rb +36 -0
  24. data/lib/objects/initialization/structure.rb +18 -0
  25. data/lib/objects/initialization/utils.rb +20 -0
  26. data/lib/objects/loading_bar/handler.rb +1 -1
  27. data/lib/objects/loading_bar/indicator/base.rb +1 -0
  28. data/lib/objects/modules/draw.rb +49 -0
  29. data/lib/objects/modules/tree.rb +157 -0
  30. data/lib/objects/modules/workspace_commands.rb +2 -32
  31. data/lib/objects/modules/workspace_menu.rb +113 -48
  32. data/lib/objects/node/attributes.rb +6 -0
  33. data/lib/objects/node/base.rb +27 -7
  34. data/lib/objects/node/cache_handler.rb +1 -1
  35. data/lib/objects/node/factory.rb +15 -11
  36. data/lib/objects/node/inventory/base.rb +9 -3
  37. data/lib/objects/node/inventory/defined.rb +18 -15
  38. data/lib/objects/node/inventory/merge.rb +9 -1
  39. data/lib/objects/node/inventory/subselect.rb +6 -4
  40. data/lib/objects/node/meta_data_factory.rb +1 -1
  41. data/lib/objects/node/meta_data_loader.rb +2 -2
  42. data/lib/objects/node/resources/inventory.rb +19 -0
  43. data/lib/objects/node/resources/merged.rb +23 -14
  44. data/lib/objects/node/resources/sub_inventory.rb +6 -5
  45. data/lib/objects/node/server/base.rb +35 -22
  46. data/lib/objects/node/server/dynamic/ec2.rb +0 -1
  47. data/lib/objects/node/server/dynamic/gcp.rb +0 -1
  48. data/lib/objects/node/server/static.rb +22 -9
  49. data/lib/objects/orchestration/base.rb +7 -1
  50. data/lib/objects/orchestration/interactive_terraform.rb +10 -16
  51. data/lib/objects/registry/command/external.rb +6 -2
  52. data/lib/objects/registry/command/group.rb +5 -1
  53. data/lib/objects/registry/loader.rb +3 -0
  54. data/lib/objects/ssh/command.rb +4 -8
  55. data/lib/objects/ssh/command_exec.rb +3 -1
  56. data/lib/objects/ssh/connection_wrangler.rb +34 -17
  57. data/lib/objects/ssh/connector.rb +17 -9
  58. data/lib/objects/ssh/driver.rb +7 -18
  59. data/lib/objects/ssh/driver_concerns/connection.rb +3 -11
  60. data/lib/objects/ssh/driver_concerns/functions.rb +7 -7
  61. data/lib/objects/ssh/proxy_chain.rb +19 -0
  62. data/lib/objects/ssh/proxy_chain_link.rb +26 -0
  63. data/lib/objects/ssh/proxy_hop.rb +47 -18
  64. data/lib/objects/ssh/script_exec.rb +9 -11
  65. data/lib/objects/startup.rb +7 -1
  66. data/lib/objects/terraform/output.rb +5 -1
  67. data/lib/objects/workspace.rb +10 -0
  68. data/patches/irb.rb +35 -1
  69. data/patches/string.rb +13 -0
  70. metadata +71 -25
  71. 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.to_s.empty? || remote_path.to_s.empty?
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 Exception => e # scp just throws generic exceptions :-/
70
- puts e.message.error
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
- attr_reader :parent
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 host
21
- @host ||= get_host
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
- @config[:bastion_host_user] || @config[:fallback_bastion_host_user]
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 get_host
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
- h = send(host_lookup_method)
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
- resource = @context_node.recurse_resource_for_identifier(identifier)
88
- raise Bcome::Exception::CantFindProxyHostByIdentifier, identifier unless resource
89
- raise Bcome::Exception::ProxyHostNodeDoesNotHavePublicIp, identifier unless resource.public_ip_address
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
- resource.public_ip_address
115
+ bcome_node_host
92
116
  end
93
117
 
118
+ # Newer lookup - across entire network
94
119
  def get_host_by_namespace
95
- node = ::Bcome::Orchestrator.instance.get(@config[:namespace])
96
- raise Bcome::Exception::CantFindProxyHostByNamespace, @config[:namespace] unless node
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
- node.public_ip_address
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, script_name)
9
- executor = new(server, script_name)
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, script_name)
12
+ def initialize(server, path_to_script)
15
13
  @server = server
16
- @script_name = script_name
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
- local_path_to_script = "#{SCRIPTS_PATH}/#{@script_name}.sh"
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\" < #{local_path_to_script}"
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 + "> ./#{SCRIPTS_PATH}/#{@script_name}.sh - \s#{command.pretty_result}\n")
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 = "#{@output_string}#{output_string}"
41
+ @output_string += "#{@output_string}#{output_string}"
44
42
  end
45
43
  end
46
44
  end
@@ -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
- puts e.pretty_display
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
- return {} if get_output_result.failed?
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
@@ -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
@@ -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
- evaluate_without_overriden(*_params)
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
@@ -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: 1.4.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Guillaume Roderick (Webzakimbo)
8
- autorequire:
7
+ - Webzakimbo
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-04 00:00:00.000000000 Z
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: awesome_print
28
+ name: diffy
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 1.8.0
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.8.0
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: tty-cursor
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: pry
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.12.2
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.12.2
187
- description: Orchestration & Automation framework for the Cloud.
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
- - guillaume@webzakimbo.com
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/static.rb
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://github.com/webzakimbo/bcome-kontrol
387
+ homepage: https://bcome.com
355
388
  licenses:
356
- - GPL-3.0
389
+ - Nonstandard
357
390
  metadata:
358
- documentation_uri: https://bcome-kontrol.readthedocs.io/en/latest/
359
- post_install_message: "\nWe'd love your feedback about this tool: \nHow can we improve?
360
- \ Email guillaume@webzakimbo.com"
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: '0'
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.3
376
- signing_key:
420
+ rubygems_version: 3.0.8
421
+ signing_key:
377
422
  specification_version: 4
378
- summary: A DevOps Application development framework
423
+ summary: The DevOps Control Panel Framework
379
424
  test_files: []
425
+ ...