Siempre me pregunto ¿cuál es la buena manera de reemplazar los siguientes shell tareas utilizando el «ansible» (con get_url, etc.):

- name: Install oh-my-zsh
  shell: wget -qO - https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | bash -

o

- name: Install nodesource repo
  shell: curl -sL https://deb.nodesource.com/setup_5.x | bash -

OriginalEl autor Oliboy50 | 2016-05-01

6 Comentarios

  1. 18

    Esto funcionó para mí:

      - name: Download zsh installer
        get_url: url=https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh dest=/tmp/zsh-installer.sh
    
      - name: Execute the zsh-installer.sh
        shell: /tmp/zsh-installer.sh
    
      - name: Remove the zsh-installer.sh
        file: path=/tmp/zsh-installer.sh state=absent
    ‘Script’ el módulo de transferencias de un script local al host de destino, entonces se ejecuta. El ‘get_url’ descargas para el host de destino. Por lo tanto, usted necesita ‘shell’ o ‘comando’, no ‘script’.
    Esta no es una solución como la shell módulo se utiliza todavía. Así no se soluciona idempotencia problema (siempre cambia). y esto hace que la playbook no (de dos tareas en lugar de uno). Esto también crea un archivo aunque en tmp del sistema de ficheros (en este caso). Debe haber get_url o uri módulos de funcionalidad para este fin… Esperemos que en el futuro…
    De acuerdo con drew, esta no es una solución.
    El hecho de que un script para ser lanzado implica que la tarea se debe ejecutar en cada iteración, independientemente de la Ansible comando/módulo involucrados. En mi opinión esta es tratar con mucho cuidado.

    OriginalEl autor RaviTezu

  2. 5

    @RaviTezu solución no funciona porque el archivo/secuencias de comandos que desea ejecutar debe estar en la máquina donde se ejecuta el juego/papel.

    Como por la documentación aquí

    El local de la secuencia de comandos en la ruta de acceso será transferido al nodo remoto y luego ejecutado.

    Así que una manera de hacerlo es descargando el archivo local y con una tarea como la siguiente:

    - name: execute the script.sh
      script: /local/path/to/script.sh

    O usted puede hacer esto:

    - name: download setup_5.x file to tmp dir
      get_url:
        url: https://deb.nodesource.com/setup_5.x
        dest: /tmp/
        mode: 0755
    
    - name: execute setup_5.x script
      shell: setup_5.x
      args:
        chdir: /tmp/

    Me iría a por el primer método si va a cargar su propia secuencia de comandos, el segundo método es más útil en tu caso, ya que el script puede se actualiza en tiempo, por lo que están seguros de que cada vez que se ejecuta se utiliza la última secuencia de comandos.

    OriginalEl autor sys0dm1n

  3. 3

    Para mí, la siguiente declaración trabajado:

     - name: "Execute Script"
       shell: curl -sL https://rpm.nodesource.com/setup_6.x | bash -
    La pregunta era cómo evitar esto y el uso de Ansible módulos nativos, no de shell.
    Esto es cierto, gracias.

    OriginalEl autor Jan Clemens Stoffregen

  4. 1

    Considerar el uso de la get_url o uri módulo en lugar de correr curl.

    Por ejemplo:

    - name: Download setup_8.x script
      get_url: url=https://deb.nodesource.com/setup_8.x dest=/opt mode=755
    - name: Setup Node.js
      command: /opt/setup_8.x
    - name: Install Node.js (JavaScript run-time environment)
      apt: name=nodejs state=present

    OriginalEl autor kenorb

  5. 0

    Puede ser este ejemplo básico puede ayudarle a comenzar:

    ---
    - name: Installing Zsh and git
      apt: pkg=zsh,git state=latest
      register: installation
    
    - name: Backing up existing ~/.zshrc
      shell: if [ -f ~/.zshrc ]; then mv ~/.zshrc{,.orig}; fi
      when: installation|success
      sudo: no
    
    - name: Cloning  oh-my-zsh
      git:
        repo=https://github.com/robbyrussell/oh-my-zsh
        dest=~/.oh-my-zsh
      when: installation|success
      register: cloning
      sudo: no
    
    - name: Creating new ~/.zshrc
      copy:
        src=~/.oh-my-zsh/templates/zshrc.zsh-template
        dest=~/.zshrc
      when: cloning|success
      sudo: no

    OriginalEl autor Arbab Nazar

  6. 0

    Nota: «fuerza=sí», que siempre va a descargar el script, reemplazando a la antigua.
    También tenga en cuenta el «changed_when», que se puede refinar por su caso.

      - name: 'Download {{ helm.install_script_url }}'
        environment:
          http_proxy:  '{{proxy_env.http_proxy | default ("") }}'
          https_proxy: '{{proxy_env.https_proxy | default ("") }}'
          no_proxy:    '{{proxy_env.no_proxy | default ("") }}'
        get_url: url={{ helm.install_script_url | default ("") }} dest=/tmp/helm_install_script force=yes mode="0755"
        when: helm.install_script_url is defined
        tags:
        - helm_x
    
      - name: Run {{ helm.install_script_url }}
        environment:
          http_proxy:  '{{proxy_env.http_proxy | default ("") }}'
          https_proxy: '{{proxy_env.https_proxy | default ("") }}'
          no_proxy:    '{{proxy_env.no_proxy | default ("") }}'
        command: "/tmp/helm_install_script"
        register: command_result
        changed_when: "'is up-to-date' not in command_result.stdout"
        when: helm.install_script_url is defined
        args:
          chdir: /tmp/
        tags:
        - helm_x

    OriginalEl autor ReSearchIT Eng

Dejar respuesta

Please enter your comment!
Please enter your name here