<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Documentation – Federated Cloud Compute</title><link>/users/compute/cloud-compute/</link><description>Recent content in Federated Cloud Compute on Documentation</description><generator>Hugo -- gohugo.io</generator><atom:link href="/users/compute/cloud-compute/index.xml" rel="self" type="application/rss+xml"/><item><title>Users: Authentication and Authorisation</title><link>/users/compute/cloud-compute/auth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/users/compute/cloud-compute/auth/</guid><description>
&lt;h2 id="oidc-auth-using-check-in">Authentication&lt;/h2>
&lt;p>&lt;a href="https://openid.net/connect/">OpenID Connect&lt;/a> (OIDC) is the main authentication
protocol used on the EGI Cloud. It replaces the legacy VOMS-based authentication
for all OpenStack providers.&lt;/p>
&lt;p>Authentication to web based services (like the OpenStack dashboards) will
redirect you to the EGI Check-in authentication page. Just select your
institution or social login and follow the regular authentication process.&lt;/p>
&lt;p>Access to APIs or via command-line interfaces (CLI) requires the use of OAuth2.0
tokens and interaction with the OpenStack Keystone
&lt;a href="https://developer.openstack.org/api-ref/identity/v3-ext/index.html#os-federation-api">OS-FEDERATION API&lt;/a>.
The process for authentication is as follows:&lt;/p>
&lt;ol>
&lt;li>Obtain a valid OAuth2.0 access token from Check-in. Access tokens are
short-lived credentials that can be obtained by recognised Check-in clients
once a user has been authenticated.&lt;/li>
&lt;li>Interchange the Check-in access token for a valid unscoped Keystone token.&lt;/li>
&lt;li>Discover available projects from Keystone using the unscoped token.&lt;/li>
&lt;li>Use the unscoped Keystone token to get a scoped token for a valid project.
Scoped tokens will allow the user to perform operations on the provider.&lt;/li>
&lt;/ol>
&lt;h2 id="authorisation">Authorisation&lt;/h2>
&lt;p>Cloud Compute service is accessed through &lt;strong>Virtual Organisations (VOs)&lt;/strong>. Users
with specific roles (by default, the &lt;code>vm_operator&lt;/code> role) will have access to the
providers supporting that VO: they will be able to manage VMs, block storage and
object storage available to the VO. Resources (VMs and storage) are &lt;strong>shared&lt;/strong>
across all members of the VO, please do not interfere with the VMs of other
users if you are not entitled to do so (specially do not delete them).&lt;/p>
&lt;p>Some users roles may have additional permissions in VOs, check your VO Manager
for the specific documentation.&lt;/p>
&lt;h3 id="pilot-vo">Pilot VO&lt;/h3>
&lt;p>The
&lt;a href="https://operations-portal.egi.eu/vo/view/voname/vo.access.egi.eu">vo.access.egi.eu Virtual Organisation&lt;/a>
serves as a test ground for users to try the Cloud Compute service and to
prototype and validate applications. It can be used for up to 6 month by any new
user.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
&lt;ul>
&lt;li>After the 6-month long membership in the vo.access.egi.eu VO, you will need to
move to a production VO, or establish a new VO.&lt;/li>
&lt;li>The resources are not guaranteed and may be removed without notice by
providers. &lt;strong>Back-up frequently to avoid losing your work!&lt;/strong>&lt;/li>
&lt;/ul>
&lt;/div>
&lt;p>For joining this VO, please click on the
&lt;a href="https://aai.egi.eu/auth/realms/id/account/#/enroll?groupPath=/vo.access.egi.eu">enrolment URL&lt;/a>
using your &lt;a href="../../../aai/check-in/">EGI account&lt;/a>.&lt;/p>
&lt;h3 id="other-vos">Other VOs&lt;/h3>
&lt;p>Pre-existing VOs of EGI can be also used on IaaS cloud providers. Consult with
your VO manager or browse the existing VOs at the
&lt;a href="https://operations-portal.egi.eu/vo/a/list">EGI Operations Portal&lt;/a>.&lt;/p>
&lt;h2 id="check-in-and-access-tokens">Check-in and access tokens&lt;/h2>
&lt;p>Access tokens can be obtained via several mechanisms, usually involving the use
of a web server and a browser. Command-line clients/APIs without access to a
browser or interactive prompt for user authentication can use refresh tokens. A
refresh token is a special token that is used to generate additional access
tokens. This allows you to have short-lived access tokens without having to
collect credentials every single time one expires. You can request this token
alongside the access and/or ID tokens as part of a user&amp;rsquo;s initial authentication
flow.&lt;/p>
&lt;p>If you need to obtain these kinds of tokens for using it in command-line tools
or APIs, you can easily do so with the EGI Check-in Token Portal. You can access
the &lt;a href="https://aai.egi.eu/token">EGI Check-in Token Portal&lt;/a> and click on
'Authorise' to log in with your Check-in credentials to obtain:&lt;/p>
&lt;ul>
&lt;li>a client ID (&lt;code>token-portal&lt;/code>)&lt;/li>
&lt;li>a refresh token&lt;/li>
&lt;/ul>
&lt;div class="alert alert-danger" role="alert">
&lt;h4 class="alert-heading">Refresh tokens&lt;/h4>
&lt;code>Refresh tokens&lt;/code> MUST be treated with care! This is a secret that can be used to
impersonate you in the infrastructure. The life time of &lt;code>refresh tokens&lt;/code> is up
to one year! It is recommended not to store them in plain text.
&lt;/div>
&lt;p>There are more secure alternatives for handling &lt;code>refresh tokens&lt;/code>:&lt;/p>
&lt;ol>
&lt;li>From your personal computer: use
&lt;a href="https://indigo-dc.gitbook.io/oidc-agent/user/oidc-gen/provider/egi">oidc-agent&lt;/a>
It is a tool that manages your tokens locally in a secure way
&lt;code>refresh tokens&lt;/code> are even encrypted in RAM).&lt;/li>
&lt;li>&lt;a href="https://fedcloudclient.fedcloud.eu/">fedcloud&lt;/a> client executed inside
&lt;a href="../../../dev-env/notebooks/integration/#fedcloud-client">EGI Notebooks&lt;/a>.&lt;/li>
&lt;li>&lt;a href="https://mytoken.data.kit.edu">mytoken&lt;/a> Securely stores refresh tokens on the
mytoken-server. Users obtain &lt;code>mytokens&lt;/code>, which can be used to obtain
&lt;code>access tokens&lt;/code>. &lt;code>mytokens&lt;/code> are more secure, because they can carry
&lt;code>capabilities&lt;/code> and &lt;code>restrictions&lt;/code> to fine tune their power for specific use
cases. Details here: &lt;a href="https://mytoken-docs.data.kit.edu">https://mytoken-docs.data.kit.edu&lt;/a>&lt;/li>
&lt;/ol>
&lt;h3 id="discovering-projects-in-keystone">Discovering projects in Keystone&lt;/h3>
&lt;p>The &lt;em>access token&lt;/em> will provide you access to a cloud provider, but you may have
access to several different projects within that provider (a project can be
considered equivalent to a VO allocation). In order to discover which projects
are available you can do that using the Keystone API.&lt;/p>
&lt;p>You can use the &lt;a href="https://fedcloudclient.fedcloud.eu/">fedcloud&lt;/a> client to
simplify the discovery of projects.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Get a list of sites&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ fedcloud site list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Get list of projects that you are allowed to access&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># You can either specify the name of the account in your oidc-agent configuration&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># or directly a valid access token&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ fedcloud endpoint projects --site&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;name of the site&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>--oidc-agent-account &amp;lt;account name&amp;gt;&lt;span style="color:#000;font-weight:bold">|&lt;/span>--oidc-access-token &amp;lt;access token&amp;gt;&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># You can also use environment variables for the configuration&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">OIDC_ACCESS_TOKEN&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;your access token&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ fedcloud endpoint projects
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># or with oidc-agent&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">OIDC_AGENT_ACCOUNT&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;account name&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ fedcloud endpoint projects
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="using-the-openstack-api">Using the OpenStack API&lt;/h3>
&lt;p>Once you know which project to use, you can use your regular openstack cli
commands for performing actual operations in the provider:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack image list --site &amp;lt;NAME_OF_SITE&amp;gt; --vo &amp;lt;NAME_OF_VO&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For third-party tools that can use token based authentication in OpenStack, use
the following command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">OS_TOKEN&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>fedcloud openstack --site &amp;lt;NAME_OF_SITE&amp;gt; --vo &amp;lt;NAME_OF_VO&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> token issue -c id -f value&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="using-ssh-oidc">Using ssh-oidc&lt;/h3>
&lt;p>&lt;a href="https://github.com/EOSC-synergy/ssh-oidc">ssh-oidc&lt;/a> is a set of tools that
allows ssh with OIDC.&lt;/p></description></item><item><title>Users: Virtual Machine Images</title><link>/users/compute/cloud-compute/images/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/users/compute/cloud-compute/images/</guid><description>
&lt;p>Users of the EGI Cloud create Virtual Machines (VMs) on the providers. Those VMs
are started from images: templates for the root volume of the running instances,
i.e. operating system and applications available initially on a VM. The Artefact
Registry collects the Virtual Machine Images available on the providers.&lt;/p>
&lt;h2 id="artefact-registry">Artefact Registry&lt;/h2>
&lt;p>&lt;img src="registry.png" alt="Artefact Registry">&lt;/p>
&lt;p>The &lt;a href="https://registry.egi.eu">Artefact Registry&lt;/a> is a OCI-compliant catalogue of
artefacts (including container images, VM images and helm charts) based on
&lt;a href="https://goharbor.io/">Harbor&lt;/a> where users can upload their images.&lt;/p>
&lt;p>Images in the Artefact Registry are organised into projects where images are
pushed to. Access to projects is granted based on the membership and role of
users within a VO. For a given project, only users with the appropriate roles
can perform certain operations.&lt;/p>
&lt;h3 id="egi-images">EGI images&lt;/h3>
&lt;p>EGI produces a set of basic images that are automatically synced to all the
providers and available for all the supported VOs.&lt;/p>
&lt;p>These images are built automatically using &lt;a href="https://packer.io">packer&lt;/a> and
&lt;a href="https://docs.ansible.com/">Ansible&lt;/a> and uploaded to a dedicated project named
&lt;code>egi_vm_images&lt;/code> at the Artefact Registry. Build scripts, packer templates, and
ansible playbooks are available in the
&lt;a href="https://github.com/EGI-Federation/fedcloud-vmi-templates">fedcloud-vmi-templates GitHub repository&lt;/a>.
The images are built regularly to avoid any potential vulnerabilities.&lt;/p>
&lt;p>EGI images have minimal OS installation with
&lt;a href="https://cloudinit.readthedocs.io/en/latest/">cloud-init&lt;/a> for contextualization
and follow the &lt;code>registry.egi.eu egi_vm_images/&amp;lt;image name&amp;gt;:&amp;lt;version&amp;gt;&lt;/code> naming
convention.&lt;/p>
&lt;p>&lt;img src="glance-images.png" alt="egi_vm_images at OpenStack">&lt;/p>
&lt;h3 id="custom-vo-images">Custom VO images&lt;/h3>
&lt;h4 id="vo-project-in-artefact-registry">VO project in Artefact Registry&lt;/h4>
&lt;p>The Artefact Registry can store VM and container images. Besides the
&lt;code>egi_vm_images&lt;/code> projects, VOs can request their project in the Artefact Registry
for storing custom images that include software needed to support the VOs
activities. For doing so, open &lt;a href="https://helpdesk.ggus.eu">Helpdesk&lt;/a> ticket as
follows:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Group: Artefact Registry (select Second Level/Services/EGI Services and
Service Components/Artefact Registry)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Ticket body:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-plaintext" data-lang="plaintext">&lt;span style="display:flex;">&lt;span>Dear Artefact Registry,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>I&amp;#39;d like to request a new project for VO `&amp;lt;name of the VO&amp;gt;`.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The entitlement to authorize read-only (list, pull) access is `&amp;lt;entitlement to use&amp;gt;`.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The entitlement to authorize write (list, pull, push) access is `&amp;lt;entitlement to use&amp;gt;`.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Thanks!
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;p>Once the project is created, you will be able to login and manage artefacts.&lt;/p>
&lt;h4 id="uploading-to-the-registry">Uploading to the registry&lt;/h4>
&lt;p>The Artefact Registry can store arbitrary binary artifacts and those matching
the expected metadata will be synced to the sites. For uploading the images, any
OCI registry compliant tool can be used. We rely on &lt;a href="https://oras.land">&lt;code>oras&lt;/code>&lt;/a>
for uploading the EGI images.&lt;/p>
&lt;p>Images must have a &lt;code>eu.egi.cloud.tag&lt;/code> annotation in their manifest for them to
be synced and the following additional annotations are expected to be available:&lt;/p>
&lt;ul>
&lt;li>&lt;code>org.openstack.glance.disk_format&lt;/code>: with the disk format of the image (e.g.
&lt;code>raw&lt;/code> or &lt;code>qcow2&lt;/code>)&lt;/li>
&lt;li>&lt;code>org.openstack.glance.container_format&lt;/code>: with the glance container format
(&lt;code>bare&lt;/code> should be used in most cases), see
&lt;a href="https://docs.openstack.org/glance/latest/user/formats.html">glance documentation&lt;/a>.&lt;/li>
&lt;li>&lt;code>eu.egi.cloud.image.title&lt;/code>: Human readable title.&lt;/li>
&lt;li>&lt;code>eu.egi.cloud.description&lt;/code>: A description of the image.&lt;/li>
&lt;li>&lt;code>org.openstack.glance.architecture&lt;/code>: Image architecture.&lt;/li>
&lt;li>&lt;code>org.openstack.glance.os_distro&lt;/code>: OS distro name (e.g. &lt;code>ubuntu&lt;/code>).&lt;/li>
&lt;li>&lt;code>org.openstack.glance.os_version&lt;/code>: OS version (e.g. &lt;code>24.04&lt;/code> for Ubuntu 24.04).&lt;/li>
&lt;li>&lt;code>org.openstack.glance.os_type&lt;/code>: OS type (e.g. &lt;code>linux&lt;/code>).&lt;/li>
&lt;/ul>
&lt;p>For the upload, you need to:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Login to the registry, you can find credentials in your registry profile:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>oras login -u &amp;lt;user&amp;gt; registry.egi.eu
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Prepare an
&lt;a href="https://oras.land/docs/how_to_guides/manifest_annotations/#using-a-json-file">annotation file&lt;/a>
with the expected metadata. You can find below an example for an AlmaLinux
image file named &lt;code>alma-9.qcow2&lt;/code>. It also includes a &lt;code>$manifest&lt;/code> entry with
annotation of the manifest itself.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;$manifest&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;org.opencontainers.image.revision&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;7b98c834862f2e7e342fad7f9e175ea8c74aa4f3&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;org.opencontainers.image.source&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;https://github.com/EGI-Federation/fedcloud-vmi-templates&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;alma-9.qcow2&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;eu.egi.cloud.image.title&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;EGI Alma 9 image&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;org.openstack.glance.architecture&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;x86_64&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;org.openstack.glance.os_distro&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;alma&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;org.openstack.glance.os_type&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;linux&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;org.openstack.glance.os_version&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;9&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;org.openstack.glance.disk_format&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;qcow2&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;eu.egi.cloud.tag&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;2025-06-10-7b98c834&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;org.openstack.glance.container_format&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;bare&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>Upload the image and the annotation file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>oras push --annotation-file &amp;lt;annotation json&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> registry.egi.eu/&amp;lt;project_name&amp;gt;/&amp;lt;repository&amp;gt;:&amp;lt;tag&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> &amp;lt;image file&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h4 id="building-your-own-image">Building your own image&lt;/h4>
&lt;p>Packaging your application in a custom VM image is a suggested solution in one
of the following cases:&lt;/p>
&lt;ul>
&lt;li>your particular OS flavor is not available;&lt;/li>
&lt;li>installation of your application is very complex and time-consuming for being
performed during contextualization; or&lt;/li>
&lt;li>you want to reduce the number of 'moving-parts' of your software stack and
follow an &lt;em>immutable infrastructure&lt;/em> approach for deploying your application.&lt;/li>
&lt;/ul>
&lt;p>Custom VM images can be crafted in different ways. The two main possibilities
are:&lt;/p>
&lt;ul>
&lt;li>start from scratch, creating a virtual machine, installing an OS and the
software on top of it, then taking the virtual machine OS disk as custom
image; or&lt;/li>
&lt;li>dump an existing disk from a running VM or physical server and modify it, if
needed, to run on a virtualisation platform.&lt;/li>
&lt;/ul>
&lt;p>In this guide we will focus on the first option, because it tends to produce
cleaner images and reduces the risks of hardware conflicts. Snapshotting may be
also restricted by the cloud providers or by security policies.&lt;/p>
&lt;p>Advantages:&lt;/p>
&lt;ul>
&lt;li>Possibility to build the virtual disk directly from a legacy machine, dumping
the contents of the disk.&lt;/li>
&lt;li>Possibility to speed-up the deployment for applications with complex and big
installation packages. This because you do not need to install the application
at startup, but the application is already included in the machine.&lt;/li>
&lt;/ul>
&lt;p>Disadvantages:&lt;/p>
&lt;ul>
&lt;li>Building a virtual disk directly from a legacy machine poses a set of
compatibility issues with hardware drivers, which usually differs from a
virtual and physical environment and even between different virtual
environments.&lt;/li>
&lt;li>You need to keep your machine updated. Outdated VM disk images may take a long
time to startup due to the need to download and install the latest OS updates.&lt;/li>
&lt;li>If you are using special drivers or you are not packaging correctly the disk,
your custom VM image may not run (or run slowly) on different cloud providers
based on different virtualisation technologies.&lt;/li>
&lt;li>VM images on public clouds are sometimes public, thus be aware of installing
proprietary software on custom images, since other users may be able to run
the image or download it.&lt;/li>
&lt;li>In general, the effort to implement this solution is higher than the basic
contextualization.&lt;/li>
&lt;/ul>
&lt;h5 id="image-size-and-layout">Image size and layout&lt;/h5>
&lt;p>The larger the VM image, the longer it will take to be distributed to the
providers and the longer it will take to be started on the infrastructure. As a
general rule, always try to make images as smaller as possible following these
guidelines:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>DO NOT&lt;/strong> include (big) data in your image. There are other mechanisms for
accessing data from your VM (&lt;a href="../block-storage/">block&lt;/a>/
&lt;a href="../../../data/storage/object-storage/">object&lt;/a> storage,
&lt;a href="../../software-distribution">CVMFS&lt;/a>)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>DO NOT&lt;/strong> include (big) empty space or swap in your image. Extra space for
your computation or swap can be added with block storage once the VM is booted
or using VM flavors that have extra disk allocated for your VM.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>DO NOT&lt;/strong> install un-needed software. Tools like GUI are of no-use in most
cases since you will have no access to the graphical console of the VM.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>DO&lt;/strong> adjust the size of the images as much as possible. As stated above,
empty space can be allocated on runtime easily.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>DO&lt;/strong> use compressed image formats, like qcow2 or vmdk (used in OVA) to
minimize the size of the image. Preferred format for images in EGI is OVA as
it's standardised.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>DO&lt;/strong> fill with &lt;code>0&lt;/code> the empty disk space of your image so when compressed it
can be significantly reduced, e.g. using:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>dd &lt;span style="color:#204a87;font-weight:bold">if&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/dev/zero &lt;span style="color:#000">of&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/bigemptyfile &lt;span style="color:#000">bs&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>4096k
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>rm -rf /bigemptyfile
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>DO&lt;/strong> use a single partition (no /boot, no swap) for the disk layout and
avoid LVM. This will allow the cloud provider to easily resize your partition
when instantiated and to modify files in it if needed.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h5 id="contextualization-and-credentials">Contextualization and credentials&lt;/h5>
&lt;div class="alert alert-danger" role="alert">
&lt;h4 class="alert-heading">Danger&lt;/h4>
&lt;strong>Do NOT include any credentials on your images&lt;/strong>.
&lt;/div>
&lt;p>You should never include any kind of credentials on your images, instead you
should use contextualization.
&lt;a href="https://cloudinit.readthedocs.io/en/latest/">cloud-init&lt;/a> is a tool that will
simplify the contextualization process for you. This is widely available as
packages in major OS distributions and is supported by all the providers of the
EGI Cloud and most of the commercial providers.&lt;/p>
&lt;p>&lt;a href="https://cloudinit.readthedocs.io/en/latest/">cloud-init&lt;/a> documentation contains
detailed examples on how to create users, run scripts, install packages and
several other actions supported by the tool.&lt;/p>
&lt;p>For complex setups, especially when applications involve multiple VMs it may be
useful to use cloud-init to bootstrap some
&lt;a href="https://en.wikipedia.org/wiki/Comparison_of_open-source_configuration_management_software">Configuration Management Software&lt;/a>
that will manage the configuration of the VMs during runtime.&lt;/p>
&lt;h5 id="security">Security&lt;/h5>
&lt;ul>
&lt;li>&lt;strong>Always remove all default passwords and accounts from your VM.&lt;/strong>&lt;/li>
&lt;li>Disable all services unless necessary for the intended tasks.&lt;/li>
&lt;li>Make sure the firewall configuration (iptables for Linux, also on IPv6) is
minimally open.&lt;/li>
&lt;li>Put no shared credentials (passwords) in any image.&lt;/li>
&lt;/ul>
&lt;p>You should also follow best practice guides for each service that&amp;rsquo;s exposed to
the outside world. See also
&lt;a href="https://aws.amazon.com/whitepapers/aws-security-best-practices/">AWS security Best Practices&lt;/a>&lt;/p>
&lt;h5 id="tools">Tools&lt;/h5>
&lt;p>Whenever possible, automate the process of creating your images. This will allow
you to:&lt;/p>
&lt;ul>
&lt;li>Get reproducible results&lt;/li>
&lt;li>Avoid tedious manual installation steps&lt;/li>
&lt;li>Quickly produce updated versions of your images&lt;/li>
&lt;/ul>
&lt;p>Check out the
&lt;a href="https://github.com/EGI-Federation/fedcloud-vmi-templates">fedcloud-vmi-templates GitHub repository&lt;/a>
for examples of images that can be built in a completely automated workflow
using &lt;code>packer&lt;/code> and GitHub Actions.&lt;/p></description></item><item><title>Users: OpenStack in EGI Cloud</title><link>/users/compute/cloud-compute/openstack/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/users/compute/cloud-compute/openstack/</guid><description>
&lt;p>&lt;a href="https://openstack.org">OpenStack&lt;/a> providers of the EGI Cloud Compute service
offer native OpenStack features via native APIs integrated with EGI Check-in
accounts.&lt;/p>
&lt;p>The extensive &lt;a href="https://docs.openstack.org/user/">OpenStack user documentation&lt;/a>
includes details on every OpenStack project most providers offer access to:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://docs.openstack.org/keystone/latest/">Keystone&lt;/a>, for identity&lt;/li>
&lt;li>&lt;a href="https://docs.openstack.org/nova/latest/">Nova&lt;/a>, for VM management&lt;/li>
&lt;li>&lt;a href="https://docs.openstack.org/glance/latest/">Glance&lt;/a>, for VM image management&lt;/li>
&lt;li>&lt;a href="https://docs.openstack.org/cinder/latest/">Cinder&lt;/a>, for block storage&lt;/li>
&lt;li>&lt;a href="https://docs.openstack.org/swift/latest/">Swift&lt;/a>, for object storage&lt;/li>
&lt;li>&lt;a href="https://docs.openstack.org/neutron/latest/">Neutron&lt;/a>, for network management&lt;/li>
&lt;li>&lt;a href="https://docs.openstack.org/horizon/latest/">Horizon&lt;/a>, as a web dashboard&lt;/li>
&lt;/ul>
&lt;p>The Horizon Web-dashboard of the OpenStack providers can be accessed using your
EGI Check-in credentials directly. See the
&lt;a href="../../../getting-started/openstack/">Getting Started guide&lt;/a> for more
information. The rest of this guide will focus on CLI/API access.&lt;/p>
&lt;h2 id="installation">Installation&lt;/h2>
&lt;p>The OpenStack client is a command-line client for OpenStack that brings the
command set for Compute, Identity, Image, Object Storage and Block Storage APIs
together in a single shell with a uniform command structure.&lt;/p>
&lt;ul class="nav nav-tabs" id="tabs-0" role="tablist">
&lt;li class="nav-item">
&lt;a class="nav-link active"
id="tabs-0-0-tab" data-toggle="tab" href="#tabs-0-0" role="tab"
aria-controls="tabs-0-0" aria-selected="true">
Linux / Mac
&lt;/a>
&lt;/li>
&lt;li class="nav-item">
&lt;a class="nav-link"
id="tabs-0-1-tab" data-toggle="tab" href="#tabs-0-1" role="tab"
aria-controls="tabs-0-1" aria-selected="false">
Windows
&lt;/a>
&lt;/li>
&lt;/ul>
&lt;div class="tabx-content" id="tabs-0-content">
&lt;div class="tab-pane show active"
id="tabs-0-0" role="tabpanel" aria-labelled-by="tabs-0-0-tab">
&lt;p>Installation of the OpenStack client can be done using:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>pip install openstackclient
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane "
id="tabs-0-1" role="tabpanel" aria-labelled-by="tabs-0-1-tab">
&lt;p>As there are non-pure Python packages needed for installation, the
&lt;a href="https://visualstudio.microsoft.com/visual-cpp-build-tools/">Microsoft C++ Build Tools&lt;/a>
is a prerequisite, please make sure it&amp;rsquo;s installed with the following options
selected:&lt;/p>
&lt;ul>
&lt;li>C++ CMake tools for Windows&lt;/li>
&lt;li>C++ ATL for latest v142 build tools (x86 &amp;amp; x64)&lt;/li>
&lt;li>Testing tools core features - Build Tools&lt;/li>
&lt;li>Windows 10 SDK (&lt;code>&amp;lt;latest&lt;/code>&amp;gt;)&lt;/li>
&lt;/ul>
&lt;p>In case you prefer to use non-Microsoft alternatives for building non-pure
packages, please see &lt;a href="https://wiki.python.org/moin/WindowsCompilers">here&lt;/a>.&lt;/p>
&lt;p>Installation of the OpenStack client can be done using:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>pip install openstackclient
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>Add IGTF CA to python's CA store:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>cat /etc/grid-security/certificates/*.pem &amp;gt;&amp;gt; &lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>python -m requests.certs&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="authentication">Authentication&lt;/h2>
&lt;p>Check the documentation at the
&lt;a href="../auth">authentication and authorisation section&lt;/a> on how to get the right
credentials for accessing the providers.&lt;/p>
&lt;h3 id="openstack-token-for-other-clients">OpenStack token for other clients&lt;/h3>
&lt;p>Most OpenStack clients allow authentication with tokens, so you can easily use
them with EGI Cloud providers just doing a first step for obtaining the token.
With the OpenStack client you can use the following command to set the
&lt;code>OS_TOKEN&lt;/code> variable with the needed token:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#000">OS_TOKEN&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>openstack --os-auth-type v3oidcaccesstoken &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --os-protocol openid --os-identity-provider egi.eu &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --os-auth-url &amp;lt;keystone url&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --os-access-token &amp;lt;your access token&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --os-project-id &amp;lt;your project id&amp;gt; token issue -c id -f value&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can easily obtain an OpenStack token with the
&lt;a href="../../../getting-started/cli">FedCloud client&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>fedcloud openstack --site &amp;lt;NAME_OF_THE_SITE&amp;gt; --vo &amp;lt;NAME_OF_VO&amp;gt; token issue -c id -f value
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="useful-commands-with-openstack-cli">Useful commands with OpenStack CLI&lt;/h2>
&lt;p>Usage of the OpenStack client is described in detail
&lt;a href="https://docs.openstack.org/python-openstackclient/latest">here&lt;/a>.&lt;/p>
&lt;p>Please refer to the
&lt;a href="https://docs.openstack.org/nova/latest/user/">nova documentation&lt;/a> for a
complete guide on the VM management features of OpenStack. We list in the
sections below some useful commands for the EGI Cloud.&lt;/p>
&lt;h3 id="registering-an-existing-ssh-key">Registering an existing ssh key&lt;/h3>
&lt;p>It&amp;rsquo;s possible to register an ssh key that can later be used as the default ssh
key for the default user of the VM (via the &lt;code>--key-name&lt;/code> argument to
&lt;code>openstack server create&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="creating-a-vm">Creating a VM&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>openstack flavor list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">FLAVOR&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;FLAVOR_NAME&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>openstack image list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">IMAGE_ID&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;IMAGE_ID&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>openstack network list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Pick FedCloud network&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">NETWORK_ID&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&amp;lt;NETWORK_ID&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>openstack security group list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>openstack server create --flavor &lt;span style="color:#000">$FLAVOR&lt;/span> --image &lt;span style="color:#000">$IMAGE_ID&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --nic net-id&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">$NETWORK_ID&lt;/span> --security-group default &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --key-name mykey oneprovider
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Creating a floating IP&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>openstack floating ip create &amp;lt;NETWORK_NAME&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Assigning floating IP to server&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>openstack server add floating ip &amp;lt;SERVER_ID&amp;gt; &amp;lt;IP&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Removing floating IP from server&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>openstack server show &amp;lt;SERVER_ID&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Deleting server&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>openstack server remove floating ip &amp;lt;SERVER_ID&amp;gt; &amp;lt;IP&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>openstack server delete &amp;lt;SERVER_ID&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Deleting floating IP&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>openstack floating ip delete &amp;lt;IP&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;a href="https://docs.openstack.org/mitaka/install-guide-obs/launch-instance-provider.html">OpenStack: launch an instance on the provider network&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.openstack.org/ocata/user-guide/cli-manage-ip-addresses.html">OpenStack: Managing IP addresses&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="using-cloud-init">Using cloud-init&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>openstack server create --flavor m3.medium &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --image d0a89aa8-9644-408d-a023-4dcc1148ca01 &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --user-data userdata.txt --key-name My_Key server01.example.com
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;a href="https://docs.openstack.org/nova/latest/user/user-data.html">OpenStack: providing user data (cloud-init)&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://cloudinit.readthedocs.io/en/latest/index.html">&lt;code>cloudinit&lt;/code> documentation&lt;/a>&lt;/li>
&lt;/ul>
&lt;h4 id="shell-script-data-as-user-data">Shell script data as user data&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#!/bin/sh
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>adduser --disabled-password --gecos &lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&lt;/span> clouduser
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="cloud-config-data-as-user-data">cloud-config data as user data&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#cloud-config&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">hostname&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">mynode&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">fqdn&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">mynode.example.com&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">manage_etc_hosts&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;a href="https://cloudinit.readthedocs.io/en/latest/topics/examples.html#yaml-examples">Official cloud-config examples&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.zetta.io/en/help/articles-tutorials/customizing-instance-deployment-cloud-init/">Cloud-init example&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="creating-a-snapshot-image-from-running-vm">Creating a snapshot image from running VM&lt;/h3>
&lt;p>You can create a new image from a snapshot of an existing VM that will allow you
to easily recover a previous version of your VM or to use it as a template to
clone a given VM.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>openstack server image create &amp;lt;your VM&amp;gt; --name &amp;lt;name of the snapshot&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once the snapshot is ready &lt;code>openstack image show &amp;lt;name of the snapshot&amp;gt;&lt;/code> will
give your the details you can use it as any other image at the provider:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>openstack server create --flavor &amp;lt;flavor&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --image &amp;lt;name of the snapshot&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> &amp;lt;name of the new VM&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can override files in the snapshot if needed, e.g. changing the SSH keys:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>openstack server create --flavor &amp;lt;flavor&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --image &amp;lt;name of the snapshot&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --file /home/ubuntu/.ssh/authorized_keys&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>my_new_keys &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> &amp;lt;name of the new VM&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="libcloud">libcloud&lt;/h2>
&lt;p>&lt;a href="https://libcloud.apache.org/index.html">Apache libcloud&lt;/a> supports OpenStack and
EGI authentication mechanisms by setting the &lt;code>ex_force_auth_version&lt;/code> to
&lt;code>3.x_oidc_access_token&lt;/code>. Check the
&lt;a href="https://libcloud.readthedocs.io/en/latest/compute/drivers/openstack.html#connecting-to-the-openstack-installation">libcloud docs on connecting to OpenStack&lt;/a>
for details. See below sample code:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">import&lt;/span> &lt;span style="color:#000">requests&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">from&lt;/span> &lt;span style="color:#000">libcloud.compute.types&lt;/span> &lt;span style="color:#204a87;font-weight:bold">import&lt;/span> &lt;span style="color:#000">Provider&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">from&lt;/span> &lt;span style="color:#000">libcloud.compute.providers&lt;/span> &lt;span style="color:#204a87;font-weight:bold">import&lt;/span> &lt;span style="color:#000">get_driver&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">refresh_data&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;client_id&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;lt;your client_id&amp;gt;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;client_secret&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;lt;your client_secret&amp;gt;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;grant_type&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;refresh_token&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;refresh_token&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;&amp;lt;your refresh_token&amp;gt;&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#39;scope&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;openid email profile&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">r&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">requests&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">post&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;https://aai.egi.eu/auth/realms/egi/protocol/openid-connect/token&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">auth&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">client_id&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">client_secret&lt;/span>&lt;span style="color:#000;font-weight:bold">),&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">data&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">refresh_data&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">access_token&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">r&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">json&lt;/span>&lt;span style="color:#000;font-weight:bold">()[&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;access_token&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">OpenStack&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">get_driver&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">Provider&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">OPENSTACK&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># first parameter is the identity provider: &amp;#34;egi.eu&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Second parameter is the access_token&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># The protocol &amp;#39;openid&amp;#39; is specified in ex_tenant_name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># and tenant/project cannot be selected :(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">driver&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">OpenStack&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;egi.eu&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">access_token&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">ex_tenant_name&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;openid&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">ex_force_auth_url&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;https://keystone_url:5000&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">ex_force_auth_version&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;3.x_oidc_access_token&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Users: Block Storage</title><link>/users/compute/cloud-compute/block-storage/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/users/compute/cloud-compute/block-storage/</guid><description>
&lt;!--
// jscpd:ignore-start
-->
&lt;h2 id="what-is-it">What is it?&lt;/h2>
&lt;p>Block storage provides &lt;strong>block-level storage volumes&lt;/strong> for use within virtual
machines (VMs). Block storage volumes are raw, unformatted
&lt;a href="https://en.wikipedia.org/wiki/Device_file#BLOCKDEV">block devices&lt;/a>, which can
be mounted as devices in VMs.&lt;/p>
&lt;p>Block storage volumes that are attached to a VM are exposed as storage volumes
that &lt;strong>persist independently from the life of the VM&lt;/strong>, and need to be
explicitly destroyed when data is not needed any more. Users can create a file
system on top of these volumes, or use them in any way you would use a block
device (such as a hard drive).&lt;/p>
&lt;p>The content of block storage volumes can be accessed only from within the VM
they are mounted to, and they can be mounted to a single VM at any given time.&lt;/p>
&lt;p>The main features of block storage:&lt;/p>
&lt;ul>
&lt;li>Block storage is recommended for data that must be quickly accessible and
requires long-term persistence.&lt;/li>
&lt;li>Block storage volumes are well suited to both database-style applications that
rely on random reads and writes, and to throughput-intensive applications that
perform long, continuous reads and writes.&lt;/li>
&lt;li>Users can create point-in-time snapshots of block storage volumes, which
protect data for long-term durability, and they can be used as the starting
point for new block storage volumes.&lt;/li>
&lt;/ul>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Block storage volumes can only be
mounted to VMs running at the same provider where the block storage is located.
&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Block storage usage is accounted for the
entire block storage device, regardless how much of it is actually used.
&lt;/div>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Important&lt;/h4>
There is a limit on the number
of block storage devices you can attach on a VM and there is a limit to the
maximum size of such virtual disks. These values will depend on the particular
provider and your SLA.
&lt;/div>
&lt;h2 id="manage-volumes">Manage volumes&lt;/h2>
&lt;p>The block storage in the EGI Cloud is offered via
&lt;a href="https://openstack.org/">OpenStack&lt;/a> deployments that implement the
&lt;a href="https://docs.openstack.org/cinder/latest/">Cinder&lt;/a> service.&lt;/p>
&lt;p>Users can manage block storage using the
&lt;a href="https://docs.openstack.org/horizon/latest/user/">OpenStack Horizon dashboard&lt;/a>
of a provider, from a &lt;a href="#manage-from-the-command-line">command-line interface&lt;/a>
(CLI), or via the
&lt;a href="https://docs.openstack.org/api-ref/block-storage/">OpenStack Block Storage API&lt;/a>.&lt;/p>
&lt;h2 id="manage-from-the-command-line">Manage from the command-line&lt;/h2>
&lt;p>Multiple command-line interfaces (CLIs) are available to manage block storage:&lt;/p>
&lt;ul>
&lt;li>The &lt;a href="https://docs.openstack.org/python-openstackclient/latest">OpenStack CLI&lt;/a>&lt;/li>
&lt;li>The &lt;a href="../../../getting-started/cli">FedCloud Client&lt;/a> is a high-level CLI for
interaction with the EGI Federated Cloud (&lt;strong>recommended&lt;/strong>)&lt;/li>
&lt;li>The
&lt;a href="https://docs.openstack.org/python-cinderclient/latest/user/shell.html">Cinder CLI&lt;/a>
has some advanced features and administrative commands that are not available
through the OpenStack CLI&lt;/li>
&lt;/ul>
&lt;p>The main FedCloud commands for managing volumes are detailed below.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
For more information see the
documentation about
&lt;a href="https://docs.openstack.org/cinder/latest/cli/cli-manage-volumes.html">volume management&lt;/a>.
&lt;/div>
&lt;h3 id="list-volumes">List volumes&lt;/h3>
&lt;p>For example, to
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/volume.html#volume-list">list the volumes&lt;/a>
in the site IN2P3-IRES via the Pilot VO (vo.access.egi.eu), use the following
FedCloud command:&lt;/p>
&lt;ul class="nav nav-tabs" id="tabs-4" role="tablist">
&lt;li class="nav-item">
&lt;a class="nav-link active"
id="tabs-4-0-tab" data-toggle="tab" href="#tabs-4-0" role="tab"
aria-controls="tabs-4-0" aria-selected="true">
Linux / Mac
&lt;/a>
&lt;/li>
&lt;li class="nav-item">
&lt;a class="nav-link"
id="tabs-4-1-tab" data-toggle="tab" href="#tabs-4-1" role="tab"
aria-controls="tabs-4-1" aria-selected="false">
Windows
&lt;/a>
&lt;/li>
&lt;li class="nav-item">
&lt;a class="nav-link"
id="tabs-4-2-tab" data-toggle="tab" href="#tabs-4-2" role="tab"
aria-controls="tabs-4-2" aria-selected="false">
PowerShell
&lt;/a>
&lt;/li>
&lt;/ul>
&lt;div class="tabx-content" id="tabs-4-content">
&lt;div class="tab-pane show active"
id="tabs-4-0" role="tabpanel" aria-labelled-by="tabs-4-0-tab">
&lt;p>To avoid passing the site, VO, etc. each time, you can use
&lt;a href="../../../getting-started/cli#environment-variables">FedCloud CLI environment variables&lt;/a>
to set them once and reuse them with each command invocation.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">EGI_SITE&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>IN2P3-IRES
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">EGI_VO&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>vo.access.egi.eu
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume list --site &lt;span style="color:#000">$EGI_SITE&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+---------------------------+--------+-----------+------+--------------------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> ID &lt;span style="color:#000;font-weight:bold">|&lt;/span> Name &lt;span style="color:#000;font-weight:bold">|&lt;/span> Status &lt;span style="color:#000;font-weight:bold">|&lt;/span> Size &lt;span style="color:#000;font-weight:bold">|&lt;/span> Attached to &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+---------------------------+--------+-----------+------+--------------------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> aa711296-5cff-46ac-bbe... &lt;span style="color:#000;font-weight:bold">|&lt;/span> Matlab &lt;span style="color:#000;font-weight:bold">|&lt;/span> in-use &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">50&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> Attached to Moodle on /dev/vdb &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> b0abc762-a503-129d-3c1... &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> available &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">30&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+---------------------------+--------+-----------+------+--------------------------------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane "
id="tabs-4-1" role="tabpanel" aria-labelled-by="tabs-4-1-tab">
&lt;p>To avoid passing the site, VO, etc. each time, you can use
&lt;a href="../../../getting-started/cli#environment-variables">FedCloud CLI environment variables&lt;/a>
to set them once and reuse them with each command invocation.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&amp;gt; &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">EGI_SITE&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>IN2P3-IRES
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;gt; &lt;span style="color:#204a87">set&lt;/span> &lt;span style="color:#000">EGI_VO&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>vo.access.egi.eu
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;gt; fedcloud openstack volume list --site %EGI_SITE%
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+---------------------------+--------+-----------+------+--------------------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> ID &lt;span style="color:#000;font-weight:bold">|&lt;/span> Name &lt;span style="color:#000;font-weight:bold">|&lt;/span> Status &lt;span style="color:#000;font-weight:bold">|&lt;/span> Size &lt;span style="color:#000;font-weight:bold">|&lt;/span> Attached to &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+---------------------------+--------+-----------+------+--------------------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> aa711296-5cff-46ac-bbe... &lt;span style="color:#000;font-weight:bold">|&lt;/span> Matlab &lt;span style="color:#000;font-weight:bold">|&lt;/span> in-use &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">50&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> Attached to Moodle on /dev/vdb &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> b0abc762-a503-129d-3c1... &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> available &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">30&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+---------------------------+--------+-----------+------+--------------------------------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane "
id="tabs-4-2" role="tabpanel" aria-labelled-by="tabs-4-2-tab">
&lt;p>To avoid passing the site, VO, etc. each time, you can use
&lt;a href="../../../getting-started/cli#environment-variables">FedCloud CLI environment variables&lt;/a>
to set them once and reuse them with each command invocation.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-powershell" data-lang="powershell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">&amp;gt;&lt;/span> &lt;span style="color:#000">$Env:EGI_SITE&lt;/span>&lt;span style="color:#000;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;IN2P3-IRES&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">&amp;gt;&lt;/span> &lt;span style="color:#000">$Env:EGI_VO&lt;/span>&lt;span style="color:#000;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;vo.access.egi.eu&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">&amp;gt;&lt;/span> &lt;span style="color:#000">fedcloud&lt;/span> &lt;span style="color:#000">openstack&lt;/span> &lt;span style="color:#000">volume&lt;/span> &lt;span style="color:#000">list&lt;/span> &lt;span style="color:#000;font-weight:bold">-&lt;/span>&lt;span style="color:#000">-site&lt;/span> &lt;span style="color:#000">$Env:EGI_SITE&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">Site&lt;/span>&lt;span style="color:#a40000">:&lt;/span> &lt;span style="color:#204a87">IN2P3-IRES&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">VO&lt;/span>&lt;span style="color:#a40000">:&lt;/span> &lt;span style="color:#000">vo&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">access&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">egi&lt;/span>&lt;span style="color:#000;font-weight:bold">.&lt;/span>&lt;span style="color:#000">eu&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">command&lt;/span>&lt;span style="color:#a40000">:&lt;/span> &lt;span style="color:#000">volume&lt;/span> &lt;span style="color:#000">list&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">+---------------------------+--------+-----------+------+--------------------------------+&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000">ID&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000">Name&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000">Status&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000">Size&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000">Attached&lt;/span> &lt;span style="color:#000">to&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">+---------------------------+--------+-----------+------+--------------------------------+&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000">aa711296&lt;/span>&lt;span style="color:#000;font-weight:bold">-&lt;/span>&lt;span style="color:#000">5cff&lt;/span>&lt;span style="color:#000;font-weight:bold">-&lt;/span>&lt;span style="color:#000">46ac-bbe&lt;/span>&lt;span style="color:#000;font-weight:bold">...&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000">Matlab&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#204a87">in-use&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">50&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000">Attached&lt;/span> &lt;span style="color:#000">to&lt;/span> &lt;span style="color:#000">Moodle&lt;/span> &lt;span style="color:#000">on&lt;/span> &lt;span style="color:#000;font-weight:bold">/&lt;/span>&lt;span style="color:#000">dev&lt;/span>&lt;span style="color:#000;font-weight:bold">/&lt;/span>&lt;span style="color:#000">vdb&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#204a87">b0abc762-a503&lt;/span>&lt;span style="color:#000;font-weight:bold">-&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">129d&lt;/span>&lt;span style="color:#000;font-weight:bold">-&lt;/span>&lt;span style="color:#000">3c1&lt;/span>&lt;span style="color:#000;font-weight:bold">...&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000">available&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">30&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">+---------------------------+--------+-----------+------+--------------------------------+&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;h3 id="create-volume">Create volume&lt;/h3>
&lt;p>To
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/volume.html#volume-create">create a new volume&lt;/a>
use the FedCloud command below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume create --size &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume create --size &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+---------------------+------------------------------------------------------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> Field &lt;span style="color:#000;font-weight:bold">|&lt;/span> Value &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+---------------------+------------------------------------------------------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> attachments &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[]&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> availability_zone &lt;span style="color:#000;font-weight:bold">|&lt;/span> nova &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> bootable &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#204a87">false&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> consistencygroup_id &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> created_at &lt;span style="color:#000;font-weight:bold">|&lt;/span> 2021-08-05T13:10:42.000000 &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> description &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> encrypted &lt;span style="color:#000;font-weight:bold">|&lt;/span> False &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> id &lt;span style="color:#000;font-weight:bold">|&lt;/span> a711296-5cff-46ac-bbe3-58e00712ee3e &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> multiattach &lt;span style="color:#000;font-weight:bold">|&lt;/span> False &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> name &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-volume &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> properties &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> replication_status &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> size &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> snapshot_id &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> source_volid &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> status &lt;span style="color:#000;font-weight:bold">|&lt;/span> creating &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#204a87">type&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> ceph &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> updated_at &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> user_id &lt;span style="color:#000;font-weight:bold">|&lt;/span> 1a3ef4b64714f86ac71f1c9512345678c157a94ae1b37f167b6a663baa3b915b &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+---------------------+------------------------------------------------------------------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The status of the new volume will probably be returned as &lt;code>creating&lt;/code>. To check
if the volume finished creating, look at the
&lt;a href="#see-volume-details">details of the volume&lt;/a>, or list only the newly created
volume (filter by volume name or ID):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume list --name my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume list --name my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-----------+------+-------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> ID &lt;span style="color:#000;font-weight:bold">|&lt;/span> Name &lt;span style="color:#000;font-weight:bold">|&lt;/span> Status &lt;span style="color:#000;font-weight:bold">|&lt;/span> Size &lt;span style="color:#000;font-weight:bold">|&lt;/span> Attached to &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-----------+------+-------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> aa711296-5cff-46ac-bbe3-58e00712ee3e &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-volume &lt;span style="color:#000;font-weight:bold">|&lt;/span> available &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-----------+------+-------------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When the status of the volume is &lt;code>available&lt;/code> the volume is ready to be
&lt;a href="#attach-volume-to-vm">attached to a VM&lt;/a>.&lt;/p>
&lt;h3 id="see-volume-details">See volume details&lt;/h3>
&lt;p>To
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/volume.html#volume-show">view details of a volume&lt;/a>
use the FedCloud command below:&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Tip&lt;/h4>
The volume can be specified either by its
ID or by its name (if it has one).
&lt;/div>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume show Matlab
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume show Matlab
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+------------------------------+------------------------------------------------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> Field &lt;span style="color:#000;font-weight:bold">|&lt;/span> Value &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+------------------------------+------------------------------------------------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> attachments &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[{&lt;/span>&lt;span style="color:#4e9a06">&amp;#39;server_id&amp;#39;&lt;/span>: &lt;span style="color:#4e9a06">&amp;#39;a4ab00a1-d458-41a9-a091-ee707bc9357e&amp;#39;&lt;/span>, &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;attachment_id&amp;#39;&lt;/span>: &lt;span style="color:#4e9a06">&amp;#39;291111d3-f43c-494c-b64c-5c0abcda3d37&amp;#39;&lt;/span>, &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;attached_at&amp;#39;&lt;/span>: &lt;span style="color:#4e9a06">&amp;#39;2021-08-05T08:50:19.000000&amp;#39;&lt;/span>, &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;host_name&amp;#39;&lt;/span>: &lt;span style="color:#4e9a06">&amp;#39;sbgcsrv17.in2p3.fr&amp;#39;&lt;/span>, &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;volume_id&amp;#39;&lt;/span>: &lt;span style="color:#4e9a06">&amp;#39;9a4000fb-0bcc-47e8-96fb-85a222295402&amp;#39;&lt;/span>, &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;device&amp;#39;&lt;/span>: &lt;span style="color:#4e9a06">&amp;#39;/dev/vdb&amp;#39;&lt;/span>, &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;id&amp;#39;&lt;/span>: &lt;span style="color:#4e9a06">&amp;#39;9a4000fb-0bcc-47e8-96fb-85a222295402&amp;#39;&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">}]&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> availability_zone &lt;span style="color:#000;font-weight:bold">|&lt;/span> nova &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> bootable &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#204a87">false&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> consistencygroup_id &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> created_at &lt;span style="color:#000;font-weight:bold">|&lt;/span> 2021-08-05T08:48:41.000000 &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> description &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> encrypted &lt;span style="color:#000;font-weight:bold">|&lt;/span> False &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> id &lt;span style="color:#000;font-weight:bold">|&lt;/span> 9a4000fb-0bcc-47e8-96fb-85a222295402 &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> multiattach &lt;span style="color:#000;font-weight:bold">|&lt;/span> False &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> name &lt;span style="color:#000;font-weight:bold">|&lt;/span> Matlab &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> os-vol-tenant-attr:tenant_id &lt;span style="color:#000;font-weight:bold">|&lt;/span> 7a910xxxxae74ed9yyyy7497zzzz9499 &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> properties &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> replication_status &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> size &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">50&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> snapshot_id &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> source_volid &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> status &lt;span style="color:#000;font-weight:bold">|&lt;/span> in-use &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#204a87">type&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> ceph &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> updated_at &lt;span style="color:#000;font-weight:bold">|&lt;/span> 2021-08-05T08:50:20.000000 &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> user_id &lt;span style="color:#000;font-weight:bold">|&lt;/span> babzz8c3b4cxxxx6286dacyyyy01e5a3 &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+------------------------------+------------------------------------------------------------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="attach-volume-to-vm">Attach volume to VM&lt;/h3>
&lt;p>Mapping block devices to VMs is described in detail in the
&lt;a href="https://docs.openstack.org/nova/latest/user/block-device-mapping.html">OpenStack documentation&lt;/a>.&lt;/p>
&lt;p>To
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/server.html#server-add-volume">attach a volume to a VM&lt;/a>
use the FedCloud command below:&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
To be able to attach a volume to a VM,
the volume must not be attached to any VM (volume status must be &lt;code>available&lt;/code>).
&lt;/div>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Caution&lt;/h4>
The optional &lt;code>--device&lt;/code> argument
to specify the device name in the VM should not be used. It does not work
properly, and will be removed in the near future.
&lt;/div>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack server add volume my-server my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: server add volume my-server my-volume
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can check that the volume got attached to the VM (and with what device name)
by either looking at the &lt;a href="#see-volume-details">details of the volume&lt;/a>, the
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/server.html#server-show">details of the VM&lt;/a>,
or by listing only the volume in question (filter by volume name or ID):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume list --name my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume list --name my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-----------+------+-----------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> ID &lt;span style="color:#000;font-weight:bold">|&lt;/span> Name &lt;span style="color:#000;font-weight:bold">|&lt;/span> Status &lt;span style="color:#000;font-weight:bold">|&lt;/span> Size &lt;span style="color:#000;font-weight:bold">|&lt;/span> Attached to &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-----------+------+-----------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> aa711296-5cff-46ac-bbe3-58e00712ee3e &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-volume &lt;span style="color:#000;font-weight:bold">|&lt;/span> in-use &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-server on /dev/vdc &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-----------+------+-----------------------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When the volume status is &lt;code>in-use&lt;/code> the volume is attached to a VM, and it can be
&lt;a href="#access-from-your-vms">used from the VM&lt;/a>.&lt;/p>
&lt;h3 id="detach-volume-from-vm">Detach volume from VM&lt;/h3>
&lt;p>To
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/server.html#server-remove-volume">detach a volume from a VM&lt;/a>
use the FedCloud command below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack server remove volume my-server my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: server remove volume my-server my-volume
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can check that the volume got detached by either looking at the
&lt;a href="#see-volume-details">details of the volume&lt;/a>, the
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/server.html#server-show">details of the VM&lt;/a>,
or by listing only the volume in question (filter by volume name or ID):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume list --name my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume list --name my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-----------+------+-------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> ID &lt;span style="color:#000;font-weight:bold">|&lt;/span> Name &lt;span style="color:#000;font-weight:bold">|&lt;/span> Status &lt;span style="color:#000;font-weight:bold">|&lt;/span> Size &lt;span style="color:#000;font-weight:bold">|&lt;/span> Attached to &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-----------+------+-------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> aa711296-5cff-46ac-bbe3-58e00712ee3e &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-volume &lt;span style="color:#000;font-weight:bold">|&lt;/span> available &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-----------+------+-------------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When the volume status is &lt;code>available&lt;/code> the volume is not attached to any VM.&lt;/p>
&lt;h3 id="resize-volume">Resize volume&lt;/h3>
&lt;p>To
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/volume.html#volume-set">resize a volume&lt;/a>
set its &lt;code>size&lt;/code> property to the desired size. For example, if there is a volume
named &lt;code>my-volume&lt;/code> with a size of 10GB, it can be resized using the FedCloud
command below:&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Tip&lt;/h4>
Other volume properties can be altered in
the same way.
&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
To be able to resize a volume, the
volume must not be attached to any VM (volume status must be &lt;code>available&lt;/code>),
unless the volume driver supports
&lt;a href="https://docs.openstack.org/cinder/latest/cli/cli-manage-volumes.html#extend-attached-volume">in-use extend&lt;/a>.
&lt;/div>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume &lt;span style="color:#204a87">set&lt;/span> --size &lt;span style="color:#0000cf;font-weight:bold">20&lt;/span> my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume &lt;span style="color:#204a87">set&lt;/span> --size &lt;span style="color:#0000cf;font-weight:bold">20&lt;/span> my-volume
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can check that the volume got resized by either looking at the
&lt;a href="#see-volume-details">details of the volume&lt;/a>, or by listing only the volume in
question (filter by volume name or ID):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume list --name my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume list --name my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-----------+------+-------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> ID &lt;span style="color:#000;font-weight:bold">|&lt;/span> Name &lt;span style="color:#000;font-weight:bold">|&lt;/span> Status &lt;span style="color:#000;font-weight:bold">|&lt;/span> Size &lt;span style="color:#000;font-weight:bold">|&lt;/span> Attached to &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-----------+------+-------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> aa711296-5cff-46ac-bbe3-58e00712ee3e &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-volume &lt;span style="color:#000;font-weight:bold">|&lt;/span> available &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">20&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-----------+------+-------------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="snapshot-a-volume">Snapshot a volume&lt;/h3>
&lt;p>Users can create snapshots of a volume that can later be used to create other
volumes or to rollback to a precedent point in time. &lt;strong>Volume snapshots are
pointers in the read-write history of a volume&lt;/strong>.&lt;/p>
&lt;p>To
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/volume-snapshot.html#volume-snapshot-create">take a snapshot&lt;/a>
of a volume, use the FedCloud command below:&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Tip&lt;/h4>
See also the documentation about the
other
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/volume-snapshot.html">snapshot management commands&lt;/a>.
&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
To be able to create a snapshot of a
volume, the volume must not be attached to any VM (volume status must be
&lt;code>available&lt;/code>). To create a snapshot while the volume is attached to a VM, use the
&lt;code>--force&lt;/code> command flag, but be aware that there may be inconsistencies if the
VM’s OS is not aware of the snapshot being taken.
&lt;/div>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume snapshot create --volume my-volume my-snapshot --force
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume snapshot create --volume my-volume my-snapshot
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+-------------+--------------------------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> Field &lt;span style="color:#000;font-weight:bold">|&lt;/span> Value &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+-------------+--------------------------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> created_at &lt;span style="color:#000;font-weight:bold">|&lt;/span> 2021-08-06T16:08:37.631226 &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> description &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> id &lt;span style="color:#000;font-weight:bold">|&lt;/span> 15149b42-032f-4cec-b6f3-41aa5c958081 &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> name &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-snapshot &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> properties &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> size &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> status &lt;span style="color:#000;font-weight:bold">|&lt;/span> creating &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> updated_at &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> volume_id &lt;span style="color:#000;font-weight:bold">|&lt;/span> aa711296-5cff-46ac-bbe3-58e0712ee3e9 &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+-------------+--------------------------------------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The status of the snapshot will probably be returned as &lt;code>creating&lt;/code>. To check if
the snapshot is ready, look at the
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/volume-snapshot.html#volume-snapshot-show">details of the snapshot&lt;/a>,
or list only the newly created snapshot (filter by snapshot name or ID):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume snapshot list --name my-snapshot
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume snapshot list --name my-snapshot
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-------------+-------------+-----------+------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> ID &lt;span style="color:#000;font-weight:bold">|&lt;/span> Name &lt;span style="color:#000;font-weight:bold">|&lt;/span> Description &lt;span style="color:#000;font-weight:bold">|&lt;/span> Status &lt;span style="color:#000;font-weight:bold">|&lt;/span> Size &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-------------+-------------+-----------+------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> 15149b42-032f-4cec-b6f3-41aa5c958081 &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-snapshot &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span> available &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-------------+-------------+-----------+------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When the status of the snapshot is &lt;code>available&lt;/code> the snapshot is ready, and can be
used to create new volumes or to restore the source volume to the point-in-time
when the snapshot was taken.&lt;/p>
&lt;h3 id="backup-a-volume">Backup a volume&lt;/h3>
&lt;p>Users can also create backups of a volume, but backups can only be used later to
create or replace other volumes. A &lt;strong>volume backup is a copy of a volume&lt;/strong> saved
to cold storage, which is cheaper than the performant storage used for volumes
and snapshots.&lt;/p>
&lt;p>To
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/volume-snapshot.html#volume-backup-create">make a backup&lt;/a>
of a volume, use the FedCloud command below:&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Tip&lt;/h4>
See also the documentation of the other
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/volume-backup.html">backup management commands&lt;/a>.
&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Not all OpenStack deployments support
volume backups.
&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
Backups use as much storage as the
source volume, albeit in a cheaper storage layer. This means backups take a long
time to create (~4h for 500GB), and the space is accounted for the same way as
for regular volumes (the entire size of the backed up volume, regardless of how
much of the volume space is actually used). Thus backups should be deleted when
no longer needed.
&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
To be able to make a backup of a volume,
the volume must not be attached to any VM (volume status must be &lt;code>available&lt;/code>).
To make a backup while the volume is attached to a VM, use the &lt;code>--force&lt;/code> command
flag, but be aware that there may be inconsistencies if the VM’s OS is not aware
of the backup being taken.
&lt;/div>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume backup create --name my-backup my-volume --force
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume backup create --name my-backup my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+-------------+--------------------------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> Field &lt;span style="color:#000;font-weight:bold">|&lt;/span> Value &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+-------------+--------------------------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> created_at &lt;span style="color:#000;font-weight:bold">|&lt;/span> 2021-08-06T16:08:37.631226 &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> description &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> id &lt;span style="color:#000;font-weight:bold">|&lt;/span> 158bcb42-032f-4cec-b6f3-890a5c958081 &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> name &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-backup &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> properties &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> size &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> status &lt;span style="color:#000;font-weight:bold">|&lt;/span> creating &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> updated_at &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> volume_id &lt;span style="color:#000;font-weight:bold">|&lt;/span> aa711296-5cff-46ac-bbe3-58e0712ee3e9 &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+-------------+--------------------------------------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The status of the backup will probably be returned as &lt;code>creating&lt;/code>. To check if
the backup has finished, look at the
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/volume-snapshot.html#volume-backup-show">details of the backup&lt;/a>,
or list only the newly created backup (filter by backup name or ID):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume backup list --name my-backup
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume backup list --name my-backup
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-------------+-----------+------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> ID &lt;span style="color:#000;font-weight:bold">|&lt;/span> Name &lt;span style="color:#000;font-weight:bold">|&lt;/span> Description &lt;span style="color:#000;font-weight:bold">|&lt;/span> Status &lt;span style="color:#000;font-weight:bold">|&lt;/span> Size &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-------------+-----------+------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> 158bcb42-032f-4cec-b6f3-890a5c958081 &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-backup &lt;span style="color:#000;font-weight:bold">|&lt;/span> None &lt;span style="color:#000;font-weight:bold">|&lt;/span> available &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+-------------+-----------+------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When the status of the backup is &lt;code>available&lt;/code> the backup operation is complete.&lt;/p>
&lt;h3 id="delete-volume">Delete volume&lt;/h3>
&lt;p>To
&lt;a href="https://docs.openstack.org/python-openstackclient/latest/cli/command-objects/volume.html#volume-delete">delete a volume&lt;/a>
use the following FedCloud command:&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
To be able to delete a volume, the
volume must not be attached to any VM (volume status must be &lt;code>available&lt;/code>).
&lt;/div>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume delete my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume delete my-volume
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This starts deletion of the specified volume (the volume status changes to
&lt;code>deleting&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume list --name my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume list --name my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+----------+------+-------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> ID &lt;span style="color:#000;font-weight:bold">|&lt;/span> Name &lt;span style="color:#000;font-weight:bold">|&lt;/span> Status &lt;span style="color:#000;font-weight:bold">|&lt;/span> Size &lt;span style="color:#000;font-weight:bold">|&lt;/span> Attached to &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+----------+------+-------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> aa711296-5cff-46ac-bbe3-58e00712ee3e &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-volume &lt;span style="color:#000;font-weight:bold">|&lt;/span> deleting &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+----------+------+-------------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once deletion of the specified volume is complete, it will no longer show up in
the list of volumes.&lt;/p>
&lt;h2 id="access-from-your-vms">Access from your VMs&lt;/h2>
&lt;!-- markdownlint-disable no-inline-html -->
&lt;!-- TODO Move this under Tutorials -->
&lt;p>Block storage volumes attached to a VM will appear as a
&lt;a href="https://en.wikipedia.org/wiki/Device_file#BLOCKDEV">block device&lt;/a> in the VM.&lt;/p>
&lt;p>To find out the device name that got assigned to a volume when it was attached
to a VM, look at the &lt;a href="#see-volume-details">details of the volume&lt;/a>, or list only
the volume in question (filter by volume name or ID):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud openstack volume list --name my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Site: IN2P3-IRES, VO: vo.access.egi.eu, command: volume list --name my-volume
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+--------+------+-----------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> ID &lt;span style="color:#000;font-weight:bold">|&lt;/span> Name &lt;span style="color:#000;font-weight:bold">|&lt;/span> Status &lt;span style="color:#000;font-weight:bold">|&lt;/span> Size &lt;span style="color:#000;font-weight:bold">|&lt;/span> Attached to &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+--------+------+-----------------------+
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">|&lt;/span> aa711296-5cff-46ac-bbe3-58e00712ee3e &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-volume &lt;span style="color:#000;font-weight:bold">|&lt;/span> in-use &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">10&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> my-server on /dev/vdb &lt;span style="color:#000;font-weight:bold">|&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>+--------------------------------------+-----------+--------+------+-----------------------+
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In this example the device name is &lt;code>/dev/vdb&lt;/code>. To validate this, run the
following command in the VM:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ lsblk
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>vda 252:0 &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> 20G &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> disk
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└─vda1 252:1 &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> 20G &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> part /
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>vdb 252:16 &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> 10G &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> disk
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Usually these devices are empty upon creation. The first time you attach them to
a VM, you will need to partition the device and create filesystem(s) on it, by
running the following command in the VM:&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Tip&lt;/h4>
Using a file system volume label is
useful to avoid the need to find the out the device name, especially when
multiple block storage volumes are attached to a VM. It is recommended to use a
file system volume label in the VM that is the same as the name of the block
storage volume.
&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Tip&lt;/h4>
The filesystem type can be one supported
by the Linux distribution in the VM, but &lt;code>xfs&lt;/code> and &lt;code>ext4&lt;/code> are the most widely
used.
&lt;/div>
&lt;div class="alert alert-danger" role="alert">
&lt;h4 class="alert-heading">Caution&lt;/h4>
Only run this command the first
time you use the device, as it deletes all data! Make sure you use the correct
device name, otherwise you will destroy data on other devices!
&lt;/div>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ sudo mkfs.ext4 -L my-volume /dev/vdb
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once you created a filesystem on the device, you can mount it at any desired
path by running the following command in the VM:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ sudo mount /dev/vdb1 /&amp;lt;path&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Continuing with the example above, if we check again the block devices by
running the following command in the VM:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ lsblk
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>vda 252:0 &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> 20G &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> disk
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└─vda1 252:1 &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> 20G &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> part /
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>vdb 252:16 &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> 10G &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> disk
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>└─vdb1 252:1 &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> 10G &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> part /&amp;lt;path&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If non-root users should be able to access the mounted volume similar to the way
e.g. &lt;code>/tmp&lt;/code> is accessible, set the sticky bit on the mount point, with this
command in the VM:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ sudo chmod +t /&amp;lt;path&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If the desired behaviour is to mount the file system automatically on VM
restart, add it to &lt;code>/etc/fstab&lt;/code>. Using the &lt;code>LABEL&lt;/code> parameter will ensure the
correct volume is chosen if multiple volumes are attached:&lt;/p>
&lt;p>&lt;code>LABEL=my-volume /&amp;lt;path&amp;gt; ext4 noatime,nodiratime,user_xattr,nofail 0 0&lt;/code>&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
The use of option &lt;code>nofail&lt;/code> is
recommended in order to skip (and not block on) mounting the file system volume
if it is unavailable, e.g. in case of network issues. Remove this option from
the &lt;em>fstab&lt;/em> line if you want the VM to block the boot process if the volume is
unavailable.
&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
The use of option &lt;code>nobarrier&lt;/code> is not
recommended as volumes are accessed via a cache, and ignoring the correct
ordering of journal commits may result in a corrupted file system in case of a
hardware problem.
&lt;/div>
&lt;p>With that you can access &lt;code>/&amp;lt;path&amp;gt;&lt;/code> inside the VM, where all data stored on the
volume will be available. Applications will not see any difference between a
block storage device and a regular disk, thus no major changes should be
required in the application logic.&lt;/p>
&lt;h2 id="storage-encryption">Storage Encryption&lt;/h2>
&lt;p>This section describes the usage of the tool
&lt;a href="https://gitlab.com/cryptsetup/cryptsetup">cryptsetup&lt;/a> to enable the permanent
encryption of the data stored in the disk. The tool is available in standard
linux distributions, and for this guide we assume the installation in an Ubuntu
distribution.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ sudo su -
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ apt -y install cryptsetup
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To encrypt the disk, it must be first initialized correctly. In the example
below, the disk named &lt;code>/dev/vdb&lt;/code> is first filled with random data and then
initialized using the cryptsetup luksFormat command below. This first step can
be quite long.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ dd &lt;span style="color:#204a87;font-weight:bold">if&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/dev/urandom &lt;span style="color:#000">of&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/dev/vdb &lt;span style="color:#000">bs&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>4k
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ cryptsetup -v --cipher aes-xts-plain64 --key-size &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span> --hash sha512 &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --iter-time &lt;span style="color:#0000cf;font-weight:bold">5000&lt;/span> --use-random luksFormat /dev/vdb
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If this last command slows down or even blocks with the following message:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>System is out of entropy &lt;span style="color:#204a87;font-weight:bold">while&lt;/span> generating volume key.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Please move mouse or &lt;span style="color:#204a87">type&lt;/span> some text in another window to gather some random events.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Generating key &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>0% &lt;span style="color:#204a87;font-weight:bold">done&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>you can make the &lt;code>cryptsetup luksFormat&lt;/code> command running faster by first
installing the &lt;code>haveged&lt;/code> program in your virtual machine.&lt;/p>
&lt;p>The following command verifies that the disk is now of type LUKS:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ cryptsetup luksDump /dev/vdb
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>LUKS header information &lt;span style="color:#204a87;font-weight:bold">for&lt;/span> /dev/vdb
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Version: &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Cipher name: aes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Cipher mode: xts-plain64
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Hash spec: sha512
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Payload offset: &lt;span style="color:#0000cf;font-weight:bold">4096&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>MK bits: &lt;span style="color:#0000cf;font-weight:bold">512&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>MK digest: c4 f7 4b &lt;span style="color:#0000cf;font-weight:bold">02&lt;/span> 2a 3f &lt;span style="color:#0000cf;font-weight:bold">12&lt;/span> c1 2c ba e5 c9 d2 &lt;span style="color:#0000cf;font-weight:bold">45&lt;/span> 9a &lt;span style="color:#204a87">cd&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">89&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">20&lt;/span> 6c &lt;span style="color:#0000cf;font-weight:bold">73&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>MK salt: &lt;span style="color:#0000cf;font-weight:bold">98&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">58&lt;/span> 3e f3 f6 &lt;span style="color:#0000cf;font-weight:bold">88&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">99&lt;/span> ea 2a f3 cf &lt;span style="color:#0000cf;font-weight:bold">71&lt;/span> a0 0d e5 8b
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> d5 &lt;span style="color:#0000cf;font-weight:bold">76&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">64&lt;/span> cb d2 5c 9b d1 8a d3 1d &lt;span style="color:#0000cf;font-weight:bold">18&lt;/span> 0e &lt;span style="color:#0000cf;font-weight:bold">04&lt;/span> 7a eb
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>MK iterations: &lt;span style="color:#0000cf;font-weight:bold">81250&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>UUID: c216d954-199e-4eab-a167-a3587bd41cb3
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Key Slot 0: ENABLED
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Iterations: &lt;span style="color:#0000cf;font-weight:bold">323227&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Salt: a0 &lt;span style="color:#0000cf;font-weight:bold">45&lt;/span> 3e &lt;span style="color:#0000cf;font-weight:bold">98&lt;/span> fa cf &lt;span style="color:#0000cf;font-weight:bold">60&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">74&lt;/span> c6 &lt;span style="color:#0000cf;font-weight:bold">09&lt;/span> 3d &lt;span style="color:#0000cf;font-weight:bold">54&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">97&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">89&lt;/span> be &lt;span style="color:#0000cf;font-weight:bold">65&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 5b &lt;span style="color:#0000cf;font-weight:bold">96&lt;/span> 7c 1c &lt;span style="color:#0000cf;font-weight:bold">39&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">26&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">47&lt;/span> b4 8b 0e c1 3a c9 &lt;span style="color:#0000cf;font-weight:bold">94&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">83&lt;/span> c2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Key material offset: &lt;span style="color:#0000cf;font-weight:bold">8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> AF stripes: &lt;span style="color:#0000cf;font-weight:bold">4000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Key Slot 1: DISABLED
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Key Slot 2: DISABLED
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Key Slot 3: DISABLED
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Key Slot 4: DISABLED
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Key Slot 5: DISABLED
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Key Slot 6: DISABLED
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Key Slot 7: DISABLED
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The disk is now ready for use. The first time you use it, you must perform the
following steps:&lt;/p>
&lt;p>Step 1: Open the encrypted disk with the &lt;code>cryptsetup luksOpen&lt;/code> command. The name
&lt;code>storage1&lt;/code> is only indicative, you can choose what you want:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ cryptsetup luksOpen /dev/vdb storage1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Step 2: Create a filesystem on disk:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ mkfs.ext4 /dev/mapper/storage1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Step 3: Create the disk mount point:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ mkdir /storage1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Step 4: Mount the disk:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ mount -t ext4 /dev/mapper/storage1 /storage1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Step 5: Check available space (this may be slightly different from what was
entered during the &lt;code>openstack volume create&lt;/code> command):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ df -h /storage1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Filesystem Size Used Avail Use% Mounted on
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>/dev/mapper/storage1 2.0G 6.0M 1.9G 1% /storage1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Once the disk is operational, steps 2 and 3 are no longer necessary.&lt;/p>
&lt;p>You can now send files (for example &lt;code>DATA.dat&lt;/code>) from your personal computer to
your virtual machine in a secure way, for example with &lt;code>scp&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ scp -i &lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">HOME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>/.ssh/cloudkey DATA.dat ubuntu@134.158.151.224:/storage1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>DATA.dat 100% &lt;span style="color:#0000cf;font-weight:bold">82&lt;/span> 0.1KB/s 00:00
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>When you are done with your work on the disk, you can remove it cleanly with the
following commands:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ umount /storage1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ cryptsetup close storage1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For subsequent uses of the persistent disk, there will be no need to perform all
these operations, only the following are necessary:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ cryptsetup luksOpen /dev/vdb storage1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ mkdir -p /storage1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ mount -t ext4 /dev/mapper/storage1 /storage1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note that directory &lt;code>/storage1&lt;/code> will be created only if it does not already
exist.&lt;/p>
&lt;h2 id="access-via-egi-data-transfer">Access via EGI Data Transfer&lt;/h2>
&lt;p>&lt;a href="../../../data/management/data-transfer">EGI Data Transfer&lt;/a> allows you to move
any type of data files asynchronously from one storage to another. If you want
to copy data from/to one VM running on the EGI cloud, you will need to run a
compatible server (Webdav/HTTPS, GridFTP, xrootd, SRM, S3, GCloud) that can
interact with the FTS3 software.&lt;/p>
&lt;p>An easy way to provide a GridFTP server on your VM is to use the
&lt;a href="https://github.com/cern-fts/ready2go/tree/master/gridftp-le">gridftp-le ready2go docker stack&lt;/a>
for deploying a GridFTP Docker Container with certificates from Let&amp;rsquo;s Encrypt.
Take into account:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Security groups for the VM must allow ports 80, 2811 and the 50000-50200
range.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The VM must have a valid DNS entry (you can use
&lt;a href="https://nsupdate.fedcloud.eu">Dynamic DNS&lt;/a> in FedCloud to get one)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The default setup uses &lt;code>/srv&lt;/code> as path to expose and maps users to the &lt;code>nobody&lt;/code>
user. Make sure that &lt;code>nobody&lt;/code> is able to read (and write if needed) on that
location or set the mapping to the appropriate users.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The Let&amp;rsquo;s Encrypt certificates may not be accepted by some of the EGI
infrastructure endpoints, you may want to consider using IGTF certificates
instead. Check your CA for instructions on how to get those.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>You can add direct mappings for specific DNs by adding a
&lt;code>/etc/localgridmap.conf&lt;/code> file in your running container. See the example below
to map the
&lt;code>/DC=org/DC=terena/DC=tcs/C=NL/O=Stichting EGI/CN=Enol Fernandez del Castillo&lt;/code>
DN to &lt;code>nobody&lt;/code>. You can add as many lines as needed:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-plaintext" data-lang="plaintext">&lt;span style="display:flex;">&lt;span>&amp;#34;/DC=org/DC=terena/DC=tcs/C=NL/O=Stichting EGI/CN=Enol Fernandez del Castillo&amp;#34; nobody
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>You need to specify the environment variables in the &lt;code>docker-compose.yml&lt;/code> file
for obtaining the Let&amp;rsquo;s Encrypt certificate. An extra variable
&lt;code>GLOBUS_HOSTNAME&lt;/code> must be also set:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">environment&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#000">TESTCERT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#000">EMAIL=youremail@domain.com&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#000">DOMAIN=mygridftp.example.com&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#000">GLOBUS_HOSTNAME=mygridftp.example.com&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>If you are running on a site with MTU smaller than 1500 (e.g. CESNET-MCC),
make sure that you set the MTU to a value smaller than the interface MTU(you
can check this with &lt;code>ip addr&lt;/code>). In your &lt;code>docker-compose.yml&lt;/code>, add:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">networks&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">default&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">driver&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">bridge&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">driver_opts&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">com.docker.network.driver.mtu&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1434&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ul>
&lt;!--
// jscpd:ignore-end
--></description></item><item><title>Users: GPUs</title><link>/users/compute/cloud-compute/gpgpu/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/users/compute/cloud-compute/gpgpu/</guid><description>
&lt;h2 id="gpu-resources-on-egi-cloud">GPU resources on EGI Cloud&lt;/h2>
&lt;p>GPUs resources are available on selected providers of the EGI Cloud. These are
available as specific &lt;strong>flavours&lt;/strong> that when used to instantiate a Virtual
Machine will make the hardware available to the user.&lt;/p>
&lt;p>The table below summarises the available options:&lt;/p>
&lt;!-- markdownlint-disable line-length -->
&lt;!-- VO names do not need spell checking -->
&lt;!-- cSpell:words sarscov neanias carouseldancing clarin cryoem glados beamide -->
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Site&lt;/th>
&lt;th>VM configuration options&lt;/th>
&lt;th>Flavors&lt;/th>
&lt;th>Supported VOs with GPUs&lt;/th>
&lt;th>Access conditions&lt;/th>
&lt;th>More information&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>IISAS-FedCloud&lt;/td>
&lt;td>up to 7 NVIDIA A100 40GB, up to 8 NVIDIA Tesla K20m&lt;/td>
&lt;td>g1.c08r30-K20m, g1.c16r60-2xK20m, A100 GPUs accessible using private flavors&lt;/td>
&lt;td>vo.access.egi.eu, training.egi.eu, eosc-synergy.eu, vo.ai4eosc.eu, icecube, vo.beamide.com&lt;/td>
&lt;td>Sponsored, conditions to be negotiated&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>IFCA-LCG2&lt;/td>
&lt;td>up to 80 NVIDIA T4, up to 20 NVIDIA V100&lt;/td>
&lt;td>&lt;/td>
&lt;td>&lt;/td>
&lt;td>Pay-per-use&lt;/td>
&lt;td>&lt;a href="https://confluence.ifca.es/spaces/IC/pages/1507347/Cloud+Compute+Flavors">IFCA-LCG2 Documentation&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CESNET-MCC&lt;/td>
&lt;td>up to 2 NVIDIA Tesla T4, up to 4 NVIDIA A40, up to 2 GeForce RTX 1080/2080 (experimental use only)&lt;/td>
&lt;td>hpc.8core-64ram-nvidia-1080-glados, hpc.19core-176ram-nvidia-1080-glados, hpc.19core-176ram-nvidia-2080-glados, hpc.32core-256ram-nvidia-t4-single-gpu, hpc.64core-238ram-nvidia-t4, hpc.64core-512ram-nvidia-t4, meta-hdm.16core-120ram-nvidia-a40, meta-hdm.64core-485ram-nvidia-a40-quad&lt;/td>
&lt;td>vo.clarin.eu, biomed, eosc-synergy.eu, peachnote.com, cryoem.instruct-eric.eu, fusion, icecube, vo.carouseldancing.org, vo.pangeo.eu, vo.neanias.eu, umsa.cerit-sc.cz, vip, vo.notebooks.egi.eu, vo.emphasisproject.eu, vo.inactive-sarscov2.eu&lt;/td>
&lt;td>Sponsored, conditions to be negotiated&lt;/td>
&lt;td>&lt;a href="https://docs.cloud.muni.cz/cloud/gpus/">CESNET-MCC Documentation&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>IN2P3-IRES&lt;/td>
&lt;td>up to 1 NVIDIA Tesla T4 per VM, up to 1 NVIDIA A40 per VM, up to 4 GeForce RTX 2080 per VM (experimental use only)&lt;/td>
&lt;td>g1.xlarge-4xmem, g2.xlarge-4xmem, g4.xlarge-4xmem&lt;/td>
&lt;td>biomed, vo.emphasisproject.eu, vo.france-grilles.fr&lt;/td>
&lt;td>Sponsored, conditions to be negotiated&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- markdownlint-enable line-length -->
&lt;h2 id="access-to-gpu-resources-on-egi-cloud">Access to GPU resources on EGI Cloud&lt;/h2>
&lt;p>Check whether you belong to one of the supported
&lt;a href="https://confluence.egi.eu/display/EGIG/Virtual+organisation">Virtual Organisations (VOs)&lt;/a>.
If you are not sure what VO to join, request access to the pilot VO
&lt;a href="https://operations-portal.egi.eu/vo/view/voname/vo.access.egi.eu">vo.access.egi.eu&lt;/a>
by visiting the
&lt;a href="https://aai.egi.eu/auth/realms/id/account/#/enroll?groupPath=/vo.access.egi.eu">enrolment URL&lt;/a>
with your Check-In account. More information is available in the
&lt;a href="../../../aai/check-in/vos/#how-to-join-a-virtual-organisation">Check-in&lt;/a>
section.&lt;/p>
&lt;p>GPUs sites can be accessed in different ways: via site-specific dashboards and
endpoints or via common federated-cloud services like the OpenStack Horizon
dashboards or a &lt;a href="../automate">cloud orchestrator&lt;/a>.&lt;/p>
&lt;p>It is also possible to use the &lt;a href="../../../getting-started/cli">FedCloud Client&lt;/a>
for command-line access. Below is an example on how to use the &lt;code>fedcloud&lt;/code>
command to show the GPU properties of the available GPU flavors on all sites for
the specific VO in the command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>fedcloud openstack flavor list --long --site ALL_SITES --vo vo.access.egi.eu --json-output &lt;span style="color:#000;font-weight:bold">|&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> jq -r &lt;span style="color:#4e9a06">&amp;#39;map(select(.&amp;#34;Error code&amp;#34; == 0)) |
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> map(.Result = (.Result| map(select(.Properties.&amp;#34;Accelerator:Type&amp;#34; == &amp;#34;GPU&amp;#34;)))) |
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06"> map(select(.Result | length &amp;gt; 0))&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Site-specific dashboards and endpoints are described in the following table:&lt;/p>
&lt;!-- markdownlint-disable line-length -->
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Site&lt;/th>
&lt;th>Openstack Horizon dashboard&lt;/th>
&lt;th>Keystone endpoint&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>IISAS-FedCloud&lt;/td>
&lt;td>&lt;code>https://cloud.ui.savba.sk&lt;/code>&lt;/td>
&lt;td>&lt;code>https://cloud.ui.savba.sk:5000/v3/&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>IFCA-LCG2&lt;/td>
&lt;td>&lt;code>https://portal.cloud.ifca.es&lt;/code>&lt;/td>
&lt;td>&lt;code>https://api.cloud.ifca.es:5000/&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>CESNET-MCC&lt;/td>
&lt;td>&lt;code>https://dashboard.cloud.muni.cz&lt;/code>&lt;/td>
&lt;td>&lt;code>https://identity.cloud.muni.cz/&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- markdownlint-enable line-length --></description></item><item><title>Users: Automating Deployments</title><link>/users/compute/cloud-compute/automate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/users/compute/cloud-compute/automate/</guid><description>
&lt;p>The &lt;a href="../../../getting-started/openstack">OpenStack&lt;/a> sites in the EGI Cloud that
provide compute resources to run virtual machines (VMs) allow nearly everything
to be done via an Application Programming Interface (API) or a
&lt;a href="../../../getting-started/cli">command-line interface&lt;/a> (CLI). This means that
repetitive tasks or complex architectures can be turned into shell scripts.&lt;/p>
&lt;p>But creating VMs happens so often in the EGI Cloud that tools were developed to
capture the provisioning of these VMs, and allow users to recreate them in a
flash, in a &lt;strong>deterministic&lt;/strong> and &lt;strong>repeatable&lt;/strong> way, using an
Infrastructure-as-Code (IaC) approach.&lt;/p>
&lt;p>Automating this activity will help researchers to:&lt;/p>
&lt;ul>
&lt;li>Not forget important configuration (e.g. the size and type of the hardware
resources needed).&lt;/li>
&lt;li>Ensure the same steps are performed, in the same order (e.g. making sure the
correct datasets are attached to each VM).&lt;/li>
&lt;li>Easily share scientific pipelines with collaborators.&lt;/li>
&lt;li>Make scientific applications cloud agnostic.&lt;/li>
&lt;/ul>
&lt;h2 id="infrastructure-manager">Infrastructure Manager&lt;/h2>
&lt;p>&lt;a href="https://im.egi.eu">Infrastructure Manager&lt;/a> is the recommended orchestration
service to manage virtual infrastructures in EGI Cloud. Check the
&lt;a href="../../orchestration/im/">service documentation&lt;/a> for more information&lt;/p>
&lt;h2 id="other-orchestrators">Other orchestrators&lt;/h2>
&lt;h3 id="out-of-band-authentication">Out of band authentication&lt;/h3>
&lt;p>Orchestrators without native support for the EGI Cloud Compute service, but
support out of band obtention with an OpenStack token for accessing the site can
be used by obtaining this token with the help of the
&lt;a href="../../../getting-started/cli">FedCloud client&lt;/a>. You can set the &lt;code>OS_AUTH_URL&lt;/code>,
&lt;code>OS_PROJECT_ID&lt;/code> and &lt;code>OS_TOKEN&lt;/code> environment variables as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># export OS_AUTH_URL and OS_PROJECT_ID with&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#204a87">eval&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>fedcloud site show-project-id --site &amp;lt;NAME_OF_SITE&amp;gt; --vo &amp;lt;NAME_OF_VO&amp;gt;&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># now get a valid token for OpenStack&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#204a87">export&lt;/span> &lt;span style="color:#000">OS_TOKEN&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#204a87;font-weight:bold">$(&lt;/span>fedcloud openstack --site &amp;lt;NAME_OF_SITE&amp;gt; --vo &amp;lt;NAME_OF_VO&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> token issue -c id -f value&lt;span style="color:#204a87;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You will need an &lt;a href="../../../getting-started/cli/#Authentication">access token&lt;/a>
available for the &lt;code>fedcloud openstack&lt;/code> command to work.&lt;/p>
&lt;h3 id="terraform">Terraform&lt;/h3>
&lt;p>&lt;a href="https://terraform.io/">Terraform&lt;/a> supports EGI Cloud OpenStack providers by
using valid access tokens for Keystone. For using this, just configure your
provider as usual in Terraform, but do not include user/password information.
Instead, set up your environment for
&lt;a href="#out-of-band-authentication">out of band authentication&lt;/a>&lt;/p>
&lt;p>Here is a sample &lt;code>main.tf&lt;/code> configuration file for Terraform:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-terraform" data-lang="terraform">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">terraform&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">required_providers&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c4a000">openstack&lt;/span> = &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c4a000">source&lt;/span> = &lt;span style="color:#4e9a06">&amp;#34;terraform-provider-openstack/openstack&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>&lt;span style="color:#8f5902;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Create a server
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">resource&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;openstack_compute_instance_v2&amp;#34;&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;vm&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c4a000">name&lt;/span> = &lt;span style="color:#4e9a06">&amp;#34;testvm&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c4a000">image_id&lt;/span> = &lt;span style="color:#4e9a06">&amp;#34;...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c4a000">flavor_id&lt;/span> = &lt;span style="color:#4e9a06">&amp;#34;...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#c4a000">security_groups&lt;/span> = &lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;default&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Initialize Terraform with:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ terraform init
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Now check the deployment plan:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ terraform plan
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you are happy with the plan, perform the deployment with:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ terraform apply
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For more information on how to use Terraform with OpenStack please check the
&lt;a href="https://registry.terraform.io/providers/terraform-provider-openstack/openstack/">OpenStack provider documentation&lt;/a>.&lt;/p>
&lt;h3 id="pulumi">Pulumi&lt;/h3>
&lt;p>&lt;a href="https://www.pulumi.com/">Pulumi&lt;/a> provides Infrastructure as Code using
different programming languages. Similarly to &lt;a href="#terraform">Terraform&lt;/a>,
it can use credentials obtained &lt;a href="#out-of-band-authentication">out of band&lt;/a>
to interact with the OpenStack services. Check the documentation of the
&lt;a href="https://www.pulumi.com/registry/packages/openstack/">Pulumi OpenStack Provider&lt;/a>
for details on how to interact with sites.&lt;/p>
&lt;h4 id="example-creating-a-vm-with-pulumi-and-python">Example: creating a VM with Pulumi and Python&lt;/h4>
&lt;p>You can follow these steps for getting started with Pulumi and EGI Cloud. It
assumes you have a working installation of Pulumi and Python. We will be using
IN2P3-IRES site with &lt;code>vo.access.egi.eu&lt;/code> VO.&lt;/p>
&lt;h5 id="create-new-project">Create new project&lt;/h5>
&lt;p>Create a new project using &lt;code>pulumi new&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ mkdir egi-pulumi
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#204a87">cd&lt;/span> egi-pulumi
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>$ pulumi new openstack-python
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>pulumi new&lt;/code> command will interactively initialize a new project, once
done you will have several configuration files and a &lt;code>___main__.py&lt;/code> file
with some boilerplate code.&lt;/p>
&lt;h5 id="define-you-infrastructure-as-code">Define you infrastructure as code&lt;/h5>
&lt;p>Edit &lt;code>__main__.py&lt;/code> to create a VM. In the example code below, we will use an
&lt;code>alma 9&lt;/code> image from &lt;a href="../images">EGI&amp;rsquo;s registry&lt;/a> and a 2 cpus VM flavor at
IN2P3-IRES site. The site requires a network to be specified, which we can
discover either using the &lt;a href="https://dashboard.cloud.egi.eu">dashboard&lt;/a> or
the &lt;a href="../../../getting-started/cli">FedCloud client&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#34;&amp;#34;&amp;#34;An OpenStack Python Pulumi program&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">import&lt;/span> &lt;span style="color:#000">pulumi&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">from&lt;/span> &lt;span style="color:#000">pulumi_openstack&lt;/span> &lt;span style="color:#204a87;font-weight:bold">import&lt;/span> &lt;span style="color:#000">compute&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">images&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Create an OpenStack resource (Compute Instance)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Get image EGI alma:9&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">alma&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">images&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">get_image&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">most_recent&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#204a87;font-weight:bold">True&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">properties&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;os_distro&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;alma&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;os_version&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;9&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;image_list&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;egi_vm_images&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">flavor&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">compute&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">get_flavor&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#000">vcpus&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">2&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Create instance&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Network name vary for every provider, in this case using&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># the name of the network for vo.access.egi.eu VO at IN2P3-IRES&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># It can be discovered by login into the dashboard or with:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># `fedcloud openstack --site IN2P3-IRES --vo vo.access.egi.eu network list`&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">instance&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span> &lt;span style="color:#000">compute&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">Instance&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;pulumi-test&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">flavor_id&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">flavor&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">networks&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#4e9a06">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;egi-access-net&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">],&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">image_id&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#000">alma&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">id&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># Export the IP of the instance&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">pulumi&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">export&lt;/span>&lt;span style="color:#000;font-weight:bold">(&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;instance_ip&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span> &lt;span style="color:#000">instance&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">.&lt;/span>&lt;span style="color:#000">access_ip_v4&lt;/span>&lt;span style="color:#000;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h5 id="deploy">Deploy&lt;/h5>
&lt;p>Follow &lt;a href="#out-of-band-authentication">instructions for out of band authentication&lt;/a>
to set your environment variables. The next step is to run &lt;code>pulumi login&lt;/code> which
by default requires an account on the Pulumi Cloud. For the sake of this example,
we suggest using &lt;code>pulumi login file://.&lt;/code> instead. Then you are ready to run &lt;code>pulumi up&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ pulumi up
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Enter your passphrase to unlock config/secrets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#204a87">set&lt;/span> PULUMI_CONFIG_PASSPHRASE or PULUMI_CONFIG_PASSPHRASE_FILE to remember&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Enter your passphrase to unlock config/secrets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Previewing update &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>dev&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Type Name Plan Info
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> + pulumi:pulumi:Stack egi-pulumi-dev create &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> warning
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> + └─ openstack:compute:Instance pulumi-test create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Diagnostics:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> pulumi:pulumi:Stack &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>egi-pulumi-dev&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> warning: provider config warning: Users not using loadbalancer resources can ignore this message. Support &lt;span style="color:#204a87;font-weight:bold">for&lt;/span> neutron-lbaas will be removed on next major release. Octavia will be the only supported method &lt;span style="color:#204a87;font-weight:bold">for&lt;/span> loadbalancer resources. Users using octavia will have to remove &lt;span style="color:#4e9a06">&amp;#39;use_octavia&amp;#39;&lt;/span> option from the provider configuration block. Users using neutron-lbaas will have to migrate/upgrade to octavia.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Outputs:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> instance_ip: &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>unknown&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Resources:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> + &lt;span style="color:#0000cf;font-weight:bold">2&lt;/span> to create
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Do you want to perform this update? yes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Updating &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>dev&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Type Name Status Info
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> + pulumi:pulumi:Stack egi-pulumi-dev created &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>15s&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> warning
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> + └─ openstack:compute:Instance pulumi-test created &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>13s&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Diagnostics:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> pulumi:pulumi:Stack &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>egi-pulumi-dev&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> warning: provider config warning: Users not using loadbalancer resources can ignore this message. Support &lt;span style="color:#204a87;font-weight:bold">for&lt;/span> neutron-lbaas will be removed on next major release. Octavia will be the only supported method &lt;span style="color:#204a87;font-weight:bold">for&lt;/span> loadbalancer resources. Users using octavia will have to remove &lt;span style="color:#4e9a06">&amp;#39;use_octavia&amp;#39;&lt;/span> option from the provider configuration block. Users using neutron-lbaas will have to migrate/upgrade to octavia.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Outputs:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> instance_ip: &lt;span style="color:#4e9a06">&amp;#34;172.16.21.167&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Resources:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> + &lt;span style="color:#0000cf;font-weight:bold">2&lt;/span> created
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Duration: 17s
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h5 id="clean-up">Clean up&lt;/h5>
&lt;p>Clean up the resources by using &lt;code>pulumi destroy&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ pulumi destroy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Enter your passphrase to unlock config/secrets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>&lt;span style="color:#204a87">set&lt;/span> PULUMI_CONFIG_PASSPHRASE or PULUMI_CONFIG_PASSPHRASE_FILE to remember&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Enter your passphrase to unlock config/secrets
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Previewing destroy &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>dev&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Type Name Plan
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - pulumi:pulumi:Stack egi-pulumi-dev delete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - └─ openstack:compute:Instance pulumi-test delete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Outputs:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - instance_ip: &lt;span style="color:#4e9a06">&amp;#34;172.16.21.167&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Resources:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#0000cf;font-weight:bold">2&lt;/span> to delete
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Do you want to perform this destroy? yes
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Destroying &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>dev&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Type Name Status
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - pulumi:pulumi:Stack egi-pulumi-dev deleted &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>0.00s&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - └─ openstack:compute:Instance pulumi-test deleted &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>11s&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Outputs:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - instance_ip: &lt;span style="color:#4e9a06">&amp;#34;172.16.21.167&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Resources:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#0000cf;font-weight:bold">2&lt;/span> deleted
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Duration: 12s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>The resources in the stack have been deleted, but the &lt;span style="color:#204a87">history&lt;/span> and configuration associated with the stack are still maintained.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>If you want to remove the stack completely, run &lt;span style="color:#4e9a06">`&lt;/span>pulumi stack rm dev&lt;span style="color:#4e9a06">`&lt;/span>.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Users: Dynamic DNS</title><link>/users/compute/cloud-compute/dynamic-dns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/users/compute/cloud-compute/dynamic-dns/</guid><description>
&lt;!-- cSpell:words noip -->
&lt;p>The Dynamic DNS service provides a unified, federation-wide Dynamic DNS support
for VMs in EGI infrastructure. Users can register their chosen meaningful and
memorable DNS hostnames in given domains (e.g. &lt;code>my-server.vo.fedcloud.eu&lt;/code>) and
assign to public IPs of their servers.&lt;/p>
&lt;p>By using Dynamic DNS, users can host services in EGI Cloud with their meaningful
service names, can freely move VMs from sites to sites without modifying
server/client configurations (federated approach), can request valid server
certificates in advance (critical for security) and many other advantages.&lt;/p>
&lt;p>A short demonstration video is available at
&lt;a href="https://www.youtube.com/watch?v=dk4VYT2VFmU">fedcloud.eu YouTube channel&lt;/a>.&lt;/p>
&lt;h2 id="dynamic-dns-gui-portal">Dynamic DNS GUI portal&lt;/h2>
&lt;p>The Dynamic DNS offers a &lt;a href="https://nsupdate.fedcloud.eu">web GUI portal&lt;/a> where
users can login using their Check-in credentials. For doing so, click on the
&lt;em>Login&lt;/em> link (top left) and then click on the &lt;em>egi&lt;/em> button.&lt;/p>
&lt;p>Once logged in, you will be presented with the following page:&lt;/p>
&lt;p>&lt;img src="dynamic-dns-portal.png" alt="Dynamic DNS front page">&lt;/p>
&lt;p>To register a new DNS host name:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Click on &lt;em>Overview&lt;/em> and then on &lt;em>Add Host&lt;/em>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Type in the hostname you&amp;rsquo;d like to register and select the domain to use.&lt;/p>
&lt;p>&lt;img src="add-host.png" alt="Add host">&lt;/p>
&lt;/li>
&lt;li>
&lt;p>The portal will then show you a secret than can be used for updating the host
ip whenever needed. Note it down so you can use it later.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>From the VM you&amp;rsquo;d like to assign the name to, run a command like follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>curl &lt;span style="color:#4e9a06">&amp;#34;https://&amp;lt;hostname&amp;gt;:&amp;lt;secret&amp;gt;@nsupdate.fedcloud.eu/nic/update&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>where &lt;code>&amp;lt;hostname&amp;gt;&lt;/code> is the full hostname generated before, e.g.
&lt;code>myserver.fedcloud-tf.fedcloud.eu&lt;/code> and &lt;code>&amp;lt;secret&amp;gt;&lt;/code> is the secret generated in
the previous step. You can add that as a boot command in your &lt;code>cloud-init&lt;/code>
configuration:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#cloud-config&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">runcmd&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#000">curl, &amp;#34;https://&amp;lt;hostname&amp;gt;:&amp;lt;secret&amp;gt;@nsupdate.fedcloud.eu/nic/update&amp;#34;]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>You can also manually edit your registered hostnames in the &lt;em>Overview&lt;/em> menu
by clicking on the hostname you&amp;rsquo;d like to manage&lt;/p>
&lt;/li>
&lt;/ol>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
&lt;ul>
&lt;li>
&lt;p>Hostnames/IP addresses are not expired so no need to refresh IP addresses if
no changes, it is enough to run once. You can add the following command
&lt;code>curl https://HOSTNAME:SECRET@nsupdate.fedcloud.eu/nic/update&lt;/code> to cloud-init
as described above to assign hostname automatically at VM start.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>DNS server set Time-to-Live (max time for caching DNS records) to 1 min for
dynamic DNS, but MS Windows seems to not respect that. You can clear DNS cache
in Windows with &lt;code>ipconfig /flushdns&lt;/code> command with Administrator account.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/div>
&lt;h2 id="dynamic-dns-support-in-infrastructure-manager">Dynamic DNS support in Infrastructure Manager&lt;/h2>
&lt;p>&lt;a href="../../orchestration/im/">Infrastructure Manager (IM)&lt;/a> automatically creates
hostname and assign the correct public IP of the head node of your
infrastructure in the Dynamic DNS. Just fill in the
&lt;code>DNS name to be used for the VM&lt;/code> or
&lt;code>DNS name to set to the Kubernetes Front-end&lt;/code> (other infrastructures may have
similar names for this field) with a FQDN within the supported domains of the
Dynamic DNS:&lt;/p>
&lt;p>&lt;img src="im-dyndns.png" alt="IM Dynamic DNS support">&lt;/p>
&lt;p>IM will take care of registering the hostname, assigning the IP and eventually
removing the hostname once the infrastructure is destroyed.&lt;/p>
&lt;h2 id="wildcard-hosts">Wildcard hosts&lt;/h2>
&lt;p>For certain use cases, it is desirable for all hosts within a specific subdomain
to resolve to the same IP address. For example, if the head node of a Kubernetes
cluster is accessible at &lt;code>kubernetes.fedcloud.eu&lt;/code>, all services within the
cluster can share the same IP and be represented using a wildcard entry
&lt;code>*.kubernetes.fedcloud.eu&lt;/code>, where &lt;code>*&lt;/code> stands for any of the services; e.g.
&lt;code>dashboard.kubernetes.fedcloud.eu&lt;/code>, &lt;code>api.kubernetes.fedcloud.eu&lt;/code>,
&lt;code>app1.kubernetes.fedcloud.eu&lt;/code>. In such setup, request routing is handled
internally by the cluster, typically through an Ingress or Gateway resource.&lt;/p>
&lt;p>&lt;img src="wildcard-example.png" alt="wildcard-example.png">&lt;/p>
&lt;p>This kind of names can be registered using the &lt;a href="#api">API calls&lt;/a> as described
below.&lt;/p>
&lt;h2 id="api">API&lt;/h2>
&lt;p>The API is accessible via the &lt;code>API_BASE_URL&lt;/code> endpoint (e.g.
&lt;code>https://nsupdate.fedcloud.eu&lt;/code>) and exposes several endpoints for domain
management and related operations.&lt;/p>
&lt;h3 id="authorization">Authorization&lt;/h3>
&lt;p>All API requests require a valid &lt;code>ACCESS_TOKEN&lt;/code>. This token must be included in
the HTTP request &lt;code>Authorization&lt;/code> header using the &lt;code>Bearer&lt;/code> scheme for
authentication.&lt;/p>
&lt;h3 id="list-domains">List domains&lt;/h3>
&lt;p>Retrieves all private domains owned by the authenticated user, as well as all
available public domains.&lt;/p>
&lt;h4 id="endpoint">Endpoint&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-http" data-lang="http">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">GET {{API_BASE_URL}}/nic/domains
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">Authorization: Bearer {{ACCESS_TOKEN}}
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="response">Response&lt;/h4>
&lt;p>Returns a JSON object containing two arrays:&lt;/p>
&lt;ul>
&lt;li>&lt;code>private&lt;/code> — Domains owned by the requesting user.&lt;/li>
&lt;li>&lt;code>public&lt;/code> — Public domains available for use.&lt;/li>
&lt;/ul>
&lt;h4 id="sample-response">Sample response&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;status&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;ok&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;private&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[],&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;cloud.ai4eosc.eu&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;available&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;comment&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;Domain for stable services in AI4EOSC project&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;owner&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;viet02&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">},&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;cloud.eosc-siesta.eu&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;public&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;available&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;comment&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;Domain for production services in EOSC-SIESTA project&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;owner&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;root&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="domain-fields-description">Domain Fields Description&lt;/h4>
&lt;p>Each domain object (private or public) includes the following fields:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>name&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>The fully qualified domain name (FQDN) of the domain. Example: &lt;code>cloud.ai4eosc.eu&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>public&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Indicates whether the domain is public (&lt;code>true&lt;/code>) or private (&lt;code>false&lt;/code>). Public domains are available for multiple users, whereas private domains are owned exclusively by the requesting user.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>available&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Indicates whether the domain is available for new host registrations. &lt;code>true&lt;/code> means the domain can be used; &lt;code>false&lt;/code> means it is in use, reserved, or restricted.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>comment&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>A short description or annotation about the domain. Typically provides context or usage information.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>owner&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>The username of the domain owner. For public domains, this is the account responsible for the domain.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="register-host">Register Host&lt;/h3>
&lt;p>This endpoint registers a host in the specified domain, optionally setting a
wildcard and adding a comment. The response confirms whether the registration
was successful or if an error occurred.&lt;/p>
&lt;h4 id="endpoint-1">Endpoint&lt;/h4>
&lt;h5 id="option-1">Option 1&lt;/h5>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-http" data-lang="http">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">GET {{API_BASE_URL}}/nic/register?fqdn={{HOSTNAME}}&amp;amp;ip={{IP}}&amp;amp;wildcard={{WILDCARD}}&amp;amp;comment={{COMMENT}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">Authorization: Bearer {{ACCESS_TOKEN}}
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h5 id="parameters">Parameters&lt;/h5>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>fqdn&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>✅ Yes&lt;/td>
&lt;td>Fully qualified domain name (FQDN) of the host to register.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>ip&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>No&lt;/td>
&lt;td>IP address to associate with the host. If omitted, the IP is inferred from the incoming request.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>wildcard&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>No&lt;/td>
&lt;td>Enables or disables a wildcard entry for the host. &lt;br>• &lt;code>true&lt;/code> — enable wildcard&lt;br>• &lt;code>false&lt;/code> — disable wildcard (default)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>comment&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>No&lt;/td>
&lt;td>Optional comment or description for the host.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h5 id="option-2">Option 2&lt;/h5>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-http" data-lang="http">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">GET {{API_BASE_URL}}/nic/register?name={{NAME}}&amp;amp;domain={{DOMAIN}}&amp;amp;ip={{IP}}&amp;amp;wildcard={{WILDCARD}}&amp;amp;comment={{COMMENT}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">Authorization: Bearer {{ACCESS_TOKEN}}
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h5 id="parameters-1">Parameters&lt;/h5>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>name&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>✅ Yes&lt;/td>
&lt;td>Name of the host to register.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>domain&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>✅ Yes&lt;/td>
&lt;td>Domain under which the host is registered.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>ip&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>No&lt;/td>
&lt;td>IP address to associate with the host. If omitted, the IP is inferred from the incoming request.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>wildcard&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>No&lt;/td>
&lt;td>Enables or disables a wildcard entry for the host. &lt;br>• &lt;code>true&lt;/code> — enable wildcard&lt;br>• &lt;code>false&lt;/code> — disable wildcard (default)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>comment&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>No&lt;/td>
&lt;td>Optional comment or description for the host.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="sample-response-1">Sample Response&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;status&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;ok&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;message&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;Host registered.&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;host&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;fqdn&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;test.vm.fedcloud.eu&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;test&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;domain&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;vm.fedcloud.eu&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;wildcard&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;comment&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;test&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;available&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;client_faults&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;server_faults&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;abuse_blocked&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;abuse&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;last_update_ipv4&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;2025-10-13T11:24:51.165433+00:00&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;tls_update_ipv4&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;ipv4&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;10.10.0.253&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;last_update_ipv6&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">null&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;tls_update_ipv6&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;ipv6&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">null&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;update_secret&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;some_secret&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;IPv4_update_url_basic_auth&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;https://test.vm.fedcloud.eu:some_secret@nsupdate.fedcloud.eu/nic/update&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;IPv4_update_url_bearer_auth&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;https://nsupdate.fedcloud.eu/nic/update?hostname=test.vm.fedcloud.eu&amp;amp;myip=${myip}&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="response-fields">Response Fields&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>status&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Indicates the overall status of the request (e.g., &lt;code>&amp;quot;ok&amp;quot;&lt;/code> for success or &lt;code>&amp;quot;error&amp;quot;&lt;/code> for failure).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>message&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Human-readable message summarizing the result.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>host&lt;/code>&lt;/td>
&lt;td>object&lt;/td>
&lt;td>Contains detailed information about the registered host.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h5 id="host-object">&lt;code>host&lt;/code> Object&lt;/h5>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>fqdn&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Fully qualified domain name of the host.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>name&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Name of the host.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>domain&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Domain under which the host is registered.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>wildcard&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Whether a wildcard entry is enabled for the host.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>comment&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Optional comment associated with the host.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>available&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Indicates if the host is active and reachable.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>client_faults&lt;/code>&lt;/td>
&lt;td>integer&lt;/td>
&lt;td>Number of client-related errors recorded.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>server_faults&lt;/code>&lt;/td>
&lt;td>integer&lt;/td>
&lt;td>Number of server-related errors recorded.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>abuse_blocked&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Whether the host has been blocked due to abuse reports.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>abuse&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Indicates if the host is currently flagged for abuse.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>last_update_ipv4&lt;/code>&lt;/td>
&lt;td>string (ISO 8601)&lt;/td>
&lt;td>Timestamp of the last IPv4 update.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tls_update_ipv4&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Indicates if a TLS update is pending for the IPv4 record.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>ipv4&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>The assigned IPv4 address.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>last_update_ipv6&lt;/code>&lt;/td>
&lt;td>string | null&lt;/td>
&lt;td>Timestamp of the last IPv6 update, or &lt;code>null&lt;/code> if none.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tls_update_ipv6&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Indicates if a TLS update is pending for the IPv6 record.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>ipv6&lt;/code>&lt;/td>
&lt;td>string | null&lt;/td>
&lt;td>The assigned IPv6 address, or &lt;code>null&lt;/code> if none.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>update_secret&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Secret token used for authenticated updates.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>IPv4_update_url_basic_auth&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>URL for updating the IPv4 record using Basic Auth credentials.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>IPv4_update_url_bearer_auth&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>URL for updating the IPv4 record using Bearer token authentication.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="update-dns-record">Update DNS record&lt;/h3>
&lt;p>The dynamic DNS update server uses the &lt;strong>dyndns2 protocol&lt;/strong>, compatible with
commercial providers such as
&lt;a href="https://help.dyn.com/remote-access-api/perform-update/">dyn.com&lt;/a> and
&lt;a href="https://www.noip.com/integrate/request">noip.com&lt;/a>, and allows clients to update
the IP address of a registered host. In addition to Basic authentication using
an &lt;a href="#generate-update-secret">update secret&lt;/a>, this endpoint also supports
authentication with the &lt;code>Bearer&lt;/code> scheme for enhanced security.&lt;/p>
&lt;h4 id="endpoint-2">Endpoint&lt;/h4>
&lt;h5 id="update-using-bearer-token-authentication">Update using Bearer token authentication&lt;/h5>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-http" data-lang="http">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">GET {{API_BASE_URL}}/nic/update?hostname={{HOSTNAME}}&amp;amp;myip={{IP_ADDRESS}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">Authorization: Bearer {{ACCESS_TOKEN}}
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h5 id="update-using-basic-authentication-with-update-secret">Update using Basic authentication with update secret&lt;/h5>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-http" data-lang="http">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">GET {{API_BASE_URL}}/nic/update?hostname={{HOSTNAME}}&amp;amp;myip={{IP_ADDRESS}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">Authorization: Basic {{BASE64_ENCODED_AUTH_STRING}}
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h6 id="creating-basic-authentication-secret">Creating Basic authentication secret&lt;/h6>
&lt;p>To create the Basic authentication token, encode FQDN of the target host and
corresponding update secret using the Base64 encoding. To retrieve the update
secret, use the &lt;a href="#generate-update-secret">/nic/generate_secret&lt;/a> endpoint.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ &lt;span style="color:#204a87">echo&lt;/span> -n &lt;span style="color:#4e9a06">&amp;#34;&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">HOSTNAME&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">:&lt;/span>&lt;span style="color:#4e9a06">${&lt;/span>&lt;span style="color:#000">UPDATE_SECRET&lt;/span>&lt;span style="color:#4e9a06">}&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;&lt;/span> &lt;span style="color:#000;font-weight:bold">|&lt;/span> base64 -
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000">c3Rldm8tZ3B1Og&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">==&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="parameters-2">Parameters&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>hostname&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>✅ Yes&lt;/td>
&lt;td>Fully qualified domain name (FQDN) of the host to update.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>myip&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>No&lt;/td>
&lt;td>IP address to set for the host. If omitted, the server uses the IP address of the requesting client.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="sample-response-2">Sample response&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>HTTP/2 200 OK
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>(Headers) ...content-type: text/plain...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>good 123.45.67.89
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>The response body returns the status of the update followed by the current IP
address assigned to the host.&lt;/li>
&lt;li>Example: &lt;code>good 123.45.67.89&lt;/code> indicates the update succeeded and the host now
points to &lt;code>123.45.67.89&lt;/code>.&lt;/li>
&lt;/ul>
&lt;h3 id="list-hosts">List Hosts&lt;/h3>
&lt;p>Retrieves all hosts registered by the authenticated user. Optionally, you can
filter hosts by a specific domain.&lt;/p>
&lt;h4 id="endpoint-3">Endpoint&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-http" data-lang="http">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">GET {{API_BASE_URL}}/nic/hosts?domain={{DOMAIN}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">Authorization: Bearer {{ACCESS_TOKEN}}
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="parameters-3">Parameters&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>domain&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>No&lt;/td>
&lt;td>Optional domain to filter the hosts. If omitted, all hosts registered by the user are returned.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="sample-response-3">Sample response&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;status&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;ok&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;hosts&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">[&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;fqdn&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;myhost.cloud.ai4eosc.eu&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;myhost&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;domain&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;cloud.ai4eosc.eu&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;wildcard&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;comment&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;comment&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;available&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;client_faults&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;server_faults&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;abuse_blocked&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;abuse&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;last_update_ipv4&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;2025-04-10T10:33:06.930760+00:00&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;tls_update_ipv4&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;ipv4&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;147.213.65.206&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;last_update_ipv6&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;2025-04-10T10:21:57.975176+00:00&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;tls_update_ipv6&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;ipv6&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">null&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="response-fields-1">Response Fields&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>status&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Indicates the overall status of the request (e.g., &lt;code>&amp;quot;ok&amp;quot;&lt;/code> for success or &lt;code>&amp;quot;error&amp;quot;&lt;/code> for failure).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>message&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Present only in failed responses; provides a human-readable explanation of the error.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>hosts&lt;/code>&lt;/td>
&lt;td>array&lt;/td>
&lt;td>Presents only in successful responses; provides a list of host objects registered by the user.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h5 id="hosts-object">&lt;code>hosts&lt;/code> Object&lt;/h5>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>fqdn&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Fully qualified domain name of the host.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>name&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Name of the host.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>domain&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Domain under which the host is registered.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>wildcard&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Indicates whether a wildcard entry is enabled for the host.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>comment&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Optional comment associated with the host.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>available&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Indicates if the host is active and reachable.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>client_faults&lt;/code>&lt;/td>
&lt;td>integer&lt;/td>
&lt;td>Number of client-related errors recorded.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>server_faults&lt;/code>&lt;/td>
&lt;td>integer&lt;/td>
&lt;td>Number of server-related errors recorded.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>abuse_blocked&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Whether the host has been blocked due to abuse reports.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>abuse&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Indicates if the host is currently flagged for abuse.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>last_update_ipv4&lt;/code>&lt;/td>
&lt;td>string (ISO 8601)&lt;/td>
&lt;td>Timestamp of the last IPv4 update.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tls_update_ipv4&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Indicates if a TLS update is pending for the IPv4 record.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>ipv4&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>The assigned IPv4 address.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>last_update_ipv6&lt;/code>&lt;/td>
&lt;td>string (ISO 8601)&lt;/td>
&lt;td>Timestamp of the last IPv6 update, or &lt;code>null&lt;/code> if none.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tls_update_ipv6&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Indicates if a TLS update is pending for the IPv6 record.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>ipv6&lt;/code>&lt;/td>
&lt;td>string | null&lt;/td>
&lt;td>The assigned IPv6 address, or &lt;code>null&lt;/code> if none.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="unregister-host">Unregister Host&lt;/h3>
&lt;p>Removes a previously registered host from the specified domain. The response
confirms whether the unregistration was successful or if an error occurred.&lt;/p>
&lt;h4 id="endpoint-4">Endpoint&lt;/h4>
&lt;h5 id="option-1-1">Option 1&lt;/h5>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-http" data-lang="http">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">GET {{API_BASE_URL}}/nic/unregister?fqdn={{HOSTNAME}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">Authorization: Bearer {{ACCESS_TOKEN}}
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h5 id="parameters-4">Parameters&lt;/h5>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>fqdn&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>✅ Yes&lt;/td>
&lt;td>Fully qualified domain name (FQDN) of the host to unregister.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h5 id="option-2-1">Option 2&lt;/h5>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-http" data-lang="http">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">GET {{API_BASE_URL}}/nic/unregister?name={{NAME}}&amp;amp;domain={{DOMAIN}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">Authorization: Bearer {{ACCESS_TOKEN}}
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h5 id="parameters-5">Parameters&lt;/h5>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>name&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>✅ Yes&lt;/td>
&lt;td>Name of the host to unregister.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>domain&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>✅ Yes&lt;/td>
&lt;td>Domain under which the host is registered.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="sample-response-4">Sample response&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;status&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;ok&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;message&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;Host unregistered.&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;host&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;fqdn&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;test.vm.fedcloud.eu&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;name&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;test&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;domain&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;vm.fedcloud.eu&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;wildcard&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#204a87;font-weight:bold">false&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;comment&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;host for testing purposes&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="response-fields-2">Response Fields&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>status&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Indicates the overall status of the request (e.g., &lt;code>&amp;quot;ok&amp;quot;&lt;/code> for success or &lt;code>&amp;quot;error&amp;quot;&lt;/code> for failure).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>message&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Human-readable message summarizing the result.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>host&lt;/code>&lt;/td>
&lt;td>object&lt;/td>
&lt;td>Contains details of the unregistered host.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h5 id="host-object-1">&lt;code>host&lt;/code> Object&lt;/h5>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>fqdn&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Fully qualified domain name (FQDN) of the unregistered host.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>name&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Name of the unregistered host.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>domain&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Domain under which the host was registered.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>wildcard&lt;/code>&lt;/td>
&lt;td>boolean&lt;/td>
&lt;td>Indicates whether a wildcard entry was enabled for the host.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>comment&lt;/code>&lt;/td>
&lt;td>string | null&lt;/td>
&lt;td>Comment associated with the host, or &lt;code>null&lt;/code> if none.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="generate-update-secret">Generate update secret&lt;/h3>
&lt;p>Generates a new update secret for clients to update a registered host. The
secret can be used for authenticated dynamic updates to the host’s IP records.&lt;/p>
&lt;h4 id="endpoint-5">Endpoint&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-http" data-lang="http">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">GET {{API_BASE_URL}}/nic/generate_secret?fqdn={{HOSTNAME}}
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#a40000">Authorization: Bearer {{ACCESS_TOKEN}}
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="parameters-6">Parameters&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>fqdn&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>✅ Yes&lt;/td>
&lt;td>Fully qualified domain name (FQDN) of the host for which to generate the secret.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h4 id="sample-response-5">Sample response&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;status&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;ok&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;#34;secret&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span> &lt;span style="color:#4e9a06">&amp;#34;bMkzLXMr75&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="response-fields-3">Response Fields&lt;/h4>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>status&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Indicates the overall status of the request (e.g., &lt;code>&amp;quot;ok&amp;quot;&lt;/code> for success or &lt;code>&amp;quot;error&amp;quot;&lt;/code> for failure).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>message&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Present only in failed responses; provides a human-readable explanation of the error.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>secret&lt;/code>&lt;/td>
&lt;td>string&lt;/td>
&lt;td>Presents only in successful responses; provides the newly generated update secret for the specified host.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="security">Security&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>For updating IP address, only hostname and its secret are needed. No user
information is stored on VM in any form for updating IP.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>NS-update server uses HTTPS protocol, hostname/secret are encrypted as data
and not visible during transfer so it is secure to use the update URL&lt;/p>
&lt;/li>
&lt;li>
&lt;p>NS-update portal does not store host secret in recoverable form. If you forget
the secret of your hostname, simply generate new one via &amp;ldquo;Show configuration&amp;rdquo;
button in the host edit page. The old secret will be invalid.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>Support for Dynamic DNS service is provided via
&lt;a href="https://helpdesk.ggus.eu/">EGI Helpdesk&lt;/a> &lt;strong>&amp;ldquo;Dynamic DNS&amp;rdquo;&lt;/strong> support unit, where
users can ask questions, report issues or make requests for additional domains
for specific projects or user communities.&lt;/p></description></item><item><title>Users: Frequently Asked Questions</title><link>/users/compute/cloud-compute/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/users/compute/cloud-compute/faq/</guid><description>
&lt;h2 id="basics">Basics&lt;/h2>
&lt;h3 id="how-can-i-get-access-to-the-cloud-compute-service">How can I get access to the cloud compute service?&lt;/h3>
&lt;p>There is a VO available for 6 months piloting activities that any researcher in
Europe can join. Just request access to the
&lt;a href="../auth/#pilot-vo">pilot Virtual Organisation&lt;/a>.&lt;/p>
&lt;h3 id="how-can-i-get-an-oauth20-token">How can I get an OAuth2.0 token?&lt;/h3>
&lt;p>Authentication via CLI or API requires a valid Access Token from Check-in. The
&lt;a href="https://aai.egi.eu/token">EGI Check-in Token Portal&lt;/a> allows you to get one as
needed. Check the &lt;a href="../auth">Authentication and Authorisation&lt;/a> guide for more
information.&lt;/p>
&lt;h3 id="is-occi-still-supported">Is OCCI still supported?&lt;/h3>
&lt;p>OCCI is now deprecated as API for the EGI Cloud providers using OpenStack. Some
providers still support OCCI (a list of active endpoints can be queried at
&lt;a href="https://goc.egi.eu/portal/index.php?Page_Type=Services&amp;amp;serviceType=eu.egi.cloud.vm-management.occi&amp;amp;selectItemserviceType=eu.egi.cloud.vm-management.occi&amp;amp;ngi=&amp;amp;searchTerm=&amp;amp;production=TRUE&amp;amp;monitored=&amp;amp;certStatus=Certified&amp;amp;mscope%5B%5D=FedCloud&amp;amp;selectItemmscope%5B%5D=FedCloud&amp;amp;scopeMatch=all&amp;amp;servKeyNames=&amp;amp;servKeyValue=">GOCDB&lt;/a>)
but it should note be used for any new developments.&lt;/p>
&lt;p>Migration from rOCCI CLI to OpenStack CLI is quite straightforward, we summarize
the main commands in rOCCI and OpenStack equivalent in the table below:&lt;/p>
&lt;!-- markdownlint-disable line-length -->
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Action&lt;/th>
&lt;th>rOCCI&lt;/th>
&lt;th>OpenStack&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>List images&lt;/td>
&lt;td>&lt;code>occi -a list -r os_tpl&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack image list&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Describe images&lt;/td>
&lt;td>&lt;code>occi -a describe -r &amp;lt;image_id&amp;gt;&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack image show &amp;lt;image_id&amp;gt;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>List flavors&lt;/td>
&lt;td>&lt;code>occi -a list -r resource_tpl&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack flavor list&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Describe flavors&lt;/td>
&lt;td>&lt;code>occi -a describe -r &amp;lt;template_id&amp;gt;&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack flavor show &amp;lt;image_id&amp;gt;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Create VM&lt;/td>
&lt;td>&lt;code>occi -a create -r compute -t occi.core.title=&amp;quot;MyFirstVM&amp;quot; -M &amp;lt;flavor id&amp;gt; -M &amp;lt;image id&amp;gt; -T user_data=&amp;quot;file://&amp;lt;file&amp;gt;&amp;quot;&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack server create --flavor &amp;lt;flavor&amp;gt; --image &amp;lt;image&amp;gt; --user-data &amp;lt;file&amp;gt; MyFirstVM&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Describe VM&lt;/td>
&lt;td>&lt;code>occi -a describe -r &amp;lt;vm id&amp;gt;&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack server show &amp;lt;vm id&amp;gt;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Delete VM&lt;/td>
&lt;td>&lt;code>occi -a delete -r &amp;lt;vm id&amp;gt;&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack server delete &amp;lt;vm id&amp;gt;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Create volume&lt;/td>
&lt;td>&lt;code>occi -a create -r storage -t occi.storage.size='num(&amp;lt;site in GB&amp;gt;)' -t occi.core.title=&amp;lt;storage_resource_name&amp;gt;&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack volume create --size &amp;lt;size in GB&amp;gt; &amp;lt;storage resource name&amp;gt;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>List volume&lt;/td>
&lt;td>&lt;code>occi -a list -r storage&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack volume list&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Attach volume&lt;/td>
&lt;td>&lt;code>occi -a link -r &amp;lt;vm_id&amp;gt; -j &amp;lt;storage_resource_id&amp;gt;&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack server add volume &amp;lt;vm id&amp;gt; &amp;lt;volume id&amp;gt;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Detach volume&lt;/td>
&lt;td>&lt;code>occi -a unlink -r &amp;lt;storage_link_id&amp;gt;&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack server remove volume &amp;lt;vm id&amp;gt; &amp;lt;volume id&amp;gt;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Delete volume&lt;/td>
&lt;td>&lt;code>occi -a delete -r &amp;lt;volume id&amp;gt;&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack volume delete &amp;lt;volume id&amp;gt;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Attach public IP&lt;/td>
&lt;td>&lt;code>occi -a link -r &amp;lt;vm id&amp;gt; --link /network/public&lt;/code>&lt;/td>
&lt;td>&lt;code>openstack server add floating ip &amp;lt;vm id&amp;gt; &amp;lt;ip&amp;gt;&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- markdownlint-enable line-length -->
&lt;p>If you still rely on OCCI for your access, please contact us at
&lt;code>support _at_ egi.eu&lt;/code> for support on the migration.&lt;/p>
&lt;h2 id="discovery">Discovery&lt;/h2>
&lt;h3 id="how-can-i-get-the-list-of-the-egi-cloud-providers">How can I get the list of the EGI Cloud providers?&lt;/h3>
&lt;p>The list of certified providers is available in &lt;a href="https://goc.egi.eu">GOCDB&lt;/a>. The
following command with the &lt;a href="https://fedcloudclient.fedcloud.eu/">fedcloud&lt;/a>
client can help you to get that list:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>$ fedcloud site list
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>100IT
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>BIFI
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>CESGA
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>CESNET-MCC
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>CETA-GRID
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>CLOUDIFIN
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>CYFRONET-CLOUD
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>DESY-HH
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>GSI-LCG2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>IFCA-LCG2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>IISAS-FedCloud
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>IISAS-GPUCloud
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>IN2P3-IRES
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFN-CATANIA-STACK
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFN-CLOUD-BARI
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>INFN-PADOVA-STACK
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Kharkov-KIPT-LCG2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NCG-INGRID-PT
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>SCAI
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>TR-FC1-ULAKBIM
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>UA-BITP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>UNIV-LILLE
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>fedcloud.srce.hr
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The providers also generate dynamic information which is accessible through the
&lt;a href="https://is.cloud.egi.eu/docs">cloud-info-api&lt;/a>.&lt;/p>
&lt;h3 id="how-can-i-choose-which-site-to-use">How can I choose which site to use?&lt;/h3>
&lt;p>Sites offer their resources to users through Virtual Organisations (VO). First,
you need to join a Virtual Organisation that matches your research interests,
see &lt;a href="../auth">authorisation section&lt;/a> on how VOs work.&lt;/p>
&lt;h3 id="how-can-i-get-information-about-the-available-vm-images">How can I get information about the available VM images?&lt;/h3>
&lt;p>The &lt;a href="https://registry.egi.eu">Artefact Registry&lt;/a> contains information about the
VM images available in the EGI Cloud. A set of predefined images is available on
every provider. For VO-specific images, check the &lt;a href="../images">VM image guide&lt;/a>.&lt;/p>
&lt;h2 id="managing-vms">Managing VMs&lt;/h2>
&lt;h3 id="the-disk-on-my-vm-is-full-how-can-i-get-more-space">The disk on my VM is full, how can I get more space?&lt;/h3>
&lt;p>There are several ways to increase the disk space available at the VM. The
fastest and easiest one is to use block storage, creating a new storage disk
device and attaching it to the VM. Check the &lt;a href="../block-storage">storage guide&lt;/a>
for more information.&lt;/p>
&lt;h3 id="how-can-i-keep-my-data-after-the-vm-is-stopped">How can I keep my data after the VM is stopped?&lt;/h3>
&lt;p>After a VM has been stopped and unless backed up in a block storage volume, all
data in the VM is destroyed and cannot be recovered. To ensure your data will be
available after the VM is deleted, you need to use some form of persistent
storage.&lt;/p>
&lt;h3 id="how-can-i-assign-a-public-ip-to-my-vm">How can I assign a public IP to my VM?&lt;/h3>
&lt;p>Some providers do not automatically assign a public IP address to a VM during
the creation phase. In this case, you can attach a public IP by first allocating
a new public IP and then assigning it to the VM.&lt;/p>
&lt;h3 id="how-can-i-assign-a-dns-name-to-my-vm">How can I assign a DNS name to my VM?&lt;/h3>
&lt;p>If you need a domain name for your VMs, we offer a Dynamic DNS service that
allows any EGI user to create names for VMs under the &lt;em>fedcloud.eu&lt;/em> domain.&lt;/p>
&lt;p>Just go to &lt;a href="https://nsupdate.fedcloud.eu">EGI Cloud nsupdate&lt;/a> and login with
your Check-in account. Once in, you can click on &amp;quot;Add host&amp;quot; to register a new
hostname in an available domain.&lt;/p>
&lt;h3 id="what-is-contextualisation">What is contextualisation?&lt;/h3>
&lt;p>Contextualisation is the process of installing, configuring and preparing
software upon boot time on a predefined virtual machine image. This way, the
predefined images can be stored as generic and small as possible, since
customisations will take place on boot time.&lt;/p>
&lt;p>Contextualisation is particularly useful for:&lt;/p>
&lt;ul>
&lt;li>Configuration not known until instantiation (e.g. data location).&lt;/li>
&lt;li>Private Information (e.g. host certs)&lt;/li>
&lt;li>Software that changes frequently or under development.&lt;/li>
&lt;/ul>
&lt;p>Contextualisation requires passing some data to the VMs on instantiation (the
context) and handling that context in the VM.&lt;/p>
&lt;h3 id="how-can-i-inject-my-public-ssh-key-into-the-machine">How can I inject my public SSH key into the machine?&lt;/h3>
&lt;p>The best way to login into the virtual server is to use SSH keys. If you don't
have one, you need to generate it with the &lt;code>ssh-keygen&lt;/code> command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>ssh-keygen -f fedcloud
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This will generate two files:&lt;/p>
&lt;ul>
&lt;li>&lt;code>fedcloud&lt;/code>, the private key. This file should never be shared&lt;/li>
&lt;li>&lt;code>fedcloud.pub&lt;/code>, the public key. That will be sent to your VM.&lt;/li>
&lt;/ul>
&lt;p>To inject the public SSH key into the VM you can use the &lt;code>key-name&lt;/code> option when
creating the VM in OpenStack. Check
&lt;a href="https://docs.openstack.org/python-openstackclient/pike/cli/command-objects/keypair.html">keypair management&lt;/a>
option in OpenStack documentation. This key will be available for the default
configured user of the VM (e.g. &lt;code>ubuntu&lt;/code> for Ubuntu, &lt;code>centos&lt;/code> for CentOS).&lt;/p>
&lt;p>You can also create users with keys with a contextualisation file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#cloud-config&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">users&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">cloudadm&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">sudo&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">ALL=(ALL) NOPASSWD:ALL&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">lock-passwd&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">true&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ssh-import-id&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">cloudadm&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">ssh-authorized-keys&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#000">&amp;lt;paste here the contents of your SSH key pub file&amp;gt;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
YAML format requires that the
spaces at the beginning of each line is respected in order to be correctly
parsed by &lt;code>cloud-init&lt;/code>.
&lt;/div>
&lt;h3 id="how-can-i-use-a-contextualisation-file">How can I use a contextualisation file?&lt;/h3>
&lt;p>If you have a contextualisation file, you can use it with the &lt;code>--user-data&lt;/code>
option to &lt;code>server create&lt;/code> in OpenStack.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>openstack server create --flavor &amp;lt;your-flavor&amp;gt; --image &amp;lt;your image&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> --user-data &amp;lt;your contextualisation file&amp;gt; &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span> &amp;lt;server name&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Note&lt;/h4>
We recommend using &lt;code>cloud-init&lt;/code> for
contextualisation. EGI images do support &lt;code>cloud-init&lt;/code>. Check the
&lt;a href="https://cloudinit.readthedocs.io/">documentation&lt;/a> for more information.
&lt;/div>
&lt;h3 id="how-can-i-pass-secrets-to-my-vms">How can I pass secrets to my VMs?&lt;/h3>
&lt;p>EGI Cloud endpoints use &lt;strong>HTTPS&lt;/strong> so information passed to contextualize the VMs
can be assumed to be safe and only readable within your VM. However, take into
account that anyone with access to the VM may be able to access also the
contextualisation information.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Warning&lt;/h4>
Take into account that anyone with
access to the VM may be able to access also the contextualisation information,
so ensure that no sensitive data like clear text passwords is used during
contextualisation.
&lt;/div>
&lt;h3 id="how-can-i-use-ansible">How can I use ansible?&lt;/h3>
&lt;p>Ansible relies on ssh for accessing the servers it will configure. VMs at EGI
Cloud can be also accessed via ssh, just make sure you inject the correct public
keys in the VMs to be able to access.&lt;/p>
&lt;p>If you don't have public IPs for all the VMs to be managed, you can also use
one as a gateway as described in the
&lt;a href="https://docs.ansible.com/ansible/latest/reference_appendices/faq.html#how-do-i-configure-a-jump-host-to-access-servers-that-i-have-no-direct-access-to">Ansible FAQ&lt;/a>.&lt;/p>
&lt;h3 id="how-can-i-release-resources-without-destroying-my-data">How can I release resources without destroying my data?&lt;/h3>
&lt;p>Whenever you delete a VM, the ephemeral disks associated with it will be also
deleted. If you don&amp;rsquo;t plan to use your VM for some time, there are several ways
to release resources consumed by the VM (e.g. CPU, RAM) and recover the data or
boot your VM in a previous state when you need it back. We list below the main
strategies you can use:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Use a volume to store the data to be kept: Check the
&lt;a href="../block-storage">Storage section of the documentation&lt;/a> to learn how to use
volumes. If you start your VM from a volume, the VM can be destroyed and
recreated easily. OpenStack documentation cover how to
&lt;a href="https://docs.openstack.org/nova/latest/user/launch-instance-from-volume.html">start a VM from a volume with CLI&lt;/a>
or
&lt;a href="https://docs.openstack.org/horizon/latest/user/launch-instances.html">using the Horizon dashboard&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Suspend or shelve instance: Suspending a VM will pause a VM, releasing CPU and
memory, and allowing to resume later in time at the exact same state. Shelving
shuts down the VM, thus RAM contents will be lost but disk will be kept. This
releases more resources from the provider while still allows to easily boot
the VM back without losing disk contents.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Create snapshot of instance: a snapshot will create a new VM image at your
provider that can be used to boot a new instance of the VM with the same disk
content. You can use this technique for creating a base template image that
can be later re-used to start similar VMs easily.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="how-can-i-find-all-the-vms-that-i-own-in-the-egi-federated-cloud">How can I find all the VMs that I own in the EGI Federated Cloud?&lt;/h3>
&lt;p>We suggest using the &lt;a href="../../../../users/getting-started/cli/">fedcloudclient&lt;/a>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># list the Virtual Organisations that you belong to&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>fedcloud token list-vos
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># then, for each VO, run:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>list-all-my-own-vms.sh --vo &amp;lt;virtual-organisation&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>See the
&lt;a href="https://fedcloudclient.fedcloud.eu/cheat.html#useful-commands">fedcloudclient documentation&lt;/a>
for more information.&lt;/p></description></item></channel></rss>