-
Notifications
You must be signed in to change notification settings - Fork 0
Home
oscmd permet de s'interfacer avec l’API Amazon, que ce soit directement chez Amazon, ou chez Outscale.
Il est écrit en python et utilise la librairie boto.
L’URL du VCS est https://github.com/fbacchella/oscmd/.
oscmd utilise Distutils. Il suffit donc d’exécuter la commande :
cd .../oscmd && python setup.py install
pour installer oscmd. Cette commande nécessite les droits root
. Pour une installation par l’utilisateur, différentes solutions sont possibles :
cd .../oscmd && python setup.py install --user
qui installera dans $HOME/.local
cd .../oscmd && python setup.py install --home=<dir>
qui installera dans <dir>
Avec virtualenv, pour disposer d’un environnement dédié mais qui reste léger :
virtualenv --no-pip --never-download .../vmtools
.../vmtools/bin/easy_install .../oscmd
Si l’installation via l’une ou l’autre méthode annonce des erreurs de compilation de ext/_yaml.c
, elles sont sans conséquences.
Dans tout les cas, l’outil oscmd sera alors installé dans ../${ROOTISNTALL}/bin/oscmd
Pour faire tourner oscmd dans un environnement windows, il faut installer
Il est alors possible d’installer oscmd selon l’une des procédures précédentes.
La ligne de commande d’oscmd respecte la syntaxe :
oscmd [args] objet [args] verbe [args]
Objet correspond à un objet AWS : AMI, EIP, volume, instance,... Verbe correspond au type d'action que l’on souhaite réaliser sur cette objet : run, terminate, delete...
Chaque élément peut être modifié selon l’ensemble des arguments qui le suivent immédiatement. De cette façon chaque élément possède son propre espace d’argument, sans risque de collision : le -x de AMI n'est pas le -x de EIP.
Pour chaque élément la commande -h liste les éléments de niveau supérieur :
oscmd -h
renvoie la liste des objets, etc.
En règle générale, les objets prennent un argument -i
ou -n
permettant d’identifier l’objet. Avec -i
, il est identifié par son identifiant AWS, -n
identifie l'objet par le nom, en général la valeur du tag Name
.
boto peut utiliser un fichier de configure $HOME/.boto
. L’élément racine (directement après l’appel de oscmd) prend l'argument -c pour spécifier un autre fichier de configuration. Il est possible de préciser le chemin du fichier de configuration dans la variable d’environnement BOTO_CONFIG
.
Le fichier de configuration contient les clauses et sections suivantes :
-
[Boto]
-
ec2_region_name : le nom de la region AWS
-
ec2_region_endpoint : le hostname qui servira à construire l'URL de l'API
-
[Account]
-
id : l’account id
-
email : l’email du propriétaire de l’account
-
[Credentials]
-
aws_access_key_id : l'ID clé d’API AWS
-
aws_secret_access_key : le secret de la clé d'API AWS
-
key_file : le chemin de la clé ssh
-
key_name : le nom de la clé ssh configuré
-
user : le compte à utiliser lors d'une connexion ssh sur une instance.
Chaque objet dispose d’une section où il peut récupérer les valeurs par défaut de son choix.
Plus de détails sont disponible directement dans la documentation de boto : http://boto.readthedocs.org/en/latest/boto_config_tut.html
L’élément racine dispose des options suivantes :
-
-z | --zone= ZONE_NAME
qui permet de choisir une zone de disponibilité différente de celle par défaut -
-e | --endpoint= ENDPOINT
qui permet de changer le host destination des appels d'API -
-L | --listzone
, qui génère une liste des zones de disponibilité pour cette région.
Beaucoup d’objets gère le verbe dump
, qui permet d'obtenir des informations détaillés. Donné avec un identifiant d’objet, il détail uniquement celui-ci. Si aucun n’est fournit tout les objets sont détaillés.
De même le verbe list
est fréquent, il permet d'obtenir une list des objets, selon un formatage qui peut être spécifié et et qui respect les règles de formatage de string de python. La chaine de formatage est appliqué à un dictionnaire contenant les attributs de l’objet.
L’objet ami accepte les verbes :
- run
- dump
- list
- make
- share
- exist
Le verbe run
permet de créer une instance à partir d'une AMI.
C’est une commande assez complexe, qui enrichie fortement la commande sous jacente AWS :
-
-n | --name= NAME
défini le nom de l’instance, c'est à dire qu’il posititionne le tagName
-
-s | --volume_size= VOLUME_SIZE
crée on volume de la taille indiqué en giga et lui affecte automatiquement un device sd, il sera nommé NAME/sdx -
-i | --snap_id= SNAP_ID
crée on volume à partir du snapshot indiqué et lui affecte automatiquement un device sd, il sera nommé NAME/sdx -
-U | --url= URL_COMMANDS
défini une URL d’où sera extrait un script de poste installation -
-u | --user= USER
le compte à utiliser pour la connexion de post-installation -
-f | --key_file= KEY_FILE
le fichier de la clé ssh à utiliser pour la connexion de post installation -
-F | --Fact= LOCAL_FACTS
rajouter des faits statique à facter, qui peuvent être utilisé par puppet -
-H | --hostname= HOSTNAME
force le hostname courant de la machine ; cette information n’est pas persistante -
-T | --template= TEMPLATE
un fichier yaml de template qui permet de définir des valeurs par défaut pour des arguments -
-V | --variable= VARIABLES
permet de définir une variable sous la formename=value
qui pourra être utilisé par un script inclut avec la commande -r -
-r | --ressource= EMBEDDED_RESSOURCE
rajoute cette ressource dans le champ user_data, en fonction du type de ressource, des actions automatiques peuvent être exécutés -
-R | --ressources= RESSOURCES
multi valué, permet de définir des chemins supplémentaires de ressources -
-e | --elastic_ip
permet l'auto-allocation d’une elastic ip -
-I | --private_ip= PRIVATE_IP_ADDRESS
permet de définir l'adresse IP privée, sur une machine dans un VPC Amazone - *
-P | --profile= INSTANCE_PROFILE_ARN
*permet de définir le nom de l’arn du profil d'instance IAM dans le cas d’une machine Amazon.
Les commandes suivantes correspondent directement aux argument de RunInstances
-
-t | --instance-type= INSTANCE
défini le type d’instance -
-p | --placement= PLACEMENT
défini la zone de disponibilité -
-S | --security_groups= SECURITY_GROUPS
défini un group de sécurité, il peut être répété -
-k | --key_name= KEY_NAME
le nom de la clé ssh à autoriser.
Un fichier de template est un fichier yaml qui permet d’éviter des lignes de commandes trop longue et incompréhensible, il contient une association (map au sens yaml) qui permet de définir une série de valeurs par défaut. Il peut prendre les élements suivants :
-
instance_type
qui définit le type d'instance -
security_groups
une énumération yaml de groupes de sécurité, qui sera remplacé si un argument-S
est donné -
ressource
une énumération yaml de ressource à installer sur la VM -
ressources_dir
une énumération yaml de chemins de recherche des ressources -
variables
une énumération yaml de variables d'environnement -
local_facts
une association (map) entre un fact local et sa valeur, l’argument -F ne remplace que sa clé, en laissant les autres intouchée volume_size
-
elastic_ip
prend une valeur booléen -
ami_name
pour identifier l'AMI à utiliser par son nom -
ami_id
pour identifier l'AMI à utiliser par son id
si l’une des clé ami_name ou ami_id est défini, les arguments d’objet -n
ou -i
ne sont plus nécessaires.
[Un exemple d’usage](https://github.com/fbacchella/oscmd/wiki/Creation-d'un-VM-puppetizé-via-un-template VM templated creation) est donné sur le wiki.
Cette commande prépare dans le champ user_data une série d’informations et de ressources encodées dans un objet MIME qui seront ensuite utilisées à la fin de l'installation pour préparer la machine.
En fonction du type de ressource, les actions adéquates sont
- un rpm, qui sera automatiquement installé ;
- un exécutable shell ou python sera automatiquement exécuté ;
- un objet MIME de type multipart/mixed (extension .mime) sera extrait récursivement ;
- un objet MIME de type text/plain, associé à un Content-Disposition sera extrait à l’emplacement précisé.
L'option volume_size
peut être suffixé par une unité SI pour préciser la taille. Elle peut prendre aussi une série d'options séparé par des virgules, par exemple : --volume_size=50,iops=500. De plus l'option iops
configure automatiquement les paramètres comme volume_type
et ebs_optimized
.
Le verbe share
permet de donner l’accès d'une AMI à plusieurs utilisateurs.
-
-u | --users USERS
donne une liste d’id d’utilisateurs pouvant accéder à cette AMI. La valeur par défaut de cette valeur est prise dans la clé share_users
Le verbe list
permet d'énumérer les AMI accessibles.
-
-p | --pattern= PATTERN
utilise un motif format python. Il prendra comme argument la liste des attributs évoqué des ami, il faut donc utiliser des clés nommés : %(nom)s -
-s | --showattributes
retourne la liste des attributs utilisable de l'AMI -
-o | --owner= OWNER
restreint la liste des AMI à celle appartenant au compté donné, il utilise comme valeur par défaut la cléowner
de la sectionami
si elle existe -
-O | --noowner
annule la valeur par défaut de l'option précédente
En plus des arguments usuels d’identification -n
ou -i
, l’objet instance permet l’identification avec l’argument -s|--self
qui indique que l’instance à utiliser est celle sur laquelle la commande est lancée.
Il accepte les verbes :
- console
- dump
- associate
- list
- ping
- reboot
- terminate
- stop
- start
- exist
- ssh
- addvolume
- attach
Le verbe terminate
entraine la destruction d’une VM.
-
-p | --purge
entraine la suppression d'une Elastic IP associée ainsi que des volumes.
Le verbe attach
attache à une instance un volume en utilisant son nom ou son ID.
-
-i | --id= ID
identifie le volume par son id. -
-n | --name= NAME
identifie le volume par son nom.
Le verbe console
permet de récupérer la console (série en générale) d'une VM.
-
-f | --follow
permet de continuer à suivre l'affichage de la console.
Le verbe addvolume
permet de créer un volume EBS et de l'attacher à l'instance dans un même temps. Celui-ci peut être automatiquement concaténer à un volume LVM existant.
-
-n | --name= NAME
le nom du volume, qui sera prefixé parnom d'instance/
. -
-s | --size= SIZE
la taille en GiOctets. -
-m | --mount= MOUNT
le point de montage du volume LVM auquel attacher le nouveau volume EC2. -
-d | --deviceid= DEVICEID
un identifiant pouvant être utilisé par blkid pour identifier le volume LVM. Il est de la forme LABEL=... ou UUID=....
L'objet volume
accepte les verbes
- dump
- list
- attach
- detach
- delete
Le verbe attach
attache un volume à une instance donné.
-
-i | --id= ID
identifie l'instance par son id. -
-n | --name= NAME
identifie l'instance par son nom.
Le verbe detach
détache un volume d'une instance.
-
-f | --forced
force le détachement.
L’objet snapshot
accepte les verbes
- delete
- list
- dump
- summary
L’identifiant utilisé pour cet objet est directement l’adresse IP. Il ne gère pas la notion de nom.
L’objet securitygroup
accepte les verbes
- dump
- create
- list
- exist
- add_rule
- remove_rule
-
-u | --used
n’affiche que les securitygroup associés à au moins une instance.
Ce verbe permet d’ajouter une ou plusieurs règles dans un groupe de sécurité.
-
-p | --protocol= IP_PROTOCOL
le nom du procotol concernant cette règle, dans la liste icmp, udp, tcp. Si cette option est répété plusieurs fois, la définition sera appliqué à tout les protocoles indiqués. -
-P | --port_range= PORT_RANGE
la plage de port concernant, sous la formedébut:fin
. Un nombre seul indique un seul port, la chaine ALL indique tout les ports pour ce protocol ou tout les types pour ICMP. -
-m | --mask= CIDR_IP
le réseau source, sous la forme CIDR c'est à dire A.B.C.D/bits. -
-s | --source_group=
le group de sécurité source.
Les options -m
et -s
sont exclusives.