From 1e0f29d21e2335e30cbbd904f504821d8d962836 Mon Sep 17 00:00:00 2001
From: Karen Pailozian <pailozian@cesnet.cz>
Date: Mon, 28 Apr 2025 11:14:07 +0200
Subject: [PATCH 1/3] Add sample notebook for starting VM on Openstack from
jupyter hub
---
figures/network_topology.png | Bin 0 -> 61299 bytes
figures/network_topology_vm.png | Bin 0 -> 61764 bytes
figures/scheme.png | Bin 0 -> 44529 bytes
openstack_eosc.ipynb | 1088 +++++++++++++++++++++++++++++++
4 files changed, 1088 insertions(+)
create mode 100644 figures/network_topology.png
create mode 100644 figures/network_topology_vm.png
create mode 100644 figures/scheme.png
create mode 100644 openstack_eosc.ipynb
diff --git a/figures/network_topology.png b/figures/network_topology.png
new file mode 100644
index 0000000000000000000000000000000000000000..9be438f5aa2011de40cbb52aa79bf9cd05fc63c4
GIT binary patch
literal 61299
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
PjYxR9`njxgN@xNA=h>49
literal 0
HcmV?d00001
diff --git a/figures/network_topology_vm.png b/figures/network_topology_vm.png
new file mode 100644
index 0000000000000000000000000000000000000000..edec41fb7e16dd9daf49b9c3556548e80e5e1bbc
GIT binary patch
literal 61764
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�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
UK%B)vG#M1~p00i_>zopr07pS;y8r+H
literal 0
HcmV?d00001
diff --git a/figures/scheme.png b/figures/scheme.png
new file mode 100644
index 0000000000000000000000000000000000000000..006afb061f74732d52c986023db19952531aaea1
GIT binary patch
literal 44529
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
literal 0
HcmV?d00001
diff --git a/openstack_eosc.ipynb b/openstack_eosc.ipynb
new file mode 100644
index 0000000..41e2050
--- /dev/null
+++ b/openstack_eosc.ipynb
@@ -0,0 +1,1088 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "f1d44b71-9709-467e-92d4-c1faa31a93e7",
+ "metadata": {
+ "jp-MarkdownHeadingCollapsed": true
+ },
+ "source": [
+ "# Deploying Your First Virtual Machine on PSNC OpenStack\n",
+ "\n",
+ "Welcome to this hands-on tutorial for launching and configuring your first Virtual Machine (VM) in the PSNC OpenStack cloud environment. This guide will walk you through each step of the deployment processโfrom authentication to full VM provisioning and access.\n",
+ "\n",
+ "๐ **Further reading:** [PSNC OpenStack Virtual Machines](https://docs.psnc.pl/display/EOSCUserGuides/Virtual+Machines)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "00e621e9-5493-45aa-8cea-dcbb14ab0df6",
+ "metadata": {},
+ "source": [
+ "# Install the required libraries"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "0ce0f97a-a87b-4655-8f85-cfabb07172f7",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Requirement already satisfied: python-openstackclient in /opt/conda/lib/python3.12/site-packages (8.0.0)\n",
+ "Requirement already satisfied: python-keystoneclient in /opt/conda/lib/python3.12/site-packages (5.6.0)\n",
+ "Requirement already satisfied: ipywidgets in /opt/conda/lib/python3.12/site-packages (8.1.5)\n",
+ "Requirement already satisfied: paramiko in /opt/conda/lib/python3.12/site-packages (3.5.1)\n",
+ "Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (6.1.1)\n",
+ "Requirement already satisfied: cryptography>=2.7 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (44.0.0)\n",
+ "Requirement already satisfied: cliff>=3.5.0 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (4.9.1)\n",
+ "Requirement already satisfied: iso8601>=0.1.11 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (2.1.0)\n",
+ "Requirement already satisfied: openstacksdk>=3.3.0 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (4.5.0)\n",
+ "Requirement already satisfied: osc-lib>=2.3.0 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (4.0.0)\n",
+ "Requirement already satisfied: oslo.i18n>=3.15.3 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (6.5.1)\n",
+ "Requirement already satisfied: python-cinderclient>=3.3.0 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (9.7.0)\n",
+ "Requirement already satisfied: requests>=2.27.0 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (2.32.3)\n",
+ "Requirement already satisfied: stevedore>=2.0.1 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (5.4.1)\n",
+ "Requirement already satisfied: debtcollector>=1.2.0 in /opt/conda/lib/python3.12/site-packages (from python-keystoneclient) (3.0.0)\n",
+ "Requirement already satisfied: keystoneauth1>=3.4.0 in /opt/conda/lib/python3.12/site-packages (from python-keystoneclient) (5.10.0)\n",
+ "Requirement already satisfied: oslo.config>=5.2.0 in /opt/conda/lib/python3.12/site-packages (from python-keystoneclient) (9.7.1)\n",
+ "Requirement already satisfied: oslo.serialization>=2.18.0 in /opt/conda/lib/python3.12/site-packages (from python-keystoneclient) (5.7.0)\n",
+ "Requirement already satisfied: oslo.utils>=3.33.0 in /opt/conda/lib/python3.12/site-packages (from python-keystoneclient) (8.2.0)\n",
+ "Requirement already satisfied: packaging>=20.4 in /opt/conda/lib/python3.12/site-packages (from python-keystoneclient) (24.2)\n",
+ "Requirement already satisfied: comm>=0.1.3 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (0.2.2)\n",
+ "Requirement already satisfied: ipython>=6.1.0 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (8.31.0)\n",
+ "Requirement already satisfied: traitlets>=4.3.1 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (5.14.3)\n",
+ "Requirement already satisfied: widgetsnbextension~=4.0.12 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (4.0.13)\n",
+ "Requirement already satisfied: jupyterlab_widgets~=3.0.12 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (3.0.13)\n",
+ "Requirement already satisfied: bcrypt>=3.2 in /opt/conda/lib/python3.12/site-packages (from paramiko) (4.3.0)\n",
+ "Requirement already satisfied: pynacl>=1.5 in /opt/conda/lib/python3.12/site-packages (from paramiko) (1.5.0)\n",
+ "Requirement already satisfied: autopage>=0.4.0 in /opt/conda/lib/python3.12/site-packages (from cliff>=3.5.0->python-openstackclient) (0.5.2)\n",
+ "Requirement already satisfied: cmd2>=1.0.0 in /opt/conda/lib/python3.12/site-packages (from cliff>=3.5.0->python-openstackclient) (2.5.11)\n",
+ "Requirement already satisfied: PrettyTable>=0.7.2 in /opt/conda/lib/python3.12/site-packages (from cliff>=3.5.0->python-openstackclient) (3.16.0)\n",
+ "Requirement already satisfied: PyYAML>=3.12 in /opt/conda/lib/python3.12/site-packages (from cliff>=3.5.0->python-openstackclient) (6.0.2)\n",
+ "Requirement already satisfied: cffi>=1.12 in /opt/conda/lib/python3.12/site-packages (from cryptography>=2.7->python-openstackclient) (1.17.1)\n",
+ "Requirement already satisfied: wrapt>=1.7.0 in /opt/conda/lib/python3.12/site-packages (from debtcollector>=1.2.0->python-keystoneclient) (1.17.2)\n",
+ "Requirement already satisfied: decorator in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (5.1.1)\n",
+ "Requirement already satisfied: jedi>=0.16 in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (0.19.2)\n",
+ "Requirement already satisfied: matplotlib-inline in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (0.1.7)\n",
+ "Requirement already satisfied: pexpect>4.3 in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (4.9.0)\n",
+ "Requirement already satisfied: prompt_toolkit<3.1.0,>=3.0.41 in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (3.0.48)\n",
+ "Requirement already satisfied: pygments>=2.4.0 in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (2.18.0)\n",
+ "Requirement already satisfied: stack_data in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (0.6.3)\n",
+ "Requirement already satisfied: os-service-types>=1.2.0 in /opt/conda/lib/python3.12/site-packages (from keystoneauth1>=3.4.0->python-keystoneclient) (1.7.0)\n",
+ "Requirement already satisfied: typing-extensions>=4.12 in /opt/conda/lib/python3.12/site-packages (from keystoneauth1>=3.4.0->python-keystoneclient) (4.12.2)\n",
+ "Requirement already satisfied: dogpile.cache>=0.6.5 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (1.3.4)\n",
+ "Requirement already satisfied: jmespath>=0.9.0 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (1.0.1)\n",
+ "Requirement already satisfied: jsonpatch!=1.20,>=1.16 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (1.33)\n",
+ "Requirement already satisfied: platformdirs>=3 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (4.3.6)\n",
+ "Requirement already satisfied: psutil>=3.2.2 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (5.9.8)\n",
+ "Requirement already satisfied: requestsexceptions>=1.2.0 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (1.4.0)\n",
+ "Requirement already satisfied: netaddr>=0.7.18 in /opt/conda/lib/python3.12/site-packages (from oslo.config>=5.2.0->python-keystoneclient) (1.3.0)\n",
+ "Requirement already satisfied: rfc3986>=1.2.0 in /opt/conda/lib/python3.12/site-packages (from oslo.config>=5.2.0->python-keystoneclient) (2.0.0)\n",
+ "Requirement already satisfied: msgpack>=0.5.2 in /opt/conda/lib/python3.12/site-packages (from oslo.serialization>=2.18.0->python-keystoneclient) (1.1.0)\n",
+ "Requirement already satisfied: tzdata>=2022.4 in /opt/conda/lib/python3.12/site-packages (from oslo.serialization>=2.18.0->python-keystoneclient) (2024.2)\n",
+ "Requirement already satisfied: pyparsing>=2.1.0 in /opt/conda/lib/python3.12/site-packages (from oslo.utils>=3.33.0->python-keystoneclient) (3.2.0)\n",
+ "Requirement already satisfied: setuptools in /opt/conda/lib/python3.12/site-packages (from pbr!=2.1.0,>=2.0.0->python-openstackclient) (75.6.0)\n",
+ "Requirement already satisfied: charset_normalizer<4,>=2 in /opt/conda/lib/python3.12/site-packages (from requests>=2.27.0->python-openstackclient) (3.4.0)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.12/site-packages (from requests>=2.27.0->python-openstackclient) (3.10)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.12/site-packages (from requests>=2.27.0->python-openstackclient) (2.3.0)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.12/site-packages (from requests>=2.27.0->python-openstackclient) (2024.12.14)\n",
+ "Requirement already satisfied: pycparser in /opt/conda/lib/python3.12/site-packages (from cffi>=1.12->cryptography>=2.7->python-openstackclient) (2.22)\n",
+ "Requirement already satisfied: pyperclip>=1.8 in /opt/conda/lib/python3.12/site-packages (from cmd2>=1.0.0->cliff>=3.5.0->python-openstackclient) (1.9.0)\n",
+ "Requirement already satisfied: wcwidth>=0.2.10 in /opt/conda/lib/python3.12/site-packages (from cmd2>=1.0.0->cliff>=3.5.0->python-openstackclient) (0.2.13)\n",
+ "Requirement already satisfied: parso<0.9.0,>=0.8.4 in /opt/conda/lib/python3.12/site-packages (from jedi>=0.16->ipython>=6.1.0->ipywidgets) (0.8.4)\n",
+ "Requirement already satisfied: jsonpointer>=1.9 in /opt/conda/lib/python3.12/site-packages (from jsonpatch!=1.20,>=1.16->openstacksdk>=3.3.0->python-openstackclient) (3.0.0)\n",
+ "Requirement already satisfied: ptyprocess>=0.5 in /opt/conda/lib/python3.12/site-packages (from pexpect>4.3->ipython>=6.1.0->ipywidgets) (0.7.0)\n",
+ "Requirement already satisfied: executing>=1.2.0 in /opt/conda/lib/python3.12/site-packages (from stack_data->ipython>=6.1.0->ipywidgets) (2.1.0)\n",
+ "Requirement already satisfied: asttokens>=2.1.0 in /opt/conda/lib/python3.12/site-packages (from stack_data->ipython>=6.1.0->ipywidgets) (3.0.0)\n",
+ "Requirement already satisfied: pure_eval in /opt/conda/lib/python3.12/site-packages (from stack_data->ipython>=6.1.0->ipywidgets) (0.2.3)\n",
+ "Note: you may need to restart the kernel to use updated packages.\n"
+ ]
+ }
+ ],
+ "source": [
+ "pip install python-openstackclient python-keystoneclient ipywidgets paramiko"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "c3718348-c7df-44d3-9811-66b7fa7ec7fb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import sys\n",
+ "import paramiko\n",
+ "import yaml\n",
+ "from keystoneauth1.session import Session\n",
+ "from keystoneauth1.identity.v3.oidc import OidcAccessToken\n",
+ "from keystoneauth1.identity.v3.application_credential import ApplicationCredential\n",
+ "from keystoneclient.v3.client import Client\n",
+ "from openstack.connection import Connection\n",
+ "import ipywidgets as widgets\n",
+ "import base64\n",
+ "import time\n",
+ "from IPython.display import display, clear_output, Markdown\n",
+ "from openstack.exceptions import ResourceNotFound, SDKException"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "02aedafa-9276-4350-b60c-53fe216514c9",
+ "metadata": {},
+ "source": [
+ "# ๐ Connect to OpenStack\n",
+ "## Set up OpenStack session with OIDC token authentication\n",
+ "\n",
+ "To authenticate with OpenStack using OIDC (OpenID Connect), you'll need to provide the following parameters:\n",
+ "\n",
+ "- **`auth_url`**: The URL of the OpenStack authentication server. \n",
+ "\n",
+ "- **`protocol`**: The protocol used for authentication, such as `openid`.\n",
+ "\n",
+ "- **`identity_provider`**: The name of the trusted external Identity Provider (IdP) that authenticates your identity.\n",
+ "\n",
+ "- **`access_token`**: The token you receive from the IdP after successfully logging in. \n",
+ " This token proves your identity to OpenStack.\n",
+ "\n",
+ "> โ๏ธ These parameters are used to initialize an authenticated session with OpenStack through the `openstack.connect()` function.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "5bc6fac0-c5fa-44a7-9d29-38ea5164e4bc",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def load_access_token(token_file_path=\"/var/run/secrets/oidc/access_token\"):\n",
+ " \"\"\"Reads access token from specified file\"\"\"\n",
+ " try:\n",
+ " return open(token_file_path, \"r\").read()\n",
+ " except IOError:\n",
+ " print(\"Reading from access token file failed.\", file=sys.stderr)\n",
+ "\n",
+ "cloud_creds = OidcAccessToken(auth_url=\"https://api.cloud.psnc.pl:5000/v3/\",\n",
+ " identity_provider=\"aai.open-science-cloud.ec.europa.eu\",\n",
+ " protocol=\"openid\",\n",
+ " access_token=load_access_token()\n",
+ " )\n",
+ "\n",
+ "cloud_session = Session(auth=cloud_creds)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c27a6b45-cd62-446c-bccf-9cba425e54ab",
+ "metadata": {},
+ "source": [
+ "## OpenStack Keystone Client\n",
+ "\n",
+ "The Keystone client is used to interact with OpenStack's identity service and enables to:\n",
+ "\n",
+ "- Access OpenStack components not exposed in the primary API.\n",
+ "- Retrieve detailed information about your projects"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "b871dc55-172a-43da-81d7-b7fa796a7c2c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Get list of accessible projects\n",
+ "keystone_client = Client(session=cloud_session)\n",
+ "my_projects = keystone_client.auth.projects()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "9a58d8c5-7dcd-4549-9b10-0456ccd66b30",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/markdown": [
+ "## Scope to one of your projects you are entitled to access"
+ ],
+ "text/plain": [
+ "<IPython.core.display.Markdown object>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "90ef16930f794a71812097ee87883176",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Dropdown(description='Project:', layout=Layout(width='50%'), options=(('pp-0192f702-2833-4ab5-8c44-79f92eb323dโฆ"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "43118c111a1740f7898f72861426f2ca",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Button(button_style='success', description='Connect to project', style=ButtonStyle())"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "1cd77110d36042578de07d7469959646",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Output()"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "clear_output(wait=True) # Clear previous output first\n",
+ "display(Markdown(\"## Scope to one of your projects you are entitled to access\"))\n",
+ "\n",
+ "project_dropdown = widgets.Dropdown(\n",
+ " options=[(project.name, idx) for idx, project in enumerate(my_projects)],\n",
+ " description=\"Project:\",\n",
+ " layout=widgets.Layout(width='50%')\n",
+ ")\n",
+ "connect_button = widgets.Button(description=\"Connect to project\", button_style=\"success\")\n",
+ "output = widgets.Output()\n",
+ "\n",
+ "def on_connect_clicked(b):\n",
+ " with output:\n",
+ " clear_output()\n",
+ " idx = project_dropdown.value\n",
+ " selected_project = my_projects[idx]\n",
+ " print(f\"๐ Connecting to project: {selected_project.name} (ID: {selected_project.id}, Domain: {selected_project.domain_id})\")\n",
+ " scoped_cloud_creds = OidcAccessToken(\n",
+ " auth_url=\"https://api.cloud.psnc.pl:5000/v3/\",\n",
+ " identity_provider=\"aai.open-science-cloud.ec.europa.eu\",\n",
+ " protocol=\"openid\",\n",
+ " project_id=selected_project.id,\n",
+ " project_domain_id=selected_project.domain_id,\n",
+ " access_token=load_access_token()\n",
+ " )\n",
+ " global scoped_cloud_session, scoped_openstack_connection\n",
+ " scoped_cloud_session = Session(auth=scoped_cloud_creds)\n",
+ " scoped_openstack_connection = Connection(session=scoped_cloud_session)\n",
+ " print(\"โ
Connection established successfully!\")\n",
+ "\n",
+ "connect_button._click_handlers.callbacks.clear()\n",
+ "connect_button.on_click(on_connect_clicked)\n",
+ "display(project_dropdown, connect_button, output)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "7c50e961-b797-4e1c-a91b-e44487324c0c",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Your current project id: db6b4eb2d6fe454191e8d39b088564cd\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(\"Your current project id: \", scoped_openstack_connection.current_project_id) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5a8c4205-e524-44ca-96fb-d7577bc74d90",
+ "metadata": {},
+ "source": [
+ "# Starting up your own VM\n",
+ "## ๐๏ธ Create an SSH Key Pair for VM Access\n",
+ "\n",
+ "- If you already have a key, skip this step and provide the key name in the `create_server()` method.\n",
+ "- You can:\n",
+ " - Upload your **own** public key using `public_key=\"ssh-rsa ...\"` \n",
+ " - Or let **OpenStack generate one** for you (as weโll do below).\n",
+ "- Remember to save the private key securely! \n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "5e4b3a58-687b-471f-8c7f-a6db86bde820",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Private key saved to key.pem\n",
+ "Public key saved to key.pub\n"
+ ]
+ }
+ ],
+ "source": [
+ "key_name = \"key\"\n",
+ "new_keypair = scoped_openstack_connection.create_keypair(key_name)\n",
+ "#Generating key-pair using existing public key\n",
+ "#scoped_openstack_connection.create_keypair(\"mykey2\", public_key=\"ssh-rsa ....\")\n",
+ "\n",
+ "#If you let OpenStack generate your key-pair you will need to save your\n",
+ "#private and public keys for later use\n",
+ "with open(f\"{key_name}.pem\", \"w\") as priv_file:\n",
+ " priv_file.write(new_keypair.private_key)\n",
+ " print(f\"Private key saved to {key_name}.pem\")\n",
+ "\n",
+ "with open(f\"{key_name}.pub\", \"w\") as pub_file:\n",
+ " pub_file.write(new_keypair.public_key)\n",
+ " print(f\"Public key saved to {key_name}.pub\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "809ce42b-b70f-4dfb-82a9-cb505477663c",
+ "metadata": {},
+ "source": [
+ "## Create a Security Group for Your VM\n",
+ "\n",
+ "Before creating a virtual machine, it's important to define what kind of network traffic it should allow. \n",
+ "This is done using **Security Groups** in OpenStack.\n",
+ "\n",
+ "In this example, we:\n",
+ "\n",
+ "- Create a new security group\n",
+ "- Allow incoming **SSH** (port 22) traffic to enable remote access\n",
+ "- Allow incoming **ICMP** traffic so the VM can be pinged\n",
+ "- Allow incoming **HTTP** (port 80) traffic for hosting web services\n",
+ "\n",
+ "_Note: OpenStack automatically allows all outgoing traffic (egress) from your VM._\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "aceddf23-baeb-4e86-8100-52beec7241a4",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "โ
Security group 'My VM Security Group' created and configured.\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Create a new security group\n",
+ "new_security_group = scoped_openstack_connection.create_security_group(\n",
+ " name=\"My VM Security Group\",\n",
+ " description=\"Allows SSH, HTTP and ICMP traffic\"\n",
+ ")\n",
+ "\n",
+ "# Allow incoming SSH (port 22)\n",
+ "scoped_openstack_connection.create_security_group_rule(\n",
+ " new_security_group.id,\n",
+ " port_range_min=22,\n",
+ " port_range_max=22,\n",
+ " protocol=\"tcp\",\n",
+ " direction=\"ingress\",\n",
+ " description=\"Allow SSH\"\n",
+ ")\n",
+ "# Allow incoming HTTP (port 80)\n",
+ "scoped_openstack_connection.network.create_security_group_rule(\n",
+ " security_group_id=new_security_group.id,\n",
+ " port_range_min=80,\n",
+ " port_range_max=80,\n",
+ " protocol=\"tcp\",\n",
+ " direction=\"ingress\",\n",
+ " description=\"Allow HTTP\"\n",
+ ")\n",
+ "# Allow incoming ICMP (ping)\n",
+ "scoped_openstack_connection.create_security_group_rule(\n",
+ " new_security_group.id,\n",
+ " protocol=\"icmp\",\n",
+ " direction=\"ingress\",\n",
+ " description=\"Allow ICMP\"\n",
+ ")\n",
+ "\n",
+ "print(f\"โ
Security group '{new_security_group.name}' created and configured.\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "94a9ee51-c6d7-4c35-b969-5097bb777f1c",
+ "metadata": {},
+ "source": [
+ "## ๐ Select Resources for Your VM\n",
+ "\n",
+ "Before launching a VM, you need to choose the following:\n",
+ "\n",
+ "- **Image (OS)**: The base operating system your VM will use.\n",
+ "- **Flavor (CPU/RAM/Disk)**: Determines how much compute power (vCPUs), memory (RAM), and disk your VM will have. \n",
+ " ๐ [Flavor details at PSNC](https://docs.cloud.psnc.pl/en/general/regions/bst-pl2-region/)\n",
+ "\n",
+ "- **Network**: The virtual public network the VM will connect to, including internal/external IP options. \n",
+ " ๐ [PSNC Network Design Overview](https://docs.psnc.pl/display/EOSCUserGuides/PSNC+Network+Design)\n",
+ "\n",
+ "> ๐ ๏ธ Once selected, these options will be used to launch your VM using the OpenStack backend.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "5e29662e-1576-48f8-9ae2-f9e2be0ffc60",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/markdown": [
+ "### Available Images"
+ ],
+ "text/plain": [
+ "<IPython.core.display.Markdown object>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "341b08877fcc44f7a71e223b2713cdf0",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Dropdown(description='Image:', layout=Layout(width='85%'), options=('Windows 10 Pro 22H2 (2023-05-31) (ID: c91โฆ"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/markdown": [
+ "### Available Flavors"
+ ],
+ "text/plain": [
+ "<IPython.core.display.Markdown object>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "a8ba85e215494b91a0b93a6e01128471",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Dropdown(description='Flavor:', layout=Layout(width='85%'), options=('C1-NET-16vCPU-32R (ID: c1-net-16-32)', 'โฆ"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/markdown": [
+ "### Available Networks"
+ ],
+ "text/plain": [
+ "<IPython.core.display.Markdown object>"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "3eefc30da3834df793223ad458b594a0",
+ "version_major": 2,
+ "version_minor": 0
+ },
+ "text/plain": [
+ "Dropdown(description='Network:', layout=Layout(width='85%'), options=('PSNC-STORAGE-MANILA (ID: 25cb17dc-9645-โฆ"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "def format_size_gb(size_bytes):\n",
+ " return f\"{size_bytes / (1024 ** 3):.2f} GB\"\n",
+ "\n",
+ "def format_image_options(images):\n",
+ " return [\n",
+ " f\"{image.name} (ID: {image.id}, Size: {format_size_gb(image.size)})\"\n",
+ " for image in images\n",
+ " ]\n",
+ "\n",
+ "def format_generic_options(resources, label_attr='name', id_attr='id'):\n",
+ " return [f\"{getattr(res, label_attr)} (ID: {getattr(res, id_attr)})\" for res in resources]\n",
+ " \n",
+ "images = list(scoped_openstack_connection.compute.images())\n",
+ "flavors = list(scoped_openstack_connection.compute.flavors())\n",
+ "networks = list(scoped_openstack_connection.network.networks())\n",
+ "\n",
+ "display(Markdown(\"### Available Images\"))\n",
+ "image_dropdown = widgets.Dropdown(\n",
+ " options=format_image_options(images),\n",
+ " description='Image:',\n",
+ " layout=widgets.Layout(width='85%')\n",
+ ")\n",
+ "display(image_dropdown)\n",
+ "\n",
+ "display(Markdown(\"### Available Flavors\"))\n",
+ "flavor_dropdown = widgets.Dropdown(\n",
+ " options=format_generic_options(flavors),\n",
+ " description='Flavor:',\n",
+ " layout=widgets.Layout(width='85%')\n",
+ ")\n",
+ "display(flavor_dropdown)\n",
+ "\n",
+ "display(Markdown(\"### Available Networks\"))\n",
+ "network_dropdown = widgets.Dropdown(\n",
+ " options=format_generic_options(networks),\n",
+ " description='Network:',\n",
+ " layout=widgets.Layout(width='85%')\n",
+ ")\n",
+ "display(network_dropdown)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "c10e65f1-1e6e-44f4-8e86-aa6e5452d10c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def get_selected_name(dropdown_value):\n",
+ " return dropdown_value.split(\" (ID: \")[0]\n",
+ "def get_selected_id(dropdown_value):\n",
+ " return dropdown_value.split(\" (ID: \")[1].split(\")\")[0]\n",
+ "selected_image = get_selected_name(image_dropdown.value)\n",
+ "selected_flavor = get_selected_name(flavor_dropdown.value)\n",
+ "selected_network = get_selected_name(network_dropdown.value)\n",
+ "selected_network_id = get_selected_id(network_dropdown.value)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "616210a6-a2f4-4732-bdbe-b37684d9dd74",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Selected configuration: PSNC-EXT-PUB1-EDU, M1-NVME-2vCPU-8R-50D and ubuntu-24.04-x86_64-server-cloudimg-20241105\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(f\"Selected configuration: {selected_network}, {selected_flavor} and {selected_image}\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "92b4ca77-ecc9-44f0-8464-5548b604e518",
+ "metadata": {},
+ "source": [
+ "## ๐ Set Up a Private Network Environment\n",
+ "You will also need to set up a **private network**, a **subnet**, and a **router** to manage traffic between your VMs and external networks. This process ensures that your VMs have both internal and external connectivity as required. \n",
+ "> Follow the steps below to configure your network:\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e91b0bbe-8561-4bbd-87f7-927e53c35f68",
+ "metadata": {},
+ "source": [
+ "<img src=\"figures/scheme.png\" alt=\"Network scheme\" width=\"400\" height=\"200\"/>\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c3b75537-fb1b-448d-ad03-d637abb68b11",
+ "metadata": {},
+ "source": [
+ "### Create Private Network"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "f9a37e64-ba85-43b3-b234-9ac09e743951",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Creating private network...\n",
+ "Created network: My private network (ID: fca7d4d2-4c2c-4a25-9ed8-9d65c9d0d52f)\n"
+ ]
+ }
+ ],
+ "source": [
+ "try:\n",
+ " print(\"Creating private network...\")\n",
+ " network = scoped_openstack_connection.network.create_network(\n",
+ " name=\"My private network\",\n",
+ " admin_state_up=True,\n",
+ " port_security_enabled=True\n",
+ " )\n",
+ " print(f\"Created network: {network.name} (ID: {network.id})\")\n",
+ "except SDKException as e:\n",
+ " print(f\"Network creation failed: {e}\")\n",
+ " raise"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cb79e628-f76c-442c-b7f0-72e4d74a98ac",
+ "metadata": {},
+ "source": [
+ "### Create Internal Network (subnet)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "6a36a9da-14fc-41be-92a7-6e4b140c1d47",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Creating subnet...\n",
+ "Created subnet: My internal network (ID: 7558ff73-1885-4707-aa2e-bf9dbdd0fa19)\n"
+ ]
+ }
+ ],
+ "source": [
+ "try:\n",
+ " print(\"Creating subnet...\")\n",
+ " subnet = scoped_openstack_connection.network.create_subnet(\n",
+ " network_id=network.id,\n",
+ " name=\"My internal network\",\n",
+ " ip_version=4,\n",
+ " cidr=\"192.168.1.0/24\",\n",
+ " )\n",
+ " print(f\"Created subnet: {subnet.name} (ID: {subnet.id})\")\n",
+ "except SDKException as e:\n",
+ " print(f\"Subnet creation failed: {e}\")\n",
+ " raise\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b6c347fc-c1a2-433e-9b71-4e20f93b9ac9",
+ "metadata": {},
+ "source": [
+ "### Create Router and connect with network"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "1720eb87-7fb2-420b-bac4-2b9d8f5c0d31",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Creating router with external network: PSNC-EXT-PUB1-EDU\n",
+ "Created router: My router (ID: 57abc611-b306-458e-bb17-cbdc49cdf9fb)\n",
+ "Connected subnet My internal network to router My router\n"
+ ]
+ }
+ ],
+ "source": [
+ "try:\n",
+ " print(f\"Creating router with external network: {selected_network}\")\n",
+ " router = scoped_openstack_connection.network.create_router(\n",
+ " name=\"My router\",\n",
+ " external_gateway_info={\"network_id\": selected_network_id}\n",
+ " )\n",
+ " print(f\"Created router: {router.name} (ID: {router.id})\")\n",
+ "\n",
+ " # Connect private subnet to router\n",
+ " scoped_openstack_connection.network.add_interface_to_router(\n",
+ " router.id,\n",
+ " subnet_id=subnet.id\n",
+ " )\n",
+ " print(f\"Connected subnet {subnet.name} to router {router.name}\")\n",
+ "except SDKException as e:\n",
+ " print(f\"Router setup failed: {e}\")\n",
+ " raise"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3d1ab4c3-f811-459a-917b-4664f01253f7",
+ "metadata": {},
+ "source": [
+ "\n",
+ "> **Diagram**: OpenStack networking setup โ private network connected with the external public network (e.g., `PSNC-EXT-PUB1-EDU`) by router.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7483a3d0-7894-46f6-b202-128ff92b7276",
+ "metadata": {},
+ "source": [
+ "## ๐ Launch VM"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "4cd699a0-ddd6-4356-b828-95673e15e405",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# VM parameters\n",
+ "new_volume = scoped_openstack_connection.create_volume(10)\n",
+ "vm_name = \"new_vm\"\n",
+ "server = scoped_openstack_connection.create_server(\n",
+ " name=vm_name,\n",
+ " image=selected_image,\n",
+ " flavor=selected_flavor,\n",
+ " network=network, # Use new private network\n",
+ " key_name=\"key\",\n",
+ " volumes=[new_volume],\n",
+ " security_groups=[new_security_group.name]\n",
+ ")\n",
+ "# Waiting until all is ready\n",
+ "time.sleep(10)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "47ac6e4e-ee8d-413b-a7bf-a7f1562d01e7",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Refreshing VM object to get the current state\n",
+ "new_vm = scoped_openstack_connection.compute.find_server(server.id)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "eeae3963-20cf-4283-a40c-c6ab54ebea7d",
+ "metadata": {},
+ "source": [
+ "### Configure floating IP associated with the VM for an external access"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "b61224ce-446d-42f7-b3d6-12e204ef26b5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "new_fip = scoped_openstack_connection.create_floating_ip(network=selected_network)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "d547d657-15d5-4c9f-86f8-2ffd6f2f3466",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Floating IP: 62.3.174.55\n"
+ ]
+ }
+ ],
+ "source": [
+ "floating_ip_address = new_fip.floating_ip_address\n",
+ "print(f\"Floating IP: {floating_ip_address}\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "99447853-3a5e-445d-a690-8e034ef6156a",
+ "metadata": {},
+ "source": [
+ "> Next step is to add new FIP to new VM to get access through SSH."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "8b06239e-fae7-464e-a887-5ce9c36b124c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "openstack.compute.v2.server.Server(id=63542c19-0751-4b99-a42d-3d5cc22bb1a6, name=new_vm, status=BUILD, tenant_id=db6b4eb2d6fe454191e8d39b088564cd, user_id=0814e963545daece81ed1e1bda7b90ca33b58889e97e843aeb29ac634d15ae84, metadata={}, hostId=d54760d94ecc699c04cb77d71fa37050d12057e3460d7661477b5bf8, image={'id': '7816da3d-cc63-4f01-bc2a-832bf2391eb8', 'links': [{'rel': 'bookmark', 'href': 'https://claudius.cloud.psnc.pl:8774/images/7816da3d-cc63-4f01-bc2a-832bf2391eb8'}]}, flavor={'vcpus': 2, 'ram': 8192, 'disk': 50, 'ephemeral': 0, 'swap': 0, 'original_name': 'M1-NVME-2vCPU-8R-50D', 'extra_specs': {'aggregate_instance_extra_specs:nvme': 'general-purpose', 'quota:disk_read_bytes_sec': '524288000', 'quota:disk_read_iops_sec': '50000', 'quota:disk_write_bytes_sec': '524288000', 'quota:disk_write_iops_sec': '10000'}}, created=2025-04-14T08:26:48Z, updated=2025-04-14T08:26:52Z, addresses={}, accessIPv4=, accessIPv6=, links=[{'rel': 'self', 'href': 'https://claudius.cloud.psnc.pl:8774/v2.1/servers/63542c19-0751-4b99-a42d-3d5cc22bb1a6'}, {'rel': 'bookmark', 'href': 'https://claudius.cloud.psnc.pl:8774/servers/63542c19-0751-4b99-a42d-3d5cc22bb1a6'}], OS-DCF:diskConfig=MANUAL, progress=0, OS-EXT-AZ:availability_zone=BST0K10, pinned_availability_zone=BST0K10, config_drive=, key_name=key, OS-SRV-USG:launched_at=None, OS-SRV-USG:terminated_at=None, security_groups=[{'name': 'My VM Security Group'}], OS-EXT-STS:task_state=spawning, OS-EXT-STS:vm_state=building, OS-EXT-STS:power_state=0, os-extended-volumes:volumes_attached=[{'id': '6395a1f4-644e-4a6a-9d98-7892dba997b0', 'delete_on_termination': False}], locked=False, locked_reason=None, description=None, tags=[], trusted_image_certificates=None, OS-EXT-SRV-ATTR:hostname=new-vm, server_groups=[], location=Munch({'cloud': 'api.cloud.psnc.pl', 'region_name': None, 'zone': 'BST0K10', 'project': Munch({'id': 'db6b4eb2d6fe454191e8d39b088564cd', 'name': None, 'domain_id': None, 'domain_name': None})}))"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# add_ip_list requires actual address string\n",
+ "# or list of strings of address\n",
+ "scoped_openstack_connection.add_ip_list(new_vm, new_fip.floating_ip_address)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9ac6fe06-da82-493b-a0ba-e6a4fd898a18",
+ "metadata": {},
+ "source": [
+ "\n",
+ "> **Diagram**: After successful launching of VM, our network topology is extended with new created instance\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ffd09a73-4a84-440e-8e8c-117b6b4163fc",
+ "metadata": {},
+ "source": [
+ "### ๐ Connect to Your VM via SSH and configure web page\n",
+ "- Run a **cloud-init-like** script to:\n",
+ " - Update system packages\n",
+ " - Install **NGINX**\n",
+ " - Set up a simple homepage"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "43fbe01e-163a-44b1-ba1d-e7589562a918",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Connecting to VM at 62.3.174.55...\n",
+ "Try accessing: http://62.3.174.55\n",
+ "Access VM via ssh: ssh -i mykey.pem ubuntu@62.3.174.55\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(f\"Connecting to VM at {floating_ip_address}...\")\n",
+ "ssh = paramiko.SSHClient()\n",
+ "ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())\n",
+ "try:\n",
+ " ssh.connect(\n",
+ " hostname=floating_ip_address,\n",
+ " username=\"ubuntu\",\n",
+ " key_filename=\"key.pem\" # \"/path/to/mykey.pem\"\n",
+ " )\n",
+ " cloud_init_script = \"\"\"\n",
+ " sudo apt-get update\n",
+ " sudo apt-get upgrade -y\n",
+ " sudo apt-get install -y nginx\n",
+ " sudo bash -c \"echo 'Hello from my VM' > /var/www/html/index.html\"\n",
+ " \"\"\"\n",
+ " ssh.exec_command(cloud_init_script)\n",
+ " ssh.close()\n",
+ "except Exception as e:\n",
+ " print(f\"SSH failed: {e}\")\n",
+ " raise\n",
+ "\n",
+ "print(f\"Try accessing: http://{floating_ip_address}\")\n",
+ "print(f\"Access VM via ssh: ssh -i mykey.pem ubuntu@{floating_ip_address}\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2e5e5e46-791d-406a-9f6f-be3d0c234b0d",
+ "metadata": {},
+ "source": [
+ "> It will take some time for script to finish, so the provided link will not be accessible instantly"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dd588470-3fc1-4b41-9bba-c929743fa9c9",
+ "metadata": {},
+ "source": [
+ "# Finish session"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "89a921c0-8591-447a-b08a-ade26b7256ab",
+ "metadata": {},
+ "source": [
+ "## Detach floating IP from current server"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "3cf9a669-0dba-42aa-be26-e9f804c35e48",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "scoped_openstack_connection.detach_ip_from_server(new_vm, new_fip.id)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "29e3db6c-5b15-4b32-ad7b-8356436733e7",
+ "metadata": {},
+ "source": [
+ "## Backup your attached volume"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "95feded0-22be-464c-876e-39f1015a773e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "openstack.block_storage.v3.backup.Backup(name=My Backup, volume_id=6395a1f4-644e-4a6a-9d98-7892dba997b0, description=None, force=True, is_incremental=False, snapshot_id=None, id=65fa853d-9dfd-4b67-85e8-c4e333a3107c, links=[{'rel': 'self', 'href': 'https://claudius.cloud.psnc.pl:8776/v3/db6b4eb2d6fe454191e8d39b088564cd/backups/65fa853d-9dfd-4b67-85e8-c4e333a3107c'}, {'rel': 'bookmark', 'href': 'https://claudius.cloud.psnc.pl:8776/db6b4eb2d6fe454191e8d39b088564cd/backups/65fa853d-9dfd-4b67-85e8-c4e333a3107c'}], status=available, size=10, object_count=205, availability_zone=BST, container=cinder-backup-s3-claudius, created_at=2025-04-14T08:45:35.000000, updated_at=2025-04-14T08:47:24.000000, fail_reason=None, has_dependent_backups=False, data_timestamp=2025-04-14T08:45:35.000000, metadata={}, location=Munch({'cloud': 'api.cloud.psnc.pl', 'region_name': None, 'zone': 'BST', 'project': Munch({'id': 'db6b4eb2d6fe454191e8d39b088564cd', 'name': None, 'domain_id': None, 'domain_name': None})}))"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "attached_volume = new_vm.attached_volumes[0]\n",
+ "# OpenStack recommends to suspend VM and then backup volume.\n",
+ "# You can use `force` parameter to bypass it.\n",
+ "scoped_openstack_connection.create_volume_backup(attached_volume.id, name=\"My Backup\", force=True)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "878db2a7-dbd3-41c8-b629-6ca2954381c6",
+ "metadata": {},
+ "source": [
+ "## Release allocated resources"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "id": "301cbef1-ec92-439f-8f2d-fca92e2c33a9",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "True"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "scoped_openstack_connection.delete_server(new_vm.id)\n",
+ "scoped_openstack_connection.delete_floating_ip(new_fip)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "id": "dc283305-7e0e-4967-84e9-d1573b45136e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "False"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# If you do not wish to use generated key-pair anymore\n",
+ "# you can simply delete it\n",
+ "scoped_openstack_connection.delete_keypair(\"mykey\")"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.8"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
--
GitLab
From e9153bac6a407933e13b0c2747488c06c2da5747 Mon Sep 17 00:00:00 2001
From: Karen Pailozian <pailozian@cesnet.cz>
Date: Tue, 20 May 2025 11:18:17 +0200
Subject: [PATCH 2/3] fix: pass cloud init script as userdata when launching VM
---
openstack_eosc.ipynb | 318 ++++++++++++++++++++++++++++---------------
1 file changed, 209 insertions(+), 109 deletions(-)
diff --git a/openstack_eosc.ipynb b/openstack_eosc.ipynb
index 41e2050..155108a 100644
--- a/openstack_eosc.ipynb
+++ b/openstack_eosc.ipynb
@@ -34,66 +34,94 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Requirement already satisfied: python-openstackclient in /opt/conda/lib/python3.12/site-packages (8.0.0)\n",
- "Requirement already satisfied: python-keystoneclient in /opt/conda/lib/python3.12/site-packages (5.6.0)\n",
- "Requirement already satisfied: ipywidgets in /opt/conda/lib/python3.12/site-packages (8.1.5)\n",
- "Requirement already satisfied: paramiko in /opt/conda/lib/python3.12/site-packages (3.5.1)\n",
- "Requirement already satisfied: pbr!=2.1.0,>=2.0.0 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (6.1.1)\n",
- "Requirement already satisfied: cryptography>=2.7 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (44.0.0)\n",
- "Requirement already satisfied: cliff>=3.5.0 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (4.9.1)\n",
- "Requirement already satisfied: iso8601>=0.1.11 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (2.1.0)\n",
- "Requirement already satisfied: openstacksdk>=3.3.0 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (4.5.0)\n",
- "Requirement already satisfied: osc-lib>=2.3.0 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (4.0.0)\n",
- "Requirement already satisfied: oslo.i18n>=3.15.3 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (6.5.1)\n",
- "Requirement already satisfied: python-cinderclient>=3.3.0 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (9.7.0)\n",
+ "Collecting python-openstackclient\n",
+ " Using cached python_openstackclient-8.0.0-py3-none-any.whl.metadata (6.4 kB)\n",
+ "Collecting python-keystoneclient\n",
+ " Using cached python_keystoneclient-5.6.0-py3-none-any.whl.metadata (3.7 kB)\n",
+ "Requirement already satisfied: ipywidgets in /opt/conda/lib/python3.12/site-packages (8.1.6)\n",
+ "Collecting paramiko\n",
+ " Using cached paramiko-3.5.1-py3-none-any.whl.metadata (4.6 kB)\n",
+ "Collecting pbr!=2.1.0,>=2.0.0 (from python-openstackclient)\n",
+ " Using cached pbr-6.1.1-py2.py3-none-any.whl.metadata (3.4 kB)\n",
+ "Requirement already satisfied: cryptography>=2.7 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (44.0.2)\n",
+ "Collecting cliff>=3.5.0 (from python-openstackclient)\n",
+ " Using cached cliff-4.10.0-py3-none-any.whl.metadata (1.9 kB)\n",
+ "Collecting iso8601>=0.1.11 (from python-openstackclient)\n",
+ " Using cached iso8601-2.1.0-py3-none-any.whl.metadata (3.7 kB)\n",
+ "Collecting openstacksdk>=3.3.0 (from python-openstackclient)\n",
+ " Using cached openstacksdk-4.5.0-py3-none-any.whl.metadata (12 kB)\n",
+ "Collecting osc-lib>=2.3.0 (from python-openstackclient)\n",
+ " Using cached osc_lib-4.0.0-py3-none-any.whl.metadata (3.6 kB)\n",
+ "Collecting oslo.i18n>=3.15.3 (from python-openstackclient)\n",
+ " Using cached oslo.i18n-6.5.1-py3-none-any.whl.metadata (2.1 kB)\n",
+ "Collecting python-cinderclient>=3.3.0 (from python-openstackclient)\n",
+ " Using cached python_cinderclient-9.7.0-py3-none-any.whl.metadata (19 kB)\n",
"Requirement already satisfied: requests>=2.27.0 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (2.32.3)\n",
- "Requirement already satisfied: stevedore>=2.0.1 in /opt/conda/lib/python3.12/site-packages (from python-openstackclient) (5.4.1)\n",
- "Requirement already satisfied: debtcollector>=1.2.0 in /opt/conda/lib/python3.12/site-packages (from python-keystoneclient) (3.0.0)\n",
- "Requirement already satisfied: keystoneauth1>=3.4.0 in /opt/conda/lib/python3.12/site-packages (from python-keystoneclient) (5.10.0)\n",
- "Requirement already satisfied: oslo.config>=5.2.0 in /opt/conda/lib/python3.12/site-packages (from python-keystoneclient) (9.7.1)\n",
- "Requirement already satisfied: oslo.serialization>=2.18.0 in /opt/conda/lib/python3.12/site-packages (from python-keystoneclient) (5.7.0)\n",
- "Requirement already satisfied: oslo.utils>=3.33.0 in /opt/conda/lib/python3.12/site-packages (from python-keystoneclient) (8.2.0)\n",
+ "Collecting stevedore>=2.0.1 (from python-openstackclient)\n",
+ " Using cached stevedore-5.4.1-py3-none-any.whl.metadata (2.3 kB)\n",
+ "Collecting debtcollector>=1.2.0 (from python-keystoneclient)\n",
+ " Using cached debtcollector-3.0.0-py3-none-any.whl.metadata (2.3 kB)\n",
+ "Collecting keystoneauth1>=3.4.0 (from python-keystoneclient)\n",
+ " Using cached keystoneauth1-5.11.0-py3-none-any.whl.metadata (4.0 kB)\n",
+ "Collecting oslo.config>=5.2.0 (from python-keystoneclient)\n",
+ " Using cached oslo_config-9.8.0-py3-none-any.whl.metadata (2.8 kB)\n",
+ "Collecting oslo.serialization>=2.18.0 (from python-keystoneclient)\n",
+ " Using cached oslo.serialization-5.7.0-py3-none-any.whl.metadata (2.1 kB)\n",
+ "Collecting oslo.utils>=3.33.0 (from python-keystoneclient)\n",
+ " Using cached oslo_utils-9.0.0-py3-none-any.whl.metadata (2.2 kB)\n",
"Requirement already satisfied: packaging>=20.4 in /opt/conda/lib/python3.12/site-packages (from python-keystoneclient) (24.2)\n",
"Requirement already satisfied: comm>=0.1.3 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (0.2.2)\n",
- "Requirement already satisfied: ipython>=6.1.0 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (8.31.0)\n",
+ "Requirement already satisfied: ipython>=6.1.0 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (9.1.0)\n",
"Requirement already satisfied: traitlets>=4.3.1 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (5.14.3)\n",
- "Requirement already satisfied: widgetsnbextension~=4.0.12 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (4.0.13)\n",
- "Requirement already satisfied: jupyterlab_widgets~=3.0.12 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (3.0.13)\n",
- "Requirement already satisfied: bcrypt>=3.2 in /opt/conda/lib/python3.12/site-packages (from paramiko) (4.3.0)\n",
- "Requirement already satisfied: pynacl>=1.5 in /opt/conda/lib/python3.12/site-packages (from paramiko) (1.5.0)\n",
- "Requirement already satisfied: autopage>=0.4.0 in /opt/conda/lib/python3.12/site-packages (from cliff>=3.5.0->python-openstackclient) (0.5.2)\n",
- "Requirement already satisfied: cmd2>=1.0.0 in /opt/conda/lib/python3.12/site-packages (from cliff>=3.5.0->python-openstackclient) (2.5.11)\n",
- "Requirement already satisfied: PrettyTable>=0.7.2 in /opt/conda/lib/python3.12/site-packages (from cliff>=3.5.0->python-openstackclient) (3.16.0)\n",
+ "Requirement already satisfied: widgetsnbextension~=4.0.14 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (4.0.14)\n",
+ "Requirement already satisfied: jupyterlab_widgets~=3.0.14 in /opt/conda/lib/python3.12/site-packages (from ipywidgets) (3.0.14)\n",
+ "Collecting bcrypt>=3.2 (from paramiko)\n",
+ " Using cached bcrypt-4.3.0-cp39-abi3-manylinux_2_34_x86_64.whl.metadata (10 kB)\n",
+ "Collecting pynacl>=1.5 (from paramiko)\n",
+ " Using cached PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl.metadata (8.6 kB)\n",
+ "Collecting autopage>=0.4.0 (from cliff>=3.5.0->python-openstackclient)\n",
+ " Using cached autopage-0.5.2-py3-none-any.whl.metadata (7.9 kB)\n",
+ "Collecting cmd2>=1.0.0 (from cliff>=3.5.0->python-openstackclient)\n",
+ " Using cached cmd2-2.5.11-py3-none-any.whl.metadata (17 kB)\n",
+ "Collecting PrettyTable>=0.7.2 (from cliff>=3.5.0->python-openstackclient)\n",
+ " Using cached prettytable-3.16.0-py3-none-any.whl.metadata (33 kB)\n",
"Requirement already satisfied: PyYAML>=3.12 in /opt/conda/lib/python3.12/site-packages (from cliff>=3.5.0->python-openstackclient) (6.0.2)\n",
"Requirement already satisfied: cffi>=1.12 in /opt/conda/lib/python3.12/site-packages (from cryptography>=2.7->python-openstackclient) (1.17.1)\n",
"Requirement already satisfied: wrapt>=1.7.0 in /opt/conda/lib/python3.12/site-packages (from debtcollector>=1.2.0->python-keystoneclient) (1.17.2)\n",
- "Requirement already satisfied: decorator in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (5.1.1)\n",
+ "Requirement already satisfied: decorator in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (5.2.1)\n",
+ "Requirement already satisfied: ipython-pygments-lexers in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (1.1.1)\n",
"Requirement already satisfied: jedi>=0.16 in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (0.19.2)\n",
"Requirement already satisfied: matplotlib-inline in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (0.1.7)\n",
"Requirement already satisfied: pexpect>4.3 in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (4.9.0)\n",
- "Requirement already satisfied: prompt_toolkit<3.1.0,>=3.0.41 in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (3.0.48)\n",
- "Requirement already satisfied: pygments>=2.4.0 in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (2.18.0)\n",
+ "Requirement already satisfied: prompt_toolkit<3.1.0,>=3.0.41 in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (3.0.50)\n",
+ "Requirement already satisfied: pygments>=2.4.0 in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (2.19.1)\n",
"Requirement already satisfied: stack_data in /opt/conda/lib/python3.12/site-packages (from ipython>=6.1.0->ipywidgets) (0.6.3)\n",
- "Requirement already satisfied: os-service-types>=1.2.0 in /opt/conda/lib/python3.12/site-packages (from keystoneauth1>=3.4.0->python-keystoneclient) (1.7.0)\n",
- "Requirement already satisfied: typing-extensions>=4.12 in /opt/conda/lib/python3.12/site-packages (from keystoneauth1>=3.4.0->python-keystoneclient) (4.12.2)\n",
- "Requirement already satisfied: dogpile.cache>=0.6.5 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (1.3.4)\n",
+ "Collecting os-service-types>=1.2.0 (from keystoneauth1>=3.4.0->python-keystoneclient)\n",
+ " Using cached os_service_types-1.7.0-py2.py3-none-any.whl.metadata (1.7 kB)\n",
+ "Requirement already satisfied: typing-extensions>=4.12 in /opt/conda/lib/python3.12/site-packages (from keystoneauth1>=3.4.0->python-keystoneclient) (4.13.2)\n",
+ "Collecting dogpile.cache>=0.6.5 (from openstacksdk>=3.3.0->python-openstackclient)\n",
+ " Using cached dogpile_cache-1.4.0-py3-none-any.whl.metadata (5.5 kB)\n",
"Requirement already satisfied: jmespath>=0.9.0 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (1.0.1)\n",
"Requirement already satisfied: jsonpatch!=1.20,>=1.16 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (1.33)\n",
- "Requirement already satisfied: platformdirs>=3 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (4.3.6)\n",
+ "Requirement already satisfied: platformdirs>=3 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (4.3.7)\n",
"Requirement already satisfied: psutil>=3.2.2 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (5.9.8)\n",
- "Requirement already satisfied: requestsexceptions>=1.2.0 in /opt/conda/lib/python3.12/site-packages (from openstacksdk>=3.3.0->python-openstackclient) (1.4.0)\n",
- "Requirement already satisfied: netaddr>=0.7.18 in /opt/conda/lib/python3.12/site-packages (from oslo.config>=5.2.0->python-keystoneclient) (1.3.0)\n",
- "Requirement already satisfied: rfc3986>=1.2.0 in /opt/conda/lib/python3.12/site-packages (from oslo.config>=5.2.0->python-keystoneclient) (2.0.0)\n",
+ "Collecting requestsexceptions>=1.2.0 (from openstacksdk>=3.3.0->python-openstackclient)\n",
+ " Using cached requestsexceptions-1.4.0-py2.py3-none-any.whl.metadata (1.2 kB)\n",
+ "Collecting netaddr>=0.7.18 (from oslo.config>=5.2.0->python-keystoneclient)\n",
+ " Using cached netaddr-1.3.0-py3-none-any.whl.metadata (5.0 kB)\n",
+ "Collecting rfc3986>=1.2.0 (from oslo.config>=5.2.0->python-keystoneclient)\n",
+ " Using cached rfc3986-2.0.0-py2.py3-none-any.whl.metadata (6.6 kB)\n",
"Requirement already satisfied: msgpack>=0.5.2 in /opt/conda/lib/python3.12/site-packages (from oslo.serialization>=2.18.0->python-keystoneclient) (1.1.0)\n",
- "Requirement already satisfied: tzdata>=2022.4 in /opt/conda/lib/python3.12/site-packages (from oslo.serialization>=2.18.0->python-keystoneclient) (2024.2)\n",
- "Requirement already satisfied: pyparsing>=2.1.0 in /opt/conda/lib/python3.12/site-packages (from oslo.utils>=3.33.0->python-keystoneclient) (3.2.0)\n",
- "Requirement already satisfied: setuptools in /opt/conda/lib/python3.12/site-packages (from pbr!=2.1.0,>=2.0.0->python-openstackclient) (75.6.0)\n",
- "Requirement already satisfied: charset_normalizer<4,>=2 in /opt/conda/lib/python3.12/site-packages (from requests>=2.27.0->python-openstackclient) (3.4.0)\n",
+ "Requirement already satisfied: tzdata>=2022.4 in /opt/conda/lib/python3.12/site-packages (from oslo.serialization>=2.18.0->python-keystoneclient) (2025.2)\n",
+ "Requirement already satisfied: pyparsing>=2.1.0 in /opt/conda/lib/python3.12/site-packages (from oslo.utils>=3.33.0->python-keystoneclient) (3.2.3)\n",
+ "Requirement already satisfied: setuptools in /opt/conda/lib/python3.12/site-packages (from pbr!=2.1.0,>=2.0.0->python-openstackclient) (78.1.0)\n",
+ "Requirement already satisfied: charset_normalizer<4,>=2 in /opt/conda/lib/python3.12/site-packages (from requests>=2.27.0->python-openstackclient) (3.4.1)\n",
"Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.12/site-packages (from requests>=2.27.0->python-openstackclient) (3.10)\n",
- "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.12/site-packages (from requests>=2.27.0->python-openstackclient) (2.3.0)\n",
- "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.12/site-packages (from requests>=2.27.0->python-openstackclient) (2024.12.14)\n",
+ "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.12/site-packages (from requests>=2.27.0->python-openstackclient) (2.4.0)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.12/site-packages (from requests>=2.27.0->python-openstackclient) (2025.1.31)\n",
"Requirement already satisfied: pycparser in /opt/conda/lib/python3.12/site-packages (from cffi>=1.12->cryptography>=2.7->python-openstackclient) (2.22)\n",
- "Requirement already satisfied: pyperclip>=1.8 in /opt/conda/lib/python3.12/site-packages (from cmd2>=1.0.0->cliff>=3.5.0->python-openstackclient) (1.9.0)\n",
+ "Collecting pyperclip>=1.8 (from cmd2>=1.0.0->cliff>=3.5.0->python-openstackclient)\n",
+ " Using cached pyperclip-1.9.0-py3-none-any.whl\n",
"Requirement already satisfied: wcwidth>=0.2.10 in /opt/conda/lib/python3.12/site-packages (from cmd2>=1.0.0->cliff>=3.5.0->python-openstackclient) (0.2.13)\n",
"Requirement already satisfied: parso<0.9.0,>=0.8.4 in /opt/conda/lib/python3.12/site-packages (from jedi>=0.16->ipython>=6.1.0->ipywidgets) (0.8.4)\n",
"Requirement already satisfied: jsonpointer>=1.9 in /opt/conda/lib/python3.12/site-packages (from jsonpatch!=1.20,>=1.16->openstacksdk>=3.3.0->python-openstackclient) (3.0.0)\n",
@@ -101,6 +129,34 @@
"Requirement already satisfied: executing>=1.2.0 in /opt/conda/lib/python3.12/site-packages (from stack_data->ipython>=6.1.0->ipywidgets) (2.1.0)\n",
"Requirement already satisfied: asttokens>=2.1.0 in /opt/conda/lib/python3.12/site-packages (from stack_data->ipython>=6.1.0->ipywidgets) (3.0.0)\n",
"Requirement already satisfied: pure_eval in /opt/conda/lib/python3.12/site-packages (from stack_data->ipython>=6.1.0->ipywidgets) (0.2.3)\n",
+ "Using cached python_openstackclient-8.0.0-py3-none-any.whl (1.1 MB)\n",
+ "Using cached python_keystoneclient-5.6.0-py3-none-any.whl (397 kB)\n",
+ "Using cached paramiko-3.5.1-py3-none-any.whl (227 kB)\n",
+ "Using cached bcrypt-4.3.0-cp39-abi3-manylinux_2_34_x86_64.whl (284 kB)\n",
+ "Using cached cliff-4.10.0-py3-none-any.whl (84 kB)\n",
+ "Using cached debtcollector-3.0.0-py3-none-any.whl (23 kB)\n",
+ "Using cached iso8601-2.1.0-py3-none-any.whl (7.5 kB)\n",
+ "Using cached keystoneauth1-5.11.0-py3-none-any.whl (344 kB)\n",
+ "Using cached openstacksdk-4.5.0-py3-none-any.whl (1.8 MB)\n",
+ "Using cached osc_lib-4.0.0-py3-none-any.whl (93 kB)\n",
+ "Using cached oslo_config-9.8.0-py3-none-any.whl (131 kB)\n",
+ "Using cached oslo.i18n-6.5.1-py3-none-any.whl (46 kB)\n",
+ "Using cached oslo.serialization-5.7.0-py3-none-any.whl (25 kB)\n",
+ "Using cached oslo_utils-9.0.0-py3-none-any.whl (134 kB)\n",
+ "Using cached pbr-6.1.1-py2.py3-none-any.whl (108 kB)\n",
+ "Using cached PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (856 kB)\n",
+ "Using cached python_cinderclient-9.7.0-py3-none-any.whl (256 kB)\n",
+ "Using cached stevedore-5.4.1-py3-none-any.whl (49 kB)\n",
+ "Using cached autopage-0.5.2-py3-none-any.whl (30 kB)\n",
+ "Using cached cmd2-2.5.11-py3-none-any.whl (152 kB)\n",
+ "Using cached dogpile_cache-1.4.0-py3-none-any.whl (62 kB)\n",
+ "Using cached netaddr-1.3.0-py3-none-any.whl (2.3 MB)\n",
+ "Using cached os_service_types-1.7.0-py2.py3-none-any.whl (24 kB)\n",
+ "Using cached prettytable-3.16.0-py3-none-any.whl (33 kB)\n",
+ "Using cached requestsexceptions-1.4.0-py2.py3-none-any.whl (3.8 kB)\n",
+ "Using cached rfc3986-2.0.0-py2.py3-none-any.whl (31 kB)\n",
+ "Installing collected packages: requestsexceptions, pyperclip, rfc3986, PrettyTable, pbr, netaddr, iso8601, debtcollector, cmd2, bcrypt, autopage, stevedore, pynacl, oslo.i18n, os-service-types, paramiko, oslo.utils, oslo.config, keystoneauth1, dogpile.cache, cliff, python-cinderclient, oslo.serialization, openstacksdk, python-keystoneclient, osc-lib, python-openstackclient\n",
+ "Successfully installed PrettyTable-3.16.0 autopage-0.5.2 bcrypt-4.3.0 cliff-4.10.0 cmd2-2.5.11 debtcollector-3.0.0 dogpile.cache-1.4.0 iso8601-2.1.0 keystoneauth1-5.11.0 netaddr-1.3.0 openstacksdk-4.5.0 os-service-types-1.7.0 osc-lib-4.0.0 oslo.config-9.8.0 oslo.i18n-6.5.1 oslo.serialization-5.7.0 oslo.utils-9.0.0 paramiko-3.5.1 pbr-6.1.1 pynacl-1.5.0 pyperclip-1.9.0 python-cinderclient-9.7.0 python-keystoneclient-5.6.0 python-openstackclient-8.0.0 requestsexceptions-1.4.0 rfc3986-2.0.0 stevedore-5.4.1\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
@@ -111,7 +167,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 1,
"id": "c3718348-c7df-44d3-9811-66b7fa7ec7fb",
"metadata": {},
"outputs": [],
@@ -155,7 +211,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 2,
"id": "5bc6fac0-c5fa-44a7-9d29-38ea5164e4bc",
"metadata": {},
"outputs": [],
@@ -186,12 +242,14 @@
"The Keystone client is used to interact with OpenStack's identity service and enables to:\n",
"\n",
"- Access OpenStack components not exposed in the primary API.\n",
- "- Retrieve detailed information about your projects"
+ "- Retrieve detailed information about your projects\n",
+ "\n",
+ "Make sure to authenticate on https://eu-1.iaas.open-science-cloud.ec.europa.eu/ page"
]
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 3,
"id": "b871dc55-172a-43da-81d7-b7fa796a7c2c",
"metadata": {},
"outputs": [],
@@ -203,7 +261,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 4,
"id": "9a58d8c5-7dcd-4549-9b10-0456ccd66b30",
"metadata": {},
"outputs": [
@@ -222,7 +280,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "90ef16930f794a71812097ee87883176",
+ "model_id": "190f79eec3d64952a1941b37feeecd98",
"version_major": 2,
"version_minor": 0
},
@@ -236,7 +294,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "43118c111a1740f7898f72861426f2ca",
+ "model_id": "0935ef7d353949ec8c78bb3409af17f8",
"version_major": 2,
"version_minor": 0
},
@@ -250,7 +308,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "1cd77110d36042578de07d7469959646",
+ "model_id": "a0095b69890e4fca99fb7ba40b204a4e",
"version_major": 2,
"version_minor": 0
},
@@ -300,7 +358,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 5,
"id": "7c50e961-b797-4e1c-a91b-e44487324c0c",
"metadata": {},
"outputs": [
@@ -333,7 +391,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 7,
"id": "5e4b3a58-687b-471f-8c7f-a6db86bde820",
"metadata": {},
"outputs": [
@@ -385,7 +443,7 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 8,
"id": "aceddf23-baeb-4e86-8100-52beec7241a4",
"metadata": {},
"outputs": [
@@ -454,7 +512,7 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 9,
"id": "5e29662e-1576-48f8-9ae2-f9e2be0ffc60",
"metadata": {},
"outputs": [
@@ -473,7 +531,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "341b08877fcc44f7a71e223b2713cdf0",
+ "model_id": "1ee722a7e3e5472d8af3d9037a8eaaa5",
"version_major": 2,
"version_minor": 0
},
@@ -499,7 +557,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "a8ba85e215494b91a0b93a6e01128471",
+ "model_id": "5effa4322c8d48bd83cf2538e407246c",
"version_major": 2,
"version_minor": 0
},
@@ -525,7 +583,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "3eefc30da3834df793223ad458b594a0",
+ "model_id": "8597753cd65e4382b60bb254807df518",
"version_major": 2,
"version_minor": 0
},
@@ -581,7 +639,7 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 10,
"id": "c10e65f1-1e6e-44f4-8e86-aa6e5452d10c",
"metadata": {},
"outputs": [],
@@ -598,7 +656,7 @@
},
{
"cell_type": "code",
- "execution_count": 16,
+ "execution_count": 11,
"id": "616210a6-a2f4-4732-bdbe-b37684d9dd74",
"metadata": {},
"outputs": [
@@ -642,7 +700,7 @@
},
{
"cell_type": "code",
- "execution_count": 17,
+ "execution_count": 12,
"id": "f9a37e64-ba85-43b3-b234-9ac09e743951",
"metadata": {},
"outputs": [
@@ -651,7 +709,7 @@
"output_type": "stream",
"text": [
"Creating private network...\n",
- "Created network: My private network (ID: fca7d4d2-4c2c-4a25-9ed8-9d65c9d0d52f)\n"
+ "Created network: My private network (ID: 8207ddc7-4002-40d7-b9b5-cfedf6247024)\n"
]
}
],
@@ -679,7 +737,7 @@
},
{
"cell_type": "code",
- "execution_count": 18,
+ "execution_count": 13,
"id": "6a36a9da-14fc-41be-92a7-6e4b140c1d47",
"metadata": {},
"outputs": [
@@ -688,7 +746,7 @@
"output_type": "stream",
"text": [
"Creating subnet...\n",
- "Created subnet: My internal network (ID: 7558ff73-1885-4707-aa2e-bf9dbdd0fa19)\n"
+ "Created subnet: My internal network (ID: 444e1046-e893-4381-b092-b7645bd96347)\n"
]
}
],
@@ -717,7 +775,7 @@
},
{
"cell_type": "code",
- "execution_count": 20,
+ "execution_count": 14,
"id": "1720eb87-7fb2-420b-bac4-2b9d8f5c0d31",
"metadata": {},
"outputs": [
@@ -726,7 +784,7 @@
"output_type": "stream",
"text": [
"Creating router with external network: PSNC-EXT-PUB1-EDU\n",
- "Created router: My router (ID: 57abc611-b306-458e-bb17-cbdc49cdf9fb)\n",
+ "Created router: My router (ID: cbde5d42-2001-4a9c-a1aa-fa2ef97e31f6)\n",
"Connected subnet My internal network to router My router\n"
]
}
@@ -768,32 +826,75 @@
"## ๐ Launch VM"
]
},
+ {
+ "cell_type": "markdown",
+ "id": "7f29a0cd-897c-4c93-81d7-edf8d24f7240",
+ "metadata": {},
+ "source": [
+ "> Create a new volume for VM with a size of 10 GB using your OpenStack connection"
+ ]
+ },
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": 24,
+ "id": "1329314a-9aad-4bee-97b4-f4fe2022e42a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "new_volume = scoped_openstack_connection.create_volume(10)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9d8c4f19-da3b-4faa-99fb-1d79f194c637",
+ "metadata": {},
+ "source": [
+ "### Launch VM and run a **cloud-init** script to:\n",
+ " - Update system packages\n",
+ " - Install **NGINX**\n",
+ " - Set up a simple homepage"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
"id": "4cd699a0-ddd6-4356-b828-95673e15e405",
"metadata": {},
"outputs": [],
"source": [
"# VM parameters\n",
- "new_volume = scoped_openstack_connection.create_volume(10)\n",
+ "cloud_init_script = \"\"\"#!/bin/bash\n",
+ "apt-get update\n",
+ "apt-get upgrade -y\n",
+ "apt-get install -y nginx\n",
+ "echo 'Hello from my VM' > /var/www/html/index.html\n",
+ "\"\"\"\n",
"vm_name = \"new_vm\"\n",
"server = scoped_openstack_connection.create_server(\n",
" name=vm_name,\n",
" image=selected_image,\n",
" flavor=selected_flavor,\n",
" network=network, # Use new private network\n",
+ " userdata=cloud_init_script,\n",
" key_name=\"key\",\n",
" volumes=[new_volume],\n",
" security_groups=[new_security_group.name]\n",
")\n",
"# Waiting until all is ready\n",
- "time.sleep(10)"
+ "time.sleep(170)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "915cde8d-f668-44a1-913d-24436a93e4d4",
+ "metadata": {},
+ "source": [
+ "> It will take some time for `cloud_init_script` to finish."
]
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": 18,
"id": "47ac6e4e-ee8d-413b-a7bf-a7f1562d01e7",
"metadata": {},
"outputs": [],
@@ -807,12 +908,13 @@
"id": "eeae3963-20cf-4283-a40c-c6ab54ebea7d",
"metadata": {},
"source": [
- "### Configure floating IP associated with the VM for an external access"
+ "### Configure floating IP associated with the VM for an external access\n",
+ "To enable external access to your VM, create a floating IP and associate it with your external network:\n"
]
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": 19,
"id": "b61224ce-446d-42f7-b3d6-12e204ef26b5",
"metadata": {},
"outputs": [],
@@ -822,7 +924,7 @@
},
{
"cell_type": "code",
- "execution_count": 25,
+ "execution_count": 20,
"id": "d547d657-15d5-4c9f-86f8-2ffd6f2f3466",
"metadata": {},
"outputs": [
@@ -830,7 +932,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Floating IP: 62.3.174.55\n"
+ "Floating IP: 62.3.174.177\n"
]
}
],
@@ -849,17 +951,17 @@
},
{
"cell_type": "code",
- "execution_count": 26,
+ "execution_count": 21,
"id": "8b06239e-fae7-464e-a887-5ce9c36b124c",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "openstack.compute.v2.server.Server(id=63542c19-0751-4b99-a42d-3d5cc22bb1a6, name=new_vm, status=BUILD, tenant_id=db6b4eb2d6fe454191e8d39b088564cd, user_id=0814e963545daece81ed1e1bda7b90ca33b58889e97e843aeb29ac634d15ae84, metadata={}, hostId=d54760d94ecc699c04cb77d71fa37050d12057e3460d7661477b5bf8, image={'id': '7816da3d-cc63-4f01-bc2a-832bf2391eb8', 'links': [{'rel': 'bookmark', 'href': 'https://claudius.cloud.psnc.pl:8774/images/7816da3d-cc63-4f01-bc2a-832bf2391eb8'}]}, flavor={'vcpus': 2, 'ram': 8192, 'disk': 50, 'ephemeral': 0, 'swap': 0, 'original_name': 'M1-NVME-2vCPU-8R-50D', 'extra_specs': {'aggregate_instance_extra_specs:nvme': 'general-purpose', 'quota:disk_read_bytes_sec': '524288000', 'quota:disk_read_iops_sec': '50000', 'quota:disk_write_bytes_sec': '524288000', 'quota:disk_write_iops_sec': '10000'}}, created=2025-04-14T08:26:48Z, updated=2025-04-14T08:26:52Z, addresses={}, accessIPv4=, accessIPv6=, links=[{'rel': 'self', 'href': 'https://claudius.cloud.psnc.pl:8774/v2.1/servers/63542c19-0751-4b99-a42d-3d5cc22bb1a6'}, {'rel': 'bookmark', 'href': 'https://claudius.cloud.psnc.pl:8774/servers/63542c19-0751-4b99-a42d-3d5cc22bb1a6'}], OS-DCF:diskConfig=MANUAL, progress=0, OS-EXT-AZ:availability_zone=BST0K10, pinned_availability_zone=BST0K10, config_drive=, key_name=key, OS-SRV-USG:launched_at=None, OS-SRV-USG:terminated_at=None, security_groups=[{'name': 'My VM Security Group'}], OS-EXT-STS:task_state=spawning, OS-EXT-STS:vm_state=building, OS-EXT-STS:power_state=0, os-extended-volumes:volumes_attached=[{'id': '6395a1f4-644e-4a6a-9d98-7892dba997b0', 'delete_on_termination': False}], locked=False, locked_reason=None, description=None, tags=[], trusted_image_certificates=None, OS-EXT-SRV-ATTR:hostname=new-vm, server_groups=[], location=Munch({'cloud': 'api.cloud.psnc.pl', 'region_name': None, 'zone': 'BST0K10', 'project': Munch({'id': 'db6b4eb2d6fe454191e8d39b088564cd', 'name': None, 'domain_id': None, 'domain_name': None})}))"
+ "openstack.compute.v2.server.Server(id=e9ff03f2-2c79-4fed-a0bd-0db03a0d77c6, name=new_vm, status=ACTIVE, tenant_id=db6b4eb2d6fe454191e8d39b088564cd, user_id=0814e963545daece81ed1e1bda7b90ca33b58889e97e843aeb29ac634d15ae84, metadata={}, hostId=00645010378491da449ee53dea83e56eb7bb1376bc695df081a5f6ec, image={'id': '7816da3d-cc63-4f01-bc2a-832bf2391eb8', 'links': [{'rel': 'bookmark', 'href': 'https://claudius.cloud.psnc.pl:8774/images/7816da3d-cc63-4f01-bc2a-832bf2391eb8'}]}, flavor={'vcpus': 2, 'ram': 8192, 'disk': 50, 'ephemeral': 0, 'swap': 0, 'original_name': 'M1-NVME-2vCPU-8R-50D', 'extra_specs': {'aggregate_instance_extra_specs:nvme': 'general-purpose', 'quota:disk_read_bytes_sec': '524288000', 'quota:disk_read_iops_sec': '50000', 'quota:disk_write_bytes_sec': '524288000', 'quota:disk_write_iops_sec': '10000'}}, created=2025-05-20T08:54:21Z, updated=2025-05-20T08:55:13Z, addresses={'My private network': [{'version': 4, 'addr': '192.168.1.176', 'OS-EXT-IPS:type': 'fixed', 'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:f4:dd:5d'}]}, accessIPv4=, accessIPv6=, links=[{'rel': 'self', 'href': 'https://claudius.cloud.psnc.pl:8774/v2.1/servers/e9ff03f2-2c79-4fed-a0bd-0db03a0d77c6'}, {'rel': 'bookmark', 'href': 'https://claudius.cloud.psnc.pl:8774/servers/e9ff03f2-2c79-4fed-a0bd-0db03a0d77c6'}], OS-DCF:diskConfig=MANUAL, progress=0, OS-EXT-AZ:availability_zone=BST0K10, pinned_availability_zone=BST0K10, config_drive=, key_name=key, OS-SRV-USG:launched_at=2025-05-20T08:55:13.000000, OS-SRV-USG:terminated_at=None, security_groups=[{'name': 'My VM Security Group'}], OS-EXT-STS:task_state=None, OS-EXT-STS:vm_state=active, OS-EXT-STS:power_state=1, os-extended-volumes:volumes_attached=[{'id': 'e5144f9b-0047-419c-861a-42a30d06dfb5', 'delete_on_termination': False}], locked=False, locked_reason=None, description=None, tags=[], trusted_image_certificates=None, OS-EXT-SRV-ATTR:hostname=new-vm, server_groups=[], location=Munch({'cloud': 'api.cloud.psnc.pl', 'region_name': None, 'zone': 'BST0K10', 'project': Munch({'id': 'db6b4eb2d6fe454191e8d39b088564cd', 'name': None, 'domain_id': None, 'domain_name': None})}))"
]
},
- "execution_count": 26,
+ "execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
@@ -884,16 +986,12 @@
"id": "ffd09a73-4a84-440e-8e8c-117b6b4163fc",
"metadata": {},
"source": [
- "### ๐ Connect to Your VM via SSH and configure web page\n",
- "- Run a **cloud-init-like** script to:\n",
- " - Update system packages\n",
- " - Install **NGINX**\n",
- " - Set up a simple homepage"
+ "### ๐ Connect to Your VM via SSH "
]
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": 22,
"id": "43fbe01e-163a-44b1-ba1d-e7589562a918",
"metadata": {},
"outputs": [
@@ -901,9 +999,9 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Connecting to VM at 62.3.174.55...\n",
- "Try accessing: http://62.3.174.55\n",
- "Access VM via ssh: ssh -i mykey.pem ubuntu@62.3.174.55\n"
+ "Connecting to VM at 62.3.174.177...\n",
+ "Try accessing: http://62.3.174.177\n",
+ "Access VM via ssh: ssh -i mykey.pem ubuntu@62.3.174.177\n"
]
}
],
@@ -915,15 +1013,8 @@
" ssh.connect(\n",
" hostname=floating_ip_address,\n",
" username=\"ubuntu\",\n",
- " key_filename=\"key.pem\" # \"/path/to/mykey.pem\"\n",
+ " key_filename=\"key.pem\" # \"/path/to/key.pem\"\n",
" )\n",
- " cloud_init_script = \"\"\"\n",
- " sudo apt-get update\n",
- " sudo apt-get upgrade -y\n",
- " sudo apt-get install -y nginx\n",
- " sudo bash -c \"echo 'Hello from my VM' > /var/www/html/index.html\"\n",
- " \"\"\"\n",
- " ssh.exec_command(cloud_init_script)\n",
" ssh.close()\n",
"except Exception as e:\n",
" print(f\"SSH failed: {e}\")\n",
@@ -933,14 +1024,6 @@
"print(f\"Access VM via ssh: ssh -i mykey.pem ubuntu@{floating_ip_address}\")"
]
},
- {
- "cell_type": "markdown",
- "id": "2e5e5e46-791d-406a-9f6f-be3d0c234b0d",
- "metadata": {},
- "source": [
- "> It will take some time for script to finish, so the provided link will not be accessible instantly"
- ]
- },
{
"cell_type": "markdown",
"id": "dd588470-3fc1-4b41-9bba-c929743fa9c9",
@@ -1020,7 +1103,7 @@
},
{
"cell_type": "code",
- "execution_count": 30,
+ "execution_count": 25,
"id": "301cbef1-ec92-439f-8f2d-fca92e2c33a9",
"metadata": {},
"outputs": [
@@ -1030,7 +1113,7 @@
"True"
]
},
- "execution_count": 30,
+ "execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
@@ -1042,17 +1125,17 @@
},
{
"cell_type": "code",
- "execution_count": 31,
+ "execution_count": 29,
"id": "dc283305-7e0e-4967-84e9-d1573b45136e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
- "False"
+ "True"
]
},
- "execution_count": 31,
+ "execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
@@ -1060,7 +1143,24 @@
"source": [
"# If you do not wish to use generated key-pair anymore\n",
"# you can simply delete it\n",
- "scoped_openstack_connection.delete_keypair(\"mykey\")"
+ "scoped_openstack_connection.delete_keypair(\"key\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "c642ccf6-83d8-4e8e-9d3d-0774b16706fc",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Detach router interface first\n",
+ "scoped_openstack_connection.network.remove_interface_from_router(\n",
+ " router,\n",
+ " subnet_id=subnet.id \n",
+ ")\n",
+ "scoped_openstack_connection.network.delete_router(router)\n",
+ "scoped_openstack_connection.network.delete_security_group(new_security_group)\n",
+ "scoped_openstack_connection.network.delete_network(network)"
]
}
],
@@ -1080,7 +1180,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.12.8"
+ "version": "3.12.10"
}
},
"nbformat": 4,
--
GitLab
From cd89baee41ac7f60260540b7afa54825db0ce2b4 Mon Sep 17 00:00:00 2001
From: Karen Pailozian <pailozian@cesnet.cz>
Date: Wed, 21 May 2025 10:54:09 +0200
Subject: [PATCH 3/3] style: fix pylint warnings and clean up formatting
---
openstack_eosc.ipynb | 141 ++++++++++++++++++++++++-------------------
1 file changed, 80 insertions(+), 61 deletions(-)
diff --git a/openstack_eosc.ipynb b/openstack_eosc.ipynb
index 155108a..3e7de15 100644
--- a/openstack_eosc.ipynb
+++ b/openstack_eosc.ipynb
@@ -1,27 +1,5 @@
{
"cells": [
- {
- "cell_type": "markdown",
- "id": "f1d44b71-9709-467e-92d4-c1faa31a93e7",
- "metadata": {
- "jp-MarkdownHeadingCollapsed": true
- },
- "source": [
- "# Deploying Your First Virtual Machine on PSNC OpenStack\n",
- "\n",
- "Welcome to this hands-on tutorial for launching and configuring your first Virtual Machine (VM) in the PSNC OpenStack cloud environment. This guide will walk you through each step of the deployment processโfrom authentication to full VM provisioning and access.\n",
- "\n",
- "๐ **Further reading:** [PSNC OpenStack Virtual Machines](https://docs.psnc.pl/display/EOSCUserGuides/Virtual+Machines)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "00e621e9-5493-45aa-8cea-dcbb14ab0df6",
- "metadata": {},
- "source": [
- "# Install the required libraries"
- ]
- },
{
"cell_type": "code",
"execution_count": 1,
@@ -162,29 +140,41 @@
}
],
"source": [
- "pip install python-openstackclient python-keystoneclient ipywidgets paramiko"
+ "!pip install python-openstackclient python-keystoneclient ipywidgets paramiko"
]
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 2,
"id": "c3718348-c7df-44d3-9811-66b7fa7ec7fb",
"metadata": {},
"outputs": [],
"source": [
+ "\"\"\"\n",
+ "Import the required libraries\n",
+ "\"\"\"\n",
+ "import time\n",
"import sys\n",
"import paramiko\n",
- "import yaml\n",
"from keystoneauth1.session import Session\n",
"from keystoneauth1.identity.v3.oidc import OidcAccessToken\n",
- "from keystoneauth1.identity.v3.application_credential import ApplicationCredential\n",
"from keystoneclient.v3.client import Client\n",
"from openstack.connection import Connection\n",
+ "from openstack.exceptions import SDKException\n",
"import ipywidgets as widgets\n",
- "import base64\n",
- "import time\n",
- "from IPython.display import display, clear_output, Markdown\n",
- "from openstack.exceptions import ResourceNotFound, SDKException"
+ "from IPython.display import display, clear_output, Markdown"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f1d44b71-9709-467e-92d4-c1faa31a93e7",
+ "metadata": {},
+ "source": [
+ "# Deploying Your First Virtual Machine on PSNC OpenStack\n",
+ "\n",
+ "Welcome to this hands-on tutorial for launching and configuring your first Virtual Machine (VM) in the PSNC OpenStack cloud environment. This guide will walk you through each step of the deployment processโfrom authentication to full VM provisioning and access.\n",
+ "\n",
+ "๐ **Further reading:** [PSNC OpenStack Virtual Machines](https://docs.psnc.pl/display/EOSCUserGuides/Virtual+Machines)\n"
]
},
{
@@ -211,7 +201,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 11,
"id": "5bc6fac0-c5fa-44a7-9d29-38ea5164e4bc",
"metadata": {},
"outputs": [],
@@ -219,9 +209,10 @@
"def load_access_token(token_file_path=\"/var/run/secrets/oidc/access_token\"):\n",
" \"\"\"Reads access token from specified file\"\"\"\n",
" try:\n",
- " return open(token_file_path, \"r\").read()\n",
+ " return open(token_file_path, \"r\", encoding='utf-8').read()\n",
" except IOError:\n",
" print(\"Reading from access token file failed.\", file=sys.stderr)\n",
+ " return None\n",
"\n",
"cloud_creds = OidcAccessToken(auth_url=\"https://api.cloud.psnc.pl:5000/v3/\",\n",
" identity_provider=\"aai.open-science-cloud.ec.europa.eu\",\n",
@@ -249,7 +240,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 4,
"id": "b871dc55-172a-43da-81d7-b7fa796a7c2c",
"metadata": {},
"outputs": [],
@@ -261,7 +252,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 5,
"id": "9a58d8c5-7dcd-4549-9b10-0456ccd66b30",
"metadata": {},
"outputs": [
@@ -280,7 +271,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "190f79eec3d64952a1941b37feeecd98",
+ "model_id": "70fe6759b6f843f5afe6aad18e66ea63",
"version_major": 2,
"version_minor": 0
},
@@ -294,7 +285,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "0935ef7d353949ec8c78bb3409af17f8",
+ "model_id": "f15d05ad5d514e10872107301d1a3af2",
"version_major": 2,
"version_minor": 0
},
@@ -308,7 +299,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "a0095b69890e4fca99fb7ba40b204a4e",
+ "model_id": "9bc77f482af849bba0e3ae82e4458c51",
"version_major": 2,
"version_minor": 0
},
@@ -321,6 +312,10 @@
}
],
"source": [
+ "# pylint: disable=invalid-name, global-statement, unused-argument, protected-access\n",
+ "\n",
+ "scoped_cloud_session = None\n",
+ "scoped_openstack_connection = None\n",
"clear_output(wait=True) # Clear previous output first\n",
"display(Markdown(\"## Scope to one of your projects you are entitled to access\"))\n",
"\n",
@@ -331,13 +326,14 @@
")\n",
"connect_button = widgets.Button(description=\"Connect to project\", button_style=\"success\")\n",
"output = widgets.Output()\n",
- "\n",
"def on_connect_clicked(b):\n",
+ " \"\"\"Handle click event to connect to the selected OpenStack project.\"\"\"\n",
" with output:\n",
" clear_output()\n",
" idx = project_dropdown.value\n",
" selected_project = my_projects[idx]\n",
- " print(f\"๐ Connecting to project: {selected_project.name} (ID: {selected_project.id}, Domain: {selected_project.domain_id})\")\n",
+ " print(f\"๐ Connecting to project: {selected_project.name} (ID: {selected_project.id}, \\\n",
+ " Domain: {selected_project.domain_id})\")\n",
" scoped_cloud_creds = OidcAccessToken(\n",
" auth_url=\"https://api.cloud.psnc.pl:5000/v3/\",\n",
" identity_provider=\"aai.open-science-cloud.ec.europa.eu\",\n",
@@ -358,7 +354,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 7,
"id": "7c50e961-b797-4e1c-a91b-e44487324c0c",
"metadata": {},
"outputs": [
@@ -366,12 +362,12 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Your current project id: db6b4eb2d6fe454191e8d39b088564cd\n"
+ "Your current project id: db6b4eb2d6fe454191e8d39b088564cd\n"
]
}
],
"source": [
- "print(\"Your current project id: \", scoped_openstack_connection.current_project_id) "
+ "print(\"Your current project id:\", scoped_openstack_connection.current_project_id)\n"
]
},
{
@@ -405,20 +401,20 @@
}
],
"source": [
- "key_name = \"key\"\n",
- "new_keypair = scoped_openstack_connection.create_keypair(key_name)\n",
+ "KEY_NAME = \"key\"\n",
+ "new_keypair = scoped_openstack_connection.create_keypair(KEY_NAME)\n",
"#Generating key-pair using existing public key\n",
"#scoped_openstack_connection.create_keypair(\"mykey2\", public_key=\"ssh-rsa ....\")\n",
"\n",
"#If you let OpenStack generate your key-pair you will need to save your\n",
"#private and public keys for later use\n",
- "with open(f\"{key_name}.pem\", \"w\") as priv_file:\n",
+ "with open(f\"{KEY_NAME}.pem\", \"w\", encoding=\"utf-8\") as priv_file:\n",
" priv_file.write(new_keypair.private_key)\n",
- " print(f\"Private key saved to {key_name}.pem\")\n",
+ " print(f\"Private key saved to {KEY_NAME}.pem\")\n",
"\n",
- "with open(f\"{key_name}.pub\", \"w\") as pub_file:\n",
+ "with open(f\"{KEY_NAME}.pub\", \"w\", encoding=\"utf-8\") as pub_file:\n",
" pub_file.write(new_keypair.public_key)\n",
- " print(f\"Public key saved to {key_name}.pub\")"
+ " print(f\"Public key saved to {KEY_NAME}.pub\")"
]
},
{
@@ -531,7 +527,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "1ee722a7e3e5472d8af3d9037a8eaaa5",
+ "model_id": "be2f61573a6f4dc7b38090a376e893d9",
"version_major": 2,
"version_minor": 0
},
@@ -557,7 +553,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "5effa4322c8d48bd83cf2538e407246c",
+ "model_id": "6046a6f70f0c4922ae92bafd8f79fc1e",
"version_major": 2,
"version_minor": 0
},
@@ -583,7 +579,7 @@
{
"data": {
"application/vnd.jupyter.widget-view+json": {
- "model_id": "8597753cd65e4382b60bb254807df518",
+ "model_id": "6155860fd9da407f81c665af2f73a859",
"version_major": 2,
"version_minor": 0
},
@@ -597,24 +593,27 @@
],
"source": [
"def format_size_gb(size_bytes):\n",
+ " \"\"\"Convert a size in bytes to a human-readable string in GB.\"\"\"\n",
" return f\"{size_bytes / (1024 ** 3):.2f} GB\"\n",
"\n",
"def format_image_options(images):\n",
+ " \"\"\"Format a list of image objects for display in a dropdown.\"\"\"\n",
" return [\n",
" f\"{image.name} (ID: {image.id}, Size: {format_size_gb(image.size)})\"\n",
" for image in images\n",
" ]\n",
"\n",
"def format_generic_options(resources, label_attr='name', id_attr='id'):\n",
+ " \"\"\"Format a list of OpenStack resources into label (ID) format.\"\"\"\n",
" return [f\"{getattr(res, label_attr)} (ID: {getattr(res, id_attr)})\" for res in resources]\n",
- " \n",
- "images = list(scoped_openstack_connection.compute.images())\n",
+ "\n",
+ "available_images = list(scoped_openstack_connection.compute.images())\n",
"flavors = list(scoped_openstack_connection.compute.flavors())\n",
"networks = list(scoped_openstack_connection.network.networks())\n",
"\n",
"display(Markdown(\"### Available Images\"))\n",
"image_dropdown = widgets.Dropdown(\n",
- " options=format_image_options(images),\n",
+ " options=format_image_options(available_images),\n",
" description='Image:',\n",
" layout=widgets.Layout(width='85%')\n",
")\n",
@@ -645,13 +644,17 @@
"outputs": [],
"source": [
"def get_selected_name(dropdown_value):\n",
+ " \"\"\"Extract the name part from a dropdown value string formatted as 'Name (ID: id)'.\"\"\"\n",
" return dropdown_value.split(\" (ID: \")[0]\n",
+ "\n",
"def get_selected_id(dropdown_value):\n",
+ " \"\"\"Extract the ID part from a dropdown value string formatted as 'Name (ID: id)'.\"\"\"\n",
" return dropdown_value.split(\" (ID: \")[1].split(\")\")[0]\n",
+ "\n",
"selected_image = get_selected_name(image_dropdown.value)\n",
"selected_flavor = get_selected_name(flavor_dropdown.value)\n",
"selected_network = get_selected_name(network_dropdown.value)\n",
- "selected_network_id = get_selected_id(network_dropdown.value)"
+ "selected_network_id = get_selected_id(network_dropdown.value)\n"
]
},
{
@@ -863,19 +866,19 @@
"outputs": [],
"source": [
"# VM parameters\n",
- "cloud_init_script = \"\"\"#!/bin/bash\n",
+ "CLOUD_INIT_SCRIPT = \"\"\"#!/bin/bash\n",
"apt-get update\n",
"apt-get upgrade -y\n",
"apt-get install -y nginx\n",
"echo 'Hello from my VM' > /var/www/html/index.html\n",
"\"\"\"\n",
- "vm_name = \"new_vm\"\n",
+ "VM_NAME = \"new_vm\"\n",
"server = scoped_openstack_connection.create_server(\n",
- " name=vm_name,\n",
+ " name=VM_NAME,\n",
" image=selected_image,\n",
" flavor=selected_flavor,\n",
" network=network, # Use new private network\n",
- " userdata=cloud_init_script,\n",
+ " userdata=CLOUD_INIT_SCRIPT,\n",
" key_name=\"key\",\n",
" volumes=[new_volume],\n",
" security_groups=[new_security_group.name]\n",
@@ -889,7 +892,7 @@
"id": "915cde8d-f668-44a1-913d-24436a93e4d4",
"metadata": {},
"source": [
- "> It will take some time for `cloud_init_script` to finish."
+ "> It will take some time for `CLOUD_INIT_SCRIPT` to finish."
]
},
{
@@ -1156,12 +1159,28 @@
"# Detach router interface first\n",
"scoped_openstack_connection.network.remove_interface_from_router(\n",
" router,\n",
- " subnet_id=subnet.id \n",
+ " subnet_id=subnet.id\n",
")\n",
"scoped_openstack_connection.network.delete_router(router)\n",
"scoped_openstack_connection.network.delete_security_group(new_security_group)\n",
"scoped_openstack_connection.network.delete_network(network)"
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "189c00ae-378d-4647-8226-bb5e1e5e0c03",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "31a05bda-47a1-4d00-abe5-3514cff6a7cb",
+ "metadata": {},
+ "outputs": [],
+ "source": []
}
],
"metadata": {
--
GitLab