[SDC] rebase 1710 code
[sdc.git] / asdctool / src / main / java / org / openecomp / sdc / asdctool / main / MigrationMenu.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.asdctool.main;
22
23 import java.util.Arrays;
24 import java.util.Optional;
25
26 import org.openecomp.sdc.asdctool.impl.PopulateComponentCache;
27 import org.openecomp.sdc.asdctool.impl.migration.v1604.AppConfig;
28 import org.openecomp.sdc.asdctool.impl.migration.v1604.DerivedFromAlignment;
29 import org.openecomp.sdc.asdctool.impl.migration.v1604.GroupsAlignment;
30 import org.openecomp.sdc.asdctool.impl.migration.v1604.ServiceMigration;
31 import org.openecomp.sdc.asdctool.impl.migration.v1604.VfcNamingAlignment;
32 import org.openecomp.sdc.asdctool.impl.migration.v1607.CsarMigration;
33 import org.openecomp.sdc.asdctool.impl.migration.v1610.TitanFixUtils;
34 import org.openecomp.sdc.asdctool.impl.migration.v1610.ToscaArtifactsAlignment;
35 import org.openecomp.sdc.asdctool.impl.migration.v1702.Migration1702;
36 import org.openecomp.sdc.asdctool.impl.migration.v1707.*;
37 import org.openecomp.sdc.be.config.ConfigurationManager;
38 import org.openecomp.sdc.common.api.ConfigurationSource;
39 import org.openecomp.sdc.common.impl.ExternalConfiguration;
40 import org.openecomp.sdc.common.impl.FSConfigurationSource;
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
44
45 public class MigrationMenu {
46
47         private static Logger log = LoggerFactory.getLogger(MigrationMenu.class.getName());
48         private static final String SERVICE_MIGARTION_BEAN = "serviceMigrationBean";
49
50         private static enum MigrationOperationEnum {
51                 MIGRATION_1602_1604("migrate-1602-1604", SERVICE_MIGARTION_BEAN),
52                 ALIGN_DERIVED_FROM_1604("align-derived-from-1604", "derivedFromAlignment"),
53                 MIGRATE_1604_1607("migrate-1604-1607", SERVICE_MIGARTION_BEAN),
54                 ALIGN_VFC_NAMES_1604("align-vfc-names-1604", "vfcNamingAlignmentBean"),
55                 TEST_REMOVE_HEAT_PLACEHOLDERS("testremoveheatplaceholders",     SERVICE_MIGARTION_BEAN),
56                 TEST_ADD_GROUP_UUIDS("testaddgroupuuids", SERVICE_MIGARTION_BEAN),
57                 ALIGN_GROUPS("align-groups", "groupsAlignment"),
58                 CLEAN_CSAR("clean-csar", "csarMigration"),
59                 POPULATE_COMPONENT_CACHE("populate-component-cache", "populateComponentCache"),
60                 FIX_PROPERTIES("fix-properties", "titanFixUtils"),
61                 ALIGN_TOSCA_ARTIFACTS("align-tosca-artifacts", "toscaArtifactsAlignment"),
62                 FIX_ICONS("fix-icons", "titanFixUtils"),
63                 MIGRATION_1610_1702("migrate-1610-1702", "migration1702"),
64                 MIGRATION_1702_1707("migrate-1702-1707", "migration1707"),
65                 DISTRIBUTION_STATUS_UPDATE_1707("distribution-status-update-1707", "distributionStatusUpdate"),
66                 VFMODULES_PROPERTIES_ADDING("vfModules-properties-adding", "vfModulesPropertiesAdding"),
67                 MIGRATION_1707_RELATIONS_FIX("fix-relations-after-migration-1707", "migration1707relationsFix"),
68                 MIGRATION_1707_VNF_FIX("fix-vnf-after-migration-1707", "migration1707vnfFix"),
69                 MIGRATION_1707_UUID_FIX("fix-UUID-1707", "migration1707UuidFix"),
70                 MIGRATION_1707_MISSING_INFO_FIX("fix-missing-info-1707", "migration1707MissingInfoFix");
71                 // UPDATE_DATA_TYPES("update_data_types", "updateDataTypes");
72
73                 private String value, beanName;
74
75                 public static MigrationOperationEnum findByValue(String value) {
76                         Optional<MigrationOperationEnum> optionalFound = Arrays.asList(MigrationOperationEnum.values()).stream().filter(e -> e.getValue().equalsIgnoreCase(value)).findAny();
77                         return optionalFound.isPresent() ? optionalFound.get() : null;
78                 }
79
80                 MigrationOperationEnum(String value, String beanName) {
81                         this.value = value;
82                         this.beanName = beanName;
83                 }
84
85                 public String getValue() {
86                         return value;
87                 }
88
89                 public String getBeanName() {
90                         return beanName;
91                 }
92         };
93
94         //arguments will be [operation] [version] [config path] [align derived - optional]
95         //example : migrate-1610-1702 1702 /home/config
96         public static void main(String[] args) throws Exception {
97
98                 if (args == null || args.length < 3) {
99                         usageAndExit();
100                 }
101                 MigrationOperationEnum operationEnum = MigrationOperationEnum.findByValue(args[0]);
102                 String appConfigDir = args[2];
103                 String dataInputFileDir = null;
104                 if (operationEnum == MigrationOperationEnum.ALIGN_DERIVED_FROM_1604 ) {
105                         dataInputFileDir = args[3];
106                 }
107                 log.info("Run with configuration folder {}", appConfigDir);
108                 AnnotationConfigApplicationContext context = initContext(appConfigDir);
109                 try {
110                         ServiceMigration serviceMigration = (ServiceMigration) context.getBean(SERVICE_MIGARTION_BEAN);
111                         switch (operationEnum) {
112                         case MIGRATION_1602_1604:
113                                 log.info("Start Titan migration from 1602 version to 1604");
114                                 if (serviceMigration.migrate1602to1604(appConfigDir)) {
115                                         log.info("Titan migration from 1602 version to 1604 was finished successfull");
116                                         System.exit(0);
117                                 } else {
118                                         log.info("Titan migration from 1602 version to 1604 was failed");
119                                         System.exit(2);
120                                 }
121                                 break;
122                         case MIGRATE_1604_1607:
123                                 log.info("Start Titan migration from 1604 version to 1607");
124                                 if (serviceMigration.migrate1604to1607(appConfigDir)) {
125                                         log.info("Titan migration from 1604 version to 1607 was finished successfull");
126                                         System.exit(0);
127                                 } else {
128                                         log.info("Titan migration from 1604 version to 1607 was failed");
129                                         System.exit(2);
130                                 }
131                                 break;
132                         case ALIGN_VFC_NAMES_1604:
133                                 VfcNamingAlignment vfcNamingAlignment = (VfcNamingAlignment) context.getBean(operationEnum.getBeanName());
134                                 log.info("Start VFC naming alignment on 1604");
135                                 if (vfcNamingAlignment.alignVfcNames1604(appConfigDir)) {
136                                         log.info("VFC naming alignment on 1604 was finished successfull");
137                                         System.exit(0);
138                                 } else {
139                                         log.info("VFC naming alignment on 1604 was failed");
140                                         System.exit(2);
141                                 }
142                                 break;
143                         case TEST_REMOVE_HEAT_PLACEHOLDERS:
144                                 boolean check = serviceMigration.testRemoveHeatPlaceHolders(appConfigDir);
145                                 if (check == true) {
146                                         System.exit(0);
147                                 } else {
148                                         System.exit(2);
149                                 }
150                                 break;
151                         case TEST_ADD_GROUP_UUIDS:
152                                 check = serviceMigration.testAddGroupUuids(appConfigDir);
153                                 if (check == true) {
154                                         System.exit(0);
155                                 } else {
156                                         System.exit(2);
157                                 }
158                                 break;
159                         case ALIGN_DERIVED_FROM_1604:
160                                 DerivedFromAlignment derivedFromAlignment = (DerivedFromAlignment) context.getBean(operationEnum.getBeanName());
161                                 log.info("Start derived from alignment on 1604");
162                                 if (derivedFromAlignment.alignDerivedFrom1604(appConfigDir, dataInputFileDir)) {
163                                         log.info("Derived from alignment on 1604 was finished successfull");
164                                         System.exit(0);
165                                 } else {
166                                         log.info("Derived from alignment on 1604 was failed");
167                                         System.exit(2);
168                                 }
169                                 break;
170                         case ALIGN_GROUPS:
171                                 GroupsAlignment groupsAlignment = (GroupsAlignment) context.getBean(operationEnum.getBeanName());
172                                 log.debug("Start derived from alignment on 1604");
173                                 if (groupsAlignment.alignGroups(appConfigDir)) {
174                                         log.debug("Groups alignment was finished successfull");
175                                         System.exit(0);
176                                 } else {
177                                         log.debug("Groups alignment was failed");
178                                         System.exit(2);
179                                 }
180                                 break;
181                         case CLEAN_CSAR:
182                                 log.info("Start remove CSAR resources");
183                                 CsarMigration csarMigration = (CsarMigration) context.getBean(operationEnum.getBeanName());
184                                 if (csarMigration.removeCsarResources()) {
185                                         log.info("Remove CSAR resources finished successfully");
186                                         System.exit(0);
187                                 } else {
188                                         log.info("Remove CSAR resources failed");
189                                         System.exit(2);
190                                 }
191                                 break;
192                         case POPULATE_COMPONENT_CACHE:
193                                 PopulateComponentCache populateComponentCache = (PopulateComponentCache) context.getBean(operationEnum.getBeanName());
194                                 populateComponentCache.populateCache();
195                                 System.exit(0);
196                                 break;
197                         case FIX_PROPERTIES:
198                                 log.debug("Start fix capability properties types");
199                                 TitanFixUtils titanFixUtils = (TitanFixUtils) context.getBean(operationEnum.getBeanName());
200                                 if (titanFixUtils.fixCapabiltyPropertyTypes()) {
201                                         log.debug("Fix capability properties types finished successfully");
202                                         System.exit(0);
203                                 } else {
204                                         log.debug("Fix capability properties types failed");
205                                         System.exit(2);
206                                 }
207                                 break;
208                         case FIX_ICONS:
209                                 log.info("Start fix icons of vl and eline");
210                                 titanFixUtils = (TitanFixUtils) context.getBean(operationEnum.getBeanName());
211                                 if (titanFixUtils.fixIconsInNormatives()) {
212                                         log.info("Fix icons of vl and eline finished successfully");
213                                         System.exit(0);
214                                 } else {
215                                         log.info("Fix icons of vl and eline failed");
216                                         System.exit(2);
217                                 }
218                                 break;
219                         case ALIGN_TOSCA_ARTIFACTS:
220                                 log.info("Start align tosca artifacts");
221                                 ToscaArtifactsAlignment toscaArtifactsAlignment = (ToscaArtifactsAlignment) context.getBean(operationEnum.getBeanName());
222                                 boolean isSuccessful = toscaArtifactsAlignment.alignToscaArtifacts();
223                                 if (isSuccessful) {
224                                         log.info("Tosca Artifacts alignment was finished successfully");
225                                         System.exit(0);
226                                 } else {
227                                         log.info("Tosca Artifacts alignment has failed");
228                                         System.exit(2);
229                                 }
230                                 break;
231                         case MIGRATION_1610_1702:
232                                 log.info("Start SDC migration from 1610 to 1702");
233                                 Migration1702 migration = (Migration1702) context.getBean(operationEnum.getBeanName());
234                                 isSuccessful = migration.migrate(appConfigDir);
235                                 if (isSuccessful) {
236                                         log.info("SDC migration from 1610 to 1702 was finished successful");
237                                         System.exit(0);
238                                 } else{
239                                         log.info("SDC migration from 1610 to 1702 has failed");
240                                         System.exit(2);
241                                 }
242
243                                 break;
244                         case MIGRATION_1702_1707://this migration is currently not needed, but will be commented out for production env
245 //                              log.info("Start SDC migration from 1702 to 1707");
246                                 Migration1707 migration1707 = (Migration1707) context.getBean(operationEnum.getBeanName());
247                                 isSuccessful = migration1707.migrate();
248                                 if (isSuccessful) {
249                                         log.info("SDC migration from 1702 to 1707 was finished successfully");
250                                         System.exit(0);
251                                 } else{
252                                         log.info("SDC migration from 1702 to 1707 has failed");
253                                         System.exit(2);
254                                 }
255                                 System.exit(0);
256                                 break;
257                         case VFMODULES_PROPERTIES_ADDING://this migration is currently not needed, but will be commented out for production env
258                                 log.info("Start adding new properties to vfModules");
259                                 VfModulesPropertiesAdding migrationVfModulesProperties = (VfModulesPropertiesAdding) context.getBean(operationEnum.getBeanName());
260                                 isSuccessful = migrationVfModulesProperties.migrate(args[1]);
261                                 if (isSuccessful) {
262                                         log.info("Adding new properties to vfModules was finished successfully");
263                                         System.exit(0);
264                                 } else{
265                                         log.info("Adding new properties to vfModules has failed");
266                                         System.exit(2);
267                                 }
268                                 System.exit(0);
269                                 break;
270                         case MIGRATION_1707_UUID_FIX:
271                                 if (args == null || args.length < 5) {
272                                         System.out.println("Usage: fix-UUID-1707 <configuration dir> <all/distributed_only> <services/service_vf/fix/fix_only_services>");
273                                         System.exit(1);
274                                 }
275                                 String fixServices = args[3];
276                                 String runMode = args[4];
277                                 log.info("Start fixing artifact UUID after 1707 migration with arguments run with configuration [{}] , for [{}] services", runMode, fixServices);
278
279                                 Migration1707ArtifactUuidFix migrationFix = (Migration1707ArtifactUuidFix) context.getBean(operationEnum.getBeanName());
280                                 isSuccessful = migrationFix.migrate(fixServices,  runMode);
281                                 if (isSuccessful) {
282                                         log.info("Fixing artifacts UUID for 1707  was finished successfully");
283                                 } else{
284                                         log.info("Fixing artifacts UUID for 1707  has failed");
285                                         System.exit(2);
286                                 }
287                                 System.exit(0);
288                                 break;
289                         case MIGRATION_1707_MISSING_INFO_FIX:
290
291                                 log.info("Start fixing missing group and instance info after 1707 migration");
292
293                                 Migration1707MissingInfoFix migration1707Fix = (Migration1707MissingInfoFix) context.getBean(operationEnum.getBeanName());
294                                 isSuccessful = migration1707Fix.migrate();
295                                 if (isSuccessful) {
296                                         log.info("Fixing groups and node templates missing info  was finished successfully");
297                                 } else{
298                                         log.info("Fixing groups and node templates missing info has failed");
299                                         System.exit(2);
300                                 }
301                                 System.exit(0);
302                                 break;
303                         default:
304                                 usageAndExit();
305                         }
306                 } catch (Exception t) {
307                         log.info("Failed {} with exception: {}", operationEnum, t.toString());
308                         t.printStackTrace();
309                         log.debug("Error while Running MigrationMenu {}", t.getMessage(), t);
310                         System.exit(3);
311                 } finally {
312                         context.close();
313                 }
314         }
315
316         private static AnnotationConfigApplicationContext initContext(String appConfigDir) {
317                 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
318                 ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
319                 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class, Migration1707Config.class);
320                 return context;
321         }
322
323         private static void usageAndExit() {
324                 MigrationUsage();
325                 System.exit(1);
326         }
327
328         private static void MigrationUsage() {
329                 System.out.println("Usage: migrate-1602-1604 <configuration dir>");
330                 System.out.println("Usage: migrate-1604-1607 <configuration dir>");
331                 System.out.println("Usage: align-vfc-names-1604 <configuration dir>");
332                 System.out.println("Usage: align-derived-from-1604 <configuration dir> <data_input_file dir>");
333                 System.out.println("Usage: align-groups <configuration dir>");
334                 System.out.println("Usage: fix-properties <configuration dir>");
335                 System.out.println("Usage: migrate-1610-1702 <configuration dir>");
336                 System.out.println("Usage: migrate-1702-1707 <configuration dir>");
337                 System.out.println("Usage: update_data_types <configuration dir> <data_types_input_file path>");
338                 System.out.println("Usage: distribution-status-update-1707");
339                 System.out.println("Usage: vfModules-properties-adding <group_types_input_file path> <configuration dir>");
340                 System.out.println("Usage: fix-relations-after-migration-1707 <configuration dir>");
341                 System.out.println("Usage: fix-vnf-after-migration-1707 <configuration dir>");
342                 System.out.println("Usage: fix-UUID-1707 <configuration dir> <all/distributed_only> <services/service_vf/fix/fix_only_services>");
343                 System.out.println("Usage: fix-missing-info-1707 <configuration dir>");
344         }
345 }