govuk-connect 0.3.0 → 0.5.1
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/govuk_connect/cli.rb +38 -106
- data/lib/govuk_connect/version.rb +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b14cf8cbdd487cc57a5f1aad1cbb1a5164a6e7a5f5bc4ab986f0560dd092ab7
|
4
|
+
data.tar.gz: '01769936fa3621d0dcc7e61ff9f1dc9c7a7f0852b2f587029c8ca73bcba78a15'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f2705de184fc9b9f39dcc1705ff7c5508a456e9db23f217a2918f50a07032fce9bb3269cbdbd8ca7f15e56b8957aed2d6023015615db2d32fd2d7acfb69f378
|
7
|
+
data.tar.gz: 2264b408122a922c12a90c9ca9843215e8e6fa52a5041dd1995fcee1b32183190f13dc12c41aee1e07988147abac97d5d197e7e491f0cfadeb8f8e503feb6e44
|
data/lib/govuk_connect/cli.rb
CHANGED
@@ -15,41 +15,38 @@ class GovukConnect::CLI
|
|
15
15
|
self.class.bold(string)
|
16
16
|
end
|
17
17
|
|
18
|
-
USAGE_BANNER = "Usage: govuk
|
18
|
+
USAGE_BANNER = "Usage: gds govuk connect TYPE TARGET [options]".freeze
|
19
19
|
|
20
20
|
EXAMPLES = <<-EXAMPLES.freeze
|
21
|
-
govuk
|
21
|
+
gds govuk connect ssh --environment integration backend
|
22
22
|
|
23
|
-
govuk
|
23
|
+
gds govuk connect scp-push --environment integration backend filename.txt /tmp/
|
24
24
|
|
25
|
-
govuk
|
25
|
+
gds govuk connect scp-pull --environment integration backend /tmp/filename.txt ~/Downloads/
|
26
26
|
|
27
|
-
govuk
|
27
|
+
gds govuk connect app-console --environment staging publishing-api
|
28
28
|
|
29
|
-
govuk
|
29
|
+
gds govuk connect app-dbconsole -e integration whitehall_backend/whitehall
|
30
30
|
|
31
|
-
govuk
|
32
|
-
|
33
|
-
govuk-connect sidekiq-monitoring -e integration
|
31
|
+
gds govuk connect rabbitmq -e staging aws/rabbitmq
|
34
32
|
EXAMPLES
|
35
33
|
|
36
34
|
MACHINE_TARGET_DESCRIPTION = <<-DOCS.freeze
|
37
|
-
The ssh, scp-*, rabbitmq
|
38
|
-
machines.
|
35
|
+
The ssh, scp-*, rabbitmq connection types target machines.
|
39
36
|
|
40
37
|
The machine can be specified by name, for example:
|
41
38
|
|
42
|
-
govuk
|
39
|
+
gds govuk connect ssh -e integration #{bold('backend')}
|
43
40
|
|
44
41
|
If the hosting provider is ambiguous, you'll need to specify it prior
|
45
42
|
to the name, for example:
|
46
43
|
|
47
|
-
govuk
|
44
|
+
gds govuk connect ssh -e staging #{bold('aws/')}backend
|
48
45
|
|
49
46
|
If you want to connect to a specific machine, you can specify a number
|
50
47
|
after the name, for example:
|
51
48
|
|
52
|
-
govuk
|
49
|
+
gds govuk connect ssh -e integration backend#{bold(':2')}
|
53
50
|
DOCS
|
54
51
|
|
55
52
|
APP_TARGET_DESCRIPTION = <<-DOCS.freeze
|
@@ -58,17 +55,17 @@ class GovukConnect::CLI
|
|
58
55
|
|
59
56
|
The application is specified by name, for example:
|
60
57
|
|
61
|
-
govuk
|
58
|
+
gds govuk connect app-console -e integration #{bold('publishing-api')}
|
62
59
|
|
63
60
|
If the node class is ambiguous, you'll need to specify it prior to
|
64
61
|
the name, for example:
|
65
62
|
|
66
|
-
govuk
|
63
|
+
gds govuk connect app-console -e integration #{bold('whitehall_backend/')}whitehall
|
67
64
|
|
68
65
|
If you want to connect to a specific machine, you can specify a
|
69
66
|
number after the name, for example:
|
70
67
|
|
71
|
-
govuk
|
68
|
+
gds govuk connect app-console -e integration publishing-api#{bold(':2')}
|
72
69
|
DOCS
|
73
70
|
|
74
71
|
CONNECTION_TYPE_DESCRIPTIONS = {
|
@@ -76,28 +73,21 @@ class GovukConnect::CLI
|
|
76
73
|
"app-console" => "Launch a console for an application. For example, a rails console when connecting to a Rails application.",
|
77
74
|
"app-dbconsole" => "Launch a console for the database for an application.",
|
78
75
|
"rabbitmq" => "Setup port forwarding to the RabbitMQ admin interface.",
|
79
|
-
"sidekiq-monitoring" => "Setup port forwarding to the Sidekiq Monitoring application.",
|
80
76
|
}.freeze
|
81
77
|
|
82
78
|
RABBITMQ_PORT = 15_672
|
83
|
-
SIDEKIQ_MONITORING_PORT = 3211
|
84
79
|
|
85
80
|
JUMPBOXES = {
|
86
81
|
test: {
|
87
82
|
aws: "jumpbox.pink.test.govuk.digital",
|
88
83
|
},
|
89
|
-
ci: {
|
90
|
-
carrenza: "ci-jumpbox.integration.publishing.service.gov.uk",
|
91
|
-
},
|
92
84
|
integration: {
|
93
85
|
aws: "jumpbox.integration.publishing.service.gov.uk",
|
94
86
|
},
|
95
87
|
staging: {
|
96
|
-
carrenza: "jumpbox.staging.publishing.service.gov.uk",
|
97
88
|
aws: "jumpbox.staging.govuk.digital",
|
98
89
|
},
|
99
90
|
production: {
|
100
|
-
carrenza: "jumpbox.publishing.service.gov.uk",
|
101
91
|
aws: "jumpbox.production.govuk.digital",
|
102
92
|
},
|
103
93
|
}.freeze
|
@@ -264,29 +254,7 @@ class GovukConnect::CLI
|
|
264
254
|
|
265
255
|
def govuk_node_list_classes(environment, hosting)
|
266
256
|
log "debug: looking up classes in #{hosting}/#{environment}"
|
267
|
-
|
268
|
-
"ssh",
|
269
|
-
"-o",
|
270
|
-
"ConnectTimeout=2", # Show a failure quickly
|
271
|
-
*ssh_identity_arguments,
|
272
|
-
user_at_host(
|
273
|
-
ssh_username,
|
274
|
-
jumpbox_for_environment_and_hosting(environment, hosting),
|
275
|
-
),
|
276
|
-
"govuk_node_list --classes",
|
277
|
-
].join(" ")
|
278
|
-
|
279
|
-
log "debug: running command: #{command}"
|
280
|
-
output, status = Open3.capture2(command)
|
281
|
-
|
282
|
-
unless status.success?
|
283
|
-
error "\nerror: command failed: #{command}"
|
284
|
-
print_empty_line
|
285
|
-
print_ssh_username_configuration_help
|
286
|
-
exit 1
|
287
|
-
end
|
288
|
-
|
289
|
-
classes = output.split("\n").sort
|
257
|
+
classes = ssh_capture("govuk_node_list --classes").sort
|
290
258
|
|
291
259
|
log "debug: classes:"
|
292
260
|
classes.each { |c| log " - #{c}" }
|
@@ -294,7 +262,16 @@ class GovukConnect::CLI
|
|
294
262
|
classes
|
295
263
|
end
|
296
264
|
|
297
|
-
def get_domains_for_node_class(target, environment, hosting
|
265
|
+
def get_domains_for_node_class(target, environment, hosting)
|
266
|
+
domains = ssh_capture(environment, hosting, "govuk_node_list -c #{target}")
|
267
|
+
if hosting == :aws
|
268
|
+
domains
|
269
|
+
else
|
270
|
+
domains.sort
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
def ssh_capture(environment, hosting, remote_command)
|
298
275
|
command = [
|
299
276
|
"ssh",
|
300
277
|
"-o",
|
@@ -304,19 +281,20 @@ class GovukConnect::CLI
|
|
304
281
|
ssh_username,
|
305
282
|
jumpbox_for_environment_and_hosting(environment, hosting),
|
306
283
|
),
|
307
|
-
|
284
|
+
remote_command,
|
308
285
|
].join(" ")
|
309
286
|
|
287
|
+
log "debug: running command: #{command}"
|
310
288
|
output, status = Open3.capture2(command)
|
311
289
|
|
312
290
|
unless status.success?
|
313
|
-
error "
|
291
|
+
error "\nerror: command failed: #{command}"
|
314
292
|
print_empty_line
|
315
293
|
print_ssh_username_configuration_help
|
316
294
|
exit 1
|
317
295
|
end
|
318
296
|
|
319
|
-
output.split("\n")
|
297
|
+
output.split("\n")
|
320
298
|
end
|
321
299
|
|
322
300
|
def govuk_directory
|
@@ -330,7 +308,6 @@ class GovukConnect::CLI
|
|
330
308
|
govuk_directory,
|
331
309
|
"govuk-puppet",
|
332
310
|
{
|
333
|
-
carrenza: "hieradata",
|
334
311
|
aws: "hieradata_aws",
|
335
312
|
}[hosting],
|
336
313
|
)
|
@@ -401,7 +378,7 @@ class GovukConnect::CLI
|
|
401
378
|
print_empty_line
|
402
379
|
info "specify the node class and application mame, for example: "
|
403
380
|
node_classes.each do |node_class|
|
404
|
-
info "\n govuk
|
381
|
+
info "\n gds govuk connect app-console -e #{environment} #{node_class}/#{app_name}"
|
405
382
|
end
|
406
383
|
print_empty_line
|
407
384
|
|
@@ -436,29 +413,13 @@ class GovukConnect::CLI
|
|
436
413
|
return hosting if hosting
|
437
414
|
|
438
415
|
aws_node_types = govuk_node_list_classes(environment, :aws)
|
439
|
-
carrenza_node_types = govuk_node_list_classes(environment, :carrenza)
|
440
416
|
|
441
|
-
if aws_node_types.include?(node_type)
|
442
|
-
carrenza_node_types.include?(node_type)
|
443
|
-
|
444
|
-
error "error: ambiguous hosting for #{node_type} in #{environment}"
|
445
|
-
print_empty_line
|
446
|
-
info "specify the hosting provider and node type, for example: "
|
447
|
-
hosting_providers.each do |hosting_provider|
|
448
|
-
info "\n govuk-connect ssh #{bold(hosting_provider)}/#{node_type}"
|
449
|
-
end
|
450
|
-
info "\n"
|
451
|
-
|
452
|
-
exit 1
|
453
|
-
elsif aws_node_types.include?(node_type)
|
417
|
+
if aws_node_types.include?(node_type)
|
454
418
|
:aws
|
455
|
-
elsif carrenza_node_types.include?(node_type)
|
456
|
-
:carrenza
|
457
419
|
else
|
458
420
|
error "error: couldn't find #{node_type} in #{environment}"
|
459
421
|
|
460
|
-
|
461
|
-
similar_node_types = strings_similar_to(node_type, all_node_types)
|
422
|
+
similar_node_types = strings_similar_to(node_type, aws_node_types)
|
462
423
|
|
463
424
|
if similar_node_types.any?
|
464
425
|
info "\ndid you mean:"
|
@@ -493,17 +454,6 @@ class GovukConnect::CLI
|
|
493
454
|
return :aws
|
494
455
|
end
|
495
456
|
|
496
|
-
carrenza_app_names = application_names_from_node_class_data(
|
497
|
-
environment,
|
498
|
-
:carrenza,
|
499
|
-
)
|
500
|
-
|
501
|
-
if carrenza_app_names.include? app_name
|
502
|
-
log "debug: #{app_name} is hosted in Carrenza"
|
503
|
-
|
504
|
-
return :carrenza
|
505
|
-
end
|
506
|
-
|
507
457
|
error "error: unknown hosting value '#{hosting}' for #{app_name}"
|
508
458
|
exit 1
|
509
459
|
end
|
@@ -650,7 +600,6 @@ class GovukConnect::CLI
|
|
650
600
|
def rabbitmq_root_password_command(hosting, environment)
|
651
601
|
hieradata_directory = {
|
652
602
|
aws: "puppet_aws",
|
653
|
-
carrenza: "puppet",
|
654
603
|
}[hosting]
|
655
604
|
|
656
605
|
directory = File.join(
|
@@ -666,14 +615,11 @@ class GovukConnect::CLI
|
|
666
615
|
uri = URI(url)
|
667
616
|
|
668
617
|
host_to_hosting_and_environment = {
|
669
|
-
"ci-alert.integration.publishing.service.gov.uk" => %i[carrenza ci],
|
670
618
|
"alert.integration.publishing.service.gov.uk" => %i[aws integration],
|
671
619
|
"alert.staging.govuk.digital" => %i[aws staging],
|
672
620
|
"alert.blue.staging.govuk.digital" => %i[aws staging],
|
673
|
-
"alert.staging.publishing.service.gov.uk" => %i[carrenza staging],
|
674
621
|
"alert.production.govuk.digital" => %i[aws production],
|
675
622
|
"alert.blue.production.govuk.digital" => %i[aws production],
|
676
|
-
"alert.publishing.service.gov.uk" => %i[carrenza production],
|
677
623
|
}
|
678
624
|
|
679
625
|
unless host_to_hosting_and_environment.key? uri.host
|
@@ -711,9 +657,12 @@ class GovukConnect::CLI
|
|
711
657
|
@verbose = true
|
712
658
|
end
|
713
659
|
|
714
|
-
opts.on("-h", "--help", "Prints usage
|
660
|
+
opts.on("-h", "--help", "Prints usage examples and information") do
|
715
661
|
info opts
|
716
662
|
print_empty_line
|
663
|
+
info bold("EXAMPLES")
|
664
|
+
info EXAMPLES
|
665
|
+
print_empty_line
|
717
666
|
info bold("CONNECTION TYPES")
|
718
667
|
types.keys.each do |x|
|
719
668
|
info " #{x}"
|
@@ -726,9 +675,6 @@ class GovukConnect::CLI
|
|
726
675
|
print_empty_line
|
727
676
|
info bold("APPLICATION TARGET")
|
728
677
|
info APP_TARGET_DESCRIPTION
|
729
|
-
print_empty_line
|
730
|
-
info bold("EXAMPLES")
|
731
|
-
info EXAMPLES
|
732
678
|
exit
|
733
679
|
end
|
734
680
|
opts.on("-V", "--version", "Prints version information") do
|
@@ -755,7 +701,7 @@ class GovukConnect::CLI
|
|
755
701
|
|
756
702
|
hosting = hosting.to_sym
|
757
703
|
|
758
|
-
unless %i[
|
704
|
+
unless %i[aws].include? hosting
|
759
705
|
error "error: unknown hosting provider: #{hosting}"
|
760
706
|
print_empty_line
|
761
707
|
info "available hosting providers are:"
|
@@ -795,7 +741,7 @@ class GovukConnect::CLI
|
|
795
741
|
end
|
796
742
|
|
797
743
|
if app_name_and_number.include? ":"
|
798
|
-
app_name, number =
|
744
|
+
app_name, number = app_name_and_number.split ":"
|
799
745
|
|
800
746
|
number = number.to_i
|
801
747
|
else
|
@@ -832,9 +778,6 @@ class GovukConnect::CLI
|
|
832
778
|
if name.end_with? ".internal"
|
833
779
|
target = name
|
834
780
|
hosting = :aws
|
835
|
-
elsif name.end_with? ".gov.uk"
|
836
|
-
target = name
|
837
|
-
hosting = :carrenza
|
838
781
|
else
|
839
782
|
# The hosting might not have been provided, so check if necessary
|
840
783
|
hosting ||= hosting_for_target_and_environment(target, environment)
|
@@ -843,7 +786,6 @@ class GovukConnect::CLI
|
|
843
786
|
name,
|
844
787
|
environment,
|
845
788
|
hosting,
|
846
|
-
ssh_username,
|
847
789
|
)
|
848
790
|
|
849
791
|
if domains.length.zero?
|
@@ -951,16 +893,6 @@ class GovukConnect::CLI
|
|
951
893
|
)
|
952
894
|
end,
|
953
895
|
|
954
|
-
"sidekiq-monitoring" => proc do |target, environment, args, extra_args, _options|
|
955
|
-
check_for_additional_arguments("sidekiq-monitoring", args)
|
956
|
-
check_for_additional_arguments("sidekiq-monitoring", extra_args)
|
957
|
-
ssh(
|
958
|
-
target || "backend",
|
959
|
-
environment,
|
960
|
-
port_forward: SIDEKIQ_MONITORING_PORT,
|
961
|
-
)
|
962
|
-
end,
|
963
|
-
|
964
896
|
"ssh" => proc do |target, environment, args, extra_args, options|
|
965
897
|
check_for_target(target)
|
966
898
|
target = target_from_options(target, options)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk-connect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Government Digital Service
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 3.
|
61
|
+
version: 3.17.0
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.
|
68
|
+
version: 3.17.0
|
69
69
|
description: Command line tool to connect to GOV.UK infrastructure
|
70
70
|
email:
|
71
71
|
- govuk-dev@digital.cabinet-office.gov.uk
|
@@ -82,7 +82,7 @@ homepage: https://github.com/alphagov/govuk-connect
|
|
82
82
|
licenses:
|
83
83
|
- MIT
|
84
84
|
metadata: {}
|
85
|
-
post_install_message:
|
85
|
+
post_install_message:
|
86
86
|
rdoc_options: []
|
87
87
|
require_paths:
|
88
88
|
- lib
|
@@ -97,8 +97,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
97
|
- !ruby/object:Gem::Version
|
98
98
|
version: '0'
|
99
99
|
requirements: []
|
100
|
-
rubygems_version: 3.1
|
101
|
-
signing_key:
|
100
|
+
rubygems_version: 3.0.3.1
|
101
|
+
signing_key:
|
102
102
|
specification_version: 4
|
103
103
|
summary: govuk-connect command line tool
|
104
104
|
test_files: []
|