govuk-connect 0.2.1 → 0.5.0

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