diff --git a/CHANGELOG.md b/CHANGELOG.md index 9007b610b1a1b3d91b5c4f9bf63a79e57be4e7d6..8a813bdc8ae50bfd491a00af6b347390f8f8fce4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.3.3] 2025-03-11 +### Added +- Fix error when some old personal projects have active router and migration pipeline gets error +- Fix 500 error on /select-vms when project is empy - now it gets redirect with error. + ## [1.3.2] 2025-02-13 ### Added - Added announcement about VM statuses diff --git a/app/app.py b/app/app.py index 09116d546afd80c6dbe463b56e8d68b0e87735c0..76d5c41dbe6b6002468fc58abcfe11b490f6c57c 100644 --- a/app/app.py +++ b/app/app.py @@ -56,7 +56,7 @@ def index(): destination_connection = ostack_lib.get_ostack_connection(dst_migrator_openrc) source_project = ostack_lib.get_ostack_project(source_connection, session['projects_name']) destination_project = ostack_lib.get_ostack_project(destination_connection, session['projects_name']) - + error_message = session.pop('error_message', None) session['projects_validation'] = True # validate source project if source_project and source_project['enabled']: @@ -112,6 +112,7 @@ def index(): boxes=boxes, next_url=next_url, step=1, + error_message=error_message, announcement=announcement) @@ -125,6 +126,11 @@ def select_vm(): # list openstack instance of the source project src_project_servers = lib.get_ostack_project_servers(src_project_conn) + if not src_project_servers: + # Redirect to 'index' if there are no servers + session['error_message'] = helper.get_error('Project have no VM') + return redirect(url_for('index')) + session['src_server_validation_id'] = src_project_servers[0].id #To migrate VM instance, VM instance should be in state `ACTIVE` or `STOPPED`. Following diagram shows [all possible states](https://docs.openstack.org/nova/latest/reference/vm-states.html), for instance transition from shelved state is described [in the cloud documenatation](https://docs.e-infra.cz/compute/openstack/technical-reference/brno-g1-site/instance-shelving/). @@ -169,12 +175,13 @@ def select_vm_process(): # trigger Gitlab pipeline gitlab_pipeline_vars = {'MIGRATION_PIPELINE_TRIGGERER': 'cloud-migrations', 'PROJECT_NAME': session['projects_name'], - 'VALIDATION_SERVER_ID': session['src_server_validation_id']} + 'VALIDATION_SERVER_ID': session['src_server_validation_id'], + 'PROJECT_MIGRATOR_EXTRA_ARGS':'--destination-server-network-overwrite=true' } server_names = [] for server in servers: if not "class='active'" in server: - gitlab_pipeline_vars['PROJECT_MIGRATOR_EXTRA_ARGS'] = '--migrate-inactive-servers=true' + gitlab_pipeline_vars['PROJECT_MIGRATOR_EXTRA_ARGS'] += ' --migrate-inactive-servers=true' server_names.append(helper.extract_server_name(server)) server_names = [helper.extract_server_name(server) for server in servers] gitlab_pipeline_vars['MIGRATE_EXPLICIT_SERVER_NAMES'] = ", ".join(server_names) diff --git a/app/errors.yaml b/app/errors.yaml index 1f914f67d33c9cc6a6c841d2f98dbd4845867815..0407130d712108f8089f1735a0cc93b3c831963f 100644 --- a/app/errors.yaml +++ b/app/errors.yaml @@ -1,4 +1,5 @@ 'Source G1 OpenStack project': You have no personal project in G1. 'Destination G2 OpenStack project': Please login into <a href="https://horizon.brno.openstack.cloud.e-infra.cz">G2 cloud</a> to get personal project created. 'Pipeline not finished' : 'Previously runned pipeline is not finished yet, there can be only one pipeline running per user, you can see status of running pipeline <a href="/migrate">here</a>.' +'Project have no VM': 'Your personal project doesnt have any VM.' 'Unspecified' : 'Error occured' \ No newline at end of file diff --git a/app/templates/content/projects.html b/app/templates/content/projects.html index 4d569900af381739a6f726cf0279e21c1f1aed0f..7a826248c6ca30cf5b6a04451d4c3079b8204209 100644 --- a/app/templates/content/projects.html +++ b/app/templates/content/projects.html @@ -30,6 +30,11 @@ {% endif %} </div> {% endfor %} + {% if error_message %} + <div class="error-message mx-20px"> + {{ error_message | safe }} + </div> + {% endif %} <div id="general-status-message"> </div> </article>