-
Notifications
You must be signed in to change notification settings - Fork 37
/
ChangeLog
1160 lines (1028 loc) · 54.3 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
PyU4V Change Log
================
Version 10.2.0.1
metro_dr.py added support to specify r2_rdfg on convert
updated versioning to be more automatic, version only needs to be updated in
version.py
Version 10.2.0.0
metro_dr.py
Added Reverse flag to PUT payload.
Add WLP Flags to storage group create and modify functions.
IP Storage configuration Library
replication.py
added bothsides option to create_storage_group_snapshot function
system.py
Added configure_ldap_authentication
Added get_ldap_configuration
provisioning.py
Added reset_volume_wwn function and tests
performance.py
BugFix, added includeRealTimeTraceOnCritical Key to update
performance thresholds payload and parameters.
Deprecated functions removed in v10.2.
====================================
Please ensure if you are using any of
these functions please ensure you have updated your code to use the replacement
function. These functions have been marked for depreciation for previous 2
releases and will have provided a warning error during that time to update.
- Removed PyU4V.performance.get_cloud_provider_keys and
get_cloud_provider_stats
- Old: PyU4V.performance.is_array_performance_registered
New: PyU4V.performance.is_array_diagnostic_performance_registered
- Old: PyU4V.performance.get_iscsi_target_keys
- New: PyU4V.performance.get_endpoint_keys
- Old: PyU4V.performance.get_iscsi_target_stats
- New: PyU4V.performance.get_endpoint_stats
- Old: PyU4V.performance.PerformanceFunctions.get_iscsi_target_stats
- New: PyU4V.performance.PerformanceFunctions.get_endpoint_stats
- Old: PyU4V.performance.PerformanceFunctions.get_iscsi_target_keys
- New: PyU4V.performance.PerformanceFunctions.get_endpoint_keys
- Old: PyU4V.provisioning.ProvisioningFunctions.get_director
- New: PyU4V.system.SystemFunctions.get_director
- Old: PyU4V.provisioning.ProvisioningFunctions.get_director_list
- New: PyU4V.system.SystemFunctions.get_director_list
- Old: PyU4V.provisioning.ProvisioningFunctions.get_director_port
- New: PyU4V.system.SystemFunctions.get_director_port
- Old: PyU4V.provisioning.ProvisioningFunctions.get_director_port_list
- New: PyU4V.system.SystemFunctions.get_director_port_list
- Old: PyU4V.provisioning.ProvisioningFunctions.get_port_identifier
- New: PyU4V.system.SystemFunctions.get_port_identifier
- Old: PyU4V.provisioning.ProvisioningFunctions.get_fa_directors
- New: PyU4V.system.SystemFunctions.get_fa_directors
- Old: PyU4V.provisioning.ProvisioningFunctions.get_iscsi_ip_address_and_iqn
- New: PyU4V.system.SystemFunctions.get_iscsi_ip_address_and_iqn
- Old: PyU4V.provisioning.ProvisioningFunctions.get_any_director_port
- New: PyU4V.system.SystemFunctions.get_any_director_port
- Old: PyU4V.provisioning.ProvisioningFunctions.create_multiport_port_group
- New: PyU4V.provisioning.ProvisioningFunctions.create_new_port_group
- Old: PyU4V.provisioning.ProvisioningFunctions.create_port_group
- New: PyU4V.provisioning.ProvisioningFunctions.create_new_port_group
Version 10.1.0.2 and backport to Version 10.0.0.20
====================================
added timeout parameter to connection to make configurable. PyU4V.conf also
can take new setup value for timeout to override 120s value.
Version 10.1.0.1
====================================
Bug fix for Github Issue #174 restart_unisphere_application has wrong payload.
Version 10.1.0.0
====================================
Documentation updates
Changed constants file to reflect migration resource changed to mobility.
Added volumes.py
Added storage
Added performance_enhanced
system.py
new functions added
get_management_server_resources
refresh_array_details
set_server_logging_level
get_server_logging_level
update_snmp_trap_destination
delete_snmp_trap_destination
set_snmp_trap_destination
get_snmp_trap_configuration
update_snmp_trap_destination
replication.py
added force options to delete snapshot functions
New functions added.
bulk_terminate_snapshots
added new query filters to get_replication_enabled_storage_groups, now returns
cloud snapshots or linked sg in list if specified
provisioning.py
added starting_lun_address param to specify the LUN address to use as a
starting point for volumes in a SG when creating a Masking View
added to functions -
- add_new_volume_to_storage_group
- add_existing_volume_to_storage_group
- create_masking_view_existing_components
added terminate snapshots option to remove_volume_from_storage_group
serviceability.py
added functions
- get_local_symmetrix
- get_symmetrix_ntp_server
- modify_ntp_server
- download_serviceability_log
- get_ip_configuration
- update_ip_configuration
- get_application
- get_unisphere_application
- modify_unisphere_application
- restart_unisphere_application
- get_unisphere_configuration
- modify_unisphere_configuration
- get_symavoid_settings
- update_symavoid_settings
- get_solutions_enabler_application
- get_solutions_enabler_configuration
- get_solutions_enabler_system
- import_custom_certificate
- replace_self_signed_certificate
Performance
- added to enable_real_time_data_collection to be able to register for
file, and storage groups for realtime collection.
Version 10.0.0.19
====================================
Documentation update to include additional examples
system.py
added set_port_protocol
====================================
added clone functions
Added proxy Support
removed test test_format_time_input_no_end
Version 10.0.0.17
====================================
performance.py
added get_volume_stats - ability to get performance stats from volume level
with PyU4V
Version 10.0.0.0 - released 10/19/2022
====================================
Added Functionality 10.0
------------------------
Provisioning.py
Allow for a different Emulation Type for storage group and volume creation.
added create_empty_port_group function
Download audit log record
-------------------------
Download audit log record and take longer than the default 120 seconds
Now timeout is configurable so this can be increase or decreased at will.
Added Functionality 10.0
------------------------
Replication.py
get_rdf_group_list updated to add new search params to simplify workflows for
RDFG operations.
modify_storage_group_snapshot_by_snapid added force and remote options.
get_storage_group_replication_details updated with new filter options to
simplify workflows.
Deprecated functions to be removed in 10.2
------------------------------------------
These functions will been removed entirely from the PyU4V code-base after the
required two release notification period.
- Old: PyU4V.performance.PerformanceFunctions.get_iscsi_target_stats
- New: PyU4V.performance.PerformanceFunctions.get_endpoint_stats
- Old: PyU4V.performance.PerformanceFunctions.get_iscsi_target_keys
- New: PyU4V.performance.PerformanceFunctions.get_endpoint_keys
- Old: PyU4V.provisioning.ProvisioningFunctions.get_director
- New: PyU4V.system.SystemFunctions.get_director
- Old: PyU4V.provisioning.ProvisioningFunctions.get_director_list
- New: PyU4V.system.SystemFunctions.get_director_list
- Old: PyU4V.provisioning.ProvisioningFunctions.get_director_port
- New: PyU4V.system.SystemFunctions.get_director_port
- Old: PyU4V.provisioning.ProvisioningFunctions.get_director_port_list
- New: PyU4V.system.SystemFunctions.get_director_port_list
- Old: PyU4V.provisioning.ProvisioningFunctions.get_port_identifier
- New: PyU4V.system.SystemFunctions.get_port_identifier
- Old: PyU4V.provisioning.ProvisioningFunctions.get_fa_directors
- New: PyU4V.system.SystemFunctions.get_fa_directors
- Old: PyU4V.provisioning.ProvisioningFunctions.get_iscsi_ip_address_and_iqn
- New: PyU4V.system.SystemFunctions.get_iscsi_ip_address_and_iqn
- Old: PyU4V.provisioning.ProvisioningFunctions.get_any_director_port
- New: PyU4V.system.SystemFunctions.get_any_director_port
Create port group
-----------------
port_group_protocol required in request payload for a create port group
operation. Values are one of SCSI_FC, iSCSI, NVMe_TCP.
Real-Time Performance
---------------------
- The following functions have been updated to accept an array_id to accomodate
differences between V3/V4 systems
- PyU4V.real_time.RealTimeFunctions.get_categories()
- PyU4V.real_time.RealTimeFunctions.get_category_metrics()
Diagnostic Performance
----------------------
- Cloud Provider has been added to PerformanceFunctions()
- PyU4V.performance.PerformanceFunctions.get_cloud_provider_keys()
- PyU4V.performance.PerformanceFunctions.get_cloud_provider_stats()
- EM Directors have been added to PerformanceFunctions()
- PyU4V.performance.PerformanceFunctions.get_em_director_keys()
- PyU4V.performance.PerformanceFunctions.get_em_director_stats()
- SDNAS has been added to PerformanceFunctions()
- PyU4V.performance.PerformanceFunctions.get_sdnas_filesystem_keys()
- PyU4V.performance.PerformanceFunctions.get_sdnas_filesystem_stats()
- PyU4V.performance.PerformanceFunctions.get_sdnas_interface_keys()
- PyU4V.performance.PerformanceFunctions.get_sdnas_interface_stats()
- PyU4V.performance.PerformanceFunctions.get_sdnas_node_keys()
- PyU4V.performance.PerformanceFunctions.get_sdnas_node_stats()
- PyU4V.performance.PerformanceFunctions.get_sdnas_server_keys()
- PyU4V.performance.PerformanceFunctions.get_sdnas_server_stats()
- zHyperLinkPorts have been added to PerformanceFunctions()
- PyU4V.performance.PerformanceFunctions.get_zhyperlink_port_keys()
- PyU4V.performance.PerformanceFunctions.get_zhyperlink_port_stats()
- Attribute added to PerformanceFunctions() for is_v4 array.
- PerformanceFunctions.get_performance_categories_list() has been changed to
retrieve categories via Unisphere REST endpoint instead of hard coded
category map.
- PerformanceFunctions.get_performance_metrics_list() has been changed to
retrieve metrics via Unisphere REST endpoint instead of hard coded metric
map.
- Performance category/metric map for diagnostic performance endpoints has
been removed entirely in favour of REST endpoints. Categories and metrics
are still obtained through the same functions, the underlying data retrieval
is the only thing to change.
- PerformanceFunctions.get_threshold_categories() now accepts an array_id to
accommodated difference in categories between V3/V4 systems.
- PerformanceFunctions.get_threshold_category_settings() now accepts an
array_id to accommodated difference in categories between V3/V4 systems.
- When generating threshold CSV files from
PerformanceFunctions.generate_threshold_settings_csv it is now possible to
set category as an input value to limit the CSV threshold to only that
category.
- CI tests for thresholds have been updated to target a default threshold
marked as KPI to ensure it has both first and second threshold values
populated before the test runs.
- Removed trailing white space from performance metrics in the metric map.
System Changes
--------------
- SystemFunctions.get_audit_log_record() has been updated to extract audit log
record details after changes were made to Unisphere REST responses. What is
returned to the user from PyU4V will not change.
- set_director_port_online function added.
CI Test Improvements
--------------------
- Performance CI tests will output dead metrics to screen when encountered
instead of just failing and moving on.
- Array performance CI tests have been improved to provide better coverage of
all metrics and reporting of dead metrics.
- Certain tests are skipped if they are version specific and CI array does not
meet required version (V3/V4)
Building URI with args deprecated
---------------------------------
This functionality as provided by PyU4V.common.CommonFunctions._build_uri_args
has been marked for deprecation since PyU4V 9.1 and has been fully removed in
the 10.0 release. The impact of this is such that the following methods must
be called with kwargs or specify target uri to form target URIs if you are
using them for access to custom REST endpoints.
- PyU4V.common.CommonFunctions.get_resource
- PyU4V.common.CommonFunctions.create_resource
- PyU4V.common.CommonFunctions.modify_resource
- PyU4V.common.CommonFunctions.delete_resource
Deprecated functions to be removed in 10.2
------------------------------------------
These functions will been removed entirely from the PyU4V code-base after the
required two release notification period.
- Old: PyU4V.provisioning.ProvisioningFunctions.create_multiport_port_group
- New: PyU4V.provisioning.ProvisioningFunctions.create_new_port_group
- Old: PyU4V.provisioning.ProvisioningFunctions.create_port_group
- New: PyU4V.provisioning.ProvisioningFunctions.create_new_port_group
Deprecated functions removed from code-base
-------------------------------------------
These functions have been removed entirely from the PyU4V code-base after the
required two release notification period.
common.py
~~~~~~~~~
PyU4V.common.CommonFunctions._build_uri_args
performance.py
~~~~~~~~~~~~~~
PyU4V.performance.PerformanceFunctions.get_fe_port_util_last4hrs
PyU4V.performance.PerformanceFunctions.get_all_fe_director_metrics
PyU4V.performance.PerformanceFunctions.get_director_info
replication.py
~~~~~~~~~~~~~~
PyU4V.replication.ReplicationFunctions.choose_snapshot_from_list_in_console
utils/console.py
~~~~~~~~~~~~~~~~
Entire file removed, PyU4V will not provide console level functionality
moving forward. Please handle this outside of PyU4V if it is required.
Refactored functions removed from code-base in favour of other functions
-------------------------------------------
These refactored functions take the format of...
Refactored (removed) function
New function to target
common.py
~~~~~~~~~
PyU4V.common.CommonFunctions.create_list_from_file
PyU4V.utils.file_handler.create_list_from_file
PyU4V.common.CommonFunctions.read_csv_values
PyU4V.utils.file_handler.read_csv_values
PyU4V.common.CommonFunctions.get_wlp_information
PyU4V.workload_planner.WLPFunctions.get_wlp_information
PyU4V.common.CommonFunctions.get_headroom
PyU4V.workload_planner.WLPFunctions.get_headroom
performance.py
~~~~~~~~~~~~~~
PyU4V.performance.PerformanceFunctions.get_perf_threshold_categories
PyU4V.performance.PerformanceFunctions.get_threshold_categories
PyU4V.performance.PerformanceFunctions.get_perf_category_threshold_settings
PyU4V.performance.PerformanceFunctions.get_threshold_category_settings
PyU4V.performance.PerformanceFunctions.set_perf_threshold_and_alert
PyU4V.performance.PerformanceFunctions.update_threshold
PyU4V.performance.PerformanceFunctions.set_perfthresholds_csv
PyU4V.performance.PerformanceFunctions.set_thresholds_from_csv
PyU4V.performance.PerformanceFunctions.get_fe_director_list
PyU4V.performance.PerformanceFunctions.get_frontend_director_keys
PyU4V.performance.PerformanceFunctions.get_fe_port_list
PyU4V.performance.PerformanceFunctions.get_frontend_port_keys
PyU4V.performance.PerformanceFunctions.get_fe_director_metrics
PyU4V.performance.PerformanceFunctions.get_frontend_director_stats
PyU4V.performance.PerformanceFunctions.get_fe_port_metrics
PyU4V.performance.PerformanceFunctions.get_frontend_port_stats
PyU4V.performance.PerformanceFunctions.get_array_metrics
PyU4V.performance.PerformanceFunctions.get_array_stats
PyU4V.performance.PerformanceFunctions.get_storage_group_metrics
PyU4V.performance.PerformanceFunctions.get_storage_group_stats
PyU4V.performance.PerformanceFunctions.get_port_group_metrics
PyU4V.performance.PerformanceFunctions.get_port_group_stats
PyU4V.performance.PerformanceFunctions.get_host_metrics
PyU4V.performance.PerformanceFunctions.get_host_stats
provisioning.py
~~~~~~~~~~~~~~~
PyU4V.provisioning.ProvisioningFunctions.get_mvs_from_host
PyU4V.provisioning.ProvisioningFunctions.get_masking_views_from_host
PyU4V.provisioning.ProvisioningFunctions.get_hostgroup
PyU4V.provisioning.ProvisioningFunctions.get_host_group
PyU4V.provisioning.ProvisioningFunctions.get_hostgroup_list
PyU4V.provisioning.ProvisioningFunctions.get_host_group_list
PyU4V.provisioning.ProvisioningFunctions.create_hostgroup
PyU4V.provisioning.ProvisioningFunctions.create_host_group
PyU4V.provisioning.ProvisioningFunctions.modify_hostgroup
PyU4V.provisioning.ProvisioningFunctions.modify_host_group
PyU4V.provisioning.ProvisioningFunctions.delete_hostgroup
PyU4V.provisioning.ProvisioningFunctions.delete_host_group
PyU4V.provisioning.ProvisioningFunctions.get_masking_views_by_host
PyU4V.provisioning.ProvisioningFunctions.get_masking_views_by_initiator_group
PyU4V.provisioning.ProvisioningFunctions.get_common_masking_views
PyU4V.provisioning.ProvisioningFunctions.get_port_group_common_masking_views
PyU4V.provisioning.ProvisioningFunctions.get_host_from_maskingview
PyU4V.provisioning.ProvisioningFunctions.get_host_from_masking_view
PyU4V.provisioning.ProvisioningFunctions.get_storagegroup_from_maskingview
PyU4V.provisioning.ProvisioningFunctions.get_storage_group_from_masking_view
PyU4V.provisioning.ProvisioningFunctions.get_portgroup_from_maskingview
PyU4V.provisioning.ProvisioningFunctions.get_port_group_from_masking_view
PyU4V.provisioning.ProvisioningFunctions.get_maskingview_connections
PyU4V.provisioning.ProvisioningFunctions.get_masking_view_connections
PyU4V.provisioning.ProvisioningFunctions.find_host_lun_id_for_vol
PyU4V.provisioning.ProvisioningFunctions.find_host_lun_id_for_volume
PyU4V.provisioning.ProvisioningFunctions.get_portgroup
PyU4V.provisioning.ProvisioningFunctions.get_port_group
PyU4V.provisioning.ProvisioningFunctions.get_portgroup_list
PyU4V.provisioning.ProvisioningFunctions.get_port_group_list
PyU4V.provisioning.ProvisioningFunctions.get_ports_from_pg
PyU4V.provisioning.ProvisioningFunctions.get_ports_from_port_group
PyU4V.provisioning.ProvisioningFunctions.get_target_wwns_from_pg
PyU4V.provisioning.ProvisioningFunctions.get_target_wwns_from_port_group
PyU4V.provisioning.ProvisioningFunctions.create_portgroup
PyU4V.provisioning.ProvisioningFunctions.create_port_group
PyU4V.provisioning.ProvisioningFunctions.create_multiport_portgroup
PyU4V.provisioning.ProvisioningFunctions.create_multiport_port_group
PyU4V.provisioning.ProvisioningFunctions.create_portgroup_from_file
PyU4V.provisioning.ProvisioningFunctions.create_port_group_from_file
PyU4V.provisioning.ProvisioningFunctions.modify_portgroup
PyU4V.provisioning.ProvisioningFunctions.modify_port_group
PyU4V.provisioning.ProvisioningFunctions.delete_portgroup
PyU4V.provisioning.ProvisioningFunctions.delete_port_group
PyU4V.provisioning.ProvisioningFunctions.get_slo_list
PyU4V.provisioning.ProvisioningFunctions.get_service_level_list
PyU4V.provisioning.ProvisioningFunctions.get_slo
PyU4V.provisioning.ProvisioningFunctions.get_service_level
PyU4V.provisioning.ProvisioningFunctions.modify_slo
PyU4V.provisioning.ProvisioningFunctions.modify_service_level
PyU4V.provisioning.ProvisioningFunctions.get_mv_from_sg
PyU4V.provisioning.ProvisioningFunctions.get_masking_view_from_storage_group
PyU4V.provisioning.ProvisioningFunctions.get_num_vols_in_sg
PyU4V.provisioning.ProvisioningFunctions.get_num_vols_in_storage_group
PyU4V.provisioning.ProvisioningFunctions.is_child_sg_in_parent_sg
PyU4V.provisioning.ProvisioningFunctions.is_child_storage_group_in_parent_storage_group
PyU4V.provisioning.ProvisioningFunctions.get_child_sg_from_parent
PyU4V.provisioning.ProvisioningFunctions.get_child_storage_groups_from_parent
PyU4V.provisioning.ProvisioningFunctions.create_non_empty_storagegroup
PyU4V.provisioning.ProvisioningFunctions.create_non_empty_storage_group
PyU4V.provisioning.ProvisioningFunctions.create_empty_sg
PyU4V.provisioning.ProvisioningFunctions.create_empty_storage_group
PyU4V.provisioning.ProvisioningFunctions.add_existing_vol_to_sg
PyU4V.provisioning.ProvisioningFunctions.add_existing_volume_to_storage_group
PyU4V.provisioning.ProvisioningFunctions.add_new_vol_to_storagegroup
PyU4V.provisioning.ProvisioningFunctions.add_new_volume_to_storage_group
PyU4V.provisioning.ProvisioningFunctions.create_volume_from_sg_return_dev_id
PyU4V.provisioning.ProvisioningFunctions.create_volume_from_storage_group_return_id
PyU4V.provisioning.ProvisioningFunctions.add_child_sg_to_parent_sg
PyU4V.provisioning.ProvisioningFunctions.add_child_storage_group_to_parent_group
PyU4V.provisioning.ProvisioningFunctions.remove_child_sg_from_parent_sg
PyU4V.provisioning.ProvisioningFunctions.remove_child_storage_group_from_parent_group
PyU4V.provisioning.ProvisioningFunctions.update_storagegroup_qos
PyU4V.provisioning.ProvisioningFunctions.update_storage_group_qos
PyU4V.provisioning.ProvisioningFunctions.remove_vol_from_storagegroup
PyU4V.provisioning.ProvisioningFunctions.remove_volume_from_storage_group
PyU4V.provisioning.ProvisioningFunctions.delete_storagegroup
PyU4V.provisioning.ProvisioningFunctions.delete_storage_group
PyU4V.provisioning.ProvisioningFunctions.get_vol_effective_wwn_details_84
PyU4V.provisioning.ProvisioningFunctions.get_volume_effective_wwn_details
PyU4V.provisioning.ProvisioningFunctions.get_vols_from_storagegroup
PyU4V.provisioning.ProvisioningFunctions.get_volumes_from_storage_group
PyU4V.provisioning.ProvisioningFunctions.get_storagegroup_from_vol
PyU4V.provisioning.ProvisioningFunctions.get_storage_group_from_volume
PyU4V.provisioning.ProvisioningFunctions.is_volume_in_storagegroup
PyU4V.provisioning.ProvisioningFunctions.is_volume_in_storage_group
replication.py
~~~~~~~~~~~~~~
PyU4V.replication.ReplicationFunctions.get_storage_group_rep
PyU4V.replication.ReplicationFunctions.get_storage_group_replication_details
PyU4V.replication.ReplicationFunctions.get_storage_group_rep_list
PyU4V.replication.ReplicationFunctions.get_replication_enabled_storage_groups
PyU4V.replication.ReplicationFunctions.get_storagegroup_snapshot_list
PyU4V.replication.ReplicationFunctions.get_storage_group_snapshot_list
PyU4V.replication.ReplicationFunctions.create_storagegroup_snap
PyU4V.replication.ReplicationFunctions.create_storage_group_snapshot
PyU4V.replication.ReplicationFunctions.get_storagegroup_snapshot_generation_list
PyU4V.replication.ReplicationFunctions.get_storage_group_snapshot_generation_list
PyU4V.replication.ReplicationFunctions.modify_storagegroup_snap
PyU4V.replication.ReplicationFunctions.modify_storage_group_snapshot
PyU4V.replication.ReplicationFunctions.delete_storagegroup_snapshot
PyU4V.replication.ReplicationFunctions.delete_storage_group_snapshot
PyU4V.replication.ReplicationFunctions.is_vol_in_rep_session
PyU4V.replication.ReplicationFunctions.is_volume_in_replication_session
PyU4V.replication.ReplicationFunctions.are_vols_rdf_paired
PyU4V.replication.ReplicationFunctions.are_volumes_rdf_paired
PyU4V.replication.ReplicationFunctions.get_storagegroup_srdfg_list
PyU4V.replication.ReplicationFunctions.get_storage_group_srdf_group_list
PyU4V.replication.ReplicationFunctions.get_storagegroup_srdf_details
PyU4V.replication.ReplicationFunctions.get_storage_group_srdf_details
PyU4V.replication.ReplicationFunctions.create_storagegroup_srdf_pairings
PyU4V.replication.ReplicationFunctions.create_storage_group_srdf_pairings
PyU4V.replication.ReplicationFunctions.modify_storagegroup_srdf
PyU4V.replication.ReplicationFunctions.modify_storage_group_srdf
PyU4V.replication.ReplicationFunctions.suspend_storagegroup_srdf
PyU4V.replication.ReplicationFunctions.suspend_storage_group_srdf
PyU4V.replication.ReplicationFunctions.establish_storagegroup_srdf
PyU4V.replication.ReplicationFunctions.establish_storage_group_srdf
PyU4V.replication.ReplicationFunctions.failover_storagegroup_srdf
PyU4V.replication.ReplicationFunctions.failover_storage_group_srdf
PyU4V.replication.ReplicationFunctions.failback_storagegroup_srdf
PyU4V.replication.ReplicationFunctions.failback_storage_group_srdf
PyU4V.replication.ReplicationFunctions.delete_storagegroup_srdf
PyU4V.replication.ReplicationFunctions.delete_storage_group_srdf
version 9.2.1.4
===============
- added enable/disable consistency feature to modify_storage_group_srdf
function in replication
- Updated add_existing_volume_to_storage_group to create RDF pairings.
- made srdfg number mandatory in delete_storage_group_srdf, added filters
options, removed unit test test_delete_storagegroup_srdf_no_number
- updated constants file ISCSI_IQN_SEARCH_PATTERN = (
'^iqn.\\d{1,4}-\\d{2}.(?:com|org).\\w{1,}:(?:\\d{2}:)*'
'[0-9a-fA-F]{1,32}$||.[0-9A-Fa-f]{16}')
added test to ci_utils.py test_iscsi_regex
- added relink to modify_storage_group_snapshot and
modify_storage_group_snapshot_snapsetid
version 9.2.1.3
===============
- added enable_mobility id to provisioning functions create_storage_group,
add_new_volume_to_storage_group, create_volume_from_storage_group_return_id
- added get_snapshot_policy_storage_group_list to snapshot_policy functions
Version 9.2.1.2 - released 08/03/21
===================================
- support for changing local users passwords via REST, requires Unipshere 9.2.1
change_local_user_password function added.
Version 9.2.1.1 - released 15/02/21
===================================
- Support for Snapshot Policy compliance
- Refactoring of snapshot policy modification by operation.
Version 9.2.0.8 - released 05/02/21
===================================
- Update __init__.py to reflect the correct version
- Update the docs to reflect new version
Version 9.2.0.7 - released 03/02/21
===================================
- Fix for Python 3.9.1
- Fix for exception in get_storage_group_snapshot_list if no snapshot exists.
- CI fix of test_is_volume_in_replication_session.
- Upgrade of pep8.
- Addition of .gitattributes for unix LF checkin only.
- New default parameter for get metro DR details.
Version 9.2.0.5 - released 18/12/20
===================================
- Fix for system CI test to select only FE/SE/BE/RDF director:
- PyU4V.tests.ci_tests.test_pyu4v_ci_system.CITestSystem.test_get_director_port_list
- New optional parameter snapshot_policy_ids in create_non_empty_storage_group
and create_empty_storage_group
Version 9.2.0.4 - released 9/12/20
==================================
- Fix for metro_dr delete function
- Fix for metro_dr added recover option
- Fix for CI tests:
- PyU4V.tests.ci_tests.test_pyu4v_ci_system.CITestSystem._test_get_health_check_details
- PyU4V.tests.ci_tests.test_pyu4v_ci_system.CITestSystem.test_get_ip_interface_list
- PyU4V.tests.ci_tests.test_pyu4v_ci_system.CITestSystem.test_get_ip_interface
- Added Force Option to metro dr restore
- Application-Type header is now set by default to 'PyU4V-{version}'
Version 9.2.0.3 - released 7/12/20
==================================
- Masking View performance support has been added to performance.py
- PyU4V.performance.PerformanceFunctions.get_masking_view_keys
- PyU4V.performance.PerformanceFunctions.get_masking_view_stats
- Director list, Port list, IP interface list, and get IP interface details
have been added to system.py
- PyU4V.system.SystemFunctions.get_director_list
- PyU4V.system.SystemFunctions.get_director_port_list
- PyU4V.system.SystemFunctions.get_ip_interface_list
- PyU4V.system.SystemFunctions.get_ip_interface
- Array storage level details are now available via provisioning.py
- PyU4V.provisioning.ProvisioningFunctions.get_array
- Array level WLP capabilities are now accessible in workload_planner.py
- PyU4V.workload_planner.WLPFunctions.get_capabilities
- array_id is now an optional parameter for the following functions:
- PyU4V.replication.ReplicationFunctions.get_array_replication_capabilities
- PyU4V.migration.MigrationFunctions.get_migration_info
- PyU4V.migration.MigrationFunctions.get_array_migration_capabilities
Version 9.2.0.2 - released 14/10/20
===================================
- When generating threshold CSV files from
PerformanceFunctions.generate_threshold_settings_csv it is now possible to
set category as an input value to limit the CSV threshold file to only that
performance category.
- CI tests for thresholds have been updated to target a default threshold
marked as KPI to ensure it has both first and second threshold values
populated before the test runs.
- Removed trailing white space from two performance metrics in the metric map,
'BEDisk ReadResponseTime ' is now 'BEDiskReadResponseTime' in diagnostic
category 'DeviceGroup', and, 'BEReadRequestTime ' is now 'BEReadRequestTime'
in category 'StorageContainer'.
Version 9.2.0.1 - released 12/10/20
===================================
- Tighten base CI tests around RDF group creation and deletion.
- Update Unisphere minimum version to reflect 9.2 GA Unisphere version.
Version 9.2.0.0 - released 29/09/20
===================================
Snap id Support
---------------
Functions added:
- get_storage_group_snapshot_snap_id_list
- get_snapshot_snap_id_details
- find_expired_snapvx_snapshots_by_snap_ids
- modify_storage_group_snapshot_by_snap_id
- restore_snapshot_by_snap_id
- rename_snapshot_by_snap_id
- link_snapshot_by_snap_id
- unlink_snapshot_by_snap_id
- delete_storage_group_snapshot_by_snap_id
Snapshot Policy Functions
-------------------------
Functions added:
- get_snapshot_policy_list
- get_snapshot_policy
- create_snapshot_policy
- modify_snapshot_policy
- delete_snapshot_policy
Functions modified:
- create_storage_group
System Enhancements
-------------------
- Users can now export (download) and import (upload) both Unisphere and array
system settings combined or individually using system calls. Settings can
be written to a zip file or returned to the caller function as binary data
so file writing can be handled outside of PyU4V or uploaded directly to
Unisphere without the need for file handling. Users can call the following
system functions for settings download/upload:
- download_all_settings()
- download_unisphere_settings()
- download_system_settings()
- upload_settings()
- Users can retrieve array audit logs from PyU4V for specified time ranges,
obtain information about specific audit logs, or export an audit log to
.pdf document locally.
- Support for alerts has now been included, users can get alert summary,
detailed info, acknowledge and delete alerts.
Replication
-----------
Functions modified:
- get_rdf_group() now has the ability to take array_id as an input param
Metro DR
--------
Functions added:
- create_metrodr_environment
- delete_metrodr_environment
- modify_metrodr_environment
- convert_to_metrodr_environment
Performance (Diagnostic)
------------------------
Functions added:
- is_array_diagnostic_performance_registered
- is_array_real_time_performance_registered
- get_array_registration_details
- enable_diagnostic_data_collection
- disable_diagnostic_data_collection
- enable_real_time_data_collection
- disable_real_time_data_collection
- backup_performance_database
Functions marked for deprecation:
- is_array_performance_registered in favour of
is_array_diagnostic_performance_registered
Removed Categories:
- Core
- Disk
- Disk Technology Pool
- External Director
- External Disk Group
- Initiator by Port
- Storage Group by Pool
- Storage Resource by Pool
Performance (Real-time)
-----------------------
- Users now have access to Unisphere real-time performance functions. These
calls are accessed through PyU4V.performance.real_time. All Unisphere for
PowerMax real-time categories and metrics are supported.
Documentation
-------------
- Code examples have been moved to docs/source/programmers_guide_src/code
for ease of reference in main documentation
- Programmers Guide Examples section has been re-structured for ease of
navigation.
Miscellaneous
-------------
- PyLint has been updated to 2.6.0 in test suite
- Deprecation/refactoring notices have been updated from 9.3 to 10.0 where
applicable
- Add long description to setup.py for PyPi
- Fix short description in setup.py for PyPi
- Change url to reflect move to dell GitHub repo in setup.py for PyPi
- Add supported Python versions 3.8 & 3.9
- Docstring kwargs have been updated with ":key [param]:" where applicable
- Minimum Unisphere version has been updated to v9.2.0.0
Version 9.1.5.0 - released 21/09/20
===================================
Bug fixes
---------
- Fixed a bug in performance CI tests where tests would fail if there was no
provisioned assets in certain performance categories. The tests will skip now
instead of failing.
Version 9.1.4.0 - released 09/09/20
===================================
Bug Fixes
---------
- GitHub Issue #93 (https://github.com/dell/PyU4V/issues/93) has been resolved.
Users can now create storage groups with volumes in the same request where no
service level has been specified as an input parmaeter or service level is
set to None. In addition, another bug found whilst fixing #93 whereby storage
groups with no service level set were created with no storage resource pool
regardless of user input parameter value.
- GitHub Issue #92 (https://github.com/dell/PyU4V/issues/92) has been resolved.
User documentation has been updated to correct the error in the path to
set a custom PyU4V.conf location.
Version Control
---------------
- Pep8 test suite flake8 package version has been upgraded to 3.8.3
- Pylint test suite package version has been upgraded to 2.5.3
Quality Control
---------------
- The change to Pylint version resulted in more stringent code analysis, as
such a number of changes were made in the following files to bring the code
rating back up to 10.0/10.0:
- PyU4V/common.py
- PyU4V/performance.py
- PyU4V/provisioning.py
- PyU4V/tools/openstack/migrate_utils.py
Version 9.1.3.0 - released 19/01/20
===================================
Replication Enhancements
-------------------------
RDF functions added
-------------------
-create_rdf_group
-modify_rdf_group
-delete_rdf_group
-get_rdf_port_connections
-get_rdf_director_port_details
-get_rdf_director_ports
-get_rdf_director
-get_rdf_director_list
-create_storage_group_from_rdfg
BugFix
---------
update to rest_requests header parameter corrected to application-type line 54
Version 9.1.2.0 - released 19/12/19
===================================
Provisioning Enhancements
-------------------------
- add_new_volume_to_storage_group : added functionality to be able to add
volumes to SRDF protected storage groups, new volumes will automatically be
protected with SRDF, volumes are added to the remote storage group to fully
automate the provisioning and simplify operations. Storage group must be
local to the unisphere instance and only works with storage groups that
contain R1 or R11 devices.
- remove_volume_from_storage_group enhanced to be able to automatically remove
volumes from local and remote storage groups deleting srdf pairs as part of
the process, no need to suspend, the automation takes care of everything,
storage group must be local to the unisphere instance and only works with
storage groups that contain R1 or R11 devices.
Replication Enhancements
-------------------------
- create_storage_group_snapshot added secure option to enable creation of
secure snapshot
Version 9.1.1.0 - released 12/12/19
===================================
Fixes
-----
- During Provisioning CI tests, only check storage groups for compression
related values if compression is present and enabled.
- OpenStack migrate tool and corresponding documentation
Version 9.1.0.0 - released 4/12/19
==================================
Enhancements
------------
- Changed from MIT License to Apache 2.0 License
- Python 2.7 has been removed as a supported Python version in advance of
discontinued community support
- Doc strings have been standardised through out PyU4V
- Snake case has been implemented across method names and old methods set for
deprecation (see refactoring/deprecation list below)
- Unisphere version has been moved from a user-set variable to a constant set
by PyU4V.
- If the user does not supply environment settings or they cannot be loaded
from the config file an exception is raised during initialisation of
U4VConn()
- Imports have been correctly implemented so class instances are not passed
around except for the rest_client
- List/Dict comprehension have been cleaned up
- Decorators have been created for deprecating/refactoring methods, see section
'Refactoring & Deprecation' below
- Methods have been changed from old build_uri method to new build_uri method
so there are zero hard coded endpoints
- Workload Planner functions have been moved out of common.py and into their
own file workload_planner.py
- File handling functions have been moved to utils.file_handler.py
- Added .gitignore file to prevent any unwanted files merging with upstream
repo
- Logger log level now only set in one place in PyU4V.conf
- Logger rotating file handler set up to create log files no bigger than 10MB
and rotate through 10 of them with the most recent always being PyU4V.log
- Separate handling of SSLError, Timeout, HTTPError, and ConnectionError REST
exceptions, allows for more granularity when diagnosing problems
- PyU4V will run a Unisphere validation check in U4VConn() __init__, if the
version does not meet the required minimum set the driver gracefully exits
- A new REST header has been added called user-agent which specifies the
current version of PyU4V in use, the platform running it and release
information, and the Python version in use
- System endpoints have been added to PyU4V, enhancements feature system health
checks, disk, and tag information
- Users can write dictionary to CSV from utils.file_handler
- CSV reader can convert string representations of boolean and float values to
the correct type for processing
- Page list iterator now can iterate through all pages automatically, merge all
results into one list and return to the user
- Performance section had a complete overhaul, from top to bottom it is an
entirely new section. Old methods have been fixed but all marked for
deprecation. For more information see 'Refactoring & Deprecation' section
below
- Performance constants have been moved out of the package wide constants file
into their own performance_constants file
- PyU4V README and ReadTheDocs had a complete overhaul from their previous
state and can be considered complete revisions
- Retry decorator added to decorators.py to allow functions to be attempted
multiple times before failing.
- Check if a given string is a valid ipv4 or ipv6 address
- Functions now expect integer numbers instead of string representations of
numbers expected by the Unisphere REST API, the intention is to make the use
of PyU4V as simple as possible and let us take care of casting required types
- Online Device Expansion is included presenting users with the ability to
extend R2 devices in the same operation as extending R1 devices.
Provisioning Enhancements
-------------------------
- get_available_initiator_wwn_as_list() : Get a list of available initiator
WWNs
- get_in_use_initiator() : Get an initiator that is in use filterable by
director type
- get_available_initiator() : Get an available initiator filterable by director
type
- get_fa_directors() : Get all FA directors on the array.
- get_active_masking_view_connections() : Get list of active connections from
any masking view
- format_director_port : Format separate director port into single string
- get_any_director_port : Get a non-GuestOS port from a director
Fixes
-----
- When searching for volumes by volume name, if more than one volume matches
the input volume name a list of volume device IDs will be returned, if only
one volume is matched just that device ID is returned as a string
- Fix for establishing a session when none exists during rest requests
- PyU4V.conf loading on Windows from user home directory now working as
intended from default location of ~/.PyU4V
- Removed CFG from header of univmax_conn.py and set it in __init__ so users
file_path is now read as intended
- Removed CFG from header of utils files, it was unnecessary to have it
included there, it only needs set once in U4VConn()
- The function migration.get_storage_group_list() set includeMigrations to
False incorrectly returns all SGs in the migratingNames list, a new function
migration.get_storage_groups() has been added which returns the default
response of a dict containing all SG names and those SGs which are part of a
migration session
- The function migration.delete_environment() was deleted as it is a duplicate
of function migration.delete_migration_environment()
- CSV writer has been changed to use correct file writing modes and practices
- Pull #30 Modify initiator reverses alias name during a rename operation
- Pull #34 Get target wwn fails to split director:port return value
- Pull #38 Incorrect type in docstring of get_size_of_device_on_array
- Split returned port ids correctly during port group create/modify operations.
Tests
-----
- 100% unit test coverage with all tests running cleanly across both unit and
CI
- All suitable functions now have a respective Continuous Integration (CI) test
- Extensive CI test coverage
- Requests session establish is tested instead of mocking behaviour
- Fake request session mock has been changed so it does not adversely affect
other tests when full suite of tests is run
Refactoring & Deprecations
--------------------------
The following methods have either been refactored and marked for deprecation
after PyU4V 9.3 or just marked for deprecation with no refactoring. To reduce
the impact on end-users which may use these methods in their scripts an n+2
deprecation policy has been adopted.
For any methods marked for deprecation in the current release, they will need
to remain in PyU4V for two full releases before being completely removed. As
this policy has only just been implemented for PyU4V 9.1, all methods below
marked for deprecation after PyU4V 9.3 will be removed entirely in PyU4V 9.4 or
whatever the equivalent version is for n+2.
It is assumed that after two full releases users will have had enough time and
notice to make the required changes in their code. Any methods which have been
refactored in favour of other methods will be clearly marked in the associated
logs generated when a refactored function is in use.
PyU4V/common.py
---------------
- _build_uri_args() has been marked for deprecation, please use new format
_build_uri()
- create_list_from_file() has been refactored and marked for deprecation,
please use alternative function utils.file_handler.create_list_from_file()
- read_csv_values() has been refactored and marked for deprecation, please
use alternative function utils.file_handler.read_csv_values()
- get_wlp_information() has been refactored and marked for deprecation, please
use alternative function WLPFunctions.get_wlp_information()
- get_headroom() has been refactored and marked for deprecation, please use
alternative function WLPFunctions.get_headroom()
PyU4V/performance.py
--------------------
- get_perf_threshold_categories() has been refactored and marked for
deprecation, please use alternative function get_threshold_categories()
- get_perf_category_threshold_settings() has been refactored and marked for
deprecation, please use alternative function
get_category_threshold_settings()
- set_perf_threshold_and_alert() has been refactored and marked for
deprecation, please use alternative function update_threshold()
- set_perfthresholds_csv() has been refactored and marked for deprecation,
please use alternative function update_threshold()
- get_fe_director_list() has been refactored and marked for deprecation,
please use alternative function get_frontend_director_keys()
- get_fe_port_list() has been refactored and marked for deprecation,
please use alternative function get_frontend_port_keys()
- get_fe_port_util_last4hrs() has been marked for deprecation, use standard get
FE Director performance stats call and specify the start and end time
manually
- get_fe_director_metrics() has been refactored and marked for deprecation,
please use alternative function get_frontend_director_stats()
- get_fe_port_metrics() has been refactored and marked for deprecation,
please use alternative function get_frontend_port_stats()
- get_array_metrics() has been refactored and marked for deprecation,
please use alternative function get_array_stats()