Un outil qui automatise la construction de serveurs sans agents. ――Il se connecte à la machine exécutant sshd avec SSH et crée l'environnement.
Ecrivez le fichier de configuration en YAML. Aucune connaissance en programmation (Ruby, Python, etc.) n'est requise. Il est plus facile que le chef et la marionnette de construire un serveur avec plusieurs à des dizaines d'unités.
playbook.yml
---
- hosts: all
  remote_user: ec2-user
  become: true
  vars:
    version: 2.9.0
    prefix_dir: /usr/local
    src_dir: "{{ prefix_dir }}/src"
    bin_dir: "{{ prefix_dir }}/bin"
  tasks:
    - name: original git exist check
      stat: path={{ bin_dir }}/git
      register: exist_git
    - debug: msg="git not installed."
      when: exist_git.stat.exists == false
    - name: original git version check
      command: "{{ bin_dir }}/git --version warn=false"
      register: org_version
      changed_when: false
      when: exist_git.stat.exists == true
    - name: install dependences
      yum: name={{ item }}
      with_items:
        - curl-devel
        - expat-devel
        - gettext-devel
        - openssl-devel
        - zlib-devel
        - gcc
        - perl-ExtUtils-MakeMaker
      when: (exist_git.stat.exists == false) or
            (exist_git.stat.exists == true and org_version.stdout != "git version {{ version }}")
    - name: make download dir
      file: path={{ src_dir }} state=directory owner=root group=root mode=755
      when: (exist_git.stat.exists == false) or
            (exist_git.stat.exists == true and org_version.stdout != "git version {{ version }}")
    - name: download git version {{ version }}
      unarchive:
        src: https://www.kernel.org/pub/software/scm/git/git-{{ version }}.tar.gz
        dest: "{{ src_dir }}"
        copy: no
      when: (exist_git.stat.exists == false) or
            (exist_git.stat.exists == true and org_version.stdout != "git version {{ version }}")
    - name: make all
      make:
        chdir: "{{ src_dir }}/git-{{ version }}"
        target: all
        params:
          prefix: "{{ prefix_dir }}"
      when: (exist_git.stat.exists == false) or
            (exist_git.stat.exists == true and org_version.stdout != "git version {{ version }}")
    - name: make install
      make:
        chdir: "{{ src_dir }}/git-{{ version }}"
        target: install
        params:
          prefix: "{{ prefix_dir }}"
      when: (exist_git.stat.exists == false) or
            (exist_git.stat.exists == true and org_version.stdout != "git version {{ version }}")
L'exécution est la suivante.
$ ansible-playbook playbook.yml
Je fais git --version dans le module command, mais le comportement par défaut d'Ansible me prévient d'utiliser le module git. Le module git d'Ansible n'a pas de paramètre pour obtenir la version exécutable. Donc, pour l'instant, j'utilise le module command pour obtenir la version et spécifie warn = false pour supprimer l'avertissement me demandant d'utiliser le module git.
Modules de contrôle de code source --git (lien)
La partie répétée du même jugement conditionnel de when est plus intelligente si elle est stockée dans une variable en utilisant le module set_fact.
Veuillez vous référer aux articles suivants pour la gestion de «devenir» et PATH. Définissez un PATH équivalent à "sudo su-" à l'aide de l'environnement d'Ansible
Le module make d'Ansible deviendra "chenged" chaque fois qu'il sera exécuté tel quel.
Je veux qu'il soit «changé» lorsque j'exécute le PlayBook pour la première fois, mais je veux qu'il soit «ok» au lieu de «changé» lorsque je relance le même PlayBook.
Cependant, si vous spécifiez changed_when: False, ce sera ʻok même si le changement a été effectué lors de la première exécution, vous devriez donc éviter de spécifier changed_when: False.  Donc, cette fois, j'ai ajouté une fonction de vérification de version qui combine register et when`.
La combinaison de «une archive» et de «https» était l'auteur-compositeur.
Cela fonctionnait bien sur Amazon Linux, mais cela ne fonctionnait pas lorsque j'ai configuré le proxy dans un environnement authentifié par proxy. Probablement parce que vous n'avez pas spécifié d'invalider le certificat SSL.
Le module ʻunarchivea une optionvalidate_certs, et c'est OK si vous spécifiez validate_crets = no, mais cette option n'est pas prise en charge sauf si c'est Ansible ver.2.2 ou une version ultérieure.  Dans l'environnement avant Ansible ver.2.1, il était nécessaire de télécharger avec la combinaison de get_url, httpsetvalidate_crets = no`.
Cette fois, j'ai essayé d'installer Git à partir de la source, mais si vous installez un package qui n'est pas publié par rpm à partir de la source, il semble que ce PlayBook puisse être appliqué.
Eh bien.
Recommended Posts