Skip to main content

Copier des profils d'imaging

Copier un profil imaging sur tous les serveurs
===

Infos initiales :
- nom du profil
- nom du serveur



## Qualifier le profil

Dans un premier temps, il faut retrouver toutes les infos du profil.

**Objectifs**:
- s'assurer qu'il s'agit bien du bon profil
- récupérer son id et l'id du serveur

```sql
-- remplacer <nom_profil> par son nom
-- remplacer <nom_server> par le nom de l'imaging server
SELECT
Profile.id,
Profile.fk_imagingserver
from Profile
join ImagingServer ims on ims.id = fk_imagingserver
where Profile.name = "<nom_profil>" and ims.name = "<nom_server>";
/*
Résultat:
+----+------------------+
| id | fk_imagingserver |
+----+------------------+
| 34 | 1 |
+----+------------------+
*/
```
Le profil `<nom_profil>` a l'id `34` et est associé à l'imaging serveur `1`.

On va avoir besoin également de la liste des postinstalls et leur ordre:
```sql
-- Remplacer <id_profil> par la valeur <id> du résultat précédent
-- select * from PostInstallInProfile where fk_profile=<id_profil>;
-- Ex:
select * from PostInstallInProfile where fk_profile=34;

/*
Résultat
+------------+------------------------+-------+
| fk_profile | fk_post_install_script | order |
+------------+------------------------+-------+
| 34 | 1008 | 0 |
| 34 | 1011 | 1 |
+------------+------------------------+-------+
*/
```
Il y a deux postinstalls associées au profil 34:
- postinstall 1008, à l'ordre 0,
- postinstall 1011, à l'ordre 1.

Ces infos seront nécessaires pour la suite.

## Copier les postinstalls


Les postinstalls 1008 et 1011 peuvent ne pas être associées à tous les servers sélectionnés.

La première chose à faire est de s'assurer que les postinstalls 1008 et 1011 sont associées partout où on en a besoin.

Il est nécessaire de répéter cette requête pour tous les scripts de postinstall listés.
```sql
begin;

-- Associer tous les ims à la postinstall id=1008
insert into PostInstallScriptOnImagingServer (fk_imaging_server, fk_post_install_script)
select
ims.id,
1008
from ImagingServer ims
join Entity e on e.id = ims.fk_entity
where
-- Si besoin, ajouter ici des filtres sur les imagingservers
ims.id not in (
select pisois.fk_imaging_server
from PostInstallScriptOnImagingServer pisois
where pisois.fk_post_install_script = 1008
);

-- Associer tous les ims à la postinstall id=1011
insert into PostInstallScriptOnImagingServer (fk_imaging_server, fk_post_install_script)
select
ims.id,
1011
from ImagingServer ims
join Entity e on e.id = ims.fk_entity
where
-- Si besoin, ajouter ici des filtres sur les imagingservers
ims.id not in (
select pisois.fk_imaging_server
from PostInstallScriptOnImagingServer pisois
where pisois.fk_post_install_script = 1011
);

```

Maintenant on a les postinstalls sur tous les serveurs qu'on souhaite.


## Créer les profils

Un profil est associé à un imagingserver unique. Pour copier un profil, il est nécessaire de copier son contenu pour chaque imagingserver cible.

```sql
-- Créer les profils <nom_profil> pour tous les ims n'ayant pas encore ce profil
-- 34 correspond à l'id du profil à copier.
-- Remplacer <nom_profil> par le nom du profil à copier
insert into Profile (fk_imagingserver, name, description)
select
distinct(ims.id),
(select name from Profile where id=34) as profile_name,
(select description from Profile where id=34) as profile_desc
from ImagingServer ims
join Entity e on e.id = ims.fk_entity
where
-- Si besoin ajouter ici les filtres sur les imagingservers
ims.id not in (select fk_imagingserver from Profile where name = "<nom_profil>");
```

## Associe une postinstall aux nouveaux profils

Les profils pour chaque serveur sont créés mais vides. Il faut maintenant copier le contenu du profil original.

La requête est à adapter et à répéter pour chaque postinstall à copier.

```sql
-- Associe les profils créés à la postinstall 1008
-- Remplacer <nom_profil> par le nom du profil
-- 1008 correspond à l'id de la postinstall trouvée précédemment
-- 0 correspond à l'ordre trouvé dans la deuxième requête (colonne order)
insert into PostInstallInProfile (fk_profile, fk_post_install_script, `order`)
select
id,
1008,
0
from Profile
where name = "<nom_profil>"
and id not in
(select fk_profile
from PostInstallInProfile
where fk_post_install_script = 1008
);


-- Associe les profils créés à la postinstall 1011
-- Remplacer <nom_profil> par le nom du profil
-- 1011 correspond à l'id de la postinstall trouvée précédemment
-- 1 correspond à l'ordre trouvé dans la deuxième requête (colonne order)
insert into PostInstallInProfile (fk_profile, fk_post_install_script, `order`)
select
id,
1011,
1
from Profile
where name = "<nom_profil>"
and id not in
(select fk_profile
from PostInstallInProfile
where fk_post_install_script = 1011
);
```