bcome 1.4.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ ...