You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Depuis plusieurs semaines, si vous nous suivez, vous avez pu voir passer les différents épisodes des [Stacks 5
3
+
Si vous nous suivez, vous avez pu voir passer les différents épisodes des [Stacks 5
4
4
Minutes](http://dev.cloudwatt.com/fr/recherche.html?q=5+minutes+stacks&submit=submit). Nous allons passer dans
5
5
les coulisses et vous expliquer comment construire les vôtres. Suivez le guide et faites attention où vous marchez.
6
6
7
7
## L'usine
8
8
9
9
Dans chaque épisode, vous trouverez des stacks HEAT, qui s'appuient sur des images serveur différentes. Ces images
10
-
sont des Ubuntu Trusty Tahr, préparées avec une pile applicative complète, pour avoir un démarrage plus rapide.
10
+
sont préparées avec une pile applicative complète, pour avoir un démarrage plus rapide.
11
+
11
12
La boîte à outils pour assembler ces images est full Open Source, simple et efficace :
12
13
13
14
**Debian Jessie :* Comme système de référence pour l'usine.
@@ -18,108 +19,146 @@ d'images serveurs pour différentes plates-formes, notamment Openstack.
18
19
particularité est de fonctionner sans agent.
19
20
**Shell :* What Else ?
20
21
22
+
21
23
Pour faciliter la création de vos propres images, nous avons rassemblé notre chaîne de montage
22
-
[dans un projet Github](https://github.com/cloudwatt/os_image_factory). Nous avons également pour vous un playbook
23
-
Ansible et une stack HEAT qui vont vous fournir un serveur de build d'image avec tous les outils nécessaires. Pour un peu
24
+
[dans un projet Github](https://github.com/cloudwatt/os_image_factory).
25
+
26
+
Nous vous avons également préparé une stack HEAT qui vont vous fournir un serveur de build d'image avec tous les outils nécessaires. Pour un peu
24
27
plus de confort, nous avons ajouté un serveur Jenkins dans la boîte à outils. Donc, pour démarrer votre propre usine :
25
28
26
29
* Munissez vous de :
27
-
* votre [compte Cloudwatt](https://www.cloudwatt.com/cockpit/#/create-contact), avec une [paire de clés existante](https://console.cloudwatt.com/project/access_and_security/?tab=access_security_tabs__keypairs_tab)
28
-
* les outils [OpenStack CLI](http://docs.openstack.org/cli-reference/content/install_clients.html)
29
-
* Faites un clone local du repository [os_image_factory](https://github.com/cloudwatt/os_image_factory)
* une [paire de clés existante](https://console.cloudwatt.com/project/access_and_security/?tab=access_security_tabs__keypairs_tab)
32
+
* Lancez la stack HEAT qui va assembler l'usine via le [OneClick](https://www.cloudwatt.com/fr/applications/) ou directement en recupérant le template Heat sur [le github de Cloudwatt](https://github.com/cloudwatt/os_image_factory/tree/master/setup)
36
33
37
-
Le provisionning de ce serveur se fait en partant d'une image de base Debian Jessie et en applicant le playbook
38
-
Ansible ```setup/os_image_factory.playbook.yml```, cela prend donc quelques minutes. Pour minimiser les risques, nous
39
-
avons pris le parti de n'autoriser que des connexions via SSH. Pour accéder au Jenkins de l'usine, il faut donc établir
34
+
Le provisionning de ce serveur se fait en partant d'une image dites **bundle** avec l'ensemble des outils necessaires. Pour minimiser les risques, nous avons pris le parti de n'autoriser que des connexions via SSH. Pour accéder au Jenkins de l'usine, il faut donc établir
40
35
un tunnel SSH avec forward de port, entre votre machine et le serveur de la stack :
Pour finaliser l'installation, une opération manuelle est nécessaire. Il faut que votre usine d'assemblage d'image puisse
48
-
interagir avec les API Openstack. Vous devez aller manuellement modifier le fichier ```/var/lib/jenkins/.profile```
49
-
pour y insérer vos credentials Openstack.
41
+
Vous devriez pouvoir accéder au Jenkins de l'usine en cliquant [ici](http://localhost:8080)
42
+
43
+
Pour finaliser l'installation, une opération manuelle est nécessaire. Vous devez aller manuellement chercher le contenu du fichier ```/var/lib/jenkins/secrets/initialAdminPassword``` via la connexion SSH lors de la première initialisation.
Puis, lancer ```sudo service jenkins restart```, de façon à ce que Jenkins prenne ces valeurs en compte. Si votre tunnel
60
-
avec forward est toujours en place, vous devriez pouvoir accéder au Jenkins de l'usine en cliquant [ici](http://localhost:8080).
61
-
62
-
49
+
Installer les plugins suggéré
50
+
51
+

52
+
53
+
Entrez à présent vos informations qui serviront à sécuriser votre jenkins. Pour rappel celui-ci a connaissance de vos indentifiants Cloudwatt et est donc capable de piloter votre tenant.
54
+

55
+
56
+
Jenkins est à présent initialisé.
57
+
58
+
Avant tout commençons par découvrir la chaine d'assemblage afin de maitriser le processus de bout en bout.
59
+
63
60
## La chaîne d'assemblage
64
-
61
+
62
+
Sur le github de [Cloudwatt](https://github.com/cloudwatt/os_image_factory) vous trouverez l'ensemble de nos scripts.
65
63
Dans le répertoire ```images/``` vous trouverez 4 fichiers, génériques pour toutes les images à assembler :
66
-
67
-
*```ansible_local_inventory``` : fichier de définition de groupe Ansible, injecté par Packer dans les images à
68
-
provisionner, pour permettre à Ansible de cibler le serveur.
69
-
*```build.packer.json``` : fichier de build Packer. Il prend des paramètres qui lui seront fournis par le playbook
70
-
de pilotage de build.
71
-
*```build.playbook.yml``` : playbook Ansible de pilotage de build.
72
-
*```build.sh``` : Micro script shell pour faciliter l'utilisation du playbook de build
73
-
74
-
Les répertoires placés sous le répertoire ```images/``` sont des exemples de build. Pour écrire les vôtres, il
75
-
vous suffit de respecter la norme suivante :
76
-
77
-
```
78
-
images/
79
-
my_bundle/ # <-- répertoire du build
80
-
ansible/
81
-
bootstrap.yml # <-- playbook de provisionning du serveur
82
-
output/
83
-
my_stack_heat.yml.j2 # <-- template à générer à la fin du build, couramment une stack HEAT
84
-
build-vars.yml # <-- variables de description du build, exploité par Packer et le playbook de pilotage
85
-
```
86
-
64
+
65
+
*```ansible_local_inventory``` : fichier de définition de groupe Ansible, injecté par Packer dans les images à
66
+
provisionner, pour permettre à Ansible de cibler le serveur.
67
+
*```build.packer.json``` : fichier de build Packer. Il prend des paramètres qui lui seront fournis par le playbook
68
+
de pilotage de build.
69
+
*```build.playbook.yml``` : playbook Ansible de pilotage de build.
70
+
*```build.sh``` : Micro script shell pour faciliter l'utilisation du playbook de build
71
+
72
+
Les répertoires placés sous ```images/``` sont des exemples de build. Pour écrire les vôtres, il vous suffit de respecter la norme suivante :
73
+
74
+
```
75
+
images/
76
+
my_bundle/ # <-- répertoire du build
77
+
ansible/
78
+
bootstrap.yml # <-- playbook de provisionning du serveur
79
+
output/
80
+
my_stack_heat.yml.j2 # <-- template à générer à la fin du build, couramment une stack HEAT
81
+
build-vars.yml # <-- variables de description du build, exploité par Packer et le playbook de pilotage
82
+
```
83
+
87
84
Les templates que vous placez dans le répertoire output de votre bundle seront interprétés par le playbook de pilotage
88
85
de build. Nous l'utilisons pour générer des stacks HEAT en insérant au bon endroit l'ID de l'image serveur créée en cours de build :
89
-
90
-
```
91
-
server:
92
-
type: OS::Nova::Server
93
-
properties:
94
-
key_name: { get_param: keypair_name }
95
-
image: {{ result_img_id }} <-- result_img_id entre moustache sera remplacé
96
-
flavor: { get_param: flavor_name } par l'id de la nouvelle image serveur
97
-
networks:
98
-
```
99
-
86
+
87
+
```
88
+
server:
89
+
type: OS::Nova::Server
90
+
properties:
91
+
key_name: { get_param: keypair_name }
92
+
image: {{ result_img_id }} <-- result_img_id entre moustache sera remplacé
93
+
flavor: { get_param: flavor_name } par l'id de la nouvelle image serveur
94
+
networks:
95
+
```
96
+
100
97
Le fichier ```build-vars.yml``` contient les variables fournies au playbook de pilotage de build. Dans sa
101
98
plus simple expression, voici un exemple :
102
-
99
+
103
100
```
104
-
---
105
-
bundle:
106
-
name: bundle-trusty-lamp # <-- le nom de votre image
107
-
img_base: ae3082cb-fac1-46b1-97aa-507aaa8f184f # <-- l'id glance de l'image de base à utiliser
108
-
properties: # <-- les propriétés que vous souhaitez voir
109
-
img_os: Ubuntu # appliquées sur l'image finale provisionnée
110
-
cw_bundle: LAMP
111
-
cw_origin: Cloudwatt
101
+
bundle:
102
+
name: bundle-trusty-lamp # <-- le nom de votre image
103
+
img_base: ae3082cb-fac1-46b1-97aa-507aaa8f184f # <-- l'id glance de l'image de base à utiliser
104
+
properties: # <-- les propriétés que vous souhaitez voir
105
+
img_os: Ubuntu # appliquées sur l'image finale provisionnée
106
+
cw_bundle: LAMP
107
+
cw_origin: Cloudwatt
108
+
hw_cpu_max_sockets: 1
109
+
hw_rng_model :virtio
110
+
111
+
```
112
+
113
+
Maintenant que vous avez connaissance de l'ensemble des la chaine de montage d'un image, vous pouvez vous lancer dans la construction de votre propre image bundle.
114
+
115
+
## Fabrication image Bundle
116
+
**1.** Assurez-vous d'avoir fait un copie du dếpot **os_image_factory** vers un dépôt Git distant; Github, Bitbucket, tout ce que vous utilisez.
117
+
118
+
**2.** Cliquez sur **"Créer un nouveau job"**
119
+
120
+

121
+
122
+
**3.** Choisissez de faire un projet de type **free-style**
123
+
124
+

125
+
126
+
**4.** Donnez maintenant un nom à votre projet, puis spécifiez le repos github à cloner pour lancer le build de votre image.
127
+
128
+

129
+
130
+
**5.** Configurez maintenant la commande à exécuter pour lancer votre build, si vous avez cloner notre repos [OS_image_factory](https://github.com/cloudwatt/os_image_factory.git)
131
+
132
+
**6.** En fin de page, choisissez **Exécuter un script shell** sous **Build**, puis saisissez les éléments suivants (remplacez `$ BUNDLE_DIR_NAME`):
133
+
112
134
```
113
-
114
-
115
-
Une fois ceci fait, vous pouvez démarrer un build en lançant la commande suivante :
116
-
135
+
make build-images bundle=$YOUR_BUNDLE_DIR_NAME
136
+
```
137
+
```$YOUR_BUNDLE_NAME``` doit correspondre au nom du répertoire sous ```images/``` dans lequel vous avez créé votre
138
+
bundle.
139
+

140
+
141
+
**7.** Sélectionnez **Archiver les artefacts** sous **Ajouter une action post-build** et saisir ```packer.latest.log, images/target/$BUNDLE_DIR_NAME/output/*``` . Cela n'est pas obligatoire, mais ca vous empêchera d'avoir des problèmes à générer le template HEAT ou les logs du playbook. En outre, les outputs sont enregistrés à chaque lancement de projet, ce qui signifie que vous pourrez retrouver les logs de vos anciennes actions.
142
+
143
+
**8.** Lancez maintenant votre projet
144
+
145
+
## Fabrication d'image OS
146
+
147
+
La factory nous sert aussi à fabriquer nos propres images d'OS que l'on propose aux clients de cloudwatt.
148
+
Vous trouverez l'ensemble des scripts de création dans le répertoire **OS** sur le repo github [OS_image_factory](https://github.com/cloudwatt/os_image_factory.git)
149
+
150
+
La démarche pour fabriquer une image OS et image image bundle est là même, c'est juste la commande à lancer qui est un peu différente car effectivement il faut télécharger l'image au format QCOW2 et l'uploader dans votre glance avant de lancer le build.
151
+
Voici comment faire, vous pouvez démarrer un build en lançant la commande suivante :
152
+
117
153
```
118
-
images/build.sh $YOUR_BUNDLE_NAME
154
+
make build-os os=$OS_DIR_NAME
119
155
```
120
156
121
-
```$YOUR_BUNDLE_NAME``` doit correspondre au nom du répertoire sous ```images/``` dans lequel vous avez créé votre
122
-
bundle.
157
+
158
+
Si vous avez regardé le script ```build.sh``` qui se trouve dans chaque répertoire des OS, vous avez pu remarqué qu'une suite de test unitaire était lancé afin de tester l'image dans notre environnement Openstack.
159
+
Celle ci est ecrite en Python et vous retrouverez l'ensemble des scripts dans le répertoire **test-tools/pytesting_os**.
160
+
Pour information rien ne vous empeche d'ajouter vos propres tests ou de modifier les notres si besoin.
161
+
123
162
124
163
## L'entrepôt
125
164
@@ -129,7 +168,7 @@ Lors d'un build, deux outputs sont attendus :
129
168
assemblée est visible dans les traces d'exécution du script ```build.sh```.
130
169
131
170
* Les sorties des templates placés dans votre répertoire output : Une fois interprétés, ils sont placés dans le
132
-
répertoire ```images/target/my_bundle/output```.
171
+
répertoire **images/target/my_bundle/output**.
133
172
134
173
## Voici les clés
135
174
@@ -139,4 +178,5 @@ le ```build.packer.json``` pour utiliser plutôt Puppet ou Chef.
139
178
140
179
Nous espérons que cela pourra vous servir pour bâtir vos propres architectures dans le futur.
0 commit comments