ansible wget затем exec scripts => получить эквивалент url

мне всегда интересно, каков хороший способ заменить следующее shell задачи с использованием " ansible way "(with get_url, etc.):

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

или

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

6 ответов


это сработало для меня:

  - 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

@RaviTezu решение не работает, потому что файл / сценарий, который вы хотите выполнить, должен быть на машине, где вы выполняете свою игру/роль.

согласно документации здесь

локальный скрипт по пути будет перенесен на удаленный узел и затем выполнен.

Итак, один из способов сделать это-загрузить файл локально и использовать задачу, как показано ниже:

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

или вы можете сделать это:

- 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/

Я бы пошел на первый метод, если вы загружаете свой собственный скрипт, второй метод более полезен в вашем случае, потому что скрипт может быть обновлен вовремя, поэтому вы уверены, что каждый раз, когда вы его выполняете, он использует последний скрипт.


для меня сработало следующее утверждение:

 - name: "Execute Script"
   shell: curl -sL https://rpm.nodesource.com/setup_6.x | bash -

может быть этот простой пример может помочь вам начать:

---
- 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

обратите внимание: "force=yes", который всегда будет загружать скрипт, переопределяя старый. Также обратите внимание на" changed_when", который вы можете уточнить в своем случае.

  - 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

рассмотрите возможность использования get_url или uri модуль, а не работает curl.

например:

- 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