File: oci-cluster-upgrade-openstack-release

package info (click to toggle)
openstack-cluster-installer 43.0.19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,540 kB
  • sloc: php: 19,150; sh: 18,091; ruby: 75; makefile: 31; xml: 8
file content (1238 lines) | stat: -rwxr-xr-x 149,311 bytes parent folder | download
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
#!/bin/sh

set -e
#set -x

ME=$(basename $0)

. /usr/bin/oci-cluster-upgrade-funcs

usage () {
	echo "Usage: $0 --partial <CLUSTER_NAME> <FROM_OS_RELEASE> <TO_OS_RELEASE>"
	exit 1
}

PARTIAL_UPGRADE=no
if [ "${1}" = "--partial" ] ; then
	PARTIAL_UPGRADE=yes
	shift
fi

if [ $# != 3 ] ; then
	usage
fi

ALL_SERVICES_CTRL="aodh-api aodh-evaluator aodh-expirer aodh-listener aodh-notifier barbican-api barbican-keystone-listener barbican-worker ceilometer-agent-central ceilometer-agent-notification ceilometer-polling cinder-api cinder-backup cinder-scheduler cinder-volume cloudkitty-api cloudkitty-processor glance-api gnocchi-api gnocchi-metricd gnocchi-statsd heat-api-cfn heat-api heat-engine keystone magnum-api magnum-conductor neutron-api neutron-dhcp-agent neutron-l3-agent neutron-metadata-agent neutron-metering-agent neutron-openvswitch-agent neutron-rpc-server nova-api nova-api-metadata nova-compute nova-conductor nova-novncproxy nova-scheduler octavia-api octavia-health-manager octavia-housekeeping octavia-worker panko-api placement-api neutron-api neutron-rpc-server"
ALL_SERVICES_VOL="cinder-backup cinder-volume"
ALL_SERVICES_NET="neutron-dhcp-agent neutron-l3-agent neutron-metadata-agent neutron-metering-agent neutron-openvswitch-agent"
ALL_SERVICES_COMP="ceilometer-agent-compute cinder-backup cinder-volume neutron-dhcp-agent neutron-l3-agent neutron-metadata-agent neutron-metering-agent neutron-openvswitch-agent nova-compute"
ALL_SERVICES_MSG="gnocchi-api gnocchi-metricd gnocchi-statsd cloudkitty-api cloudkitty-processor"

CLUSTER_NAME=${1}
FROM_OS_RELEASE=${2}
TO_OS_RELEASE=${3}
CUR_REL=$(lsb_release -c -s)
FROM_DEB_RELEASE=${CUR_REL}
TO_DEB_RELEASE=${CUR_REL}

wrong_to_openstack_release () {
	echo "Cannot upgrade from ${FROM_OS_RELEASE} to ${TO_OS_RELEASE}"
	exit 1
}

case "${FROM_OS_RELEASE}" in
"victoria")
	if [ "${TO_OS_RELEASE}" != "wallaby" ] ; then wrong_to_openstack_release ; fi
;;
"wallaby")
	if [ "${TO_OS_RELEASE}" != "xena" ] ; then wrong_to_openstack_release ; fi
;;
"xena")
	if [ "${TO_OS_RELEASE}" != "yoga" ] ; then wrong_to_openstack_release ; fi
;;
"yoga")
	if [ "${TO_OS_RELEASE}" != "zed" ] ; then wrong_to_openstack_release ; fi
;;
"zed")
	if [ "${TO_OS_RELEASE}" != "antelope" ] ; then wrong_to_openstack_release ; fi
;;
"antelope")
	if [ "${TO_OS_RELEASE}" != "bobcat" ] && [ "${TO_OS_RELEASE}" != "caracal" ] ; then wrong_to_openstack_release ; fi
;;
"bobcat")
	if [ "${TO_OS_RELEASE}" != "caracal" ] ; then wrong_to_openstack_release ; fi
;;
"caracal")
	if [ "${TO_OS_RELEASE}" != "dalmatian" ] && [ "${TO_OS_RELEASE}" != "epoxy" ] ; then wrong_to_openstack_release ; fi
;;
"dalmatian")
	if [ "${TO_OS_RELEASE}" != "epoxy" ] ; then wrong_to_openstack_release ; fi
;;
"epoxy")
	if [ "${TO_OS_RELEASE}" != "flamingo" ] && [ "${TO_OS_RELEASE}" != "gazpacho" ] ; then wrong_to_openstack_release ; fi
;;
"flamingo")
	if [ "${TO_OS_RELEASE}" != "gazpacho" ] ; then wrong_to_openstack_release ; fi
;;
"gazpacho")
	echo "Upgrading from Gazpacho is currently not supported"
	exit 1
;;
*)
	echo "Upgrading from the OpenStack release ${FROM_OS_RELEASE} is currently not supported (or not recognized)."
	exit 1
;;
esac

########################
### KEYSTONE UPGRADE ###
########################
stop_keystone_services () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Stopping keystone on ${HOST_NAME}"
	if [ "${FROM_OS_RELEASE}" = "rocky" ] ; then
		# If we're with Train, Keystone is still running on Apache, so we disable it there and restart apache.
		sshi root@${HOST_IP} "sed -i \"s/Listen ${HOST_IP}:5000//\" /etc/apache2/ports.conf"
		sshi root@${HOST_IP} "sed -i \"s/Listen ${HOST_IP}:35357//\" /etc/apache2/ports.conf"
		sshi root@${HOST_IP} "a2dissite 10-keystone_wsgi_admin.conf ; a2dissite 10-keystone_wsgi_main.conf"
		sshi root@${HOST_IP} "systemctl restart apache2"
		sshi root@${HOST_IP} "HOSTNAME=\$(hostname --fqdn) ; if [ -e /etc/keystone/ssl/private/\${HOSTNAME}.key ] ; then mv /etc/keystone/ssl/private/\${HOSTNAME}.key /etc/keystone/ssl/private/\${HOSTNAME}.pem ; fi"
	fi
	sshi root@${HOST_IP} "systemctl stop keystone || true ; systemctl disable keystone || true ; systemctl mask keystone || true"
}

upgrade_keystone () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Upgrading keystone on ${HOST_NAME}"
	sshi root@${HOST_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold keystone"
}

start_keystone_services () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Starting keystone on ${HOST_NAME}"
	sshi root@${HOST_IP} "systemctl unmask keystone ; systemctl enable keystone ; systemctl start keystone"
}

drain_keystone_backend () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Draining ${HOST_NAME} from keystonepubbe backend"
	sshi root@${ONE_CTRL_IP} "hapc drain-server --backend keystonepubbe --server ${HOST_NAME} --verbose --wait"
}

enable_keystone_backend () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Emabling Draining ${HOST_NAME} in keystonepubbe backend"
	sshi root@${ONE_CTRL_IP} "hapc enable-server --backend keystonepubbe --server ${HOST_NAME} --verbose"
}

cluster_upgrade_keystone () {
	green_echo "===> Upgrading Keystone"

	# Upgrade frist controller
	green_echo "-> Draining ${ONE_CTRL_HOST} keystone backend"
	sshi root@${ONE_CTRL_IP} "hapc drain-server --backend keystonepubbe --server ${ONE_CTRL_HOST} --verbose --wait"

# This fails for keystone, so we wont stop it, drain is enough...
#	green_echo "-> Stopping keystone on ${ONE_CTRL_HOST}"
#	sshi root@${ONE_CTRL_IP} "systemctl stop keystone || true ; systemctl disable keystone || true ; systemctl mask keystone || true"

	green_echo "-> Upgrading keystone on ${ONE_CTRL_HOST}"
	sshi root@${ONE_CTRL_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold keystone"

# This fails for keystone, so we wont stop it, drain is enough...
#	green_echo "-> Starting keystone on ${ONE_CTRL_HOST}"
#	sshi root@${ONE_CTRL_IP} "systemctl unmask keystone ; systemctl enable keystone ; systemctl start keystone"

	sleep 2

	# Do the db_sync
	green_echo "===> Running keystone-manage db_sync"
	sshi root@${ONE_CTRL_IP} "keystone-manage db_sync"

	green_echo "===> Restart Keystone on ${ONE_CTRL_HOST}"
	sshi root@${ONE_CTRL_IP} "systemctl restart keystone"

	green_echo "-> Activating ${ONE_CTRL_HOST} keystone backend"
	sshi root@${ONE_CTRL_IP} "hapc enable-server --backend keystonepubbe --server ${ONE_CTRL_HOST} --verbose"

	# Upgrade all other controllers
	green_echo "-> Draining all other Keystone backends"
	iterate_on_hosts "${OTHER_CTRL}" drain_keystone_backend

# Same here.
#	green_echo "-> Stopping Keystone on all other controllers"
#	iterate_on_hosts "${OTHER_CTRL}" stop_keystone_services

	green_echo "-> Upgrading Keystone on all controllers"
	iterate_on_hosts "${OTHER_CTRL}" upgrade_keystone

# And therefore here.
#	green_echo "-> Starting Keystone on all other controllers"
#	iterate_on_hosts "${OTHER_CTRL}" start_keystone_services

	sleep 2

	green_echo "-> Activating all other controllers backend"
	iterate_on_hosts "${OTHER_CTRL}" enable_keystone_backend
}

#######################
### NEUTRON UPGRADE ###
#######################
upgrade_ovs () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Upgrading OVS on ${HOST_NAME}"
	# Because we're rebooting just after this, let's install latest kernel at the same time...

	if sshi root@${HOST_IP} "dpkg-query -W openvswitch-common" ; then
		CUR_OVS_VERSION=$(sshi root@${HOST_IP} "dpkg-query -W openvswitch-common | awk '{print \$2}'" 2>/dev/null)
		NEXT_OVS_VERSION=$(sshi root@${HOST_IP} "apt-cache policy openvswitch-common | grep Candidate: | awk '{print \$2}'" 2>/dev/null)

		if dpkg --compare-versions ${NEXT_OVS_VERSION} gt ${CUR_OVS_VERSION} ; then
			sshi root@${HOST_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold openvswitch-common openvswitch-switch python3-openvswitch linux-image-amd64"

			green_echo "-> Rebooting ${HOST_NAME} after OVS upgrade"
			sshi root@${HOST_IP} "reboot" || true
			sleep 5
			wait_for_ssh ${HOST_IP}

			green_echo "-> Waiting 10 seconds for network to settle on ${HOST_NAME} after OVS upgrade"
			sleep 10
			green_echo "-> Restarting neutron-openvswitch-agent on ${HOST_NAME}"
			sshi root@${HOST_IP} "if [ -e /etc/init.d/neutron-openvswitch-agent ] ; then /etc/init.d/neutron-openvswitch-agent stop ; sleep 1 ; /etc/init.d/neutron-openvswitch-agent start ; fi"

			green_echo "-> Waiting 20 seconds for OVS agent to settle on ${HOST_NAME}"
			sleep 10
			green_echo "-> Restarting neutron-l3-agent on ${HOST_NAME}"
			sshi root@${HOST_IP} "if [ -e /etc/init.d/neutron-l3-agent ] ; then /etc/init.d/neutron-l3-agent stop ; sleep 1 ; /etc/init.d/neutron-l3-agent start ; fi"
		fi
	fi
}

stop_neutron_server () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Stopping Neutron on ${HOST_NAME}"
	sshi root@${HOST_IP} "systemctl stop neutron-api ; systemctl stop neutron-rpc-server ; systemctl disable neutron-api ; systemctl disable neutron-rpc-server ; systemctl mask neutron-api ; systemctl mask neutron-rpc-server"
}

start_neutron_server () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Starting Neutron on ${HOST_NAME}"
	sshi root@${HOST_IP} "systemctl unmask neutron-api ; systemctl unmask neutron-rpc-server ; systemctl enable neutron-api ; systemctl enable neutron-rpc-server ; systemctl start neutron-api ; systemctl start neutron-rpc-server"
}

upgrade_neutron_server () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Upgrade Neutron on ${HOST_NAME}"
	# Fix [nova]username is defined twice in neutron.conf
	sshi root@${HOST_IP} "sed -i 's/^username = nova//' /etc/neutron/neutron.conf"
	sshi root@${HOST_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold neutron-common python3-neutron neutron-api"
	green_echo "-> Upgrade python3-neutron-fwaas on ${HOST_NAME}"
	sshi root@${HOST_IP} "if dpkg-query -W python3-neutron-fwaas 2>&1 ; then DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold neutron-common python3-neutron-fwaas || true ; fi"
	green_echo "-> Upgrading python3-neutron-dynamic-routing if exists on ${HOST_NAME}"
	sshi root@${HOST_IP} "if dpkg-query -W python3-neutron-dynamic-routing 2>/dev/null 1>/dev/null ; then DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-neutron-dynamic-routing ; fi"
}

upgrade_network_node () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "===> Upgrading neutron on ${HOST_NAME}"
	# Fix [nova]username is defined twice in neutron.conf
#	sshi root@${HOST_IP} "sed -i 's/^username = nova//' /etc/neutron/neutron.conf"
	rabbitmq_msg_num monitoring ${RMQ_MONITORING_PASS} ${ONE_CTRL_IP}
	while [ "${RET}" -gt 10000 ] ; do
		yellow_echo "-> RammitMQ number of messages ($RET) greater than 10000: waiting 60 seconds."
		sleep 60
		rabbitmq_msg_num monitoring ${RMQ_MONITORING_PASS} ${ONE_CTRL_IP}
	done
	yellow_echo "-> Upgrading python3-neutron."
	sshi root@${HOST_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-neutron"
	green_echo "-> Upgrading python3-neutron-dynamic-routing if exists on ${HOST_NAME}"
	sshi root@${HOST_IP} "if dpkg-query -W python3-neutron-dynamic-routing 2>/dev/null 1>/dev/null ; then DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-neutron-dynamic-routing ; fi"
	yellow_echo "-> Waiting 30 seconds after upgrading a Neutron daemon."
	sleep 30
}

upgrade_compute_neutron_agents () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Upgrading Neutron on ${HOST_NAME}"
	# Fix [nova]username is defined twice in neutron.conf
#	sshi root@${HOST_IP} "sed -i 's/^username = nova//' /etc/neutron/neutron.conf"
	rabbitmq_msg_num monitoring ${RMQ_MONITORING_PASS} ${ONE_CTRL_IP}
	while [ "${RET}" -gt 10000 ] ; do
		yellow_echo "-> RammitMQ number of messages ($RET) greater than 10000: waiting 60 seconds."
		sleep 60
		rabbitmq_msg_num monitoring ${RMQ_MONITORING_PASS} ${ONE_CTRL_IP}
	done
	yellow_echo "-> Upgrading python3-neutron."
	sshi root@${HOST_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-neutron"
	green_echo "-> Upgrading python3-neutron-dynamic-routing if exists on ${HOST_NAME}"
	sshi root@${HOST_IP} "if dpkg-query -W python3-neutron-dynamic-routing 2>/dev/null 1>/dev/null ; then DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold neutron-common python3-neutron neutron-l3-agent neutron-metadata-agent neutron-metering-agent neutron-openvswitch-agent python3-neutron-dynamic-routing ; else DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-neutron-dynamic-routing ; fi"
	yellow_echo "-> Waiting 30 seconds after upgrading a Neutron daemon."
	sleep 30
}

upgrade_network_agents_on_controller () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Upgrading Neutron on ${HOST_NAME}"
	# Fix [nova]username is defined twice in neutron.conf
	sshi root@${HOST_IP} "sed -i 's/^username = nova//' /etc/neutron/neutron.conf"
	sshi root@${HOST_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold neutron-common python3-neutron neutron-dhcp-agent neutron-l3-agent neutron-metadata-agent neutron-metering-agent neutron-openvswitch-agent"
	green_echo "-> Upgrading python3-neutron-dynamic-routing if exists on ${ONE_CTRL_HOST}"
	sshi root@${HOST_IP} "if dpkg-query -W python3-neutron-dynamic-routing 2>/dev/null 1>/dev/null ; then DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-neutron-dynamic-routing ; fi"
}

drain_neutron_host_backend () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Draining ${HOST_NAME} Neutron API from possible backends"
	sshi root@${ONE_CTRL_IP} "hapc drain-server --backend neutronbe --server ${HOST_NAME} --verbose --wait"
}

enable_neutron_host_backend () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Enabling ${HOST_NAME} Neutron API as possible backends"
	sshi root@${ONE_CTRL_IP} "hapc enable-server --backend neutronbe --server ${HOST_NAME} --verbose"
}

cluster_upgrade_neutron () {
	green_echo "===> Upgrading neutron API and RPC servers on all controllers"

	# Upgrading controller 1
	green_echo "-> Draining ${ONE_CTRL_HOST} neutron-api backend"
	sshi root@${ONE_CTRL_IP} "hapc drain-server --backend neutronbe --server ${ONE_CTRL_HOST} --verbose --wait"
	green_echo "-> Stopping all neutron services on ${ONE_CTRL_HOST}"
	sshi root@${ONE_CTRL_IP} "systemctl stop neutron-api ; systemctl stop neutron-rpc-server ; systemctl disable neutron-api ; systemctl disable neutron-rpc-server ; systemctl mask neutron-api ; systemctl mask neutron-rpc-server"
	green_echo "-> Upgrading all neutron services on ${ONE_CTRL_HOST}"
	sshi root@${ONE_CTRL_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold neutron-common python3-neutron neutron-api"
	green_echo "===> Upgrading neutron db"
	sshi root@${ONE_CTRL_IP} "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head"
	green_echo "-> Upgrading python3-neutron-dynamic-routing if exists on ${ONE_CTRL_HOST}"
	sshi root@${ONE_CTRL_IP} "if dpkg-query -W python3-neutron-dynamic-routing 2>/dev/null 1>/dev/null ; then DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-neutron-dynamic-routing ; fi"
	green_echo "-> Starting all neutron services on ${ONE_CTRL_HOST}"
	sshi root@${ONE_CTRL_IP} "systemctl unmask neutron-api ; systemctl unmask neutron-rpc-server ; systemctl enable neutron-api ; systemctl enable neutron-rpc-server ; systemctl start neutron-api ; systemctl start neutron-rpc-server"
	green_echo "-> Enabling ${ONE_CTRL_HOST} neutron-api backend"
	sshi root@${ONE_CTRL_IP} "hapc enable-server --backend neutronbe --server ${ONE_CTRL_HOST} --verbose"

	# Upgrading other controllers
	green_echo "===> Upgrading neutron API and RPC servers on all other controllers"
	iterate_on_hosts "${OTHER_CTRL}" drain_neutron_host_backend
	iterate_on_hosts "${OTHER_CTRL}" stop_neutron_server
	iterate_on_hosts "${OTHER_CTRL}" upgrade_neutron_server
	iterate_on_hosts "${OTHER_CTRL}" start_neutron_server
	iterate_on_hosts "${OTHER_CTRL}" enable_neutron_host_backend

	if [ "${HAS_NET}" = "yes" ] ; then
		green_echo "===> Upgrading Neutron agents on network nodes"
		if [ "${PARTIAL_UPGRADE}" = "yes" ] ; then
			yellow_echo "-> Partial upgrade: skipping network nodes neutron upgrade"
		else
			ITERATE_ON_HOST_MAX_PARALLEL=3
			iterate_on_hosts "${ALL_NET}" upgrade_network_node
			ITERATE_ON_HOST_MAX_PARALLEL=8
		fi
	else
		green_echo "===> Upgrading Neutron agents on controller nodes"
		if [ "${PARTIAL_UPGRADE}" = "yes" ] ; then
			yellow_echo "-> Partial upgrade: skipping controller nodes neutron upgrade"
		else
			ITERATE_ON_HOST_MAX_PARALLEL=3
			iterate_on_hosts "${ALL_CTRL}" upgrade_network_agents_on_controller
				ITERATE_ON_HOST_MAX_PARALLEL=8
		fi
	fi

	green_echo "===> Upgrading Neutron agents on compute nodes"
	if [ "${PARTIAL_UPGRADE}" = "yes" ] ; then
		yellow_echo "-> Partial upgrade: skipping compute nodes neutron upgrade"
	else
		ITERATE_ON_HOST_MAX_PARALLEL=3
		iterate_on_hosts -p "${ALL_COMP}" upgrade_compute_neutron_agents
		ITERATE_ON_HOST_MAX_PARALLEL=8
	fi
}

############
### Heat ###
############
cluster_upgrade_heat () {
	green_echo "===> Upgrading Heat"
	drain_backend ${ONE_CTRL_IP},${ONE_CTRL_HOST} heatbe
	drain_backend ${ONE_CTRL_IP},${ONE_CTRL_HOST} heatcfnbe
	stop_service ${ONE_CTRL_IP},${ONE_CTRL_HOST} "heat-api heat-api-cfn heat-engine"
	upgrade_package ${ONE_CTRL_IP},${ONE_CTRL_HOST} "heat-api heat-api-cfn heat-engine"
	green_echo "===> Running heat-manage db_sync"
	sshi root@${ONE_CTRL_IP} "su heat -s /bin/sh -c 'heat-manage db_sync'"
	start_service ${ONE_CTRL_IP},${ONE_CTRL_HOST} "heat-api heat-api-cfn heat-engine"
	enable_backend ${ONE_CTRL_IP},${ONE_CTRL_HOST} heatbe
	enable_backend ${ONE_CTRL_IP},${ONE_CTRL_HOST} heatcfnbe

	green_echo "===> Upgrading Heat on all other controllers"
	iterate_on_hosts "${OTHER_CTRL}" drain_backend heatbe
	iterate_on_hosts "${OTHER_CTRL}" drain_backend heatcfnbe
	iterate_on_hosts "${OTHER_CTRL}" stop_service heat-api
	iterate_on_hosts "${OTHER_CTRL}" stop_service heat-api-cfn
	iterate_on_hosts "${OTHER_CTRL}" stop_service heat-engine
	iterate_on_hosts "${OTHER_CTRL}" upgrade_package heat-api
	iterate_on_hosts "${OTHER_CTRL}" start_service heat-api
	iterate_on_hosts "${OTHER_CTRL}" start_service heat-api-cfn
	iterate_on_hosts "${OTHER_CTRL}" start_service heat-engine
	iterate_on_hosts "${OTHER_CTRL}" enable_backend heatbe
	iterate_on_hosts "${OTHER_CTRL}" enable_backend heatcfnbe
}

#########################
### PLACEMENT UPGRADE ###
#########################
cluster_upgrade_placement () {
	cluster_upgrade_project Placement placementbe placement-api placement-api "su placement -s /bin/sh -c 'placement-manage db sync'"

	green_echo "===> Running placement-manage db online_data_migrations until completed"
	sshi root@${ONE_CTRL_IP} "placement-manage db online_data_migrations; RET=\$? ; while [ \"\$RET\" != 0 ] ; do if [ \"\$RET\" == 1 ] ; then exit 1 ; else su -s /bin/sh -c 'placement-manage db online_data_migrations' cinder; RET=\$? ; fi ; done"
}

######################
### CINDER UPGRADE ###
######################
stop_cinder_volume_and_backup () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Stopping Cinder backup and volume on ${HOST_NAME}"
	for i in cinder-volume cinder-backup ; do
		sshi root@${HOST_IP} "systemctl stop $i ; systemctl disable $i ; systemctl mask $i"
	done
}

start_cinder_volume_and_backup () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Starting Cinder backup and volume on ${HOST_NAME}"
	for i in cinder-volume cinder-backup ; do
		sshi root@${HOST_IP} "systemctl unmask $i ; systemctl enable $i ; systemctl start $i"
	done
}

stop_apache_cinder_servers () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Stopping Cinder API on apache on ${HOST_NAME}"
	if [ "${FROM_OS_RELEASE}" = "rocky" ] ; then
		# If we're with Train, Cinder is still running on Apache, so we disable it there and restart apache.
		sshi root@${HOST_IP} "sed -i \"s/Listen ${HOST_IP}:8776//\" /etc/apache2/ports.conf"
		sshi root@${HOST_IP} "a2dissite 10-cinder_wsgi.conf"
		sshi root@${HOST_IP} "systemctl restart apache2"
	fi
}

upgrade_cinder_controller () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Upgrading Cinder on ${HOST_NAME}"
	sshi root@${HOST_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-cinder cinder-scheduler cinder-common cinder-api"
}

start_cinder_volume_and_backup () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Starting Cinder Volume and Backup on ${HOST_NAME}"
	for i in cinder-volume cinder-backup ; do
		sshi root@${HOST_IP} "if dpkg-query -W $i ; then systemctl unmask $i ; systemctl enable $i ; systemctl start $i ; fi"
	done
}

upgrade_volume_services () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Upgrading python3-cinder on ${HOST_NAME}"
	sshi root@${HOST_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-cinder"
#	sshi root@${HOST_IP} "oci-puppet || true"
}

cluster_upgrade_cinder () {
	if [ "${FROM_OS_RELEASE}" = "rocky" ] ; then
		green_echo "===> Disabling cinder-api on Apache"
		iterate_on_hosts "${ALL_CTRL}" stop_apache_cinder_servers
	fi

	cluster_upgrade_project Cinder cinderbe "cinder-api cinder-scheduler" cinder-api "su -s /bin/sh -c 'cinder-manage db purge 0 && cinder-manage db sync' cinder"

	green_echo "===> Upgrading cinder-volume and cinder-backup in all nodes of the cluster"
	if [ "${HAS_VOL}" = "yes" ] ; then
		green_echo "===> Stopping all cinder-volume services on volume nodes"
		iterate_on_hosts -p "${ALL_VOL}" stop_cinder_volume_and_backup
		green_echo "===> Upgrade cinder on volume nodes"
		iterate_on_hosts -p "${ALL_VOL}" upgrade_volume_services
		green_echo "===> Starting cinder services on volume nodes"
		iterate_on_hosts -p "${ALL_VOL}" start_cinder_volume_and_backup
	fi
	if [ "${HAS_OSD}" = "yes" ] ; then
		green_echo "===> Stopping all cinder-volume services on compute nodes"
		iterate_on_hosts -p "${ALL_COMP}" stop_cinder_volume_and_backup
		green_echo "===> Upgrade cinder on compute nodes"
		iterate_on_hosts -p "${ALL_COMP}" upgrade_volume_services
		green_echo "===> Starting cinder-volume services on compute nodes"
		iterate_on_hosts -p "${ALL_COMP}" start_cinder_volume_and_backup
	fi
	green_echo "===> Running cinder-manage db online_data_migrations until completed"
	sshi root@${ONE_CTRL_IP} "cinder-manage db online_data_migrations; RET=\$? ; while [ \"\$RET\" != 0 ] ; do if [ \"\$RET\" == 1 ] ; then exit 1 ; else su -s /bin/sh -c 'cinder-manage db online_data_migrations' cinder; RET=\$? ; fi ; done"
}

####################
### NOVA UPGRADE ###
####################
migrate_from_old_nova_stuff () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	if [ "${FROM_OS_RELEASE}" = "rocky" ] ; then
		# If we're with Train, Nova is still running on Apache, so we disable it there and restart apache.
		green_echo "-> Removing nova-api from Apache on ${HOST_NAME}"
		sshi root@${HOST_IP} "sed -i \"s/Listen ${HOST_IP}:8774//\" /etc/apache2/ports.conf"
		sshi root@${HOST_IP} "a2dissite 10-nova_api_wsgi.conf"
		sshi root@${HOST_IP} "systemctl restart apache2"
	fi
	if [ "${FROM_OS_RELEASE}" = "stein" ] ; then
		green_echo "-> Purging nova-consoleauth and nova-placement-api on ${HOST_NAME}"
		sshi root@${HOST_IP} "apt-get purge -y nova-consoleauth nova-placement-api"
	fi
}

upgrade_compute (){
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Upgrading ${HOST_NAME}"
	sshi root@${HOST_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-nova"
#	sshi root@${HOST_IP} "oci-puppet || true"
}

install_placement (){
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Installing placement on ${HOST_NAME}"
	sshi root@${HOST_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold placement-api python3-osc-placement python3-placement placement-common"
	# Get the placement connection from nova and set it for placement
	sshi root@${HOST_IP} "if [ -d /etc/placement ] && ! [ -r /etc/placement/placement.conf ] && [ -r /usr/share/placement-common/placement.conf ] ; then cp /usr/share/placement-common/placement.conf /etc/placement ; chown placement:placement /etc/placement/placement.conf ; chmod 640 /etc/placement/placement.conf ; fi"
	sshi root@${HOST_IP} ". /usr/share/openstack-pkg-tools/pkgos_func ; TMPFILE=\$(mktemp); cat /etc/nova/nova.conf | grep -v '^#' >\${TMPFILE} ; pkgos_inifile get \${TMPFILE} placement_database connection ; rm -f \${TMPFILE} ; pkgos_inifile set /etc/placement/placement.conf placement_database connection \${RET}"
}

cluster_upgrade_nova () {
	iterate_on_hosts "${ALL_CTRL}" migrate_from_old_nova_stuff

	# Todo: need to fix-up so that we have graceful upgrade of nova-api-metadata
	# which means disabling backends in compute and/or network nodes.
	cluster_upgrade_project Nova novabe "nova-api nova-api-metadata nova-conductor nova-novncproxy nova-scheduler" nova-api "su nova -s /bin/sh -c 'nova-manage db sync' && su nova -s /bin/sh -c 'nova-manage api_db sync'"

	if [ "${FROM_OS_RELEASE}" = "rocky" ] ; then
		iterate_on_hosts "${ALL_CTRL}" install_placement
		sshi root@${ONE_CTRL_IP} "placement-manage db stamp b4ed3a175331"
		sshi root@${ONE_CTRL_IP} "placement-manage db sync"
	fi

	green_echo "===> Nova upgrade of all computes"
	iterate_on_hosts -p "${ALL_COMP}" upgrade_compute

	green_echo "===> Running nova-manage db online_data_migrations until completed"
	sshi root@${ONE_CTRL_IP} "nova-manage db online_data_migrations; RET=\$? ; while [ \"\$RET\" != 0 ] ; do if [ \"\$RET\" == 1 ] ; then exit 1 ; else nova-manage db online_data_migrations; RET=\$? ; fi ; done"
}

#################
### Designate ###
#################
fix_designate_log_rights (){
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Fixing designate-manage.log ownership in ${HOST_NAME}"
	# Without this, running "designate-manage  database sync" as designate user during the puppet run will fail.
	sshi root@${HOST_IP} "chown designate:designate /var/log/designate/designate-manage.log || true"
}

cluster_upgrade_designate () {
	iterate_on_hosts "${ALL_CTRL}" fix_designate_log_rights

	cluster_upgrade_project Designate designatebe "designate-api designate-central designate-mdns designate-producer designate-sink designate-worker" designate-api "su designate -s /bin/sh -c 'cd /tmp && designate-manage database sync'"
}

############
### AODH ###
############
cluster_upgrade_aodh () {
	cluster_upgrade_project Aodh aodhbe "aodh-api aodh-notifier aodh-listener aodh-evaluator" aodh-api "su aodh -s /bin/sh -c 'aodh-dbsync'"
}

###############
### Octavia ###
###############
cluster_upgrade_octavia () {
	cluster_upgrade_project Octavia octaviabe "octavia-api octavia-worker octavia-health-manager octavia-housekeeping" octavia-api "su octavia -s /bin/sh -c 'octavia-db-manage upgrade head'"
}

##############
### Glance ###
##############
cluster_upgrade_glance () {
	cluster_upgrade_project Glance glancebe glance-api glance-api "su glance -s /bin/sh -c 'glance-manage db_sync'"
}

################
### Barbican ###
################
cluster_upgrade_barbican () {
	cluster_upgrade_project Barbican barbicanbe "barbican-api barbican-worker" barbican-api "su barbican -s /bin/sh -c 'barbican-db-manage upgrade'"
}



###############
### Gnocchi ###
###############
controller_upgrade_gnocchi_if_exists () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Upgrading python3-gnocchi on ${HOST_NAME} if exists"
	sshi root@${HOST_IP} "if dpkg-query -W python3-gnocchi 2>/dev/null 1>/dev/null ; then DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-gnocchi ; fi"
}

cluster_upgrade_gnocchi () {
	green_echo "===> Upgrading Gnocchi"

	# If we have MSG nodes, all is on them, otherwise, all on the controllers
	if [ -n "${ALL_MSG}" ] ; then
		green_echo "===> Upgrading Gnocchi on ${ONE_MSG_HOST}"
		drain_backend ${ONE_MSG_IP},${ONE_MSG_HOST} gnocchibe
		stop_service ${ONE_MSG_IP},${ONE_MSG_HOST} "gnocchi-api gnocchi-metricd gnocchi-statsd"
		upgrade_package ${ONE_MSG_IP},${ONE_MSG_HOST} gnocchi-api
		start_service ${ONE_MSG_IP},${ONE_MSG_HOST} "gnocchi-api gnocchi-metricd gnocchi-statsd"
		enable_backend ${ONE_MSG_IP},${ONE_MSG_HOST} gnocchibe

		green_echo "===> Upgrading Gnocchi on all other messaging nodes"
		iterate_on_hosts "${OTHER_MSG}" drain_backend gnocchibe
		for SERVICE in gnocchi-api gnocchi-metricd gnocchi-statsd ; do
			iterate_on_hosts "${OTHER_MSG}" stop_service ${SERVICE}
		done
		iterate_on_hosts "${OTHER_MSG}" upgrade_package gnocchi-api
		for SERVICE in gnocchi-api gnocchi-metricd gnocchi-statsd ; do
			iterate_on_hosts "${OTHER_MSG}" start_service ${SERVICE}
		done
		iterate_on_hosts "${OTHER_MSG}" enable_backend gnocchibe

		iterate_on_hosts "${ALL_CTRL}" controller_upgrade_gnocchi_if_exists

		green_echo "===> Running gnocchi-upgrade"
		sshi root@${ONE_MSG_IP} "su gnocchi -s /bin/sh -c 'gnocchi-upgrade'"
	else
		green_echo "===> Upgrading Gnocchi on ${ONE_CTRL_HOST}"
		drain_backend ${ONE_CTRL_IP},${ONE_CTRL_HOST} gnocchibe
		stop_service ${ONE_CTRL_IP},${ONE_CTRL_HOST} "gnocchi-api gnocchi-metricd gnocchi-statsd"
		upgrade_package ${ONE_CTRL_IP},${ONE_CTRL_HOST} gnocchi-api
		start_service ${ONE_CTRL_IP},${ONE_CTRL_HOST} "gnocchi-api gnocchi-metricd gnocchi-statsd"
		enable_backend ${ONE_CTRL_IP},${ONE_CTRL_HOST} gnocchibe

		green_echo "===> Upgrading Gnocchi on all other controller nodes"
		iterate_on_hosts "${OTHER_CTRL}" drain_backend gnocchibe
		for SERVICE in gnocchi-api gnocchi-metricd gnocchi-statsd ; do
			iterate_on_hosts "${OTHER_CTRL}" stop_service ${SERVICE}
		done
		iterate_on_hosts "${OTHER_CTRL}" upgrade_package gnocchi-api
		for SERVICE in gnocchi-api gnocchi-metricd gnocchi-statsd ; do
			iterate_on_hosts "${OTHER_CTRL}" start_service ${SERVICE}
		done
		iterate_on_hosts "${OTHER_CTRL}" enable_backend gnocchibe

		green_echo "===> Running gnocchi-upgrade"
		sshi root@${ONE_CTRL_IP} "su gnocchi -s /bin/sh -c 'gnocchi-upgrade'"
	fi
}

##################
### Ceilometer ###
##################
cluster_upgrade_ceilometer () {
	green_echo "===> Upgrading Ceilometer"

	# Controller: ceilometer-agent-notification ceilometer-polling
	green_echo "-> Upgrading all controllers"
	iterate_on_hosts "${ALL_CTRL}" upgrade_package "ceilometer-agent-notification ceilometer-polling"

	# Compute: ceilometer-polling
	green_echo "-> Upgrading ceilometer-polling on all compute nodes"
	iterate_on_hosts -p "${ALL_COMP}" upgrade_package "ceilometer-polling"
}

##################
### Cloudkitty ###
##################
upgrade_python3_cloudkitty_on_ctrl () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Upgrading python3-cloudkitty on controller ${HOST_NAME} if exists"
	sshi root@${HOST_IP} "if dpkg-query -W python3-cloudkitty 2>/dev/null 1>/dev/null ; then DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-cloudkitty ; fi"
}

cluster_upgrade_cloudkitty () {
	green_echo "===> Upgrading Cloudkitty"

	# Messaging: cloudkitty-api cloudkitty-processor

	# If we have MSG nodes, all is on them, otherwise, all on the controllers
	if [ -n "${ALL_MSG}" ] ; then
		green_echo "===> Upgrading Cloudkitty on ${ONE_MSG_HOST}"
		drain_backend ${ONE_MSG_IP},${ONE_MSG_HOST} cloudkittybe
		stop_service ${ONE_MSG_IP},${ONE_MSG_HOST} "cloudkitty-api cloudkitty-processor"
		upgrade_package ${ONE_MSG_IP},${ONE_MSG_HOST} cloudkitty-api
		green_echo "===> Running cloudkitty-dbsync upgrade"
		sshi root@${ONE_MSG_IP} "su cloudkitty -s /bin/sh -c 'cloudkitty-dbsync upgrade'"
		start_service ${ONE_MSG_IP},${ONE_MSG_HOST} "cloudkitty-api cloudkitty-processor"
		enable_backend ${ONE_MSG_IP},${ONE_MSG_HOST} cloudkittybe

		green_echo "===> Upgrading Cloudkitty on all other messaging nodes"
		iterate_on_hosts "${OTHER_MSG}" drain_backend cloudkittybe
		for SERVICE in cloudkitty-api cloudkitty-processor ; do
			iterate_on_hosts "${OTHER_MSG}" stop_service ${SERVICE}
		done
		iterate_on_hosts "${OTHER_MSG}" upgrade_package cloudkitty-api
		for SERVICE in cloudkitty-api cloudkitty-processor ; do
			iterate_on_hosts "${OTHER_MSG}" start_service ${SERVICE}
		done
		iterate_on_hosts "${OTHER_MSG}" enable_backend cloudkittybe

		iterate_on_hosts "${ALL_CTRL}" upgrade_python3_cloudkitty_on_ctrl
	else
		green_echo "===> Upgrading Cloudkitty on ${ONE_CTRL_HOST}"
		drain_backend ${ONE_CTRL_IP},${ONE_CTRL_HOST} cloudkittybe
		stop_service ${ONE_CTRL_IP},${ONE_CTRL_HOST} "cloudkitty-api cloudkitty-processor"
		upgrade_package ${ONE_CTRL_IP},${ONE_CTRL_HOST} cloudkitty-api
		green_echo "===> Running cloudkitty-dbsync upgrade"
		sshi root@${ONE_CTRL_IP} "su cloudkitty -s /bin/sh -c 'cloudkitty-dbsync upgrade'"
		start_service ${ONE_CTRL_IP},${ONE_CTRL_HOST} "cloudkitty-api cloudkitty-processor"
		enable_backend ${ONE_CTRL_IP},${ONE_CTRL_HOST} cloudkittybe

		green_echo "===> Upgrading Cloudkitty on all other controller nodes"
		iterate_on_hosts "${OTHER_CTRL}" drain_backend cloudkittybe
		for SERVICE in cloudkitty-api cloudkitty-processor ; do
			iterate_on_hosts "${OTHER_CTRL}" stop_service ${SERVICE}
		done
		iterate_on_hosts "${OTHER_CTRL}" upgrade_package cloudkitty-api
		for SERVICE in cloudkitty-api cloudkitty-processor ; do
			iterate_on_hosts "${OTHER_CTRL}" start_service ${SERVICE}
		done
		iterate_on_hosts "${OTHER_CTRL}" enable_backend cloudkittybe
	fi
}

#############
### Swift ###
#############
upgrade_python3_swift () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Upgrading ${HOST_NAME}"
	sshi root@${HOST_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-swift"
}

upgrade_swift_proxy () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Draining ${HOST_NAME}"
	sshi root@${HOST_IP} "hapc drain-server --backend swiftbe --server ${HOST_NAME} --verbose --wait"
	green_echo "-> Upgrading ${HOST_NAME}"
	sshi root@${HOST_IP} "DEBIAN_FRONTEND=noninteractive apt-get install -y -o Dpkg::Options::=--force-confold python3-swift"
	green_echo "-> Enabling ${HOST_NAME}"
	sshi root@${HOST_IP} "hapc enable-server --backend swiftbe --server ${HOST_NAME} --verbose"
}

cluster_upgrade_swift () {
	green_echo "===> Upgrading Swift"
	iterate_on_hosts -p "${ALL_SWIFTSTR}" upgrade_python3_swift
	iterate_on_hosts -p "${ALL_SWIFTPRX}" upgrade_swift_proxy
}

#######################
### HORIZON REMOVAL ###
#######################
upgrade_horizon () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Upgrading horizon on ${HOST_NAME}"

	HORIZON_DEPENDS="openstack-dashboard openstack-dashboard-apache python3-django-horizon python3-cloudkitty-dashboard python3-designate-dashboard python3-heat-dashboard python3-octavia-dashboard python3-magnum-ui python3-manila-ui python3-xstatic python3-xstatic-angular python3-xstatic-angular-bootstrap python3-xstatic-angular-fileupload python3-xstatic-angular-gettext python3-xstatic-angular-lrdragndrop python3-xstatic-angular-schema-form python3-xstatic-angular-ui-router python3-xstatic-angular-uuid python3-xstatic-angular-vis python3-xstatic-bootstrap-datepicker python3-xstatic-bootstrap-scss python3-xstatic-bootswatch python3-xstatic-d3 python3-xstatic-filesaver python3-xstatic-font-awesome python3-xstatic-hogan python3-xstatic-jasmine python3-xstatic-jquery python3-xstatic-jquery-migrate python3-xstatic-jquery-ui python3-xstatic-jquery.quicksearch python3-xstatic-jquery.tablesorter python3-xstatic-js-yaml python3-xstatic-jsencrypt python3-xstatic-json2yaml python3-xstatic-magic-search python3-xstatic-mdi python3-xstatic-objectpath python3-xstatic-rickshaw python3-xstatic-roboto-fontface python3-xstatic-smart-table python3-xstatic-spin python3-xstatic-term.js python3-xstatic-tv4"

	upgrade_package_list_on_host ${HOST} "${HORIZON_DEPENDS}"
}

cluster_upgrade_horizon () {
	green_echo "===> Upgrading horizon"
	iterate_on_hosts "${ALL_CTRL}" upgrade_horizon
}

############################
### Dependencies upgrade ###
############################
ctrl_upgrade_depends () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Installing depends on ${HOST_NAME}"
	case "${TO_OS_RELEASE}" in
	"wallaby")
		CTRL_DEPENDS="openstack-pkg-tools os-brick-common python3-aodhclient python3-automaton python3-barbicanclient python3-blazarclient python3-castellan python3-cinderclient python3-cliff python3-cloudkittyclient python3-cmd2 python3-designateclient python3-docker python3-dogpile.cache python3-eventlet python3-glance-store python3-glanceclient python3-gnocchiclient python3-heatclient python3-influxdb python3-ironicclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-magnumclient python3-manilaclient python3-mistralclient python3-monascaclient python3-msgpack python3-netaddr python3-neutronclient python3-novaclient python3-oauth2client python3-octaviaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-osc-placement python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-ovsdbapp python3-pbr python3-pymemcache python3-pymysql python3-pyroute2 python3-rtslib-fb python3-saharaclient python3-senlinclient python3-stevedore python3-swiftclient python3-taskflow python3-tenacity python3-tooz python3-troveclient python3-vitrageclient python3-voluptuous python3-zaqarclient python3-zunclient"
	;;
	"xena")
		CTRL_DEPENDS="alembic libjs-sphinxdoc novnc openstack-pkg-tools os-brick-common python3-alembic python3-aodhclient python3-automaton python3-barbicanclient python3-blazarclient python3-calmjs python3-castellan python3-cinderclient python3-cliff python3-cloudkittyclient python3-croniter python3-ddt python3-debtcollector python3-designateclient python3-eventlet python3-falcon python3-flask python3-flask-restful python3-futurist python3-glance-store python3-glanceclient python3-greenlet python3-heatclient python3-idna python3-ironicclient python3-itsdangerous python3-jinja2 python3-jsonpatch python3-jsonschema python3-jwcrypto python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-ldappool python3-magnumclient python3-manilaclient python3-markupsafe python3-migrate python3-mistralclient python3-monascaclient python3-monotonic python3-neutronclient python3-novaclient python3-novnc python3-octavia-lib python3-octaviaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-resource-classes python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-osc-placement python3-oslo.cache python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-pbr python3-pecan python3-pypowervm python3-pyroute2 python3-pyroute2.ethtool python3-pyroute2.ipdb python3-pyroute2.ipset python3-pyroute2.ndb python3-pyroute2.nftables python3-pyroute2.nslink python3-pyroute2.protocols python3-pysaml2 python3-q-text-as-data python3-rfc3986 python3-saharaclient python3-senlinclient python3-sphinx python3-sqlalchemy python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-taskflow python3-testresources python3-testtools python3-tooz python3-troveclient python3-uhashring python3-vitrageclient python3-websockify python3-werkzeug python3-wrapt python3-wsme python3-yappi python3-yaql python3-zaqarclient python3-zunclient sphinx-common spice-html5 websockify"
	;;
	"yoga")
		CTRL_DEPENDS="alembic os-brick-common python3-alembic python3-amqp python3-aodhclient python3-automaton python3-barbicanclient python3-binary-memcached python3-blazarclient python3-boto3 python3-botocore python3-cachetools python3-castellan python3-cffi python3-cffi-backend python3-cinderclient python3-click python3-cliff python3-cloudkittyclient python3-cmd2 python3-croniter python3-cryptography python3-ddt python3-debtcollector python3-designateclient python3-django python3-django-appconf python3-django-compressor python3-django-debreach python3-django-pyscss python3-dogpile.cache python3-elementpath python3-enmerkar python3-etcd3gw python3-eventlet python3-fasteners python3-glance-store python3-glanceclient python3-gnocchiclient python3-greenlet python3-heatclient python3-idna python3-imagesize python3-importlib-metadata python3-ironicclient python3-iso8601 python3-jinja2 python3-json-pointer python3-jwt python3-kazoo python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-kombu python3-lxml python3-magnumclient python3-manilaclient python3-mistralclient python3-monasca-statsd python3-monascaclient python3-monotonic python3-msgpack python3-neutronclient python3-novaclient python3-oauth2client python3-oauthlib python3-octaviaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-client-config python3-os-ken python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-osc-placement python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-ovsdbapp python3-paramiko python3-pbr python3-pecan python3-pkg-resources python3-psutil python3-pure-sasl python3-pyparsing python3-pypowervm python3-pyroute2 python3-pysaml2 python3-pytimeparse python3-rcssmin python3-responses python3-rjsmin python3-rtslib-fb python3-saharaclient python3-semantic-version python3-senlinclient python3-setuptools python3-simplejson   python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-taskflow python3-tooz python3-troveclient python3-ujson python3-uritemplate python3-vitrageclient python3-voluptuous python3-wcwidth python3-websocket python3-wrapt python3-yaml python3-zake python3-zaqarclient python3-zunclient"
	;;
	"zed")
		CTRL_DEPENDS="alembic novnc python3-alembic python3-aodhclient python3-automaton python3-barbicanclient python3-blazarclient python3-castellan python3-cinderclient python3-cliff python3-cloudkittyclient python3-cursive python3-defusedxml python3-designateclient python3-enmerkar python3-etcd3gw python3-eventlet python3-falcon python3-fixtures python3-flask python3-futurist python3-glance-store python3-glanceclient python3-heatclient python3-ironicclient python3-json-pointer python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-magnumclient python3-manilaclient python3-mistralclient python3-monasca-statsd python3-monascaclient python3-msgpack python3-munch python3-mypy python3-neutronclient python3-novaclient python3-novnc python3-oauth2client python3-octavia-lib python3-octaviaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-osc-placement python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-pbr python3-pymemcache python3-pyscss python3-q-text-as-data python3-rtslib-fb python3-saharaclient python3-senlinclient python3-sqlalchemy python3-stevedore python3-swiftclient python3-taskflow python3-testresources python3-testtools python3-tooz python3-troveclient python3-uhashring python3-vitrageclient python3-warlock python3-websockify python3-webtest python3-werkzeug python3-wrapt python3-wsme python3-yappi python3-zaqarclient python3-zunclient websockify"
	;;
	"antelope")
		CTRL_DEPENDS="novnc os-brick-common pycadf-common python3-aodhclient python3-automaton python3-barbicanclient python3-blazarclient python3-calmjs python3-calmjs.parse python3-calmjs.types python3-castellan python3-cinderclient python3-cliff python3-cloudkittyclient python3-cursive python3-debtcollector python3-designateclient python3-edgegrid python3-enmerkar python3-etcd3gw python3-fixtures python3-futurist  python3-glance-store python3-glanceclient python3-gnocchiclient python3-heatclient python3-infinity python3-ironicclient python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-magnumclient python3-manilaclient python3-mistralclient python3-monasca-statsd python3-monascaclient python3-msgpack python3-neutron-lib python3-neutronclient python3-novaclient python3-novnc python3-oauth2client python3-octavia-lib python3-octaviaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-client-config python3-os-ken python3-os-resource-classes python3-os-service-types python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-osc-placement python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-pbr python3-pecan python3-pure-sasl python3-pycadf python3-pymemcache python3-pyroute2 python3-pysaml2 python3-pytimeparse python3-q-text-as-data python3-rcssmin python3-rfc3986 python3-saharaclient python3-senlinclient python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-taskflow python3-testscenarios python3-testtools python3-tooz python3-troveclient python3-uhashring python3-uritemplate python3-vitrageclient python3-warlock python3-wrapt python3-wsme python3-yappi python3-yaql python3-zake python3-zaqarclient python3-zunclient"
	;;
	"bobcat")
		CTRL_DEPENDS="glance-store-common os-brick-common pycadf-common python3-aodhclient python3-automaton python3-barbicanclient python3-binary-memcached python3-blazarclient python3-castellan python3-cinderclient python3-cliff python3-cloudkittyclient python3-designateclient python3-django-horizon python3-edgegrid python3-etcd3gw python3-eventlet python3-flask python3-glance-store python3-glanceclient python3-heatclient python3-ironicclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-magnumclient python3-manilaclient python3-mistralclient python3-monasca-statsd python3-monascaclient python3-mypy python3-neutron-lib python3-neutronclient python3-novaclient python3-octavia-lib python3-octaviaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-traits python3-os-vif python3-osc-lib python3-osc-placement python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-ovsdbapp python3-pbr python3-pecan python3-psycopg2 python3-pure-sasl python3-pycadf python3-pymemcache python3-pyroute2 python3-pysaml2 python3-requests python3-rfc3986 python3-saharaclient python3-semantic-version python3-senlinclient python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-taskflow python3-testresources python3-testtools python3-tooz python3-troveclient python3-typepy python3-uhashring python3-urllib3 python3-vitrageclient python3-wrapt python3-yappi python3-zaqarclient python3-zunclient"
	;;
	"caracal")
		CTRL_DEPENDS="glance-store-common openstack-pkg-tools os-brick-common python-pastedeploy-tpl python3-amqp python3-aodhclient python3-attr python3-barbicanclient python3-binary-memcached python3-blazarclient python3-boto3 python3-botocore python3-castellan python3-chardet python3-cinderclient python3-cliff python3-cloudkittyclient python3-cursive python3-debtcollector python3-designateclient python3-django python3-django-appconf python3-django-compressor python3-django-pyscss python3-dogpile.cache python3-etcd3gw python3-eventlet python3-fixtures python3-futurist python3-glance-store python3-glanceclient python3-gnocchiclient python3-greenlet python3-heatclient python3-ironicclient python3-json-pointer python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-ldap python3-lxml python3-magnumclient python3-manilaclient python3-memcache python3-mistralclient python3-monascaclient python3-munch python3-mypy python3-netaddr python3-networkx python3-neutron-lib python3-neutronclient python3-novaclient python3-octavia-lib python3-octaviaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-vif python3-os-win python3-osc-lib python3-osc-placement python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-ovsdbapp python3-packaging python3-pastedeploy python3-pastedeploy-tpl python3-pbr python3-pecan python3-pkg-resources python3-psutil python3-pyasn1 python3-pyasn1-modules python3-pydot python3-pygments python3-pymemcache python3-pymysql python3-pysaml2 python3-q-text-as-data python3-rtslib-fb python3-setuptools python3-sqlalchemy python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-taskflow python3-testresources python3-testtools python3-tooz python3-troveclient python3-typing-extensions python3-urllib3 python3-vitrageclient python3-warlock python3-websockify python3-wsme python3-zake python3-zaqarclient python3-zunclient websockify"
	;;
	"dalmatian")
		CTRL_DEPENDS="glance-store-common os-brick-common python3-aodhclient python3-barbicanclient python3-blazarclient python3-calmjs python3-calmjs.parse python3-calmjs.types python3-castellan python3-cinderclient python3-cliff python3-cloudkittyclient python3-croniter python3-ddt python3-designateclient python3-django-debreach python3-dogpile.cache python3-eventlet python3-freezerclient python3-glance-store python3-glanceclient python3-gnocchiclient python3-heatclient python3-ironicclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-lxml python3-magnumclient python3-manilaclient python3-mistralclient python3-more-itertools python3-neutron-lib python3-neutron-vpnaas-dashboard python3-neutronclient python3-novaclient python3-novnc python3-observabilityclient python3-octavia-lib python3-octaviaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-service-types python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-osc-placement python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-paramiko python3-paste python3-pbr python3-pecan python3-platformdirs python3-pyparsing python3-pysaml2 python3-rcssmin python3-repoze.who python3-senlinclient python3-simplejson python3-sqlalchemy python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-taskflow python3-testtools python3-tooz python3-troveclient python3-vitrageclient python3-voluptuous python3-watcherclient python3-werkzeug python3-wsme python3-xstatic python3-xstatic-magic-search python3-xstatic-mdi python3-zaqarclient python3-zunclient"
	;;
	"epoxy")
		CTRL_DEPENDS="os-brick-common pycadf-common python3-aodhclient python3-barbicanclient python3-blazarclient python3-blinker python3-castellan python3-cinderclient python3-cliff python3-cloudkittyclient python3-debtcollector python3-designateclient python3-flask python3-futurist python3-glance-store python3-glanceclient python3-gnocchiclient python3-heatclient python3-httplib2 python3-ironicclient python3-iso8601 python3-itsdangerous python3-jaraco.functools python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-magnumclient python3-manilaclient python3-mistralclient python3-netaddr python3-neutron-dynamic-routing python3-neutron-lib python3-neutronclient python3-novaclient python3-novnc python3-observabilityclient python3-octavia-lib python3-octaviaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-traits python3-os-vif python3-osc-lib python3-osc-placement python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-packaging python3-pbr python3-pkg-resources python3-prometheus-client python3-psutil python3-pycadf python3-requests python3-setuptools python3-stevedore python3-swiftclient python3-taskflow python3-testscenarios python3-testtools python3-troveclient python3-typing-extensions python3-urllib3 python3-vitrageclient python3-werkzeug python3-yaml python3-zaqarclient python3-zunclient"
	;;
	"flamingo")
		CTRL_DEPENDS="glance-store-common os-brick-common python3-alembic alembic openstack-pkg-tools python3-aodhclient python3-barbicanclient python3-binary-memcached python3-blazarclient python3-castellan python3-cinderclient python3-cliff python3-cloudkittyclient python3-designateclient python3-django-appconf python3-eventlet python3-fixtures python3-futurist python3-glance-store python3-glanceclient python3-gnocchiclient python3-google-auth python3-heatclient python3-ironicclient python3-jsonschema python3-kazoo python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-magnumclient python3-mako python3-manilaclient python3-markupsafe python3-mistralclient python3-msgpack python3-networkx python3-neutron-lib python3-neutronclient python3-novaclient python3-observabilityclient python3-octavia-lib python3-octaviaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-client-config python3-os-ken python3-os-service-types python3-os-traits python3-os-vif python3-osc-lib python3-osc-placement python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-pbr python3-pecan python3-pyroute2 python3-retrying python3-rjsmin python3-rtslib-fb python3-semantic-version python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-taskflow python3-testscenarios python3-tooz python3-troveclient python3-uritemplate python3-vitrageclient python3-voluptuous python3-warlock python3-websockify python3-wrapt python3-wsme python3-yappi python3-yaql python3-zaqarclient python3-zunclient websockify"
	;;
	*)
		CTRL_DEPENDS="openstack-pkg-tools alembic novnc os-brick-common python3-alembic python3-amqp python3-aodhclient python3-automaton python3-barbicanclient python3-binary-memcached python3-blazarclient python3-boto3 python3-botocore python3-cachetools python3-calmjs python3-castellan python3-cffi python3-cffi-backend python3-cinderclient python3-click python3-cliff python3-cloudkittyclient python3-cmd2 python3-croniter python3-cryptography python3-cursive python3-ddt python3-debtcollector python3-defusedxml python3-designateclient python3-django python3-django-appconf python3-django-compressor python3-django-debreach python3-django-pyscss python3-docker python3-dogpile.cache python3-elementpath python3-enmerkar python3-etcd3gw python3-eventlet python3-falcon python3-fasteners python3-fixtures python3-flask python3-flask-restful python3-futurist python3-glanceclient python3-gnocchiclient python3-greenlet python3-heatclient python3-idna python3-imagesize python3-importlib-metadata python3-influxdb python3-ironicclient python3-iso8601 python3-itsdangerous python3-jinja2 python3-json-pointer python3-jsonpatch python3-jsonschema python3-jwcrypto python3-jwt python3-kazoo python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-kombu python3-ldappool python3-lxml python3-magnumclient python3-manilaclient python3-markupsafe python3-migrate python3-mistralclient python3-monasca-statsd python3-monascaclient python3-monotonic python3-msgpack python3-munch python3-mypy python3-netaddr python3-neutronclient python3-novaclient python3-novnc python3-oauth2client python3-oauthlib python3-octaviaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-resource-classes python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-osc-placement python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-paramiko python3-pbr python3-pecan python3-pkg-resources python3-psutil python3-pure-sasl python3-pymemcache python3-pymysql python3-pyparsing python3-pyroute2 python3-pysaml2 python3-pyscss python3-pytimeparse python3-q-text-as-data python3-rcssmin python3-responses python3-rfc3986 python3-rjsmin python3-rtslib-fb python3-saharaclient python3-semantic-version python3-senlinclient python3-setuptools python3-simplejson python3-sphinx python3-sqlalchemy python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-taskflow python3-tenacity python3-testresources python3-testtools python3-tooz python3-troveclient python3-uhashring python3-ujson python3-uritemplate python3-vitrageclient python3-voluptuous python3-warlock python3-wcwidth python3-websocket python3-websockify python3-webtest python3-werkzeug python3-wrapt python3-wsme python3-yaml python3-yappi python3-yaql python3-zake python3-zaqarclient python3-zunclient sphinx-common spice-html5 websockify"
	;;
	esac
	upgrade_package_list_on_host ${HOST} "${CTRL_DEPENDS}"
}

msg_upgrade_depends () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Installing depends on ${HOST_NAME}"
	case "${TO_OS_RELEASE}" in
	"wallaby")
		MSG_DEPENDS="python3-cinderclient python3-cliff python3-cloudkittyclient python3-cmd2 python3-dogpile.cache python3-eventlet python3-glanceclient python3-gnocchiclient python3-influxdb python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-monascaclient python3-msgpack python3-netaddr python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-pbr python3-pymemcache python3-pymysql python3-stevedore python3-swiftclient python3-tenacity python3-tooz python3-voluptuous"
	;;
	"xena")
		MSG_DEPENDS="alembic libjs-sphinxdoc python3-alembic python3-cinderclient python3-cliff python3-cloudkittyclient python3-debtcollector python3-eventlet python3-flask python3-flask-restful python3-futurist python3-glanceclient python3-greenlet python3-idna python3-itsdangerous python3-jinja2 python3-jsonpatch python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-markupsafe python3-migrate python3-monascaclient python3-monotonic python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-osc-lib python3-oslo.cache python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-pbr python3-pecan python3-q-text-as-data python3-rfc3986 python3-sqlalchemy python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-testresources python3-testtools python3-tooz python3-uhashring python3-werkzeug python3-wrapt python3-wsme python3-yappi"
	;;
	"yoga")
		MSG_DEPENDS="alembic python3-alembic python3-amqp python3-binary-memcached python3-boto3 python3-botocore python3-cachetools python3-cffi python3-cffi-backend python3-cinderclient python3-click python3-cliff python3-cloudkittyclient python3-cmd2 python3-cryptography python3-debtcollector python3-dogpile.cache python3-etcd3gw python3-eventlet python3-fasteners python3-glanceclient python3-gnocchiclient python3-greenlet python3-idna python3-importlib-metadata python3-iso8601 python3-jinja2 python3-json-pointer python3-jwt python3-kazoo python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-kombu python3-lxml python3-monascaclient python3-monotonic python3-msgpack python3-neutronclient python3-novaclient python3-oauthlib python3-openstackclient python3-openstacksdk python3-os-client-config python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-pbr python3-pecan python3-pkg-resources python3-pure-sasl python3-pyparsing python3-pytimeparse python3-setuptools python3-simplejson python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-tooz python3-ujson python3-voluptuous python3-wcwidth python3-wrapt python3-yaml python3-zake"
	;;
	"zed")
		MSG_DEPENDS="alembic python3-alembic python3-cinderclient python3-cliff python3-cloudkittyclient python3-etcd3gw python3-eventlet python3-fixtures python3-flask python3-futurist python3-glanceclient python3-json-pointer python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-monascaclient python3-msgpack python3-munch python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-pbr python3-pymemcache python3-q-text-as-data python3-sqlalchemy python3-stevedore python3-swiftclient python3-testresources python3-testtools python3-tooz python3-uhashring python3-warlock python3-webtest python3-werkzeug python3-wrapt python3-wsme python3-yappi"
	;;
	"antelope")
		MSG_DEPENDS="pycadf-common python3-cinderclient python3-cliff python3-cloudkittyclient python3-debtcollector python3-etcd3gw python3-fixtures python3-futurist python3-glanceclient python3-gnocchiclient python3-infinity python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-monascaclient python3-msgpack python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-client-config python3-os-service-types python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-pbr python3-pecan python3-pure-sasl python3-pycadf python3-pymemcache python3-pytimeparse python3-q-text-as-data python3-rfc3986 python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-testscenarios python3-testtools python3-tooz python3-uhashring python3-warlock python3-wrapt python3-wsme python3-yappi python3-zake"
	;;
	"bobcat")
		MSG_DEPENDS="pycadf-common python3-binary-memcached python3-cinderclient python3-cliff python3-cloudkittyclient python3-etcd3gw python3-eventlet python3-flask python3-glanceclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-monascaclient python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-pbr python3-pecan python3-psycopg2 python3-pure-sasl python3-pycadf python3-pymemcache python3-requests python3-rfc3986 python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-testresources python3-testtools python3-tooz python3-typepy python3-uhashring python3-urllib3 python3-wrapt python3-yappi"
	;;
	"caracal")
		MSG_DEPENDS="python-pastedeploy-tpl python3-amqp python3-attr python3-binary-memcached python3-boto3 python3-botocore python3-chardet python3-cinderclient python3-cliff python3-cloudkittyclient python3-debtcollector python3-dogpile.cache python3-etcd3gw python3-eventlet python3-fixtures python3-futurist python3-glanceclient python3-gnocchiclient python3-greenlet python3-json-pointer python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-lxml python3-memcache python3-monascaclient python3-munch python3-netaddr python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-packaging python3-pastedeploy python3-pastedeploy-tpl python3-pbr python3-pecan python3-pkg-resources python3-pymemcache python3-pymysql python3-q-text-as-data python3-setuptools python3-sqlalchemy python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-testresources python3-testtools python3-tooz python3-urllib3 python3-warlock python3-wsme python3-zake"
	;;
	"dalmatian")
		MSG_DEPENDS="python3-cinderclient python3-cliff python3-cloudkittyclient python3-dogpile.cache python3-eventlet python3-glanceclient python3-gnocchiclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-lxml python3-more-itertools python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-service-types python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-paste python3-pbr python3-pecan python3-platformdirs python3-pyparsing python3-simplejson python3-sqlalchemy python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-testtools python3-tooz python3-voluptuous python3-werkzeug python3-wsme"
	;;
	"epoxy")
		MSG_DEPENDS="pycadf-common python3-blinker python3-cinderclient python3-cliff python3-cloudkitty python3-cloudkittyclient python3-debtcollector python3-flask python3-futurist python3-glanceclient python3-gnocchiclient python3-iso8601 python3-itsdangerous python3-jaraco.functools python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-netaddr python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-packaging python3-pbr python3-pkg-resources python3-prometheus-client python3-pycadf python3-requests python3-setuptools python3-stevedore python3-swiftclient python3-testscenarios python3-testtools python3-typing-extensions python3-urllib3 python3-werkzeug python3-yaml"
	;;
	"flamingo")
		MSG_DEPENDS="alembic python3-alembic python3-binary-memcached python3-cinderclient python3-cliff python3-cloudkittyclient python3-eventlet python3-fixtures python3-futurist python3-glanceclient python3-gnocchiclient python3-jsonschema python3-kazoo python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-mako python3-markupsafe python3-msgpack python3-neutronclient python3-openstackclient python3-openstacksdk python3-os-client-config python3-os-service-types python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-pbr python3-pecan python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-testscenarios python3-tooz python3-voluptuous python3-warlock python3-wrapt python3-wsme python3-yappi"
	;;
	*)
		MSG_DEPENDS="alembic python3-alembic python3-amqp python3-binary-memcached python3-boto3 python3-botocore python3-cachetools python3-cffi python3-cffi-backend python3-cinderclient python3-click python3-cliff python3-cloudkittyclient python3-cmd2 python3-cryptography python3-debtcollector python3-dogpile.cache python3-etcd3gw python3-eventlet python3-fasteners python3-fixtures python3-flask python3-flask-restful python3-futurist python3-glanceclient python3-gnocchiclient python3-greenlet python3-idna python3-importlib-metadata python3-influxdb python3-iso8601 python3-itsdangerous python3-jinja2 python3-json-pointer python3-jsonpatch python3-jsonschema python3-jwt python3-kazoo python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-kombu python3-lxml python3-markupsafe python3-migrate python3-monascaclient python3-monotonic python3-msgpack python3-munch python3-netaddr python3-neutronclient python3-novaclient python3-oauthlib python3-openstackclient python3-openstacksdk python3-os-client-config python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-pbr python3-pecan python3-pkg-resources python3-pure-sasl python3-pymemcache python3-pymysql python3-pyparsing python3-pytimeparse python3-q-text-as-data python3-rfc3986 python3-setuptools python3-simplejson python3-sqlalchemy python3-sqlalchemy-utils python3-stevedore python3-swiftclient python3-tenacity python3-testresources python3-testtools python3-tooz python3-uhashring python3-ujson python3-voluptuous python3-warlock python3-wcwidth python3-webtest python3-werkzeug python3-wrapt python3-wsme python3-yaml python3-yappi python3-zake"
	;;
	esac
	upgrade_package_list_on_host ${HOST} "${MSG_DEPENDS}"
}

comp_upgrade_depends () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Installing depends on ${HOST_NAME}"
	case "${TO_OS_RELEASE}" in
	"wallaby")
		COMP_DEPENDS="os-brick-common python3-automaton python3-barbicanclient python3-castellan python3-cinderclient python3-cliff python3-cmd2 python3-designateclient python3-dogpile.cache python3-eventlet python3-glanceclient python3-gnocchiclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-monascaclient python3-msgpack python3-netaddr python3-neutronclient python3-novaclient python3-oauth2client python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-ovsdbapp python3-pbr python3-pymemcache python3-pymysql python3-pyroute2 python3-rtslib-fb python3-stevedore python3-swiftclient python3-taskflow python3-tenacity python3-tooz python3-voluptuous python3-zaqarclient python3-colorama python3-pyroute2.core python3-pyroute2.ethtool python3-pyroute2.ipdb python3-pyroute2.ipset python3-pyroute2.ndb python3-pyroute2.nftables python3-pyroute2.nslink python3-pyroute2.protocols"
	;;
	"xena")
		COMP_DEPENDS="alembic libjs-sphinxdoc os-brick-common python3-alembic python3-automaton python3-barbicanclient python3-castellan python3-cinderclient python3-cliff python3-ddt python3-debtcollector python3-designateclient python3-eventlet python3-futurist python3-glanceclient python3-greenlet python3-idna python3-jinja2 python3-jsonpatch python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-markupsafe python3-migrate python3-monascaclient python3-monotonic python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-resource-classes python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-pbr python3-pecan python3-pypowervm python3-pyroute2 python3-pyroute2.ethtool python3-pyroute2.ipdb python3-pyroute2.ipset python3-pyroute2.ndb python3-pyroute2.nftables python3-pyroute2.nslink python3-pyroute2.protocols python3-q-text-as-data python3-rfc3986 python3-sqlalchemy python3-stevedore python3-swiftclient python3-taskflow python3-testresources python3-testtools python3-tooz python3-uhashring python3-websockify python3-werkzeug python3-wrapt python3-yappi python3-zaqarclient"
	;;
	"yoga")
		COMP_DEPENDS="alembic os-brick-common python3-alembic python3-amqp python3-automaton python3-barbicanclient python3-binary-memcached python3-boto3 python3-botocore python3-cachetools python3-castellan python3-cffi python3-cffi-backend python3-cinderclient python3-cliff python3-cmd2 python3-cryptography python3-ddt python3-debtcollector python3-designateclient python3-dogpile.cache python3-etcd3gw python3-eventlet python3-fasteners python3-glanceclient python3-gnocchiclient python3-greenlet python3-idna python3-importlib-metadata python3-iso8601 python3-jinja2 python3-json-pointer python3-jwt python3-kazoo python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-kombu python3-lxml python3-monascaclient python3-monotonic python3-msgpack python3-neutronclient python3-novaclient python3-oauth2client python3-oauthlib python3-openstackclient python3-openstacksdk python3-os-brick python3-os-client-config python3-os-ken python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-ovsdbapp python3-paramiko python3-pbr python3-pecan python3-pkg-resources python3-psutil python3-pure-sasl python3-pyparsing python3-pypowervm python3-pyroute2 python3-pytimeparse python3-rtslib-fb python3-setuptools python3-simplejson python3-stevedore python3-swiftclient python3-taskflow python3-tooz python3-ujson python3-uritemplate python3-voluptuous python3-wcwidth python3-wrapt python3-yaml python3-zake python3-zaqarclient"
	;;
	"zed")
		COMP_DEPENDS="alembic os-brick-common python3-alembic python3-automaton python3-barbicanclient python3-castellan python3-ceilometer python3-cinderclient python3-cliff python3-cursive python3-designateclient python3-etcd3gw python3-eventlet python3-fixtures python3-futurist python3-glanceclient python3-json-pointer python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-monascaclient python3-msgpack python3-munch python3-mypy python3-neutronclient python3-novaclient python3-oauth2client python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-pbr python3-pymemcache python3-q-text-as-data python3-rtslib-fb python3-sqlalchemy python3-stevedore python3-swiftclient python3-taskflow python3-testresources python3-testtools python3-tooz python3-uhashring python3-warlock python3-websockify python3-webtest python3-werkzeug python3-wrapt python3-yappi python3-zaqarclient"
	;;
	"antelope")
		COMP_DEPENDS="os-brick-common pycadf-common python3-automaton python3-barbicanclient python3-castellan python3-cinderclient python3-cliff python3-cursive python3-debtcollector python3-designateclient python3-etcd3gw python3-fixtures python3-futurist python3-glanceclient python3-gnocchiclient python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-monascaclient python3-msgpack python3-neutron-lib python3-neutronclient python3-novaclient python3-oauth2client python3-openstackclient python3-openstacksdk python3-os-brick python3-os-client-config python3-os-ken python3-os-resource-classes python3-os-service-types python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-pbr python3-pecan python3-pure-sasl python3-pycadf python3-pymemcache python3-pyroute2 python3-pytimeparse python3-q-text-as-data python3-rfc3986 python3-stevedore python3-swiftclient python3-taskflow python3-testscenarios python3-testtools python3-tooz python3-uhashring python3-uritemplatepython3-warlock python3-wrapt python3-yappi python3-zake python3-zaqarclient"
	;;
	"bobcat")
		COMP_DEPENDS="os-brick-common pycadf-common python3-automaton python3-barbicanclient python3-binary-memcached python3-castellan python3-cinderclient python3-cliff python3-designateclient python3-etcd3gw python3-eventlet python3-glanceclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-monascaclient python3-mypy python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-ovsdbapp python3-pbr python3-pecan python3-psycopg2 python3-pure-sasl python3-pycadf python3-pymemcache python3-pyroute2 python3-requests python3-rfc3986 python3-stevedore python3-swiftclient python3-taskflow python3-testresources python3-testtools python3-tooz python3-uhashring python3-urllib3 python3-wrapt python3-yappi python3-zaqarclient"
	;;
	"caracal")
		COMP_DEPENDS="os-brick-common python-pastedeploy-tpl python3-amqp python3-attr python3-barbicanclient python3-binary-memcached python3-boto3 python3-botocore python3-castellan python3-chardet python3-cinderclient python3-cliff python3-cursive python3-debtcollector python3-designateclient python3-dogpile.cache python3-etcd3gw python3-eventlet python3-fixtures python3-futurist python3-glanceclient python3-gnocchiclient python3-greenlet python3-json-pointer python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-libvirt python3-lxml python3-memcache python3-monascaclient python3-munch python3-mypy python3-netaddr python3-networking-l2gw python3-networkx python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-vif python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-ovsdbapp python3-packaging python3-pastedeploy python3-pastedeploy-tpl python3-pbr python3-pecan python3-pkg-resources python3-psutil python3-pyasn1 python3-pyasn1-modules python3-pydot python3-pymemcache python3-pymysql python3-q-text-as-data python3-rtslib-fb python3-setuptools python3-sqlalchemy python3-stevedore python3-swiftclient python3-taskflow python3-testresources python3-testtools python3-tooz python3-typing-extensions python3-urllib3 python3-warlock python3-websockify python3-zake python3-zaqarclient"
	;;
	"dalmatian")
		COMP_DEPENDS="ceilometer-instance-poller os-brick-common python3-barbicanclient python3-castellan python3-cinderclient python3-cliff python3-ddt python3-designateclient python3-dogpile.cache python3-eventlet python3-glanceclient python3-gnocchiclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-lxml python3-more-itertools python3-neutron-dynamic-routing python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-service-types python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-paramiko python3-paste python3-pbr python3-pecan python3-platformdirs python3-pyparsing python3-simplejson python3-sqlalchemy python3-stevedore python3-swiftclient python3-taskflow python3-testtools python3-tooz python3-uritemplate python3-voluptuous python3-werkzeug python3-zaqarclient"
	;;
	"epoxy")
		COMP_DEPENDS="os-brick-common pycadf-common python3-barbicanclient python3-blinker python3-castellan python3-cinderclient python3-cliff python3-debtcollector python3-designateclient python3-futurist python3-glanceclient python3-gnocchiclient python3-httplib2 python3-iso8601 python3-jaraco.functools python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-netaddr python3-neutron-dynamic-routing python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-ken python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-packaging python3-pbr python3-pkg-resources python3-prometheus-client python3-psutil python3-pycadf python3-requests python3-setuptools python3-stevedore python3-swiftclient python3-taskflow python3-testscenarios python3-testtools python3-typing-extensions python3-urllib3 python3-werkzeug python3-yaml python3-zaqarclient"
	;;
	"flamingo")
		COMP_DEPENDS="alembic os-brick-common python3-alembic python3-barbicanclient python3-binary-memcached python3-castellan python3-ceilometer python3-cinderclient python3-cliff python3-designateclient python3-eventlet python3-fixtures python3-futurist python3-glanceclient python3-gnocchiclient python3-google-auth python3-jsonschema python3-kazoo python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-mako python3-markupsafe python3-msgpack python3-networkx python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-client-config python3-os-ken python3-os-service-types python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.limit python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-pbr python3-pecan python3-pyroute2 python3-retrying python3-rtslib-fb python3-stevedore python3-swiftclient python3-taskflow python3-testscenarios python3-tooz python3-uritemplate python3-voluptuous python3-warlock python3-websockify python3-wrapt python3-yappi python3-zaqarclient"
	;;
	*)
		COMP_DEPENDS="alembic os-brick-common python3-alembic python3-amqp python3-automaton python3-barbicanclient python3-binary-memcached python3-cachetools python3-castellan python3-cffi python3-cffi-backend python3-cinderclient python3-cliff python3-cmd2 python3-cryptography python3-cursive python3-ddt python3-debtcollector python3-designateclient python3-dogpile.cache python3-etcd3gw python3-eventlet python3-fasteners python3-fixtures python3-futurist python3-glanceclient python3-gnocchiclient python3-greenlet python3-idna python3-importlib-metadata python3-iso8601 python3-jinja2 python3-json-pointer python3-jsonpatch python3-jsonschema python3-jwt python3-kazoo python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-kombu python3-lxml python3-markupsafe python3-migrate python3-monascaclient python3-monotonic python3-msgpack python3-munch python3-mypy python3-netaddr python3-neutronclient  python3-novaclient python3-oauth2client python3-oauthlib python3-openstackclient python3-openstacksdk python3-os-brick python3-os-client-config python3-os-ken python3-os-resource-classes python3-os-traits python3-os-vif python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-ovsdbapp python3-paramiko python3-pbr python3-pecan python3-pkg-resources python3-psutil python3-pure-sasl python3-pymemcache python3-pymysql python3-pyparsing python3-pyroute2 python3-pytimeparse python3-rfc3986 python3-rtslib-fb python3-setuptools python3-simplejson python3-sqlalchemy python3-stevedore python3-swiftclient python3-taskflow python3-tenacity python3-testresources python3-testtools python3-tooz python3-uhashring python3-ujson python3-uritemplate python3-voluptuous python3-warlock python3-wcwidth python3-websockify python3-webtest python3-werkzeug python3-wrapt python3-yaml python3-yappi python3-zake"
	;;
	esac
	upgrade_package_list_on_host ${HOST} "${COMP_DEPENDS}"
}

net_upgrade_depends () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Installing depends on ${HOST_NAME}"
	case "${TO_OS_RELEASE}" in
	"wallaby")
		NET_DEPENDS="python3-cinderclient python3-cliff python3-cmd2 python3-designateclient python3-dogpile.cache python3-eventlet python3-glanceclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-msgpack python3-netaddr python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-ken python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-ovsdbapp python3-pbr python3-pymemcache python3-pymysql python3-pyroute2 python3-stevedore python3-tenacity python3-tooz python3-voluptuous python3-colorama python3-pyroute2.core python3-pyroute2.ethtool python3-pyroute2.ipdb python3-pyroute2.ipset python3-pyroute2.ndb python3-pyroute2.nftables python3-pyroute2.nslink python3-pyroute2.protocols"
	;;
	"xena")
		NET_DEPENDS="alembic libjs-sphinxdoc python3-alembic python3-cinderclient python3-cliff python3-debtcollector python3-designateclient python3-eventlet python3-futurist python3-glanceclient python3-greenlet python3-idna python3-jinja2 python3-jsonpatch python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-markupsafe python3-migrate python3-monotonic python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-ken python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-osprofiler python3-ovsdbapp python3-pbr python3-pecan python3-pyroute2 python3-pyroute2.ethtool python3-pyroute2.ipdb python3-pyroute2.ipset python3-pyroute2.ndb python3-pyroute2.nftables python3-pyroute2.nslink python3-pyroute2.protocols python3-q-text-as-data python3-rfc3986 python3-sqlalchemy python3-stevedore python3-testresources python3-testtools python3-tooz python3-uhashring python3-wrapt python3-yappi"
	;;
	"yoga")
		NET_DEPENDS="alembic python3-alembic python3-amqp python3-binary-memcached python3-cachetools python3-cffi python3-cffi-backend python3-cinderclient python3-cliff python3-cmd2 python3-cryptography python3-debtcollector python3-designateclient python3-dogpile.cache python3-etcd3gw python3-eventlet python3-fasteners python3-glanceclient python3-greenlet python3-idna python3-importlib-metadata python3-iso8601 python3-jinja2 python3-json-pointer python3-jwt python3-kazoo python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-kombu python3-lxml python3-monotonic python3-msgpack python3-neutronclient python3-novaclient python3-oauthlib python3-openstackclient python3-openstacksdk python3-os-client-config python3-os-ken python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-ovsdbapp python3-paramiko python3-pbr python3-pecan python3-pkg-resources python3-psutil python3-pure-sasl python3-pyparsing python3-pyroute2 python3-pytimeparse python3-setuptools python3-simplejson python3-stevedore python3-tooz python3-voluptuous python3-wcwidth python3-wrapt python3-yaml python3-zake"
	;;
	"zed")
		NET_DEPENDS="alembic python3-alembic python3-cinderclient python3-cliff python3-designateclient python3-etcd3gw python3-eventlet python3-fixtures python3-futurist python3-glanceclient python3-json-pointer python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-msgpack python3-munch python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-ken python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-osprofiler python3-ovsdbapp python3-pbr python3-pymemcache python3-q-text-as-data python3-sqlalchemy python3-stevedore python3-testresources python3-testtools python3-tooz python3-uhashring python3-warlock python3-webtest python3-wrapt python3-yappi"
	;;
	"antelope")
		NET_DEPENDS="pycadf-common python3-cinderclient python3-cliff python3-debtcollector python3-designateclient python3-etcd3gw python3-fixtures python3-futurist python3-glanceclient python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-msgpack python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-client-config python3-os-ken python3-os-resource-classes python3-os-service-types python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-osprofiler python3-ovsdbapp python3-pbr python3-pecan python3-pure-sasl python3-pycadf python3-pymemcache python3-pyroute2 python3-pytimeparse python3-q-text-as-data python3-rfc3986 python3-stevedore python3-testscenarios python3-testtools python3-tooz python3-uhashring python3-warlock python3-wrapt python3-yappi python3-zake"
	;;
	"bobcat")
		NET_DEPENDS="pycadf-common python3-binary-memcached python3-cinderclient python3-cliff python3-designateclient python3-etcd3gw python3-eventlet python3-glanceclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-ken python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-ovsdbapp python3-pbr python3-pecan python3-psycopg2 python3-pure-sasl python3-pycadf python3-pymemcache python3-pyroute2 python3-requests python3-rfc3986 python3-stevedore python3-testresources python3-testtools python3-tooz python3-uhashring python3-urllib3 python3-wrapt python3-yappi"
	;;
	"caracal")
		NET_DEPENDS="python-pastedeploy-tpl python3-amqp python3-attr python3-binary-memcached python3-chardet python3-cinderclient python3-cliff python3-debtcollector python3-designateclient python3-dogpile.cache python3-etcd3gw python3-eventlet python3-fixtures python3-futurist python3-glanceclient python3-greenlet python3-json-pointer python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-lxml python3-memcache python3-munch python3-netaddr python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-ken python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-ovsdbapp python3-packaging python3-pastedeploy python3-pastedeploy-tpl python3-pbr python3-pecan python3-pkg-resources python3-psutil python3-pymemcache python3-pymysql python3-q-text-as-data python3-setuptools python3-sqlalchemy python3-stevedore python3-testresources python3-testtools python3-tooz python3-urllib3 python3-warlock python3-zake"
	;;
	"dalmatian")
		NET_DEPENDS="neutron-dynamic-routing-common python3-cinderclient python3-cliff python3-designateclient python3-dogpile.cache python3-eventlet python3-glanceclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-lxml python3-more-itertools python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-ken python3-os-service-types python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-osprofiler python3-ovsdbapp python3-paramiko python3-paste python3-pbr python3-pecan python3-platformdirs python3-pyparsing python3-simplejson python3-sqlalchemy python3-stevedore python3-testtools python3-tooz python3-voluptuous"
	;;
	"epoxy")
		NET_DEPENDS="pycadf-common python3-blinker python3-cinderclient python3-cliff python3-debtcollector python3-designateclient python3-futurist python3-glanceclient python3-httplib2 python3-iso8601 python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-netaddr python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-ken python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-osprofiler python3-ovsdbapp python3-packaging python3-pbr python3-pkg-resources python3-prometheus-client python3-psutil python3-pycadf python3-requests python3-setuptools python3-stevedore python3-testscenarios python3-testtools python3-typing-extensions python3-urllib3 python3-yaml"
	;;
	"flamingo")
		NET_DEPENDS="alembic python3-alembic python3-binary-memcached python3-cinderclient python3-cliff python3-designateclient python3-eventlet python3-fixtures python3-futurist python3-glanceclient python3-jsonschema python3-kazoo python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-mako python3-markupsafe python3-msgpack python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-client-config python3-os-ken python3-os-service-types python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-osprofiler python3-ovsdbapp python3-pbr python3-pecan python3-pyroute2 python3-stevedore python3-testscenarios python3-tooz python3-voluptuous python3-warlock python3-wrapt python3-yappi"
	;;
	*)
		NET_DEPENDS="alembic libjs-sphinxdoc python3-alembic python3-amqp python3-binary-memcached python3-cachetools python3-cffi python3-cffi-backend python3-cinderclient python3-cliff python3-cmd2 python3-cryptography python3-debtcollector python3-designateclient python3-dogpile.cache python3-etcd3gw python3-eventlet python3-fasteners python3-fixtures python3-futurist python3-glanceclient python3-greenlet python3-idna python3-importlib-metadata python3-iso8601 python3-jinja2 python3-json-pointer python3-jsonpatch python3-jsonschema python3-jwt python3-kazoo python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-kombu python3-lxml python3-markupsafe python3-migrate python3-monotonic python3-msgpack python3-munch python3-netaddr python3-neutronclient python3-novaclient python3-oauthlib python3-openstackclient python3-openstacksdk python3-os-client-config python3-os-ken python3-os-traits python3-os-vif python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-osprofiler python3-ovsdbapp python3-paramiko python3-pbr python3-pecan python3-pkg-resources python3-psutil python3-pure-sasl python3-pymemcache python3-pymysql python3-pyparsing python3-pyroute2 python3-pytimeparse python3-rfc3986 python3-setuptools python3-simplejson python3-sqlalchemy python3-stevedore python3-tenacity python3-testresources python3-testtools python3-tooz python3-uhashring python3-voluptuous python3-warlock python3-wcwidth python3-webtest python3-wrapt python3-yaml python3-yappi python3-zake"
	;;
	esac
	upgrade_package_list_on_host ${HOST} "${NET_DEPENDS}"
}

swift_upgrade_depends () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Installing depends on ${HOST_NAME}"
	case "${TO_OS_RELEASE}" in
	"wallaby")
		SWIFT_DEPENDS="openstack-pkg-tools python3-barbicanclient python3-castellan python3-ceilometermiddleware python3-cliff python3-cmd2 python3-dogpile.cache python3-eventlet python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-msgpack python3-netaddr python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.messaging python3-oslo.middleware python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-pbr python3-pymemcache python3-stevedore python3-swiftclient python3-tenacity python3-attr python3-colorama"
	;;
	"xena")
		SWIFT_DEPENDS="libjs-sphinxdoc openstack-pkg-tools python3-barbicanclient python3-castellan python3-ceilometermiddleware python3-cliff python3-debtcollector python3-eventlet python3-futurist python3-greenlet python3-idna python3-jinja2 python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-markupsafe python3-monotonic python3-oslo.cache python3-oslo.config python3-oslo.context python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-pbr python3-pyeclib python3-q-text-as-data python3-rfc3986 python3-sqlalchemy python3-stevedore python3-swiftclient python3-testtools python3-uhashring python3-wrapt python3-yappi"
	;;
	"yoga")
		SWIFT_DEPENDS="python3-amqp python3-barbicanclient python3-binary-memcached python3-cachetools python3-castellan python3-ceilometermiddleware python3-cffi-backend python3-cliff python3-cmd2 python3-cryptography python3-debtcollector python3-dogpile.cache python3-eventlet python3-fasteners python3-greenlet python3-idna python3-importlib-metadata python3-iso8601 python3-jinja2 python3-jwt python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-kombu python3-lxml python3-monotonic python3-msgpack python3-oauthlib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-pbr python3-pkg-resources python3-pyparsing python3-pytimeparse python3-setuptools python3-stevedore python3-swiftclient python3-wcwidth python3-wrapt python3-yaml"
	;;
	"zed")
		SWIFT_DEPENDS="python3-barbicanclient python3-castellan python3-ceilometermiddleware python3-cliff python3-eventlet python3-fixtures python3-futurist python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-msgpack python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-pbr python3-pyeclib python3-pymemcache python3-q-text-as-data python3-sqlalchemy python3-stevedore python3-swiftclient python3-testtools python3-uhashring python3-wrapt python3-yappi"
	;;
	"antelope")
		SWIFT_DEPENDS="pycadf-common python3-barbicanclient python3-castellan python3-ceilometermiddleware python3-cliff python3-debtcollector python3-fixtures python3-futurist python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-msgpack python3-os-service-types python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-pbr python3-pycadf python3-pyeclib python3-pymemcache python3-pytimeparse python3-q-text-as-data python3-rfc3986 python3-stevedore python3-swiftclient python3-testtools python3-uhashring python3-wrapt python3-yappi"
	;;
	"bobcat")
		SWIFT_DEPENDS="pycadf-common python3-barbicanclient python3-binary-memcached python3-castellan python3-ceilometermiddleware python3-cliff python3-eventlet python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-pbr python3-pycadf python3-pymemcache python3-requests python3-rfc3986 python3-stevedore python3-swiftclient python3-testtools python3-uhashring python3-urllib3 python3-wrapt python3-yappi"
	;;
	"caracal")
		SWIFT_DEPENDS="liberasurecode1 openstack-pkg-tools python-pastedeploy-tpl python3-amqp python3-attr python3-barbicanclient python3-binary-memcached python3-castellan python3-ceilometermiddleware python3-chardet python3-cliff python3-debtcollector python3-dogpile.cache python3-eventlet python3-fixtures python3-futurist python3-greenlet python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-lxml python3-memcache python3-netaddr python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-packaging python3-pastedeploy python3-pastedeploy-tpl python3-pbr python3-pkg-resources python3-pyeclib python3-pymemcache python3-q-text-as-data python3-setuptools python3-sqlalchemy python3-stevedore python3-swiftclient python3-testtools python3-urllib3"
	;;
	"dalmatian")
		SWIFT_DEPENDS="python3-barbicanclient python3-castellan python3-ceilometermiddleware python3-cliff python3-dogpile.cache python3-eventlet python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-lxml python3-more-itertools python3-os-service-types python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-paste python3-pbr python3-pyparsing python3-sqlalchemy python3-stevedore python3-swiftclient python3-testtools"
	;;
	"epoxy")
		SWIFT_DEPENDS="python3-debtcollector python3-iso8601 python3-netaddr python3-oslo.config python3-oslo.context python3-oslo.i18n python3-oslo.log python3-oslo.serialization python3-oslo.utils python3-packaging python3-pbr python3-pkg-resources python3-requests python3-setuptools python3-stevedore python3-swiftclient python3-typing-extensions python3-urllib3 python3-yaml"
	;;
	"flamingo")
		SWIFT_DEPENDS="openstack-pkg-tools python3-barbicanclient python3-binary-memcached python3-castellan python3-cliff python3-eventlet python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-mako python3-markupsafe python3-msgpack python3-os-service-types python3-oslo.cache python3-oslo.config python3-oslo.context python3-oslo.i18n python3-oslo.log python3-oslo.serialization python3-oslo.utils python3-pbr python3-stevedore python3-swiftclient python3-wrapt"
	;;
	*)
		SWIFT_DEPENDS="python3-amqp python3-barbicanclient python3-binary-memcached python3-cachetools python3-castellan python3-ceilometermiddleware python3-cffi-backend python3-cliff python3-cmd2 python3-cryptography python3-debtcollector python3-dogpile.cache python3-eventlet python3-fasteners python3-fixtures python3-futurist python3-greenlet python3-idna python3-importlib-metadata python3-iso8601 python3-jinja2 python3-jwt python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-kombu python3-lxml python3-markupsafe python3-monotonic python3-msgpack python3-netaddr python3-oauthlib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-pbr python3-pkg-resources python3-pyeclib python3-pymemcache python3-pyparsing python3-pytimeparse python3-rfc3986 python3-setuptools python3-sqlalchemy python3-stevedore python3-swiftclient python3-tenacity python3-testtools python3-uhashring python3-wcwidth python3-wrapt python3-yaml python3-yappi"
	;;
	esac
	upgrade_package_list_on_host ${HOST} "${SWIFT_DEPENDS}"
}

vol_upgrade_depends () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Installing depends on ${HOST_NAME}"
	case "${TO_OS_RELEASE}" in
	"wallaby")
		VOL_DEPENDS="os-brick-common python3-automaton python3-barbicanclient python3-castellan python3-cinderclient python3-cliff python3-cmd2 python3-dogpile.cache python3-eventlet python3-glanceclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-msgpack python3-netaddr python3-neutronclient python3-novaclient python3-oauth2client python3-openstackclient python3-openstacksdk python3-os-brick python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-pbr python3-pymemcache python3-pymysql python3-rtslib-fb python3-stevedore python3-swiftclient python3-taskflow python3-tenacity python3-tooz python3-voluptuous python3-colorama"
	;;
	"xena")
		VOL_DEPENDS="alembic libjs-sphinxdoc os-brick-common python3-alembic python3-automaton python3-barbicanclient python3-castellan python3-cinderclient python3-cliff python3-ddt python3-debtcollector python3-eventlet python3-futurist python3-glanceclient python3-greenlet python3-idna python3-jinja2 python3-jsonpatch python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-markupsafe python3-migrate python3-monotonic python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.config  python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-pbr python3-pecan python3-q-text-as-data python3-rfc3986 python3-sqlalchemy python3-stevedore python3-swiftclient python3-taskflow python3-testresources python3-testtools python3-tooz python3-uhashring python3-werkzeug python3-wrapt python3-yappi"
	;;
	"yoga")
		VOL_DEPENDS="alembic os-brick-common python3-alembic python3-amqp python3-automaton python3-barbicanclient python3-binary-memcached python3-boto3 python3-botocore python3-cachetools python3-castellan python3-cffi python3-cffi-backend python3-cinderclient python3-cliff python3-cmd2 python3-cryptography python3-ddt python3-debtcollector python3-dogpile.cache python3-etcd3gw python3-eventlet python3-fasteners python3-glanceclient python3-greenlet python3-idna python3-importlib-metadata python3-iso8601 python3-jinja2 python3-json-pointer python3-jwt python3-kazoo python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-kombu python3-lxml python3-monotonic python3-msgpack python3-neutronclient python3-novaclient python3-oauth2client python3-oauthlib python3-openstackclient python3-openstacksdk python3-os-brick python3-os-client-config python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-paramiko python3-pbr python3-pecan python3-pkg-resources python3-psutil python3-pure-sasl python3-pyparsing python3-pytimeparse python3-rtslib-fb python3-setuptools python3-simplejson python3-stevedore python3-swiftclient python3-taskflow python3-tooz python3-uritemplate python3-voluptuous python3-wcwidth python3-wrapt python3-yaml python3-zake"
	;;
	"zed")
		VOL_DEPENDS="alembic os-brick-common python3-alembic python3-automaton python3-barbicanclient python3-castellan python3-cinderclient python3-cliff python3-cursive python3-etcd3gw python3-eventlet python3-fixtures python3-futurist python3-glanceclient python3-json-pointer python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-msgpack python3-munch python3-neutronclient python3-novaclient python3-oauth2client python3-openstackclient python3-openstacksdk python3-os-brick python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-pbr python3-pymemcache python3-q-text-as-data python3-rtslib-fb python3-sqlalchemy python3-stevedore python3-swiftclient python3-taskflow python3-testresources python3-testtools python3-tooz python3-uhashring python3-warlock python3-webtest python3-werkzeug python3-wrapt python3-yappi"
	;;
	"antelope")
		VOL_DEPENDS="os-brick-common pycadf-common python3-automaton python3-barbicanclient python3-castellan python3-cinderclient python3-cliff python3-cursive python3-debtcollector python3-etcd3gw python3-fixtures python3-futurist python3-glanceclient python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-msgpack python3-neutronclient python3-novaclient python3-oauth2client python3-openstackclient python3-openstacksdk python3-os-brick python3-os-client-config python3-os-service-types python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-pbr python3-pecan python3-pure-sasl python3-pycadf python3-pymemcache python3-pytimeparse python3-q-text-as-data python3-rfc3986 python3-stevedore python3-swiftclient python3-taskflow python3-testscenarios python3-testtools python3-tooz python3-uhashring python3-uritemplate python3-warlock python3-wrapt python3-yappi python3-zake"
	;;
	"bobcat")
		VOL_DEPENDS="os-brick-common pycadf-common python3-automaton python3-barbicanclient python3-binary-memcached python3-castellan python3-cinderclient python3-cliff python3-etcd3gw python3-eventlet python3-glanceclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-pbr python3-pecan python3-psycopg2 python3-pure-sasl python3-pycadf python3-pymemcache python3-requests python3-rfc3986 python3-stevedore python3-swiftclient python3-taskflow python3-testresources python3-testtools python3-tooz python3-uhashring python3-urllib3 python3-wrapt python3-yappi"
	;;
	"dalmatian")
		VOL_DEPENDS="os-brick-common python3-attr python3-barbicanclient python3-boto3 python3-botocore python3-castellan python3-chardet python3-cinderclient python3-cliff python3-ddt python3-dogpile.cache python3-eventlet python3-glanceclient python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-lxml python3-memcache python3-more-itertools python3-networkx python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-service-types python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-packaging python3-paramiko python3-paste python3-pastedeploy python3-pastedeploy-tpl python3-pbr python3-pecan python3-platformdirs python3-pyasn1 python3-pyasn1-modules python3-pydot python3-pyparsing python3-simplejson python3-sqlalchemy python3-stevedore python3-swiftclient python3-taskflow python3-testtools python3-tooz python3-urllib3 python3-voluptuous python3-werkzeug"
	;;
	"epoxy")
		VOL_DEPENDS="os-brick-common pycadf-common python3-barbicanclient python3-blinker python3-castellan python3-cinderclient python3-cliff python3-debtcollector python3-futurist python3-glanceclient python3-httplib2 python3-iso8601 python3-jaraco.functools python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-netaddr python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-packaging python3-pbr python3-pkg-resources python3-prometheus-client python3-psutil python3-pycadf python3-requests python3-setuptools python3-stevedore python3-swiftclient python3-taskflow python3-testscenarios python3-testtools python3-typing-extensions python3-urllib3 python3-werkzeug python3-yaml"
	;;
	"flamingo")
		VOL_DEPENDS="alembic os-brick-common python3-alembic python3-barbicanclient python3-binary-memcached python3-castellan python3-cinderclient python3-cliff python3-eventlet python3-fixtures python3-futurist python3-glanceclient python3-google-auth python3-jsonschema python3-kazoo python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-mako python3-markupsafe python3-msgpack python3-networkx python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-brick python3-os-client-config python3-os-service-types python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-pbr python3-pecan python3-retrying python3-rtslib-fb python3-stevedore python3-swiftclient python3-taskflow python3-testscenarios python3-tooz python3-uritemplate python3-voluptuous python3-warlock python3-wrapt python3-yappi"
	;;
	*)
		VOL_DEPENDS="alembic os-brick-common python3-alembic python3-amqp python3-automaton python3-barbicanclient python3-binary-memcached python3-cachetools python3-castellan python3-cffi python3-cffi-backend python3-cinderclient python3-cliff python3-cmd2 python3-cryptography python3-cursive python3-ddt python3-debtcollector python3-dogpile.cache python3-etcd3gw python3-eventlet python3-fasteners python3-fixtures python3-futurist python3-glanceclient python3-greenlet python3-idna python3-importlib-metadata python3-iso8601 python3-jinja2 python3-json-pointer python3-jsonpatch python3-jsonschema python3-jwt python3-kazoo python3-keyring python3-keystoneauth1 python3-keystoneclient python3-keystonemiddleware python3-kombu python3-lxml python3-markupsafe python3-migrate python3-monotonic python3-msgpack python3-munch python3-netaddr python3-neutronclient python3-novaclient python3-oauth2client python3-oauthlib python3-openstackclient python3-openstacksdk python3-os-brick python3-os-client-config python3-os-win python3-osc-lib python3-oslo.cache python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.privsep python3-oslo.reports python3-oslo.rootwrap python3-oslo.serialization python3-oslo.service python3-oslo.upgradecheck python3-oslo.utils python3-oslo.versionedobjects python3-oslo.vmware python3-osprofiler python3-paramiko python3-pbr python3-pecan python3-pkg-resources python3-psutil python3-pure-sasl python3-pymemcache python3-pymysql python3-pyparsing python3-pytimeparse python3-q-text-as-data python3-rfc3986 python3-rtslib-fb python3-setuptools python3-simplejson python3-sqlalchemy python3-stevedore python3-swiftclient python3-taskflow python3-tenacity python3-testresources python3-testtools python3-tooz python3-uhashring python3-uritemplate python3-voluptuous python3-warlock python3-wcwidth python3-webtest python3-werkzeug python3-wrapt python3-yaml python3-yappi python3-zake"
	;;
	esac
	upgrade_package_list_on_host ${HOST} "${VOL_DEPENDS}"
}

tempest_upgrade_depends () {
	local HOST HOST_IP HOST_NAME
	HOST=${1}
	HOST_IP=$(echo ${HOST} | cut -d, -f1)
	HOST_NAME=$(echo ${HOST} | cut -d, -f2)
	green_echo "-> Installing depends on ${HOST_NAME}"
	case "${TO_OS_RELEASE}" in
	"wallaby")
		TEMPEST_DEPENDS="barbican-tempest-plugin cinder-tempest-plugin heat-tempest-plugin keystone-tempest-plugin neutron-tempest-plugin octavia-tempest-plugin python3-barbicanclient python3-cinderclient python3-cliff python3-cmd2 python3-dogpile.cache python3-eventlet python3-glanceclient python3-gnocchiclient python3-heatclient python3-keystoneauth1 python3-keystoneclient python3-msgpack python3-netaddr python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-ken python3-os-traits python3-osc-lib python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-oslo.versionedobjects python3-pbr python3-pymysql python3-stestr python3-stevedore python3-swiftclient python3-tempest python3-tenacity python3-voluptuous python3-zaqarclient telemetry-tempest-plugin tempest"
	;;
	"xena")
		TEMPEST_DEPENDS="alembic barbican-tempest-plugin cinder-tempest-plugin heat-tempest-plugin keystone-tempest-plugin libjs-sphinxdoc neutron-tempest-plugin octavia-tempest-plugin python3-alembic python3-barbicanclient python3-cinderclient python3-cliff python3-ddt python3-debtcollector python3-eventlet python3-futurist python3-glanceclient python3-greenlet python3-heatclient python3-idna python3-jinja2 python3-jsonpatch python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-markupsafe python3-migrate python3-monotonic python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-collect-config python3-os-ken python3-os-testr python3-os-traits python3-osc-lib python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-oslo.versionedobjects python3-oslotest python3-osprofiler python3-pbr python3-pecan python3-q-text-as-data python3-rally python3-rfc3986 python3-sqlalchemy python3-stestr python3-stevedore python3-swiftclient python3-tempest python3-testresources python3-testtools python3-wrapt python3-yappi python3-zaqarclient rally telemetry-tempest-plugin tempest"
	;;
	"yoga")
		TEMPEST_DEPENDS="alembic barbican-tempest-plugin cinder-tempest-plugin heat-tempest-plugin keystone-tempest-plugin neutron-tempest-plugin octavia-tempest-plugin python3-alembic python3-amqp python3-barbicanclient python3-cachetools python3-cffi-backend python3-cinderclient python3-cliff python3-cmd2 python3-cryptography python3-ddt python3-debtcollector python3-dogpile.cache python3-eventlet python3-fasteners python3-filelock python3-gabbi python3-glanceclient python3-gnocchiclient python3-greenlet python3-heatclient python3-idna python3-importlib-metadata python3-iso8601 python3-jinja2 python3-json-pointer python3-jwt python3-keyring python3-keystoneauth1 python3-keystoneclient python3-kombu python3-lxml python3-monotonic python3-msgpack python3-neutron-lib python3-neutronclient python3-novaclient python3-oauthlib python3-openstackclient python3-openstacksdk python3-os-client-config python3-os-ken python3-os-traits python3-osc-lib python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-oslo.versionedobjects python3-paramiko python3-pbr python3-pecan python3-pkg-resources python3-pyparsing python3-pytest python3-pytimeparse python3-rally python3-setuptools python3-simplejson python3-stevedore python3-swiftclient python3-tempest python3-ujson python3-voluptuous python3-wcwidth python3-wrapt python3-wsgi-intercept python3-yaml python3-zaqarclient telemetry-tempest-plugin tempest"
	;;
	"zed")
		TEMPEST_DEPENDS="alembic barbican-tempest-plugin cinder-tempest-plugin heat-tempest-plugin keystone-tempest-plugin neutron-tempest-plugin octavia-tempest-plugin python3-alembic python3-barbicanclient python3-cinderclient python3-cliff python3-eventlet python3-fixtures python3-futurist python3-glanceclient python3-heatclient python3-json-pointer python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-msgpack python3-munch python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-ken python3-os-traits python3-osc-lib python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-oslo.versionedobjects python3-oslotest python3-osprofiler python3-pbr python3-pytest python3-q-text-as-data python3-sqlalchemy python3-stevedore python3-swiftclient python3-tempest python3-testresources python3-testtools python3-warlock python3-webtest python3-wrapt python3-yappi python3-zaqarclient telemetry-tempest-plugin tempest"
	;;
	"antelope")
		TEMPEST_DEPENDS="barbican-tempest-plugin cinder-tempest-plugin heat-tempest-plugin horizon-tempest-plugin keystone-tempest-plugin neutron-tempest-plugin octavia-tempest-plugin python3-barbicanclient python3-cinderclient python3-cliff python3-debtcollector python3-fixtures python3-futurist python3-glanceclient python3-gnocchiclient python3-heatclient python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-msgpack python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-client-config python3-os-ken python3-os-service-types python3-os-testr python3-os-traits python3-osc-lib python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-oslo.versionedobjects python3-oslotest python3-osprofiler python3-pbr python3-pecan python3-pytimeparse python3-q-text-as-data python3-rally python3-rfc3986 python3-stestr python3-stevedore python3-swiftclient python3-tempest python3-testscenarios python3-testtools python3-warlock python3-wrapt python3-wsgi-intercept python3-yappi python3-zaqarclient rally telemetry-tempest-plugin tempest"
	;;
	"bobcat")
		TEMPEST_DEPENDS="barbican-tempest-plugin cinder-tempest-plugin heat-tempest-plugin keystone-tempest-plugin libsubunit-perl neutron-tempest-plugin octavia-tempest-plugin python3-barbicanclient python3-cinderclient python3-cliff python3-eventlet python3-glanceclient python3-heatclient python3-keystoneauth1 python3-keystoneclient python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-collect-config python3-os-ken python3-os-testr python3-os-traits python3-osc-lib python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-oslo.versionedobjects python3-oslotest python3-pbr python3-pecan python3-psycopg2 python3-rally python3-requests   python3-rfc3986 python3-stestr python3-stevedore python3-subunit python3-swiftclient python3-tempest python3-testresources python3-testtools python3-urllib3 python3-wrapt python3-wsgi-intercept python3-yappi python3-zaqarclient rally subunit telemetry-tempest-plugin tempest"
	;;
	"dalmatian")
		TEMPEST_DEPENDS="barbican-tempest-plugin cinder-tempest-plugin glance-tempest-plugin heat-tempest-plugin keystone-tempest-plugin neutron-tempest-plugin octavia-tempest-plugin python3-attr python3-barbicanclient python3-chardet python3-cinderclient python3-cliff python3-ddt python3-dogpile.cache python3-eventlet python3-fixtures python3-futurist python3-gabbi python3-glanceclient python3-gnocchiclient python3-heatclient python3-keystoneauth1 python3-keystoneclient python3-lxml python3-more-itertools python3-munch python3-netaddr python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-collect-config python3-os-ken python3-os-service-types python3-os-testr python3-os-traits python3-osc-lib python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log  python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-oslo.versionedobjects python3-oslotest python3-osprofiler python3-packaging python3-paramiko python3-paste python3-pastedeploy python3-pastedeploy-tpl python3-pbr python3-pecan python3-platformdirs python3-pluggy python3-pygments python3-pymysql python3-pyparsing python3-q-text-as-data python3-simplejson python3-sqlalchemy python3-stestr python3-stevedore python3-swiftclient python3-tempest python3-testresources python3-testtools python3-urllib3 python3-voluptuous python3-warlock python3-zaqarclient telemetry-tempest-plugin tempest"
	;;
	"epoxy")
		TEMPEST_DEPENDS="barbican-tempest-plugin cinder-tempest-plugin designate-tempest-plugin glance-tempest-plugin heat-tempest-plugin keystone-tempest-plugin neutron-tempest-plugin octavia-tempest-plugin openstack-cluster-installer-common openstack-cluster-installer-utils python3-barbicanclient python3-blinker python3-cinderclient python3-cliff python3-debtcollector python3-futurist python3-glanceclient python3-gnocchiclient python3-heatclient python3-httplib2 python3-iso8601 python3-keystoneauth1 python3-keystoneclient python3-netaddr python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-ken python3-os-traits python3-osc-lib python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-oslo.versionedobjects python3-osprofiler python3-packaging python3-pbr python3-pkg-resources python3-prometheus-client python3-requests python3-setuptools python3-setuptools-whl python3-stevedore python3-swiftclient python3-tempest python3-testscenarios python3-testtools python3-typing-extensions python3-urllib3 python3-yaml python3-zaqarclient telemetry-tempest-plugin tempest"
	;;
	"flamingo")
		TEMPEST_DEPENDS="alembic barbican-tempest-plugin cinder-tempest-plugin designate-tempest-plugin glance-tempest-plugin heat-tempest-plugin keystone-tempest-plugin neutron-tempest-plugin octavia-tempest-plugin python3-alembic python3-barbicanclient python3-cinderclient python3-cliff python3-eventlet python3-fixtures python3-futurist python3-glanceclient python3-gnocchiclient python3-heatclient python3-jsonschema python3-keystoneauth1 python3-keystoneclient python3-mako python3-markupsafe python3-msgpack python3-neutron-lib python3-neutronclient python3-novaclient python3-openstackclient python3-openstacksdk python3-os-client-config python3-os-collect-config python3-os-ken python3-os-service-types python3-os-testr python3-os-traits python3-osc-lib python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.i18n python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-oslo.versionedobjects python3-oslotest python3-osprofiler python3-pbr python3-pecan python3-rally python3-stestr python3-stevedore python3-subunit python3-swiftclient python3-tempest python3-testscenarios python3-voluptuous python3-warlock python3-wrapt python3-wsgi-intercept python3-yappi python3-zaqarclient rally subunit telemetry-tempest-plugin tempest"
	;;
	*)
		TEMPEST_DEPENDS="alembic barbican-tempest-plugin cinder-tempest-plugin heat-tempest-plugin keystone-tempest-plugin neutron-tempest-plugin octavia-tempest-plugin python3-alembic python3-amqp python3-barbicanclient python3-cachetools python3-cffi-backend python3-cinderclient python3-cliff python3-cmd2 python3-cryptography python3-ddt python3-debtcollector python3-dogpile.cache python3-eventlet python3-fasteners python3-filelock python3-gabbi python3-glanceclient python3-gnocchiclient python3-greenlet python3-heatclient python3-idna python3-importlib-metadata python3-iso8601 python3-jinja2 python3-json-pointer python3-jwt python3-keyring python3-keystoneauth1 python3-keystoneclient python3-kombu python3-lxml python3-monotonic python3-msgpack python3-neutron-lib python3-neutronclient python3-novaclient python3-oauthlib python3-openstackclient python3-openstacksdk python3-os-client-config python3-os-ken python3-os-traits python3-osc-lib python3-oslo.concurrency python3-oslo.config python3-oslo.context python3-oslo.db python3-oslo.log python3-oslo.messaging python3-oslo.metrics python3-oslo.middleware python3-oslo.policy python3-oslo.serialization python3-oslo.service python3-oslo.utils python3-oslo.versionedobjects python3-paramiko python3-pbr python3-pecan python3-pkg-resources python3-pyparsing python3-pytest python3-pytimeparse python3-rally python3-setuptools python3-simplejson python3-stevedore python3-swiftclient python3-tempest python3-ujson python3-voluptuous python3-wcwidth python3-wrapt python3-wsgi-intercept python3-yaml python3-zaqarclient telemetry-tempest-plugin tempest"
	;;
	esac
	upgrade_package_list_on_host ${HOST} "${TEMPEST_DEPENDS}"
}

cluster_upgrade_depends () {
	green_echo "===> Upgrading dependencies on the controllers"
	iterate_on_hosts "${ALL_CTRL}" ctrl_upgrade_depends
	green_echo "===> Upgrading dependencies on the messaging nodes"
	iterate_on_hosts "${ALL_MSG}" msg_upgrade_depends
	green_echo "===> Upgrading dependencies on the network nodes"
	iterate_on_hosts "${ALL_NET}" net_upgrade_depends
	green_echo "===> Upgrading dependencies on the compute nodes"
	iterate_on_hosts -p "${ALL_COMP}" comp_upgrade_depends
	green_echo "===> Upgrading dependencies on the swift nodes"
	iterate_on_hosts -p "${ALL_SWIFTPRX}" swift_upgrade_depends
	iterate_on_hosts -p "${ALL_SWIFTSTR}" swift_upgrade_depends
	green_echo "===> Upgrading dependencies on the volume nodes"
	iterate_on_hosts -p "${ALL_VOL}" vol_upgrade_depends
	green_echo "===> Upgrading dependencies on the tempest nodes"
	iterate_on_hosts -p "${ALL_TEMPEST}" tempest_upgrade_depends
}

cluster_upgrade_check_vip_location () {
	WHERE_IS_API_VIP=$(sshi root@${ONE_CTRL_IP} "crm resource locate openstack-api-vip | sed -e 's/resource openstack-api-vip is running on: //' | awk '{print \$1}'")
	if [ "${WHERE_IS_API_VIP}" != "${ONE_CTRL_HOST}" ] ; then
		red_echo "Error: API VIP not located on controller 1."
		echo "Move it with: crm resource move openstack-api-vip ${ONE_CTRL_HOST}"
		echo "and retry upgrade."
		exit 1
	fi
}
#######################
### START OF SCRIPT ###
#######################

fetch_cluster_info

display_cluster_info

#green_echo "===> Check where the VIPs are hosted"
#cluster_upgrade_check_vip_location

green_echo "===> Checking that all nodes respond to ping"
oci_check_all_nodes_alive

green_echo "===> Disabling puppet everywhere but on Ceph nodes"
iterate_on_hosts -p "${ALL_NODES_BUT_CEPH}" disable_puppet

green_echo "===> Switching OpenStack release name in APT configuration of OCI"
switch_oci_to_release ${FROM_DEB_RELEASE} ${FROM_OS_RELEASE} ${TO_DEB_RELEASE} ${TO_OS_RELEASE}

green_echo "===> Switch the sources.list everywhere to ${TO_DEB_RELEASE}-${TO_OS_RELEASE}"
iterate_on_hosts -p "${ALL_NODES}" switch_to_release ${FROM_DEB_RELEASE} ${FROM_OS_RELEASE} ${TO_DEB_RELEASE} ${TO_OS_RELEASE}

cluster_upgrade_depends

if [ "${USE_EXTERNAL_KEYSTONE}" != "yes" ] ; then
	cluster_upgrade_keystone
fi
if [ "${HAS_BARBICAN}" = "yes" ] ; then
	cluster_upgrade_barbican
fi

if [ "${HAS_HEAT}" = "yes" ] ; then
	cluster_upgrade_heat
fi

if [ "${HAS_DESIGNATE}" = "yes" ] ; then
	cluster_upgrade_designate
fi

cluster_upgrade_swift

cluster_upgrade_horizon

if [ -n "${ALL_COMP}" ] ; then
	cluster_upgrade_glance

	if [ "${HAS_OCTAVIA}" ] ; then
		cluster_upgrade_octavia
	fi

	if [ "${HAS_TELEMETRY}" = "yes" ] ; then
		cluster_upgrade_gnocchi
		cluster_upgrade_ceilometer
		cluster_upgrade_cloudkitty
		cluster_upgrade_aodh
	fi
	if [ "${FROM_OS_RELEASE}" != "rocky" ] ; then
		# As per https://docs.openstack.org/nova/latest/admin/upgrades.html
		# we must upgrade placement before nova.
		cluster_upgrade_placement
	fi
	if [ "${HAS_VOL}" = "yes" ] || [ "${HAS_OSD}" = "yes" ] ; then
		cluster_upgrade_cinder
	fi
	cluster_upgrade_nova
	cluster_upgrade_neutron
fi

cluster_upgrade_finilize
cluster_check_status