morpheus-cli 5.5.1.4 → 5.5.2

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 (81) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/lib/morpheus/api/api_client.rb +25 -0
  4. data/lib/morpheus/api/archive_buckets_interface.rb +1 -1
  5. data/lib/morpheus/api/body_io.rb +22 -0
  6. data/lib/morpheus/api/catalog_item_types_interface.rb +5 -1
  7. data/lib/morpheus/api/clients_interface.rb +41 -0
  8. data/lib/morpheus/api/clouds_interface.rb +21 -0
  9. data/lib/morpheus/api/instances_interface.rb +8 -1
  10. data/lib/morpheus/api/integrations_interface.rb +30 -0
  11. data/lib/morpheus/api/library_instance_types_interface.rb +15 -3
  12. data/lib/morpheus/api/network_pool_server_types_interface.rb +9 -0
  13. data/lib/morpheus/api/plugins_interface.rb +22 -0
  14. data/lib/morpheus/api/roles_interface.rb +20 -1
  15. data/lib/morpheus/api/security_package_types_interface.rb +9 -0
  16. data/lib/morpheus/api/security_packages_interface.rb +9 -0
  17. data/lib/morpheus/api/security_scans_interface.rb +9 -0
  18. data/lib/morpheus/api/servers_interface.rb +17 -17
  19. data/lib/morpheus/api/storage_providers_interface.rb +1 -1
  20. data/lib/morpheus/api/virtual_images_interface.rb +1 -23
  21. data/lib/morpheus/cli/cli_command.rb +81 -7
  22. data/lib/morpheus/cli/commands/apps.rb +28 -2
  23. data/lib/morpheus/cli/commands/archives_command.rb +2 -2
  24. data/lib/morpheus/cli/commands/blueprints_command.rb +16 -0
  25. data/lib/morpheus/cli/commands/catalog_item_types_command.rb +34 -2
  26. data/lib/morpheus/cli/commands/clients_command.rb +338 -0
  27. data/lib/morpheus/cli/commands/clouds.rb +127 -1
  28. data/lib/morpheus/cli/commands/clusters.rb +42 -12
  29. data/lib/morpheus/cli/commands/curl_command.rb +114 -135
  30. data/lib/morpheus/cli/commands/hosts.rb +108 -11
  31. data/lib/morpheus/cli/commands/instances.rb +115 -14
  32. data/lib/morpheus/cli/commands/integrations_command.rb +215 -4
  33. data/lib/morpheus/cli/commands/invoices_command.rb +20 -11
  34. data/lib/morpheus/cli/commands/jobs_command.rb +299 -190
  35. data/lib/morpheus/cli/commands/library_cluster_layouts_command.rb +16 -2
  36. data/lib/morpheus/cli/commands/library_container_scripts_command.rb +14 -0
  37. data/lib/morpheus/cli/commands/library_container_templates_command.rb +131 -48
  38. data/lib/morpheus/cli/commands/library_container_types_command.rb +17 -4
  39. data/lib/morpheus/cli/commands/library_instance_types_command.rb +85 -7
  40. data/lib/morpheus/cli/commands/library_layouts_command.rb +32 -1
  41. data/lib/morpheus/cli/commands/library_option_lists_command.rb +30 -18
  42. data/lib/morpheus/cli/commands/library_option_types_command.rb +31 -14
  43. data/lib/morpheus/cli/commands/library_spec_templates_command.rb +14 -0
  44. data/lib/morpheus/cli/commands/library_upgrades_command.rb +2 -2
  45. data/lib/morpheus/cli/commands/network_pool_server_types.rb +20 -0
  46. data/lib/morpheus/cli/commands/network_pool_servers_command.rb +55 -158
  47. data/lib/morpheus/cli/commands/network_pools_command.rb +49 -23
  48. data/lib/morpheus/cli/commands/networks_command.rb +262 -45
  49. data/lib/morpheus/cli/commands/plugins.rb +213 -0
  50. data/lib/morpheus/cli/commands/price_sets_command.rb +40 -10
  51. data/lib/morpheus/cli/commands/prices_command.rb +17 -5
  52. data/lib/morpheus/cli/commands/processes_command.rb +2 -1
  53. data/lib/morpheus/cli/commands/remote.rb +7 -10
  54. data/lib/morpheus/cli/commands/roles.rb +924 -335
  55. data/lib/morpheus/cli/commands/search_command.rb +2 -0
  56. data/lib/morpheus/cli/commands/security_groups.rb +72 -84
  57. data/lib/morpheus/cli/commands/security_package_types.rb +32 -0
  58. data/lib/morpheus/cli/commands/security_packages.rb +84 -0
  59. data/lib/morpheus/cli/commands/security_scans.rb +107 -0
  60. data/lib/morpheus/cli/commands/service_plans_command.rb +16 -14
  61. data/lib/morpheus/cli/commands/subnets_command.rb +15 -1
  62. data/lib/morpheus/cli/commands/tasks.rb +34 -1
  63. data/lib/morpheus/cli/commands/tenants_command.rb +1 -1
  64. data/lib/morpheus/cli/commands/user_settings_command.rb +11 -2
  65. data/lib/morpheus/cli/commands/users.rb +50 -9
  66. data/lib/morpheus/cli/commands/virtual_images.rb +14 -0
  67. data/lib/morpheus/cli/commands/workflows.rb +14 -0
  68. data/lib/morpheus/cli/mixins/accounts_helper.rb +6 -5
  69. data/lib/morpheus/cli/mixins/infrastructure_helper.rb +79 -0
  70. data/lib/morpheus/cli/mixins/jobs_helper.rb +4 -5
  71. data/lib/morpheus/cli/mixins/library_helper.rb +2 -0
  72. data/lib/morpheus/cli/mixins/logs_helper.rb +3 -0
  73. data/lib/morpheus/cli/mixins/monitoring_helper.rb +1 -1
  74. data/lib/morpheus/cli/mixins/print_helper.rb +29 -4
  75. data/lib/morpheus/cli/mixins/provisioning_helper.rb +38 -9
  76. data/lib/morpheus/cli/mixins/rest_command.rb +106 -8
  77. data/lib/morpheus/cli/mixins/secondary_rest_command.rb +6 -2
  78. data/lib/morpheus/cli/option_types.rb +94 -25
  79. data/lib/morpheus/cli/version.rb +1 -1
  80. data/lib/morpheus/formatters.rb +10 -1
  81. metadata +15 -2
@@ -51,11 +51,20 @@ class Morpheus::Cli::NetworksCommand
51
51
  opts.on('--subnets', '--subnets', "Display subnets as rows under each network found.") do
52
52
  options[:show_subnets] = true
53
53
  end
54
+ opts.on('-l', '--labels LABEL', String, "Filter by labels, can match any of the values") do |val|
55
+ add_query_parameter(params, 'labels', parse_labels(val))
56
+ end
57
+ opts.on('--all-labels LABEL', String, "Filter by labels, must match all of the values") do |val|
58
+ add_query_parameter(params, 'allLabels', parse_labels(val))
59
+ end
54
60
  build_common_options(opts, options, [:list, :json, :yaml, :csv, :fields, :json, :dry_run, :remote])
55
61
  opts.footer = "List networks."
56
62
  end
57
63
  optparse.parse!(args)
58
64
  connect(options)
65
+ if args.count > 0
66
+ options[:phrase] = args.join(" ")
67
+ end
59
68
  begin
60
69
  params.merge!(parse_list_options(options))
61
70
  cloud = nil
@@ -96,6 +105,7 @@ class Morpheus::Cli::NetworksCommand
96
105
  row = {
97
106
  id: network['id'],
98
107
  name: network['displayName'] || network['name'],
108
+ labels: format_list(network['labels'], '', 3),
99
109
  type: network['type'] ? network['type']['name'] : '',
100
110
  group: network['group'] ? network['group']['name'] : 'Shared',
101
111
  cloud: network['zone'] ? network['zone']['name'] : '',
@@ -113,6 +123,7 @@ class Morpheus::Cli::NetworksCommand
113
123
  subnet_row = {
114
124
  id: subnet['id'],
115
125
  name: " #{subnet['displayName'] || subnet['name']}",
126
+ labels: format_list(subnet['labels'], '', 3),
116
127
  # type: subnet['type'] ? subnet['type']['name'] : '',
117
128
  type: "Subnet",
118
129
  group: network['group'] ? network['group']['name'] : 'Shared',
@@ -128,7 +139,7 @@ class Morpheus::Cli::NetworksCommand
128
139
  end
129
140
  end
130
141
  end
131
- columns = [:id, :name, :type, :group, :cloud, :cidr, :pool, :dhcp, :subnets, :active, :visibility, :tenants]
142
+ columns = [:id, :name, :labels, :type, :group, :cloud, :cidr, :pool, :dhcp, :subnets, :active, :visibility, :tenants]
132
143
  if options[:include_fields]
133
144
  columns = options[:include_fields]
134
145
  end
@@ -190,16 +201,26 @@ class Morpheus::Cli::NetworksCommand
190
201
  description_cols = {
191
202
  "ID" => 'id',
192
203
  "Name" => lambda {|it| it['displayName'] ? it['displayName'] : it['name'] },
204
+ "Labels" => lambda {|it| format_list(it['labels']) rescue '' },
193
205
  "Description" => 'description',
194
206
  "Type" => lambda {|it| it['type'] ? it['type']['name'] : '' },
195
207
  "Group" => lambda {|it| it['group'] ? it['group']['name'] : 'Shared' },
196
208
  "Cloud" => lambda {|it| it['zone'] ? it['zone']['name'] : '' },
209
+ "IPv4 Enabled" => 'ipv4Enabled',
210
+ "IPv6 Enabled" => 'ipv6Enabled',
197
211
  "CIDR" => 'cidr',
198
212
  "Gateway" => 'gateway',
199
213
  "Netmask" => 'netmask',
200
214
  "Subnet" => 'subnetAddress',
201
215
  "Primary DNS" => 'dnsPrimary',
202
216
  "Secondary DNS" => 'dnsSecondary',
217
+ "IPv6 CIDR" => 'cidrIPv6',
218
+ "IPv6 Gateway" => 'gatewayIPv6',
219
+ "IPv6 Netmask" => 'netmaskIPv6',
220
+ "IPv6 Primary DNS" => 'dnsPrimaryIPv6',
221
+ "IPv6 Secondary DNS" => 'dnsSecondaryIPv6',
222
+ "Domain" => lambda {|it| it['networkDomain'] ? it['networkDomain']['name'] : '' },
223
+ "Search Domains" => lambda {|it| it['searchDomains'] },
203
224
  "Pool" => lambda {|it| it['pool'] ? it['pool']['name'] : '' },
204
225
  "VPC" => lambda {|it| it['zonePool'] ? it['zonePool']['name'] : '' },
205
226
  "DHCP" => lambda {|it| it['dhcpServer'] ? 'Yes' : 'No' },
@@ -208,6 +229,8 @@ class Morpheus::Cli::NetworksCommand
208
229
  "Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
209
230
  "Tenants" => lambda {|it| it['tenants'] ? it['tenants'].collect {|it| it['name'] }.uniq.join(', ') : '' },
210
231
  }
232
+ description_cols.delete("Domain") if network['networkDomain'].nil?
233
+ description_cols.delete("Search Domains") if network['searchDomains'].to_s.empty?
211
234
  print_description_list(description_cols, network)
212
235
 
213
236
  if network["group"]
@@ -243,10 +266,12 @@ class Morpheus::Cli::NetworksCommand
243
266
  {
244
267
  id: subnet['id'],
245
268
  name: " #{subnet['displayName'] || subnet['name']}",
269
+ labels: format_list(subnet['labels'], '', 3),
246
270
  # type: subnet['type'] ? subnet['type']['name'] : '',
247
271
  type: "Subnet",
248
272
  cloud: network['zone'] ? network['zone']['name'] : '',
249
273
  cidr: subnet['cidr'],
274
+ cidrIPv6: subnet['cidrIPv6'],
250
275
  pool: subnet['pool'] ? subnet['pool']['name'] : '',
251
276
  dhcp: subnet['dhcpServer'] ? 'Yes' : 'No',
252
277
  visibility: subnet['visibility'].to_s.capitalize,
@@ -254,7 +279,7 @@ class Morpheus::Cli::NetworksCommand
254
279
  tenants: subnet['tenants'] ? subnet['tenants'].collect {|it| it['name'] }.uniq.join(', ') : ''
255
280
  }
256
281
  }
257
- columns = [:id, :name, :cidr, :dhcp, :active, :visibility]
282
+ columns = [:id, :name, :labels, :cidr, :cidrIPv6, :dhcp, :active, :visibility]
258
283
  print cyan
259
284
  print as_pretty_table(subnet_rows, columns, options)
260
285
  print reset
@@ -295,9 +320,18 @@ class Morpheus::Cli::NetworksCommand
295
320
  opts.on('--display-name VALUE', String, "Display name for this network") do |val|
296
321
  options['displayName'] = val
297
322
  end
323
+ opts.on('-l', '--labels [LIST]', String, "Labels") do |val|
324
+ options['labels'] = parse_labels(val)
325
+ end
298
326
  opts.on('--description VALUE', String, "Description of network") do |val|
299
327
  options['description'] = val
300
328
  end
329
+ opts.on('--ipv4Enabled [on|off]', String, "ipv4Enabled") do |val|
330
+ options['ipv4Enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
331
+ end
332
+ opts.on('--ipv6Enabled [on|off]', String, "ipv6Enabled") do |val|
333
+ options['ipv6Enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
334
+ end
301
335
  opts.on('--gateway VALUE', String, "Gateway") do |val|
302
336
  options['gateway'] = val
303
337
  end
@@ -310,6 +344,34 @@ class Morpheus::Cli::NetworksCommand
310
344
  opts.on('--cidr VALUE', String, "CIDR") do |val|
311
345
  options['cidr'] = val
312
346
  end
347
+ opts.on('--gateway-ipv6 VALUE', String, "IPv6 Gateway") do |val|
348
+ options['gatewayIPv6'] = val
349
+ end
350
+ opts.on('--gatewayIPv6 VALUE', String, "IPv6 Gateway") do |val|
351
+ options['gatewayIPv6'] = val
352
+ end
353
+ opts.add_hidden_option('--gatewayIPv6')
354
+ opts.on('--dns-primary-ipv6 VALUE', String, "IPv6 DNS Primary") do |val|
355
+ options['dnsPrimaryIPv6'] = val
356
+ end
357
+ opts.on('--dns-primaryIPv6 VALUE', String, "IPv6 DNS Primary") do |val|
358
+ options['dnsPrimaryIPv6'] = val
359
+ end
360
+ opts.add_hidden_option('--dns-primaryIPv6')
361
+ opts.on('--dns-secondary-ipv6 VALUE', String, "IPv6 DNS Secondary") do |val|
362
+ options['dnsSecondaryIPv6'] = val
363
+ end
364
+ opts.on('--dns-secondaryIPv6 VALUE', String, "IPv6 DNS Secondary") do |val|
365
+ options['dnsSecondaryIPv6'] = val
366
+ end
367
+ opts.add_hidden_option('--dns-secondaryIPv6')
368
+ opts.on('--cidr-ipv6 VALUE', String, "IPv6 CIDR") do |val|
369
+ options['cidrIPv6'] = val
370
+ end
371
+ opts.on('--cidrIPv6 VALUE', String, "IPv6 CIDR") do |val|
372
+ options['cidrIPv6'] = val
373
+ end
374
+ opts.add_hidden_option('--cidrIPv6')
313
375
  opts.on('--vlan-id VALUE', String, "VLAN ID") do |val|
314
376
  options['vlanId'] = val.to_i
315
377
  end
@@ -322,12 +384,15 @@ class Morpheus::Cli::NetworksCommand
322
384
  opts.on('--allow-ip-override [on|off]', String, "Allow IP Override") do |val|
323
385
  options['allowStaticOverride'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
324
386
  end
325
- opts.on('--domain VALUE', String, "Network Domain ID") do |val|
387
+ opts.on('--domain [VALUE]', String, "Network Domain ID") do |val|
326
388
  options['domain'] = val
327
389
  end
328
- opts.on('--scan [on|off]', String, "Scan Network") do |val|
329
- options['scanNetwork'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
390
+ opts.on('--search-domains [VALUE]', String, "Search Domains") do |val|
391
+ options['searchDomains'] = val
330
392
  end
393
+ # opts.on('--scan [on|off]', String, "Scan Network") do |val|
394
+ # options['scanNetwork'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
395
+ # end
331
396
  opts.on('--proxy VALUE', String, "Network Proxy ID") do |val|
332
397
  options['proxy'] = val
333
398
  end
@@ -436,6 +501,11 @@ class Morpheus::Cli::NetworksCommand
436
501
  payload['network']['displayName'] = v_prompt['displayName']
437
502
  end
438
503
 
504
+ # Labels
505
+ if options['labels']
506
+ payload['network']['labels'] = options['labels']
507
+ end
508
+
439
509
  # Description
440
510
  if options['description']
441
511
  payload['network']['description'] = options['description']
@@ -561,43 +631,102 @@ class Morpheus::Cli::NetworksCommand
561
631
  payload['network']['zone'] = {'id' => cloud['id']}
562
632
  end
563
633
 
564
- # CIDR
565
- if network_type['hasCidr'] && network_type['cidrEditable']
566
- if options['cidr']
567
- payload['network']['cidr'] = options['cidr']
568
- else
569
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'cidr', 'fieldLabel' => network_type['code'] == 'nsxtLogicalSwitch' ? 'Gateway CIDR' : 'CIDR', 'type' => 'text', 'required' => network_type['cidrRequired'], 'description' => ''}], options)
570
- payload['network']['cidr'] = v_prompt['cidr']
571
- end
634
+ if options['ipv4Enabled'].nil? && payload['network']['ipv4Enabled'].nil?
635
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'ipv4Enabled', 'fieldLabel' => 'IPv4 Enabled', 'type' => 'checkbox', 'required' => false, 'description' => '', 'defaultValue' => true}], options)
636
+ val = v_prompt['ipv4Enabled']
637
+ payload['network']['ipv4Enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
638
+ else
639
+ payload['network']['ipv4Enabled'] = options['ipv4Enabled']
572
640
  end
573
641
 
574
- # Gateway
575
- if network_type['gatewayEditable']
576
- if options['gateway']
577
- payload['network']['gateway'] = options['gateway']
578
- else
579
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'gateway', 'fieldLabel' => 'Gateway', 'type' => 'text', 'required' => false, 'description' => ''}], options)
580
- payload['network']['gateway'] = v_prompt['gateway']
642
+ if payload['network']['ipv4Enabled']
643
+ # CIDR
644
+ if network_type['hasCidr'] && network_type['cidrEditable']
645
+ if options['cidr']
646
+ payload['network']['cidr'] = options['cidr']
647
+ else
648
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'cidr', 'fieldLabel' => network_type['code'] == 'nsxtLogicalSwitch' ? 'Gateway CIDR' : 'CIDR', 'type' => 'text', 'required' => network_type['cidrRequired'], 'description' => ''}], options)
649
+ payload['network']['cidr'] = v_prompt['cidr']
650
+ end
651
+ end
652
+
653
+ # Gateway
654
+ if network_type['gatewayEditable']
655
+ if options['gateway']
656
+ payload['network']['gateway'] = options['gateway']
657
+ else
658
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'gateway', 'fieldLabel' => 'Gateway', 'type' => 'text', 'required' => false, 'description' => ''}], options)
659
+ payload['network']['gateway'] = v_prompt['gateway']
660
+ end
661
+ end
662
+
663
+ # DNS
664
+ if network_type['dnsEditable']
665
+ if options['dnsPrimary']
666
+ payload['network']['dnsPrimary'] = options['dnsPrimary']
667
+ else
668
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dnsPrimary', 'fieldLabel' => 'DNS Primary', 'type' => 'text', 'required' => false, 'description' => ''}], options)
669
+ payload['network']['dnsPrimary'] = v_prompt['dnsPrimary']
670
+ end
671
+
672
+ if options['dnsSecondary']
673
+ payload['network']['dnsSecondary'] = options['dnsSecondary']
674
+ else
675
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dnsSecondary', 'fieldLabel' => 'DNS Secondary', 'type' => 'text', 'required' => false, 'description' => ''}], options)
676
+ payload['network']['dnsSecondary'] = v_prompt['dnsSecondary']
677
+ end
581
678
  end
582
679
  end
583
680
 
584
- # DNS
585
- if network_type['dnsEditable']
586
- if options['dnsPrimary']
587
- payload['network']['dnsPrimary'] = options['dnsPrimary']
588
- else
589
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dnsPrimary', 'fieldLabel' => 'DNS Primary', 'type' => 'text', 'required' => false, 'description' => ''}], options)
590
- payload['network']['dnsPrimary'] = v_prompt['dnsPrimary']
681
+ if options['ipv6Enabled'].nil? && payload['network']['ipv6Enabled'].nil?
682
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'ipv6Enabled', 'fieldLabel' => 'IPv6 Enabled', 'type' => 'checkbox', 'required' => false, 'description' => '', 'defaultValue' => false}], options)
683
+ val = v_prompt['ipv6Enabled']
684
+ payload['network']['ipv6Enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
685
+ else
686
+ payload['network']['ipv6Enabled'] = options['ipv6Enabled']
687
+ end
688
+
689
+ if payload['network']['ipv6Enabled']
690
+ #IPv6 Options
691
+ # CIDR
692
+ if network_type['hasCidr'] && network_type['cidrEditable']
693
+ if options['cidrIPv6']
694
+ payload['network']['cidrIPv6'] = options['cidr']
695
+ else
696
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'cidrIPv6', 'fieldLabel' => 'IPv6 CIDR', 'type' => 'text', 'required' => false, 'description' => ''}], options)
697
+ payload['network']['cidrIPv6'] = v_prompt['cidrIPv6']
698
+ end
591
699
  end
592
700
 
593
- if options['dnsSecondary']
594
- payload['network']['dnsSecondary'] = options['dnsSecondary']
595
- else
596
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dnsSecondary', 'fieldLabel' => 'DNS Secondary', 'type' => 'text', 'required' => false, 'description' => ''}], options)
597
- payload['network']['dnsSecondary'] = v_prompt['dnsSecondary']
701
+ # Gateway
702
+ if network_type['gatewayEditable']
703
+ if options['gatewayIPv6']
704
+ payload['network']['gatewayIPv6'] = options['gatewayIPv6']
705
+ else
706
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'gatewayIPv6', 'fieldLabel' => 'IPv6 Gateway', 'type' => 'text', 'required' => false, 'description' => ''}], options)
707
+ payload['network']['gatewayIPv6'] = v_prompt['gatewayIPv6']
708
+ end
709
+ end
710
+
711
+ # DNS
712
+ if network_type['dnsEditable']
713
+ if options['dnsPrimaryIPv6']
714
+ payload['network']['dnsPrimaryIPv6'] = options['dnsPrimaryIPv6']
715
+ else
716
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dnsPrimaryIPv6', 'fieldLabel' => 'IPv6 DNS Primary', 'type' => 'text', 'required' => false, 'description' => ''}], options)
717
+ payload['network']['dnsPrimaryIPv6'] = v_prompt['dnsPrimaryIPv6']
718
+ end
719
+
720
+ if options['dnsSecondary']
721
+ payload['network']['dnsSecondaryIPv6'] = options['dnsSecondaryIPv6']
722
+ else
723
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dnsSecondaryIPv6', 'fieldLabel' => 'IPv6 DNS Secondary', 'type' => 'text', 'required' => false, 'description' => ''}], options)
724
+ payload['network']['dnsSecondaryIPv6'] = v_prompt['dnsSecondaryIPv6']
725
+ end
598
726
  end
599
727
  end
600
728
 
729
+
601
730
  # VLAN ID
602
731
  if network_type['vlanIdEditable']
603
732
  if options['vlanId']
@@ -668,16 +797,19 @@ class Morpheus::Cli::NetworksCommand
668
797
 
669
798
  # Network Domain
670
799
  if network_type['networkDomainEditable'] && payload['network']['networkDomain'].nil?
671
- if options['domain']
672
- payload['network']['networkDomain'] = {'id' => options['domain'].to_i}
673
- else
674
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'domain', 'fieldLabel' => 'Network Domain', 'type' => 'select', 'optionSource' => 'networkDomains', 'required' => false, 'description' => ''}], options, @api_client)
675
- payload['network']['networkDomain'] = {'id' => v_prompt['domain'].to_i} unless v_prompt['domain'].to_s.empty?
800
+ if options.key?('domain')
801
+ if options['domain'].to_s.empty? # clear it?
802
+ payload['network']['networkDomain'] = {'id' => nil}
803
+ else
804
+ # always prompt to handle value as name instead of id...
805
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'domain', 'fieldLabel' => 'Network Domain', 'type' => 'select', 'optionSource' => 'networkDomains', 'required' => false, 'description' => ''}], options, @api_client)
806
+ payload['network']['networkDomain'] = {'id' => v_prompt['domain'].to_i} unless v_prompt['domain'].to_s.empty?
807
+ end
676
808
  end
677
809
  end
678
810
 
679
811
  # Search Domains
680
- if options['searchDomains'] != nil
812
+ if options.key?('searchDomains')
681
813
  payload['network']['searchDomains'] = options['searchDomains']
682
814
  else
683
815
  v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'searchDomains', 'fieldLabel' => 'Search Domains', 'type' => 'text', 'required' => false, 'description' => ''}], options)
@@ -807,12 +939,21 @@ class Morpheus::Cli::NetworksCommand
807
939
  opts.on('--name VALUE', String, "Name for this network") do |val|
808
940
  options['name'] = val
809
941
  end
942
+ opts.on('-l', '--labels [LIST]', String, "Labels") do |val|
943
+ options['labels'] = parse_labels(val)
944
+ end
810
945
  opts.on('--description VALUE', String, "Description of network") do |val|
811
946
  options['description'] = val
812
947
  end
813
948
  opts.on('--display-name VALUE', String, "Display name for this network") do |val|
814
949
  options['displayName'] = val
815
950
  end
951
+ opts.on('--ipv4Enabled [on|off]', String, "ipv4Enabled") do |val|
952
+ options['ipv4Enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
953
+ end
954
+ opts.on('--ipv6Enabled [on|off]', String, "ipv6Enabled") do |val|
955
+ options['ipv6Enabled'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
956
+ end
816
957
  opts.on('--gateway VALUE', String, "Gateway") do |val|
817
958
  options['gateway'] = val
818
959
  end
@@ -825,6 +966,34 @@ class Morpheus::Cli::NetworksCommand
825
966
  opts.on('--cidr VALUE', String, "CIDR") do |val|
826
967
  options['cidr'] = val
827
968
  end
969
+ opts.on('--gateway-ipv6 VALUE', String, "IPv6 Gateway") do |val|
970
+ options['gatewayIPv6'] = val
971
+ end
972
+ opts.on('--gatewayIPv6 VALUE', String, "IPv6 Gateway") do |val|
973
+ options['gatewayIPv6'] = val
974
+ end
975
+ opts.add_hidden_option('--gatewayIPv6')
976
+ opts.on('--dns-primary-ipv6 VALUE', String, "IPv6 DNS Primary") do |val|
977
+ options['dnsPrimaryIPv6'] = val
978
+ end
979
+ opts.on('--dns-primaryIPv6 VALUE', String, "IPv6 DNS Primary") do |val|
980
+ options['dnsPrimaryIPv6'] = val
981
+ end
982
+ opts.add_hidden_option('--dns-primaryIPv6')
983
+ opts.on('--dns-secondary-ipv6 VALUE', String, "IPv6 DNS Secondary") do |val|
984
+ options['dnsSecondaryIPv6'] = val
985
+ end
986
+ opts.on('--dns-secondaryIPv6 VALUE', String, "IPv6 DNS Secondary") do |val|
987
+ options['dnsSecondaryIPv6'] = val
988
+ end
989
+ opts.add_hidden_option('--dns-secondaryIPv6')
990
+ opts.on('--cidr-ipv6 VALUE', String, "IPv6 CIDR") do |val|
991
+ options['cidrIPv6'] = val
992
+ end
993
+ opts.on('--cidrIPv6 VALUE', String, "IPv6 CIDR") do |val|
994
+ options['cidrIPv6'] = val
995
+ end
996
+ opts.add_hidden_option('--cidrIPv6')
828
997
  opts.on('--vlan-id VALUE', String, "VLAN ID") do |val|
829
998
  options['vlanId'] = val.to_i
830
999
  end
@@ -837,12 +1006,15 @@ class Morpheus::Cli::NetworksCommand
837
1006
  opts.on('--allow-ip-override [on|off]', String, "Allow IP Override") do |val|
838
1007
  options['allowStaticOverride'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
839
1008
  end
840
- opts.on('--domain VALUE', String, "Network Domain ID") do |val|
1009
+ opts.on('--domain [VALUE]', String, "Network Domain ID") do |val|
841
1010
  options['domain'] = val
842
1011
  end
843
- opts.on('--scan [on|off]', String, "Scan Network") do |val|
844
- options['scanNetwork'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
1012
+ opts.on('--search-domains [VALUE]', String, "Search Domains") do |val|
1013
+ options['searchDomains'] = val
845
1014
  end
1015
+ # opts.on('--scan [on|off]', String, "Scan Network") do |val|
1016
+ # options['scanNetwork'] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == ''
1017
+ # end
846
1018
  opts.on('--proxy VALUE', String, "Network Proxy ID") do |val|
847
1019
  options['proxy'] = val
848
1020
  end
@@ -972,6 +1144,11 @@ class Morpheus::Cli::NetworksCommand
972
1144
  payload['network']['displayName'] = options['displayName']
973
1145
  end
974
1146
 
1147
+ # Labels
1148
+ if options['labels']
1149
+ payload['network']['labels'] = options['labels']
1150
+ end
1151
+
975
1152
  # Description
976
1153
  if options['description']
977
1154
  payload['network']['description'] = options['description']
@@ -980,6 +1157,15 @@ class Morpheus::Cli::NetworksCommand
980
1157
  # payload['network']['description'] = v_prompt['description']
981
1158
  end
982
1159
 
1160
+ # IP Types Enabled
1161
+ if options['ipv4Enabled'] != nil
1162
+ payload['network']['ipv4Enabled'] = options['ipv4Enabled']
1163
+ end
1164
+
1165
+ if options['ipv6Enabled'] != nil
1166
+ payload['network']['ipv6Enabled'] = options['ipv6Enabled']
1167
+ end
1168
+
983
1169
  # Gateway
984
1170
  if options['gateway']
985
1171
  payload['network']['gateway'] = options['gateway']
@@ -1012,6 +1198,26 @@ class Morpheus::Cli::NetworksCommand
1012
1198
  # payload['network']['cidr'] = v_prompt['cidr']
1013
1199
  end
1014
1200
 
1201
+ # IPv6 Gateway
1202
+ if options['gatewayIPv6']
1203
+ payload['network']['gatewayIPv6'] = options['gatewayIPv6']
1204
+ end
1205
+
1206
+ # IPv6 DNS Primary
1207
+ if options['dnsPrimaryIPv6']
1208
+ payload['network']['dnsPrimarIPv6y'] = options['dnsPrimaryIPv6']
1209
+ end
1210
+
1211
+ # IPv6 DNS Secondary
1212
+ if options['dnsSecondaryIPv6']
1213
+ payload['network']['dnsSecondaryIPv6'] = options['dnsSecondaryIPv6']
1214
+ end
1215
+
1216
+ # IPv6 CIDR
1217
+ if options['cidrIPv6']
1218
+ payload['network']['cidrIPv6'] = options['cidrIPv6']
1219
+ end
1220
+
1015
1221
  # VLAN ID
1016
1222
  if options['vlanId']
1017
1223
  payload['network']['vlanId'] = options['vlanId']
@@ -1047,11 +1253,22 @@ class Morpheus::Cli::NetworksCommand
1047
1253
  end
1048
1254
 
1049
1255
  # Network Domain
1050
- if options['domain']
1051
- payload['network']['networkDomain'] = {'id' => options['domain'].to_i}
1256
+ if options.key?('domain')
1257
+ if options['domain'].to_s.empty? # clear it?
1258
+ payload['network']['networkDomain'] = {'id' => nil}
1259
+ else
1260
+ # always prompt to handle value as name instead of id...
1261
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'domain', 'fieldLabel' => 'Network Domain', 'type' => 'select', 'optionSource' => 'networkDomains', 'required' => false, 'description' => ''}], options, @api_client)
1262
+ payload['network']['networkDomain'] = {'id' => v_prompt['domain'].to_i} unless v_prompt['domain'].to_s.empty?
1263
+ end
1264
+ end
1265
+
1266
+ # Search Domains
1267
+ if options.key?('searchDomains')
1268
+ payload['network']['searchDomains'] = options['searchDomains']
1052
1269
  else
1053
- #v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'domain', 'fieldLabel' => 'Network Domain', 'type' => 'select', 'optionSource' => 'networkDomains', 'required' => false, 'description' => ''}], options, @api_client)
1054
- #payload['network']['networkDomain'] = {'id' => v_prompt['domain'].to_i} unless v_prompt['domain'].to_s.empty?
1270
+ # v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'searchDomains', 'fieldLabel' => 'Search Domains', 'type' => 'text', 'required' => false, 'description' => ''}], options)
1271
+ # payload['network']['searchDomains'] = v_prompt['searchDomains']
1055
1272
  end
1056
1273
 
1057
1274
  # Scan Network