Skip to content

Infrastructure-as-a-Service > configuration

Info

Dans l'écosystème académique français d'Infrastructre-as-a-Service, le choix s'est porté sur le produit Openstack pour offrir du service de type Cloud.
Les grosses instances sont fédérées par FG-cloud.

Pré-requis

Réseau

Warning

A minima, les ports TCP/IP Openstack suivants doivent etre accessibles (ouvert en sortie coté client):
- Le service WebUI Horizon (80,443),
- Le service de gestion des identitées Keystone (5000),
- Le service de gestion des images Glance (9292),
- Le service de gestion des instances Nova (8774),
- Le service de gestion des réseaux Neutron (9696),
- Le service de gestion des équilibreurs-de-charge Octavia (9876).

Logiciels

Disposer des commandes terraform et python-openstackclient.

Tip

Ces commandes sont disponibles par exemple via pkgx.

Configuration

~/projet-cloud/pkgx.yaml
1
2
3
dependencies:
  opendev.org/openstack/python-openstackclient: ^6.3
  terraform.io: ^1.6

Activation

Tip

Sur une machine sur laquelle la commande dev surchargée par pkgx n'a jamais été invoquée, celle-ci va mettre en cache les dépendances binaires de noitre projet.

~/tp/discotech/ $ dev
   ~/.pkgx/terraform.io/v1.6.4
   ~/.pkgx/opendev.org/openstack/python-openstackclient/v6.3.0
env +opendev.org/openstack/python-openstackclient^6.3 +terraform.io^1.6

python-openstackclient

Configuration

Tip

C'est une bonne pratique dans notre fichier de configuration Openstack de nommer nos entrées en tenant compte du projet, du domaine sur lequel on s'authentifie (default, stratuslab...), de l'instance Openstack sur laquelle on déploie (test, production...) ainsi que du site opérant cette instance (virtualdata, gricad...)

${HOME}/.config/openstack/clouds.yaml
1
2
3
4
clouds:
...
  <PROJECT>@<DOMAIN>.<INSTANCE>.<SITE>:
...

Warning

Il est recommandé de créer un identifiant Openstack d'application et de ne pas persister sur disque son identifiant/authentifiant personnel.

${HOME}/.config/openstack/clouds.yaml
1
2
3
4
5
6
7
8
9
clouds:
...
  <PROJECT>@<DOMAIN>.<INSTANCE>.<SITE>:
    auth_type: v3applicationcredential
    auth:
       auth_url: <AUTH_URL>
       application_credential_id: <APPLICATION_CREDENTIAL_ID>
       application_credential_secret: <APPLICATION_CREDENTIAL_SECRET>
...

Exemple

${HOME}/.config/openstack/clouds.yaml
1
2
3
4
5
6
7
8
9
clouds:
...
  resinfo-discotech@stratuslab.production.virtualdata:
    auth_type: v3applicationcredential
    auth:
      auth_url: https://keystone.lal.in2p3.fr:5000/v3
      application_credential_id: abcdef01234567890abcdef0123456789
      application_credential_secret: p868jk_HM_UjtApyp3iuBXkXc8DlmNxK1o7ViC8WEcCKNTFz2FUIZxNybSy3UsV-Iwq6JLC1X0IR45hxkdUdnA
...

Nous allons maintenant faire pointer l'environnement de notre répertoire de projet sur le projet OpenStack resinfo-discotech@stratuslab.production.virtualdata sur lequel nous venons de configurer l'authentification.

~/projet-cloud/pkgx.yaml
1
2
3
4
5
env:
  OS_CLOUD: resinfo-discotech@stratuslab.production.virtualdata (1)
dependencies:
  opendev.org/openstack/python-openstackclient: ^6.3
  terraform.io: ^1.6
  1. Positionne la variable d'environnement OS_CLOUD

Test

On recharge notre environnement.

~/projet-cloud/ $ dev off && dev on
env -opendev.org/openstack/python-openstackclient^6.3 -terraform.io^1.6
env +opendev.org/openstack/python-openstackclient^6.3 +terraform.io^1.6

Puis on requette OpenStack pour vérifier que la configuration de l'authentification est correcte.

~/projet-cloud/ $ openstack quota show --compute
+----------------------+-------+
| Resource             | Limit |
+----------------------+-------+
| cores                |    40 |
| instances            |    20 |
| ram                  | 51200 |
| fixed-ips            |    -1 |
| injected-file-size   | 10240 |
| injected-path-size   |   255 |
| injected-files       |     5 |
| key-pairs            |   100 |
| properties           |   128 |
| server-groups        |    10 |
| server-group-members |    10 |
| floating-ips         |    -1 |
| secgroup-rules       |    -1 |
| secgroups            |    -1 |
+----------------------+-------+

terraform

Provider OpenStack

Tip

La commande terraform va utiliser la variable d'environnement OS_CLOUD que nous avons paramétré dans le fichier pkgx.yaml de notre répertoire de travail.

~/projet-cloud/terraform.tf
terraform {
  required_version = ">= 1.6.0"
  required_providers {
    openstack = {
      source = "terraform-provider-openstack/openstack"
      version = "~> 1.51.1"
    }
  }
}

provider openstack {}

Initialisation

On initialise l'état terraform via la sous-commande init de la commande terraform.

~/projet-cloud/ $ terraform init

Validation

On vérifie ce que terraform va faire.

~/projet-cloud/ $ terraform plan