Skip to content

Commit

Permalink
MID-8842 upgrade, more ninja code regarding upgrade steps
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Jun 8, 2023
1 parent dd885ce commit 42eaf01
Show file tree
Hide file tree
Showing 15 changed files with 268 additions and 107 deletions.
4 changes: 4 additions & 0 deletions tools/ninja/pom.xml
Expand Up @@ -130,6 +130,10 @@
</exclusions>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
Expand Down
Expand Up @@ -19,14 +19,14 @@

import com.evolveum.midpoint.common.configuration.api.MidpointConfiguration;
import com.evolveum.midpoint.init.AuditFactory;
import com.evolveum.midpoint.ninja.opts.SetupDatabaseSchemaOptions;
import com.evolveum.midpoint.ninja.opts.SetupDatabaseOptions;
import com.evolveum.midpoint.ninja.util.NinjaUtils;
import com.evolveum.midpoint.repo.api.RepositoryServiceFactoryException;
import com.evolveum.midpoint.repo.sqale.SqaleRepositoryConfiguration;
import com.evolveum.midpoint.repo.sqale.audit.SqaleAuditServiceFactory;
import com.evolveum.midpoint.repo.sqlbase.DataSourceFactory;

public class SetupDatabaseSchemaAction extends RepositoryAction<SetupDatabaseSchemaOptions> {
public class SetupDatabaseAction extends RepositoryAction<SetupDatabaseOptions> {

@Override
public void execute() throws Exception {
Expand Down
@@ -0,0 +1,101 @@
package com.evolveum.midpoint.ninja.action.upgrade;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.fusesource.jansi.Ansi;

import com.evolveum.midpoint.ninja.action.Action;
import com.evolveum.midpoint.ninja.util.Log;

public class DownloadDistributionAction extends Action<DownloadDistributionOptions> {

@Override
public void execute() throws Exception {
final Log log = context.getLog();

final File tempDirectory = options.getTempDirectory();

File distributionZipFile = options.getDistributionArchive();
if (distributionZipFile == null || !distributionZipFile.exists()) {
DistributionManager manager = new DistributionManager(tempDirectory);
ProgressListener listener = new ConsoleProgressListener();

distributionZipFile = manager.downloadDistribution(UpgradeConstants.SUPPORTED_VERSION_TARGET, listener);
} else {
log.info(Ansi.ansi().fgGreen().a("Distribution zip already downloaded here: " + distributionZipFile.getAbsolutePath()).reset().toString());
}

File distributionDirectory = unzipDistribution(distributionZipFile);

log.info(Ansi.ansi().a("Distribution zip: ").a(distributionZipFile.getAbsolutePath()).reset().toString());
log.info(Ansi.ansi().a("Distribution directory: ").fgGreen().a(distributionDirectory.getAbsolutePath()).reset().toString());

// return new DownloadDistributionResult(distributionZipFile, distributionDirectory); // todo pass result somewhere
}

private File unzipDistribution(File distributionZip) throws IOException {
final File tempDirectory = options.getTempDirectory();

String name = distributionZip.getName();
File distribution = new File(tempDirectory, StringUtils.left(name, name.length() - 4));

byte[] buffer = new byte[1024];
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(distributionZip))) {
ZipEntry zipEntry = zis.getNextEntry();
while (zipEntry != null) {
File newFile = newFile(distribution, zipEntry);
if (zipEntry.isDirectory()) {
if (!newFile.isDirectory() && !newFile.mkdirs()) {
throw new IOException("Failed to create directory " + newFile);
}
} else {
// fix for Windows-created archives
File parent = newFile.getParentFile();
if (!parent.isDirectory() && !parent.mkdirs()) {
throw new IOException("Failed to create directory " + parent);
}

// write file content
FileOutputStream fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
}
zipEntry = zis.getNextEntry();
}
}

File[] files = distribution.listFiles();
if (files != null && files.length == 1) {
File zipRootDirectory = files[0];
for (File file : zipRootDirectory.listFiles()) {
FileUtils.moveToDirectory(file, distribution, false);
}
zipRootDirectory.delete();
}

return distribution;
}

public static File newFile(File destinationDir, ZipEntry zipEntry) throws IOException {
File destFile = new File(destinationDir, zipEntry.getName());

String destDirPath = destinationDir.getCanonicalPath();
String destFilePath = destFile.getCanonicalPath();

if (!destFilePath.startsWith(destDirPath + File.separator)) {
throw new IOException("Entry is outside of the target dir: " + zipEntry.getName());
}

return destFile;
}
}
@@ -0,0 +1,21 @@
package com.evolveum.midpoint.ninja.action.upgrade;

import java.io.File;

import com.beust.jcommander.Parameter;

public class DownloadDistributionOptions extends UpgradeCommonOptions {

public static final String P_DISTRIBUTION_ARCHIVE = "--distribution-archive";

@Parameter(names = { P_DISTRIBUTION_ARCHIVE }, descriptionKey = "upgrade.distributionArchive")
private File distributionArchive;

public File getDistributionArchive() {
return distributionArchive;
}

public void setDistributionArchive(File distributionArchive) {
this.distributionArchive = distributionArchive;
}
}
@@ -0,0 +1,26 @@
package com.evolveum.midpoint.ninja.action.upgrade;

import java.io.File;

import com.beust.jcommander.Parameter;
import org.apache.commons.io.FileUtils;

public class UpgradeCommonOptions {

public static final String P_TEMP_DIR_LONG = "--temp-dir";

@Parameter(names = { P_TEMP_DIR_LONG }, descriptionKey = "upgrade.tempDir") // todo fix key
private File tempDirectory;

public File getTempDirectory() {
if (this.tempDirectory == null) {
this.tempDirectory = new File(FileUtils.getTempDirectory(), UpgradeConstants.UPGRADE_TEMP_DIRECTORY);
}

return tempDirectory;
}

public void setTempDirectory(File tempDirectory) {
this.tempDirectory = tempDirectory;
}
}
@@ -0,0 +1,11 @@
package com.evolveum.midpoint.ninja.action.upgrade;

import com.evolveum.midpoint.ninja.action.Action;

public class UpgradeDatabaseAction extends Action<UpgradeDatabaseOptions> {

@Override
public void execute() throws Exception {

}
}
@@ -0,0 +1,4 @@
package com.evolveum.midpoint.ninja.action.upgrade;

public class UpgradeDatabaseOptions {
}
@@ -0,0 +1,30 @@
package com.evolveum.midpoint.ninja.action.upgrade;

import com.evolveum.midpoint.ninja.action.Action;

public class UpgradeDistributionAction extends Action<UpgradeDistributionOptions> {

@Override
public void execute() throws Exception {
DownloadDistributionOptions downloadOptions = new DownloadDistributionOptions();
// todo options

DownloadDistributionAction downloadAction = new DownloadDistributionAction();
downloadAction.init(context, downloadOptions);
downloadAction.execute();

UpgradeInstallationOptions installationOptions = new UpgradeInstallationOptions();
// todo options

UpgradeInstallationAction installationAction = new UpgradeInstallationAction();
installationAction.init(context, installationOptions);
installationAction.execute();

UpgradeDatabaseOptions databaseOptions = new UpgradeDatabaseOptions();
// todo options

UpgradeDatabaseAction databaseAction = new UpgradeDatabaseAction();
databaseAction.init(context, databaseOptions);
databaseAction.execute();
}
}
@@ -0,0 +1,4 @@
package com.evolveum.midpoint.ninja.action.upgrade;

public class UpgradeDistributionOptions {
}
@@ -1,55 +1,26 @@
/*
* Copyright (C) 2010-2023 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/

package com.evolveum.midpoint.ninja.action.upgrade.step;
package com.evolveum.midpoint.ninja.action.upgrade;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.ninja.action.upgrade.StepResult;
import com.evolveum.midpoint.ninja.action.upgrade.UpgradeOptions;
import com.evolveum.midpoint.ninja.action.upgrade.UpgradeStep;
import com.evolveum.midpoint.ninja.action.upgrade.UpgradeStepsContext;
import com.evolveum.midpoint.ninja.action.Action;
import com.evolveum.midpoint.ninja.opts.ConnectionOptions;

public class UpgradeMidpointInstallationStep implements UpgradeStep<StepResult> {
public class UpgradeInstallationAction extends Action<UpgradeInstallationOptions> {

private static final String VAR_DIRECTORY = "var";

private final UpgradeStepsContext context;

public UpgradeMidpointInstallationStep(@NotNull UpgradeStepsContext context) {
this.context = context;
}

@Override
public String getIdentifier() {
return "upgradeMidpointInstallation";
}

@Override
public String getPresentableName() {
return "upgrade midpoint installation";
}
public void execute() throws Exception {
final File distributionDirectory = options.getDistributionDirectory();

public StepResult execute() throws Exception {
final DownloadDistributionResult distributionResult = context.getResult(DownloadDistributionResult.class);
final File distributionDirectory = distributionResult.getDistributionDirectory();
final boolean backupFiles = options.isBackup();

final UpgradeOptions upgradeOptions = context.getOptions();
final boolean backupFiles = BooleanUtils.isTrue(upgradeOptions.isBackupMidpointDirectory());

File midpointInstallation = upgradeOptions.getInstallationDirectory();
File midpointInstallation = options.getInstallationDirectory();
if (midpointInstallation == null) {
final ConnectionOptions connectionOptions = context.getContext().getOptions(ConnectionOptions.class);
final ConnectionOptions connectionOptions = context.getOptions(ConnectionOptions.class);
midpointInstallation = new File(connectionOptions.getMidpointHome()).getParentFile();
}

Expand Down Expand Up @@ -81,9 +52,6 @@ public StepResult execute() throws Exception {
FileUtils.moveToDirectory(file, midpointInstallation, false);
}
}

return new StepResult() {
};
}

private File[] emptyIfNull(File[] files) {
Expand Down
@@ -0,0 +1,36 @@
package com.evolveum.midpoint.ninja.action.upgrade;

import java.io.File;

public class UpgradeInstallationOptions {

private File distributionDirectory;

private boolean backup;

private File installationDirectory;

public File getDistributionDirectory() {
return distributionDirectory;
}

public void setDistributionDirectory(File distributionDirectory) {
this.distributionDirectory = distributionDirectory;
}

public boolean isBackup() {
return backup;
}

public void setBackup(boolean backup) {
this.backup = backup;
}

public File getInstallationDirectory() {
return installationDirectory;
}

public void setInstallationDirectory(File installationDirectory) {
this.installationDirectory = installationDirectory;
}
}
Expand Up @@ -14,8 +14,7 @@
import com.evolveum.midpoint.ninja.action.mining.ExportMiningOptions;
import com.evolveum.midpoint.ninja.action.mining.ExportMiningRepositoryAction;
import com.evolveum.midpoint.ninja.action.trace.EditTraceAction;
import com.evolveum.midpoint.ninja.action.upgrade.UpgradeAction;
import com.evolveum.midpoint.ninja.action.upgrade.UpgradeOptions;
import com.evolveum.midpoint.ninja.action.upgrade.*;
import com.evolveum.midpoint.ninja.opts.*;

/**
Expand Down Expand Up @@ -47,7 +46,15 @@ public enum Command {

UPGRADE("upgrade", UpgradeOptions.class, UpgradeAction.class),

SETUP_DATABASE("setup-database", SetupDatabaseSchemaOptions.class, SetupDatabaseSchemaAction.class);
SETUP_DATABASE("setup-database", SetupDatabaseOptions.class, SetupDatabaseAction.class),

DOWNLOAD_DISTRIBUTION("download-distribution", DownloadDistributionOptions.class, DownloadDistributionAction.class),

UPGRADE_DATABASE("upgrade-database", UpgradeDatabaseOptions.class, UpgradeDatabaseAction.class),

UPGRADE_INSTALLATION("upgrade-installation", UpgradeInstallationOptions.class, UpgradeInstallationAction.class),

UPGRADE_DISTRIBUTION("upgrade-distribution", UpgradeDistributionOptions.class, UpgradeDistributionAction.class);

private final String commandName;

Expand Down
Expand Up @@ -7,7 +7,7 @@
import com.beust.jcommander.Parameters;

@Parameters(resourceBundle = "messages", commandDescriptionKey = "setupDatabase")
public class SetupDatabaseSchemaOptions {
public class SetupDatabaseOptions {

public static final String P_SCRIPTS_DIRECTORY_LONG = "--scripts-directory";
public static final String P_SCRIPTS_LONG = "--scripts";
Expand Down
Expand Up @@ -45,10 +45,18 @@ public static void main(String[] args) throws Exception {
// + "--temp-dir ../../_mess/mid8842/.upgrade-process")
// .split(" ");

input = "-h setup-database".split(" ");
// input = "-h setup-database".split(" ");
//
// input = "-v --offline -m ../../_mess/create0 setup-database --scripts-directory ../../config/sql/native-new".split(" ");

Main.main(input);
// input = "-v --offline -m ../../_mess/create0 download-distribution".split(" ");

// Main.main(input);

System.out.println("Starting process");
new ProcessBuilder(
"../../_mess/mid8842/.upgrade-process/1685390031006-midpoint-latest-dist/bin/ninja.sh -v --offline -h".split(" ")
).inheritIO().start();
System.out.println("Finished main");
}
}

0 comments on commit 42eaf01

Please sign in to comment.