exemples de script sont aussi fournis sur le site officiel de CloudInit.
Le contenu du champ user-data peut se décliner sous différentes syntaxes. Comme pour tout script linux, ces syntaxes sont indiquées par la première ligne du fichier. Les plus importantes sont:
A noter que Les syntaxes cloud-config se font en YAML. Les entrées YAML sont associées à du code python spécifique embarqué dans le paquet CloudInit.
#include :
#! :
Pour aller plus loin, l’exemple détaillé ci-dessous montre un script de type cloud-config pour installer chef et jouer une liste de recettes :
<br>#cloud-config<br># The default is to install from packages.<br># Key from http://apt.opscode.com/packages@opscode.com.gpg.key<br>apt_sources:<br> - source: "deb http://apt.opscode.com/ $RELEASE-0.10 main"<br> key: |<br> -----BEGIN PGP PUBLIC KEY BLOCK-----<br> Version: GnuPG v1.4.9 (GNU/Linux)<br><br> mQGiBEppC7QRBADfsOkZU6KZK+YmKw4wev5mjKJEkVGlus+NxW8wItX5sGa6kdUu<br> 3ZRAq/HMGioJEtMFrvsZjGXuzef7f0ytfR1zYeLVWnL9Bd32CueBlI7dhYwkFe+V<br> Ep5jWOCj02C1wHcwt+uIRDJV6TdtbIiBYAdOMPk15+VBdweBXwMuYXr76+A7VeDL<br> zIhi7tKFo6WiwjKZq0dzctsJJjtIfr4K4vbiD9Ojg1iISQQYEQIACQUCSmkLtAIb<br> DAAKCRApQKupg++CauISAJ9CxYPOKhOxalBnVTLeNUkAHGg2gACeIsbobtaD4ZHG<br> 0GLl8EkfA8uhluM=<br> -----END PGP PUBLIC KEY BLOCK-----<br><br>chef:<br><br> # Valid values are 'gems' and 'packages' and 'omnibus'<br> install_type: "packages"<br><br> # Boolean: run 'install_type' code even if chef-client<br> # appears already installed.<br> force_install: false<br><br> # Chef settings<br> server_url: "https://chef.yourorg.com:4000"<br><br> # Node Name<br> # Defaults to the instance-id if not present<br> node_name: "your-node-name"<br><br> # Environment<br> # Defaults to '_default' if not present<br> environment: "production"<br><br> # Default validation name is chef-validator<br> validation_name: "yourorg-validator"<br> validation_key: |<br> -----BEGIN RSA PRIVATE KEY-----<br> YOUR-ORGS-VALIDATION-KEY-HERE<br> -----END RSA PRIVATE KEY-----<br><br> # A run list for a first boot json<br> run_list:<br> - "recipe[apache2]"<br> - "role[db]"<br><br> # Specify a list of initial attributes used by the cookbooks<br> initial_attributes:<br> apache:<br> prefork:<br> maxclients: 100<br> keepalive: "off"<br><br> # if install_type is 'omnibus', change the url to download<br> omnibus_url: "https://www.opscode.com/chef/install.sh"<br><br># Capture all subprocess output into a logfile<br># Useful for troubleshooting cloud-init issues<br>output: {all: '| tee -a /var/log/cloud-init-output.log'}<br>
CloudInit connaît plusieurs limites :
- La documentation : la syntaxe cloud-config parait très puissante au premier abord. Cependant, aucun détail n’est apporté sur les différents noeuds YAML possibles. La seule solution est de cloner le dépot Bazaar CloudInit pour regarder en détail les exemples, voir le code python dans certains cas.
- La transparence : les logs générés à l’issue de l'exécution du script sont peu verbeux et incomplets.
- La compatibilité :
Amazon EC2 et OpenStack permettent d’injecter des scripts CloudInit depuis leurs interface. Cette fonctionnalité demeure absente sur Azure par exemple. Pour palier à ce manque, l’utilisateur de CloudInit doit rajouter le script en dur dans l’image ISO du système d’exploitation.
Le projet est dédié à Ubuntu et a été porté en version bêta sur Debian à partir de la v8.04 et sur Fedora à partir de la version 16. En revanche CloudInit n’est pas intégré par défaut dans ces distributions (y compris Ubuntu) et donc seules des versions pré-packagés peuvent être utilisées.
Cette solution demeure non-standard pour les autres distributions Linux. Sans parler de Windows Server.
Le périmètre d’utilisation de ce framework non standardisé est très large et rentre en partie en concurrence avec les outils plus adoptés de gestion des configurations type Puppet, Cfengine ou Chef.
L’avantage de CloudInit par apport à ces outils est le fait d’être supporté nativement par certaines versions d’Ubuntu et maniable en utilisant les APIs EC2 sans avoir à intervenir directement sur l’instance, au contraire de Chef qui nécessite une intervention sur chaque instance pour l’installer et surtout pour indiquer les recettes à jouer.
Le scénario idéal qui se dégage est l’utilisation de CloudInit lors du premier démarrage afin d’installer et de paramétrer Chef en mode client ou solo, puis de reposer sur ce dernier pour la suite de l’installation et de la configuration.