2016-05-01 8 views
8

zawsze zastanawiam się, co jest dobrym sposobem, aby wymienić następujące shell zadań za pomocą „ansibl drogę” (z get_url, itd.):ansibl wget następnie exec skrypty => GET_URL równoważne

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

lub

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

Odpowiedz

10

Ten pracował dla mnie:

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

I uważa, że ​​to właściwa droga, dzięki;) – Oliboy50

+4

Moduł „skrypt” przenosi się z lokalnym skrypt do hosta docelowego, a następnie uruchamia go. Pobieranie get_url do docelowego hosta. Dlatego potrzebujesz "powłoki" lub "polecenia", a nie "skryptu". –

0

może być to prosty przykład może pomóc y ou zacząć:

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

rozwiązanie @RaviTezu nie działa, ponieważ plik/skrypt, który chcesz wykonać musi znajdować się na komputerze, na którym wykonujesz swoją grę/rolę.

Zgodnie z dokumentacją here

Lokalny skrypt na ścieżce zostaną przeniesione do zdalnego węzła, a następnie stracony.

więc jednym ze sposobów na to jest pobierając plik lokalnie i przy użyciu zadania jak poniżej:

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

Albo można to zrobić:

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

pójdę dla pierwszą metodą, jeśli przesyłasz własny skrypt, druga metoda jest bardziej przydatna w twoim przypadku, ponieważ skrypt może zostać zaktualizowany na czas, więc masz pewność, że za każdym razem, gdy go uruchomisz, używa on najnowszego skryptu.

0

Uwaga: "force = yes", który zawsze pobiera skrypt, przesłaniając stary. Zwróć także uwagę na "zmieniony_when", który możesz zawęzić w swoim przypadku.

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

Dla mnie następujące oświadczenie pracował:

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

Pytanie, jak tego uniknąć i używać modułów macierzystych Ansible, a nie powłoki. –

+0

To prawda, dziękuję. –