Skip to content
Snippets Groups Projects
Commit 0f0d0f49 authored by baldwinlouie's avatar baldwinlouie Committed by Yas Naoi
Browse files

Issue #3391393 by baldwinlouie, yas: Add a checkbox option to toggle automatic...

Issue #3391393 by baldwinlouie, yas: Add a checkbox option to toggle automatic OpenStack project creation in OpenStack provider admin setting form
parent 31a3a9f0
Branches
Tags
1 merge request!34Issue #3391393: Make automatic OpenStack project creation optional
Pipeline #26903 passed
...@@ -14,3 +14,4 @@ cloud_orchestrator_version: '6.x-dev' ...@@ -14,3 +14,4 @@ cloud_orchestrator_version: '6.x-dev'
creation_timeout: 'PT30M' creation_timeout: 'PT30M'
docker_file_url: 'https://git.drupalcode.org/project/facade/-/raw/1.0.x/modules/tenants/openstack_provider/deployments/docker/Dockerfile' docker_file_url: 'https://git.drupalcode.org/project/facade/-/raw/1.0.x/modules/tenants/openstack_provider/deployments/docker/Dockerfile'
rds_version: '10.5.19' rds_version: '10.5.19'
autocreate_projects: false
...@@ -43,3 +43,5 @@ openstack_provider.settings: ...@@ -43,3 +43,5 @@ openstack_provider.settings:
type: string type: string
zoom_level: zoom_level:
type: string type: string
autocreate_projects:
type: boolean
...@@ -878,11 +878,6 @@ Resources: ...@@ -878,11 +878,6 @@ Resources:
EOF EOF
sudo chown -R ubuntu:www-data $CO_DIR/drush sudo chown -R ubuntu:www-data $CO_DIR/drush
#Write Cloud Service Provider JSON to temp
sudo tee -a $CO_DIR/provider.json > /dev/null << EOF
${JSONData}
EOF
# Add private key directory # Add private key directory
mkdir $CO_DIR/keys mkdir $CO_DIR/keys
...@@ -939,10 +934,20 @@ Resources: ...@@ -939,10 +934,20 @@ Resources:
sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "drush -y cr" sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "drush -y cr"
sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "drush cset --input-format=yaml cloud_orchestrator.settings disable_cloud_orchestrator_dashboard_tabs \"{aws_cloud: 'aws_cloud', k8s: 'k8s', terraform: 'terraform', vmware: 'vmware', openstack: 0}\"" sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "drush cset --input-format=yaml cloud_orchestrator.settings disable_cloud_orchestrator_dashboard_tabs \"{aws_cloud: 'aws_cloud', k8s: 'k8s', terraform: 'terraform', vmware: 'vmware', openstack: 0}\""
#Assign the JSONData to a bash variable so it is easier test.
JSON_TEST="${JSONData}"
if [ ! -z $JSON_TEST ]; then
# Add provider regions. # Add provider regions.
#Write Cloud Service Provider JSON to temp
sudo tee -a $CO_DIR/provider.json > /dev/null << EOF
${JSONData}
EOF
sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "drush frwc --file-path $DOCKER_DIR/provider.json" sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "drush frwc --file-path $DOCKER_DIR/provider.json"
# Remove the provider file after it is added. # Remove the provider file after it is added.
sudo rm $CO_DIR/provider.json sudo rm $CO_DIR/provider.json
fi
# Run cron once to import initial data. # Run cron once to import initial data.
sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "drush cron" sudo docker exec -w $DOCKER_DIR $CONTAINER_NAME sh -c "drush cron"
......
...@@ -82,3 +82,13 @@ function openstack_provider_update_9104(): void { ...@@ -82,3 +82,13 @@ function openstack_provider_update_9104(): void {
); );
} }
/**
* Add autocreate_projects configuration.
*/
function openstack_provider_update_9105(): void {
$config_factory = \Drupal::configFactory();
$config = $config_factory->getEditable('openstack_provider.settings');
$config->set('autocreate_projects', FALSE);
$config->save();
}
...@@ -52,6 +52,18 @@ function openstack_provider_query_openstack_provider_tenant_project_views_access ...@@ -52,6 +52,18 @@ function openstack_provider_query_openstack_provider_tenant_project_views_access
} }
} }
/**
* Implements hook_form_BASE_FORM_ID_alter().
*/
function openstack_provider_form_tenant_openstack_add_form_alter(array &$form, FormStateInterface $form_state): void {
$autocreate_projects = \Drupal::configFactory()->get('openstack_provider.settings')
->get('autocreate_projects');
if ($autocreate_projects === FALSE) {
$form['field_openstack_region']['#access'] = FALSE;
}
}
/** /**
* Implements hook_form_FORM_ID_alter(). * Implements hook_form_FORM_ID_alter().
*/ */
......
...@@ -209,6 +209,13 @@ class OpenStackProviderAdminSettingsForm extends ConfigFormBase { ...@@ -209,6 +209,13 @@ class OpenStackProviderAdminSettingsForm extends ConfigFormBase {
'#open' => TRUE, '#open' => TRUE,
]; ];
$form['openstack']['autocreate_projects'] = [
'#type' => 'checkbox',
'#title' => $this->t('Automatically create projects'),
'#description' => $this->t('If checked, automatically create projects when creating a tenant.'),
'#default_value' => $config->get('autocreate_projects'),
];
$providers = $this->getProviders('openstack'); $providers = $this->getProviders('openstack');
$form['openstack']['selectable_regions'] = [ $form['openstack']['selectable_regions'] = [
'#type' => 'select', '#type' => 'select',
......
...@@ -62,6 +62,13 @@ class OpenStackProviderLaunchTenantPlugin extends PluginBase implements FacadeLa ...@@ -62,6 +62,13 @@ class OpenStackProviderLaunchTenantPlugin extends PluginBase implements FacadeLa
*/ */
protected $entityTypeManager; protected $entityTypeManager;
/**
* Drupal\Core\Config\ConfigFactoryInterface definition.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $configFactory;
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
...@@ -71,6 +78,7 @@ class OpenStackProviderLaunchTenantPlugin extends PluginBase implements FacadeLa ...@@ -71,6 +78,7 @@ class OpenStackProviderLaunchTenantPlugin extends PluginBase implements FacadeLa
$plugin_id, $plugin_id,
$plugin_definition, $plugin_definition,
); );
$instance->configFactory = $container->get('config.factory');
$instance->openStackProviderService = $container->get('openstack_provider'); $instance->openStackProviderService = $container->get('openstack_provider');
$instance->cloudOrchestratorManager = $container->get('aws_cloud.cloud_orchestrator_manager'); $instance->cloudOrchestratorManager = $container->get('aws_cloud.cloud_orchestrator_manager');
$instance->logger = $container->get('logger.channel.default'); $instance->logger = $container->get('logger.channel.default');
...@@ -84,8 +92,11 @@ class OpenStackProviderLaunchTenantPlugin extends PluginBase implements FacadeLa ...@@ -84,8 +92,11 @@ class OpenStackProviderLaunchTenantPlugin extends PluginBase implements FacadeLa
*/ */
public function launch(TenantInterface $tenant): void { public function launch(TenantInterface $tenant): void {
try { try {
// Only create openstack resources if configured for autocreate.
if ($this->configFactory->get('openstack_provider.settings')->get('autocreate_projects') === TRUE) {
// Create OpenStack resources. // Create OpenStack resources.
$this->createOpenStackResources($tenant); $this->createOpenStackResources($tenant);
}
// Create the CFn stack. // Create the CFn stack.
$this->createStack($tenant); $this->createStack($tenant);
// Notify the user. // Notify the user.
...@@ -147,6 +158,8 @@ class OpenStackProviderLaunchTenantPlugin extends PluginBase implements FacadeLa ...@@ -147,6 +158,8 @@ class OpenStackProviderLaunchTenantPlugin extends PluginBase implements FacadeLa
// the Tenant entity. // the Tenant entity.
$parameters = $this->openStackProviderService->compileYamlParameters($this->pluginDefinition['parameter_yaml'], $tenant); $parameters = $this->openStackProviderService->compileYamlParameters($this->pluginDefinition['parameter_yaml'], $tenant);
// Only send JSON data if autocreate_projects is set to TRUE.
if ($this->configFactory->get('openstack_provider.settings')->get('autocreate_projects') === TRUE) {
// Add chunked region data to CFn parameters. // Add chunked region data to CFn parameters.
$chunked_data = $this->getJsonDataForCfn($tenant); $chunked_data = $this->getJsonDataForCfn($tenant);
if (empty($chunked_data)) { if (empty($chunked_data)) {
...@@ -157,6 +170,7 @@ class OpenStackProviderLaunchTenantPlugin extends PluginBase implements FacadeLa ...@@ -157,6 +170,7 @@ class OpenStackProviderLaunchTenantPlugin extends PluginBase implements FacadeLa
$parameters['parameters']["JSONData{$i}"] = $data; $parameters['parameters']["JSONData{$i}"] = $data;
$i++; $i++;
} }
}
$result = $this->cloudOrchestratorManager->deploy( $result = $this->cloudOrchestratorManager->deploy(
$parameters['target_provider'], $parameters['target_provider'],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment