19 declare(strict_types=1);
55 $this->agent_finder = $agent_finder;
61 $this->setDescription(
"Starts and manages migrations needed after an update of ILIAS");
62 $this->addOption(
"yes",
"y", InputOption::VALUE_NONE,
"Confirm every message of the installation.");
63 $this->addOption(
"run",
"R", InputOption::VALUE_REQUIRED,
"Run the migration with the name given.");
67 InputOption::VALUE_REQUIRED,
68 "Run the selected migration with X steps. Pass " .
Migration::INFINITE .
" for all remaining steps." 73 protected function execute(InputInterface $input, OutputInterface $output):
int 76 $io->printLicenseMessage();
77 $io->title(
"Trigger migrations in ILIAS");
80 if ($input->hasOption(
'run') && !empty($input->getOption(
'run'))) {
93 $migration_name = $input->getOption(
'run');
94 $migrations = $agent->getMigrations();
95 if (!isset($migrations[$migration_name]) || !($migrations[$migration_name] instanceof
Migration)) {
96 $io->
error(
"Aborting Migration, did not find $migration_name.");
99 $migration = $migrations[$migration_name];
101 $steps = (
int) $input->getOption(
'steps');
105 $io->
text(
"Determined infinite steps to run.");
108 $steps = $migration->getDefaultAmountOfStepsPerRun();
109 $io->
text(
"no --steps option found, fallback to default amount of steps of migration. ($steps)");
112 $io->
text(
"Determined $steps step(s) to run.");
116 $objective =
new Objective\MigrationObjective($migration,
$steps);
122 $preconditions = $migration->getPreconditions($env);
123 if ($preconditions !== []) {
124 $objective =
new Objective\ObjectiveWithPreconditions(
130 $io->
inform(
"Preparing Environment for {$steps_text} steps in {$migration_name}");
132 $this->achieveObjective($objective, $env, $io);
141 $migrations = $agent->getMigrations();
142 $count = count($migrations);
144 $io->
inform(
"There are currently no migrations to run.");
152 $io->
inform(
"Found $count migrations:");
153 foreach ($migrations as $migration_key => $migration) {
155 $migration->prepare($env);
156 $steps = $migration->getRemainingAmountOfSteps();
157 $status =
$steps === 0 ?
"[done]" :
"[remaining steps: $steps]";
158 $io->
text($migration_key .
": " . $migration->getLabel() .
" " . $status);
160 $io->
inform(
'Run them by passing --run <migration_id>, e.g. --run ' . $migration_key);
168 if ($preconditions !== []) {
169 $objective =
new Objective\ObjectiveWithPreconditions(
174 $environment = $this->achieveObjective($objective, $environment);
Wrapper around symfonies input and output facilities to provide just the functionality required for t...
An objective is a desired state of the system that is supposed to be created by the setup...
A migration is a potentially long lasting operation that can be broken into discrete steps...
execute(InputInterface $input, OutputInterface $output)
__construct(AgentFinder $agent_finder, array $preconditions)
A non-objective, nothing to do to achieve it...
getRelevantAgent(InputInterface $input)
prepareEnvironmentForMigration(Environment $environment, Migration $migration)
runMigration(InputInterface $input, IOWrapper $io)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
An environment holds resources to be used in the setup process.
configureCommandForPlugins()
__construct(Container $dic, ilPlugin $plugin)
const RESOURCE_ADMIN_INTERACTION
trait HasAgent
Add this to an Command that has an agent.
getRequestedConfirmation()
listMigrations(InputInterface $input, IOWrapper $io)
Signals that a necessary confirmation from the admin is missing.
getPreconditions(Environment $environment)
Objectives the migration depend on.
array $preconditions
var Objective[]