CloudInit est un framework permettant d’exécuter un script fourni lors de l’instanciation d’une VM.
Ainsi, lorsque vous utiliser un fichier user-data lors du lancement d’un instance :
aws ec2 run-instances \
--image-id ami-b0c36ed8 \
--instance-type t1.micro \
--region us-east-1 \
--key MyKeyPair \
--user-data file://myfile.sh
en fait, vous faites appel à CloudInit…
Une fois l’instance lancée, CloudInit va passer par le service de
metadata, en l’occurence l’adresse
http://169.254.169.254/latest/user-data
pour récupérer le
fichier et le parser.
Il y a plusieurs possibilités via une syntaxe spécifique en Yaml.
Permet de décrire d’une façon plus lisible les actions à lancer. Un certain nombre de directives permettent la gestion “out of the box” des packages, des comptes utilisateurs, des client chef, puppet…
Par exmple :
#cloud-config
packages:
- git-core
reviens à sudo apt-get install git-core
,
#cloud-config
apt_update: true
reviens à sudo apt-get update
.
Spécifie la liste des fichiers à télécharger et à jouer.
Exemple : installation de CouchBase
#include
https://raw.github.com/couchbaselabs/cloud-init/master/couchbase-server-enterprise_x86_64_1.8.1.rpm.install
Les scripts bash que l’on utilise jusque là.
#!
curl -L http//www.opscode.com/chef/install.sh | sudo bash
#cloud-config
# The default is to install from packages.
# Key from http://apt.opscode.com/packages@opscode.com.gpg.key
apt_sources:
- source: "deb http://apt.opscode.com/ $RELEASE-0.10 main"
key: |
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.9 (GNU/Linux)
mQGiBEppC7QRBADfsOkZU6KZK+YmKw4wev5mjKJEkVGlus+NxW8wItX5sGa6kdUu
3ZRAq/HMGioJEtMFrvsZjGXuzef7f0ytfR1zYeLVWnL9Bd32CueBlI7dhYwkFe+V
Ep5jWOCj02C1wHcwt+uIRDJV6TdtbIiBYAdOMPk15+VBdweBXwMuYXr76+A7VeDL
zIhi7tKFo6WiwjKZq0dzctsJJjtIfr4K4vbiD9Ojg1iISQQYEQIACQUCSmkLtAIb
DAAKCRApQKupg++CauISAJ9CxYPOKhOxalBnVTLeNUkAHGg2gACeIsbobtaD4ZHG
0GLl8EkfA8uhluM=
-----END PGP PUBLIC KEY BLOCK-----
chef:
# Valid values are 'gems' and 'packages' and 'omnibus'
install_type: "packages"
# Boolean: run 'install_type' code even if chef-client
# appears already installed.
force_install: false
# Chef settings
server_url: "https://chef.yourorg.com:4000"
# Node Name
# Defaults to the instance-id if not present
node_name: "your-node-name"
# Environment
# Defaults to '_default' if not present
environment: "production"
# Default validation name is chef-validator
validation_name: "yourorg-validator"
validation_key: |
-----BEGIN RSA PRIVATE KEY-----
YOUR-ORGS-VALIDATION-KEY-HERE
-----END RSA PRIVATE KEY-----
# A run list for a first boot json
run_list:
- "recipe[apache2]"
- "role[db]"
# Specify a list of initial attributes used by the cookbooks
initial_attributes:
apache:
prefork:
maxclients: 100
keepalive: "off"
# if install_type is 'omnibus', change the url to download
omnibus_url: "https://www.opscode.com/chef/install.sh"
# Capture all subprocess output into a logfile
# Useful for troubleshooting cloud-init issues
output: {all: '| tee -a /var/log/cloud-init-output.log'}
D’autres dans la doc de CloudInit.
Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution 3.0 France.