2013-05-07 3 views
0

J'utilise Ansible pour configurer et déployer une instance EC2, qui exécute MongoDB.Redémarrer MongoDB avec Ansible, après redémarrage EC2

Je me demande maintenant comment je peux configurer le redémarrage automatique de MongoDB, après le redémarrage de l'instance EC2. Ou dois-je simplement relancer le PlayBook Ansible?

Ceci est mon courant Ansible Playbook:

- hosts: staging_mongodb 
    user: ec2-user 
    sudo: yes 

    vars_files: 
    - vars/mongodb.yml 

    tasks: 
    - name: Check NTP 
     action: service name=ntpd state=started 

    - name: Copy MongoDB repo file 
     action: copy src=files/10gen.repo dest=/etc/yum.repos.d/10gen.repo 

    - name: Install MongoDB 
     action: yum pkg=mongo-10gen state=latest 

    - name: Install MongoDB server 
     action: yum pkg=mongo-10gen-server state=latest 

    - name: Template the MongoDB configuration file 
     action: template src=templates/mongod.conf.j2 dest=/etc/mongod.conf 

    - name: Prepare the database directory 
     action: file path=${db_path} state=directory recurse=yes owner=mongod group=mongod mode=0755 

    - name: Configure MongoDB 
     action: service name=mongod state=started enabled=yes 

Répondre

2

Dans cet exemple précis, la façon la plus simple serait dans le dernier bloc de changer state=started-state=restarted.

De la documentation du module service de Ansible:

démarré/arrêté sont des actions idempotents qui ne exécuter des commandes sauf si nécessaire. redémarré va toujours rebondir le service. reloaded sera toujours rechargé.

Cependant, selon les meilleures pratiques de Ansible, vous devriez envisager d'utiliser « gestionnaires » afin que votre MongoDB redémarre seulement si nécessaire .:

tasks: 
    - name: Template the MongoDB configuration file 
    action: template src=templates/mongod.conf.j2 dest=/etc/mongod.conf 
    notify: 
     - restart mongodb 

    - name: Prepare the database directory 
    action: file path=${db_path} state=directory recurse=yes owner=mongod group=mongod mode=0755 
    notify: 
    - restart mongodb 

    - name: Configure MongoDB 
    action: service name=mongod state=started enabled=yes 

handlers: 
    - name: restart mongodb 
    service: name=mongodb state=restarted 

Handlers ne sont tirés lorsque certaines tâches signalent des changements, et sont courir à la fin de chaque jeu de sorte que vous ne serez pas redémarrer votre MongoDB plus que nécessaire.

Enfin, au lieu d'utiliser yum pkg=mongo-10gen state=latest, pensez à utiliser des versions de package spécifiques. Avec quelque chose d'aussi important qu'une base de données, vous ne voulez pas que différentes versions de paquet soient exécutées chaque fois que vous construisez un nouveau serveur et/ou ne voulez pas être surpris quand 10gen publie de façon inattendue une nouvelle version qui vous affecte négativement. Utilisez une variable avec la version du nom de package et mettez-la à jour lorsque vous êtes prêt à migrer vers une nouvelle version.

+0

Merci pour votre réponse! – Voles

+0

@Voles Btw, le repo d'Ansible a quelques exemples pour MongoDB, pensez à y jeter un coup d'oeil https://github.com/ansible/ansible-examples – Mxx

+0

Cela semble être une liste de tâches, donc 'restart mongodb' va déclencher inconditionnellement tous les temps. Les tâches doivent être dans une section 'tasks:' et le gestionnaire dans une section 'handlers:'. – Nate

Questions connexes