# 05 - Transfert de Conteneur

## <span style="text-decoration: underline; color: rgb(45, 194, 107);">**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">A - Transfert de Conteneur :</span></span></span></span></span></span></span></span></span></span>**</span>

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Voici mon exemple de configuration pour utiliser l'API LXD et le protocole Simplestreams à des fins de migration :</span></span></span></span></span></span>

[![image.png](https://wiki.morbihan-energies.fr/uploads/images/gallery/2024-01/scaled-1680-/cWnimage.png)](https://wiki.morbihan-energies.fr/uploads/images/gallery/2024-01/cWnimage.png)

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Encore une fois, vous avez besoin de deux serveurs avec LXD configuré. </span></span></span></span></span><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">J'appellerai votre machine locale serveur1 et un serveur distant j'appellerai serveur2.</span></span></span></span></span></span>

### <span style="color: rgb(53, 152, 219);">**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">1. Configurer le serveur :</span></span></span></span></span></span></span></span></span></span>**</span>

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Ces étapes sont à faire sur les 2 Serveurs LXC.</span></span></span></span></span></span>

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Tapez la commande suivante pour activer un accès à distance via API en indiquant l'adresse IP du serveur LXC sur lequel on est connecté.</span></span></span></span></span></span>

```
lxc config set core.https_address 192.168.1.6:8443
```

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Définissez le mot de passe pour le démon server2 lxd : Remplacez le MOT DE PASSE ici par le mot de passe réel.</span></span></span></span></span></span>

```
lxc config set core.trust_password PASSWORD
```

### <span style="color: rgb(53, 152, 219);">**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">2. Configurer un local nommé server1 :</span></span></span></span></span></span></span></span></span></span>**</span>

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Tapez la commande suivante sur le serveur1 pour ajouter le serveur2 et inversement :</span></span></span></span></span></span>

```
lxc remote add lxcXX.v.sdem.fr 192.168.1.6
```

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Vous pouvez lister vos télécommandes et vous verrez « server2 » répertorié comme suit :</span></span></span></span></span></span>

```
lxc remote list
```

[![image.png](https://wiki.morbihan-energies.fr/uploads/images/gallery/2024-01/scaled-1680-/29ximage.png)](https://wiki.morbihan-energies.fr/uploads/images/gallery/2024-01/29ximage.png)

### <span style="color: rgb(53, 152, 219);">**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">3. Transfert du conteneur :</span></span></span></span></span></span></span></span></span></span>**</span>

#### <span style="color: rgb(35, 111, 161);">***<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Instantané 1</span></span></span></span></span></span></span></span></span></span>***</span>

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Création d'une capture instantanée pour le conteneur transféré.</span></span></span></span></span></span>

```
lxc snapshot {CT_NAME} {NOM_SNAP}
```

#### <span style="color: rgb(35, 111, 161);">***<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Transfert 1</span></span></span></span></span></span></span></span></span></span>***</span>

```
lxc copy {CT_NAME}/{NOM_SNAP} server2:{CT_NAME} --verbose
```

### <span style="color: rgb(53, 152, 219);">**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">4. Script de Transfert de Conteneur :</span></span></span></span></span></span></span></span></span></span>**</span>

<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">Voici un script permettant d'automatiser avec Salt le transfert d'un conteneur entre 2 serveurs LXC.</span></span></span></span></span></span>

```
##############################################################
# Auteur : mkermorvant                                       #
# Date de modification : 20240115                            #
#                                                            #
# Description : Script de migration de conteneur lxc         #
#                                                            #
##############################################################
#! /bin/bash                                                 #
#                                                            #
##############################################################
# Variables :
echo""
read -p "Entrez le nom de votre Serveur Source: " SOURCE
read -p "Entrez le nom actuel de votre conteneur: " CT_NAME
read -p "Entrez le nom de votre Snapshot: " SNAP_NAME
echo ""
echo "Début de la Migration du Conteneur."
##############################################################
# 1 - Création de la Snapshot
echo "Création de la Snapshot."
echo""
salt ${SOURCE} cmd.run "lxc snapshot ${CT_NAME} ${SNAP_NAME}"
# 2 - Information supplémentaire
salt ${SOURCE} cmd.run "lxc remote list"
read -p "Entrez le nom de votre Remote Serveur: " REMOTE_SERV
# 3 - Migration du conteneur
salt ${SOURCE} cmd.run "lxc copy ${CT_NAME}/${SNAP_NAME} ${REMOTE_SERV}:${CT_NAME} --verbose"
echo ""
# 4 - Suppression du Conteneur de Base
read -r -p "Voulez-vous supprimer le conteneur ? [y/N] " response

case "$response" in
    [yY][eE][sS]|[yY])
        echo "Suppression de votre premier conteneur."
        salt ${SOURCE} cmd.run "lxc stop ${CT_NAME}"
        salt ${SOURCE} cmd.run "lxc delete ${CT_NAME}"
        echo ""
        echo "Le transfère de votre conteneur LXC est maintenant fini !"
        ;;
    *)
        echo "Le transfère de votre conteneur LXC est maintenant fini !"
        ;;
esac
```

## <span style="text-decoration: underline; color: rgb(45, 194, 107);">**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">B - Création de Conteneur :</span></span></span></span></span></span></span></span></span></span>**</span>

### <span style="color: rgb(53, 152, 219);">**<span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;"><span style="vertical-align: inherit;">1. Script de Création de conteneur LXC :</span></span></span></span></span></span></span></span></span></span>**</span>

```bash
#############################################################
# Auteur : mkermorvant                                      #
# Date de modification : 20240108                           #
#                                                           #
# Description : Script de création de conteneur lxc         #
#                                                           #
#############################################################
#                                                           #
#! /bin/bash                                                #
#                                                           #
#############################################################
# Variables :
echo""
read -p "Entrez le nom de votre Serveur LXC: " SERVER
read -p "Entrez la distribution à installer: " DISTRIB
read -p "Entrez la version à installer: " VERSION
read -p "Entrez le nom de votre conteneur: " CONTENEUR
read -p "Donner le nom de votre snapshot: " SNAP
echo ""
echo "Début de la création du conteneur."
############################################################
# 1 - Création du conteneur
salt ${SERVER} cmd.run "lxc launch ${DISTRIB}:${VERSION} ${CONTENEUR}"
echo ""
# 2 - Création d'une Snapshot
echo "Création d'une Snapshot."
salt ${SERVER} cmd.run "lxc snapshot ${CONTENEUR} ${SNAP}"
echo ""
# 3 - Infos Conteneur
salt ${SERVER} cmd.run "lxc info ${CONTENEUR}"
echo ""
echo "Votre conteneur ${CONTENEUR} est maintenant créé et opérationnelle"
echo ""
```