govuk-connect 0.2.1 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d5a31cd142ccad0489230d52b607a835569f375fa70512443fef37b07d09faec
4
- data.tar.gz: 1df85edae1c9bc3c16af1c870be0834b06996c12ec874059ff06b7f3859bce29
3
+ metadata.gz: 71cb0967c5cf0450aa63b5abbf25ce9d964d7ddfcb97a57fea0c011f59961624
4
+ data.tar.gz: ee788418b7e3e127bc4f5bd8ceb7cf35b37a9df889a4200f20fa392b37701882
5
5
  SHA512:
6
- metadata.gz: 3a9d2ee8908abaa9ecf68eebac54744d45d95927c83aba9675fba8a88a344c729cff47e9e7eafb9da3557659275501af7b6408ba42ba7f2b48d9bf8b2e4ea1bd
7
- data.tar.gz: 48b1fe78c0fd719b39c93dbb47e0cbb57f7bac07647032bff796ea2f130c1a8adf2d03e473bb55d7082f10486f40da3749babdabe32e7d0e515e02ecb9dcd174
6
+ metadata.gz: 9d684a2ef79be515cdb3c1f71abb8dc5ce34fe7ca4315d2e62403a583a8e220e03cfc7c5ef1980211a741e1ca7603b0063d20d35b4974eec378ecd26e67af242
7
+ data.tar.gz: d811b9e5403750cc048e78d8c440bddb0bf206690301b22a7d76f2ab306a2967078f0932d785f757366bd977a45d0befc01c2a6f4202edce79d41d0386d1df18
@@ -15,37 +15,38 @@ class GovukConnect::CLI
15
15
  self.class.bold(string)
16
16
  end
17
17
 
18
- USAGE_BANNER = "Usage: govuk-connect TYPE TARGET [options]".freeze
18
+ USAGE_BANNER = "Usage: gds govuk connect TYPE TARGET [options]".freeze
19
19
 
20
20
  EXAMPLES = <<-EXAMPLES.freeze
21
- govuk-connect ssh --environment integration backend
21
+ gds govuk connect ssh --environment integration backend
22
22
 
23
- govuk-connect app-console --environment staging publishing-api
23
+ gds govuk connect scp-push --environment integration backend filename.txt /tmp/
24
24
 
25
- govuk-connect app-dbconsole -e integration whitehall_backend/whitehall
25
+ gds govuk connect scp-pull --environment integration backend /tmp/filename.txt ~/Downloads/
26
26
 
27
- govuk-connect rabbitmq -e staging aws/rabbitmq
27
+ gds govuk connect app-console --environment staging publishing-api
28
28
 
29
- govuk-connect sidekiq-monitoring -e integration
29
+ gds govuk connect app-dbconsole -e integration whitehall_backend/whitehall
30
+
31
+ gds govuk connect rabbitmq -e staging aws/rabbitmq
30
32
  EXAMPLES
31
33
 
32
34
  MACHINE_TARGET_DESCRIPTION = <<-DOCS.freeze
33
- The ssh, rabbitmq and sidekiq-monitoring connection types target
34
- machines.
35
+ The ssh, scp-*, rabbitmq connection types target machines.
35
36
 
36
37
  The machine can be specified by name, for example:
37
38
 
38
- govuk-connect ssh -e integration #{bold('backend')}
39
+ gds govuk connect ssh -e integration #{bold('backend')}
39
40
 
40
41
  If the hosting provider is ambiguous, you'll need to specify it prior
41
42
  to the name, for example:
42
43
 
43
- govuk-connect ssh -e staging #{bold('aws/')}backend
44
+ gds govuk connect ssh -e staging #{bold('aws/')}backend
44
45
 
45
46
  If you want to connect to a specific machine, you can specify a number
46
47
  after the name, for example:
47
48
 
48
- govuk-connect ssh -e integration backend#{bold(':2')}
49
+ gds govuk connect ssh -e integration backend#{bold(':2')}
49
50
  DOCS
50
51
 
51
52
  APP_TARGET_DESCRIPTION = <<-DOCS.freeze
@@ -54,17 +55,17 @@ class GovukConnect::CLI
54
55
 
55
56
  The application is specified by name, for example:
56
57
 
57
- govuk-connect app-console -e integration #{bold('publishing-api')}
58
+ gds govuk connect app-console -e integration #{bold('publishing-api')}
58
59
 
59
60
  If the node class is ambiguous, you'll need to specify it prior to
60
61
  the name, for example:
61
62
 
62
- govuk-connect app-console -e integration #{bold('whitehall_backend/')}whitehall
63
+ gds govuk connect app-console -e integration #{bold('whitehall_backend/')}whitehall
63
64
 
64
65
  If you want to connect to a specific machine, you can specify a
65
66
  number after the name, for example:
66
67
 
67
- govuk-connect app-console -e integration publishing-api#{bold(':2')}
68
+ gds govuk connect app-console -e integration publishing-api#{bold(':2')}
68
69
  DOCS
69
70
 
70
71
  CONNECTION_TYPE_DESCRIPTIONS = {
@@ -72,28 +73,21 @@ class GovukConnect::CLI
72
73
  "app-console" => "Launch a console for an application. For example, a rails console when connecting to a Rails application.",
73
74
  "app-dbconsole" => "Launch a console for the database for an application.",
74
75
  "rabbitmq" => "Setup port forwarding to the RabbitMQ admin interface.",
75
- "sidekiq-monitoring" => "Setup port forwarding to the Sidekiq Monitoring application.",
76
76
  }.freeze
77
77
 
78
78
  RABBITMQ_PORT = 15_672
79
- SIDEKIQ_MONITORING_PORT = 3211
80
79
 
81
80
  JUMPBOXES = {
82
81
  test: {
83
82
  aws: "jumpbox.pink.test.govuk.digital",
84
83
  },
85
- ci: {
86
- carrenza: "ci-jumpbox.integration.publishing.service.gov.uk",
87
- },
88
84
  integration: {
89
85
  aws: "jumpbox.integration.publishing.service.gov.uk",
90
86
  },
91
87
  staging: {
92
- carrenza: "jumpbox.staging.publishing.service.gov.uk",
93
88
  aws: "jumpbox.staging.govuk.digital",
94
89
  },
95
90
  production: {
96
- carrenza: "jumpbox.publishing.service.gov.uk",
97
91
  aws: "jumpbox.production.govuk.digital",
98
92
  },
99
93
  }.freeze
@@ -260,29 +254,7 @@ class GovukConnect::CLI
260
254
 
261
255
  def govuk_node_list_classes(environment, hosting)
262
256
  log "debug: looking up classes in #{hosting}/#{environment}"
263
- command = [
264
- "ssh",
265
- "-o",
266
- "ConnectTimeout=2", # Show a failure quickly
267
- *ssh_identity_arguments,
268
- user_at_host(
269
- ssh_username,
270
- jumpbox_for_environment_and_hosting(environment, hosting),
271
- ),
272
- "govuk_node_list --classes",
273
- ].join(" ")
274
-
275
- log "debug: running command: #{command}"
276
- output, status = Open3.capture2(command)
277
-
278
- unless status.success?
279
- error "\nerror: command failed: #{command}"
280
- print_empty_line
281
- print_ssh_username_configuration_help
282
- exit 1
283
- end
284
-
285
- classes = output.split("\n").sort
257
+ classes = ssh_capture("govuk_node_list --classes").sort
286
258
 
287
259
  log "debug: classes:"
288
260
  classes.each { |c| log " - #{c}" }
@@ -290,7 +262,16 @@ class GovukConnect::CLI
290
262
  classes
291
263
  end
292
264
 
293
- def get_domains_for_node_class(target, environment, hosting, ssh_username)
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)
294
275
  command = [
295
276
  "ssh",
296
277
  "-o",
@@ -300,19 +281,20 @@ class GovukConnect::CLI
300
281
  ssh_username,
301
282
  jumpbox_for_environment_and_hosting(environment, hosting),
302
283
  ),
303
- "govuk_node_list -c #{target}",
284
+ remote_command,
304
285
  ].join(" ")
305
286
 
287
+ log "debug: running command: #{command}"
306
288
  output, status = Open3.capture2(command)
307
289
 
308
290
  unless status.success?
309
- error "error: command failed: #{command}"
291
+ error "\nerror: command failed: #{command}"
310
292
  print_empty_line
311
293
  print_ssh_username_configuration_help
312
294
  exit 1
313
295
  end
314
296
 
315
- output.split("\n").sort
297
+ output.split("\n")
316
298
  end
317
299
 
318
300
  def govuk_directory
@@ -326,7 +308,6 @@ class GovukConnect::CLI
326
308
  govuk_directory,
327
309
  "govuk-puppet",
328
310
  {
329
- carrenza: "hieradata",
330
311
  aws: "hieradata_aws",
331
312
  }[hosting],
332
313
  )
@@ -397,7 +378,7 @@ class GovukConnect::CLI
397
378
  print_empty_line
398
379
  info "specify the node class and application mame, for example: "
399
380
  node_classes.each do |node_class|
400
- info "\n govuk-connect app-console -e #{environment} #{node_class}/#{app_name}"
381
+ info "\n gds govuk connect app-console -e #{environment} #{node_class}/#{app_name}"
401
382
  end
402
383
  print_empty_line
403
384
 
@@ -432,29 +413,13 @@ class GovukConnect::CLI
432
413
  return hosting if hosting
433
414
 
434
415
  aws_node_types = govuk_node_list_classes(environment, :aws)
435
- carrenza_node_types = govuk_node_list_classes(environment, :carrenza)
436
416
 
437
- if aws_node_types.include?(node_type) &&
438
- carrenza_node_types.include?(node_type)
439
-
440
- error "error: ambiguous hosting for #{node_type} in #{environment}"
441
- print_empty_line
442
- info "specify the hosting provider and node type, for example: "
443
- hosting_providers.each do |hosting_provider|
444
- info "\n govuk-connect ssh #{bold(hosting_provider)}/#{node_type}"
445
- end
446
- info "\n"
447
-
448
- exit 1
449
- elsif aws_node_types.include?(node_type)
417
+ if aws_node_types.include?(node_type)
450
418
  :aws
451
- elsif carrenza_node_types.include?(node_type)
452
- :carrenza
453
419
  else
454
420
  error "error: couldn't find #{node_type} in #{environment}"
455
421
 
456
- all_node_types = (aws_node_types + carrenza_node_types).uniq.sort
457
- similar_node_types = strings_similar_to(node_type, all_node_types)
422
+ similar_node_types = strings_similar_to(node_type, aws_node_types)
458
423
 
459
424
  if similar_node_types.any?
460
425
  info "\ndid you mean:"
@@ -489,17 +454,6 @@ class GovukConnect::CLI
489
454
  return :aws
490
455
  end
491
456
 
492
- carrenza_app_names = application_names_from_node_class_data(
493
- environment,
494
- :carrenza,
495
- )
496
-
497
- if carrenza_app_names.include? app_name
498
- log "debug: #{app_name} is hosted in Carrenza"
499
-
500
- return :carrenza
501
- end
502
-
503
457
  error "error: unknown hosting value '#{hosting}' for #{app_name}"
504
458
  exit 1
505
459
  end
@@ -565,71 +519,7 @@ class GovukConnect::CLI
565
519
  )
566
520
  log "debug: ssh to #{target} in #{environment}"
567
521
 
568
- # Split something like aws/backend:2 in to :aws, 'backend', 2
569
- hosting, name, number = parse_hosting_name_and_number(target)
570
-
571
- if name.end_with? ".internal"
572
- ssh_target = name
573
- hosting = :aws
574
- elsif name.end_with? ".gov.uk"
575
- ssh_target = name
576
- hosting = :carrenza
577
- else
578
- # The hosting might not have been provided, so check if necessary
579
- hosting ||= hosting_for_target_and_environment(target, environment)
580
-
581
- domains = get_domains_for_node_class(
582
- name,
583
- environment,
584
- hosting,
585
- ssh_username,
586
- )
587
-
588
- if domains.length.zero?
589
- error "error: couldn't find #{name} in #{hosting}/#{environment}"
590
-
591
- node_types = govuk_node_list_classes(environment, hosting)
592
-
593
- similar_node_types = strings_similar_to(name, node_types)
594
-
595
- if similar_node_types.any?
596
- info "\ndid you mean:"
597
- similar_node_types.each { |s| info " - #{s}" }
598
- else
599
- info "\nall node types:"
600
- node_types.each { |s| info " - #{s}" }
601
- end
602
-
603
- exit 1
604
- elsif domains.length == 1
605
- ssh_target = domains.first
606
-
607
- info "There is #{bold('one machine')} to connect to"
608
- else
609
- n_machines = bold("#{domains.length} machines")
610
- info "There are #{n_machines} of this class"
611
-
612
- if number
613
- unless number.positive?
614
- print_empty_line
615
- error "error: invalid machine number '#{number}', it must be > 0"
616
- exit 1
617
- end
618
-
619
- unless number <= domains.length
620
- print_empty_line
621
- error "error: cannot connect to machine number: #{number}"
622
- exit 1
623
- end
624
-
625
- ssh_target = domains[number - 1]
626
- info "Connecting to number #{number}"
627
- else
628
- ssh_target = domains.sample
629
- info "Connecting to a random machine (number #{domains.find_index(ssh_target) + 1})"
630
- end
631
- end
632
- end
522
+ target, hosting = ssh_target(target, environment)
633
523
 
634
524
  ssh_command = [
635
525
  "ssh",
@@ -641,7 +531,7 @@ class GovukConnect::CLI
641
531
  ),
642
532
  user_at_host(
643
533
  ssh_username,
644
- ssh_target,
534
+ target,
645
535
  ),
646
536
  ]
647
537
 
@@ -669,10 +559,47 @@ class GovukConnect::CLI
669
559
  exec(*ssh_command)
670
560
  end
671
561
 
562
+ def scp(
563
+ target,
564
+ environment,
565
+ files,
566
+ push: false,
567
+ additional_arguments: []
568
+ )
569
+ log "debug: scp #{push ? 'push' : 'pull'} to #{target} in #{environment}"
570
+
571
+ target, hosting = ssh_target(target, environment)
572
+
573
+ sources = files[0, files.length - 1]
574
+ destination = files[-1]
575
+
576
+ if push
577
+ destination = "#{target}:#{destination}"
578
+ else
579
+ sources = sources.map { |source| "#{target}:#{source}" }
580
+ end
581
+
582
+ scp_command = [
583
+ "scp",
584
+ *ssh_identity_arguments,
585
+ "-o",
586
+ "ProxyJump=#{user_at_host(ssh_username, jumpbox_for_environment_and_hosting(environment, hosting))}",
587
+ "-o",
588
+ "User=#{ssh_username}",
589
+ *additional_arguments,
590
+ "--",
591
+ *sources,
592
+ destination,
593
+ ]
594
+
595
+ info "\n#{bold('Running command:')} #{scp_command.join(' ')}\n\n"
596
+
597
+ exec(*scp_command)
598
+ end
599
+
672
600
  def rabbitmq_root_password_command(hosting, environment)
673
601
  hieradata_directory = {
674
602
  aws: "puppet_aws",
675
- carrenza: "puppet",
676
603
  }[hosting]
677
604
 
678
605
  directory = File.join(
@@ -688,14 +615,11 @@ class GovukConnect::CLI
688
615
  uri = URI(url)
689
616
 
690
617
  host_to_hosting_and_environment = {
691
- "ci-alert.integration.publishing.service.gov.uk" => %i[carrenza ci],
692
618
  "alert.integration.publishing.service.gov.uk" => %i[aws integration],
693
619
  "alert.staging.govuk.digital" => %i[aws staging],
694
620
  "alert.blue.staging.govuk.digital" => %i[aws staging],
695
- "alert.staging.publishing.service.gov.uk" => %i[carrenza staging],
696
621
  "alert.production.govuk.digital" => %i[aws production],
697
622
  "alert.blue.production.govuk.digital" => %i[aws production],
698
- "alert.publishing.service.gov.uk" => %i[carrenza production],
699
623
  }
700
624
 
701
625
  unless host_to_hosting_and_environment.key? uri.host
@@ -733,9 +657,12 @@ class GovukConnect::CLI
733
657
  @verbose = true
734
658
  end
735
659
 
736
- opts.on("-h", "--help", "Prints usage information and examples") do
660
+ opts.on("-h", "--help", "Prints usage examples and information") do
737
661
  info opts
738
662
  print_empty_line
663
+ info bold("EXAMPLES")
664
+ info EXAMPLES
665
+ print_empty_line
739
666
  info bold("CONNECTION TYPES")
740
667
  types.keys.each do |x|
741
668
  info " #{x}"
@@ -748,9 +675,6 @@ class GovukConnect::CLI
748
675
  print_empty_line
749
676
  info bold("APPLICATION TARGET")
750
677
  info APP_TARGET_DESCRIPTION
751
- print_empty_line
752
- info bold("EXAMPLES")
753
- info EXAMPLES
754
678
  exit
755
679
  end
756
680
  opts.on("-V", "--version", "Prints version information") do
@@ -777,7 +701,7 @@ class GovukConnect::CLI
777
701
 
778
702
  hosting = hosting.to_sym
779
703
 
780
- unless %i[carrenza aws].include? hosting
704
+ unless %i[aws].include? hosting
781
705
  error "error: unknown hosting provider: #{hosting}"
782
706
  print_empty_line
783
707
  info "available hosting providers are:"
@@ -829,6 +753,90 @@ class GovukConnect::CLI
829
753
  [node_class, app_name, number]
830
754
  end
831
755
 
756
+ def target_from_options(target, options)
757
+ if options.key? :hosting
758
+ hosting, name, number = parse_hosting_name_and_number(target)
759
+ if hosting
760
+ error "error: hosting specified twice"
761
+ exit 1
762
+ end
763
+
764
+ {
765
+ hosting: options[:hosting],
766
+ name: name,
767
+ number: number,
768
+ }
769
+ else
770
+ target
771
+ end
772
+ end
773
+
774
+ def ssh_target(target, environment)
775
+ # Split something like aws/backend:2 in to :aws, 'backend', 2
776
+ hosting, name, number = parse_hosting_name_and_number(target)
777
+
778
+ if name.end_with? ".internal"
779
+ target = name
780
+ hosting = :aws
781
+ else
782
+ # The hosting might not have been provided, so check if necessary
783
+ hosting ||= hosting_for_target_and_environment(target, environment)
784
+
785
+ domains = get_domains_for_node_class(
786
+ name,
787
+ environment,
788
+ hosting,
789
+ )
790
+
791
+ if domains.length.zero?
792
+ error "error: couldn't find #{name} in #{hosting}/#{environment}"
793
+
794
+ node_types = govuk_node_list_classes(environment, hosting)
795
+
796
+ similar_node_types = strings_similar_to(name, node_types)
797
+
798
+ if similar_node_types.any?
799
+ info "\ndid you mean:"
800
+ similar_node_types.each { |s| info " - #{s}" }
801
+ else
802
+ info "\nall node types:"
803
+ node_types.each { |s| info " - #{s}" }
804
+ end
805
+
806
+ exit 1
807
+ elsif domains.length == 1
808
+ target = domains.first
809
+
810
+ info "There is #{bold('one machine')} to connect to"
811
+ else
812
+ n_machines = bold("#{domains.length} machines")
813
+ info "There are #{n_machines} of this class"
814
+
815
+ if number
816
+ unless number.positive?
817
+ print_empty_line
818
+ error "error: invalid machine number '#{number}', it must be > 0"
819
+ exit 1
820
+ end
821
+
822
+ unless number <= domains.length
823
+ print_empty_line
824
+ error "error: cannot connect to machine number: #{number}"
825
+ exit 1
826
+ end
827
+
828
+ target = domains[number - 1]
829
+ info "Connecting to number #{number}"
830
+ else
831
+ target = domains.sample
832
+ info "Connecting to a random machine (number #{domains.find_index(target) + 1})"
833
+ end
834
+ end
835
+ end
836
+
837
+ [target, hosting]
838
+ end
839
+
832
840
  def check_for_target(target)
833
841
  unless target
834
842
  error "error: you must specify the target\n"
@@ -848,20 +856,23 @@ class GovukConnect::CLI
848
856
 
849
857
  def types
850
858
  @types ||= {
851
- "app-console" => proc do |target, environment, args, _options|
859
+ "app-console" => proc do |target, environment, args, extra_args, _options|
852
860
  check_for_target(target)
853
861
  check_for_additional_arguments("app-console", args)
862
+ check_for_additional_arguments("app-console", extra_args)
854
863
  govuk_app_command(target, environment, "console")
855
864
  end,
856
865
 
857
- "app-dbconsole" => proc do |target, environment, args, _options|
866
+ "app-dbconsole" => proc do |target, environment, args, extra_args, _options|
858
867
  check_for_target(target)
859
868
  check_for_additional_arguments("app-dbconsole", args)
869
+ check_for_additional_arguments("app-dbconsole", extra_args)
860
870
  govuk_app_command(target, environment, "dbconsole")
861
871
  end,
862
872
 
863
- "rabbitmq" => proc do |target, environment, args, _options|
873
+ "rabbitmq" => proc do |target, environment, args, extra_args, _options|
864
874
  check_for_additional_arguments("rabbitmq", args)
875
+ check_for_additional_arguments("rabbitmq", extra_args)
865
876
 
866
877
  target ||= "rabbitmq"
867
878
 
@@ -882,37 +893,50 @@ class GovukConnect::CLI
882
893
  )
883
894
  end,
884
895
 
885
- "sidekiq-monitoring" => proc do |target, environment, args, _options|
886
- check_for_additional_arguments("sidekiq-monitoring", args)
896
+ "ssh" => proc do |target, environment, args, extra_args, options|
897
+ check_for_target(target)
898
+ target = target_from_options(target, options)
899
+
887
900
  ssh(
888
- target || "backend",
901
+ target,
889
902
  environment,
890
- port_forward: SIDEKIQ_MONITORING_PORT,
903
+ port_forward: options[:port_forward],
904
+ additional_arguments: [args, extra_args].flatten,
891
905
  )
892
906
  end,
893
907
 
894
- "ssh" => proc do |target, environment, args, options|
908
+ "scp-pull" => proc do |target, environment, args, extra_args, options|
895
909
  check_for_target(target)
910
+ target = target_from_options(target, options)
896
911
 
897
- if options.key? :hosting
898
- hosting, name, number = parse_hosting_name_and_number(target)
899
- if hosting
900
- error "error: hosting specified twice"
901
- exit 1
902
- end
912
+ if args.length < 2
913
+ error "error: need at least two filenames"
914
+ exit 1
915
+ end
916
+
917
+ scp(
918
+ target,
919
+ environment,
920
+ args,
921
+ additional_arguments: extra_args,
922
+ )
923
+ end,
924
+
925
+ "scp-push" => proc do |target, environment, args, extra_args, options|
926
+ check_for_target(target)
927
+ target = target_from_options(target, options)
903
928
 
904
- target = {
905
- hosting: options[:hosting],
906
- name: name,
907
- number: number,
908
- }
929
+ if args.length < 2
930
+ error "error: need at least two filenames"
931
+ exit 1
909
932
  end
910
933
 
911
- ssh(
934
+ scp(
912
935
  target,
913
936
  environment,
914
- port_forward: options[:port_forward],
915
- additional_arguments: args,
937
+ args,
938
+ push: true,
939
+ additional_arguments: extra_args,
916
940
  )
917
941
  end,
918
942
  }
@@ -921,23 +945,21 @@ class GovukConnect::CLI
921
945
  def main(argv)
922
946
  check_ruby_version_greater_than(required_major: 2, required_minor: 0)
923
947
 
948
+ extra_arguments_after_double_dash = []
949
+
924
950
  double_dash_index = argv.index "--"
925
951
  if double_dash_index
926
- # This is used in the case of passing extra options to ssh, the --
927
- # acts as a separator, so to avoid optparse interpreting those
928
- # options, split argv around -- before parsing the options
929
- rest = argv[double_dash_index + 1, argv.length]
952
+ # This is used in the case of passing extra options to ssh and
953
+ # scp, the -- acts as a separator, so to avoid optparse
954
+ # interpreting those as options, split argv around -- before
955
+ # parsing the options
956
+ extra_arguments_after_double_dash = argv[double_dash_index + 1, argv.length]
930
957
  argv = argv[0, double_dash_index]
931
-
932
- options = parse_options(argv)
933
-
934
- type, target = argv
935
- else
936
- options = parse_options(argv)
937
-
938
- type, target, *rest = argv
939
958
  end
940
959
 
960
+ govuk_connect_options = parse_options(argv)
961
+ type, target, *extra_arguments_before_double_dash = argv
962
+
941
963
  unless type
942
964
  error "error: you must specify the connection type\n"
943
965
 
@@ -970,7 +992,7 @@ class GovukConnect::CLI
970
992
  exit 1
971
993
  end
972
994
 
973
- environment = options[:environment]&.to_sym
995
+ environment = govuk_connect_options[:environment]&.to_sym
974
996
 
975
997
  unless environment
976
998
  error "error: you must specify the environment\n"
@@ -986,7 +1008,13 @@ class GovukConnect::CLI
986
1008
  exit 1
987
1009
  end
988
1010
 
989
- handler.call(target, environment, rest, options)
1011
+ handler.call(
1012
+ target,
1013
+ environment,
1014
+ extra_arguments_before_double_dash,
1015
+ extra_arguments_after_double_dash,
1016
+ govuk_connect_options,
1017
+ )
990
1018
  rescue Interrupt
991
1019
  # Handle SIGTERM without printing a stacktrace
992
1020
  exit 1
@@ -1,3 +1,3 @@
1
1
  module GovukConnect
2
- VERSION = "0.2.1".freeze
2
+ VERSION = "0.5.0".freeze
3
3
  end
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.2.1
4
+ version: 0.5.0
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: 2020-07-15 00:00:00.000000000 Z
11
+ date: 2021-04-07 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.16.0
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.16.0
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.2
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: []