2016-05-01 6 views
8

Ich frage mich immer, was der gute Weg ist, um die folgenden shell Aufgaben mit dem "ansible way" (mit get_url, etc.) zu ersetzen:ansible wget dann Skripte exec => GET_URL Äquivalent

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

oder

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

Antwort

10

Das ist für mich gearbeitet:

- 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

ich denke, es ist der richtige Weg, dank;) – Oliboy50

+4

Das ‚script‘ Modul ein lokales Skript zu dem Ziel-Host überträgt, führt sie dann. Die 'get_url' -Downloads auf den Ziel-Host. Daher brauchen Sie 'Shell' oder 'Befehl', nicht 'Skript'. –

0

dieses Grund Beispiel y sein kann helfen ou zu starten:

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

@RaviTezu Lösung funktioniert nicht, weil die Datei/Skript, das Sie auf der Maschine ausführen möchten sein müssen, wo Sie Ihre Play/Rolle ausführen.

Gemäß der Dokumentation here

Die lokale Skript Pfad wird an den entfernten Knoten und dann ausgeführt übertragen werden.

So eine Möglichkeit, es zu tun ist, indem Sie die Datei lokal Download und die Verwendung einer Aufgabe wie folgt:

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

Oder Sie können dies tun:

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

ich für das gehen würde, erste Methode, wenn Sie Ihr eigenes Skript hochladen, ist die zweite Methode in Ihrem Fall nützlicher, da das Skript möglicherweise rechtzeitig aktualisiert wird, so dass Sie sicher sind, dass jedes Mal, wenn Sie es ausführen, das neueste Skript verwendet wird.

0

Beachten Sie: "force = yes", welches immer das Skript herunterlädt und das alte überschreibt. Beachten Sie auch die "changed_when", die Sie für Ihren Fall verfeinern können.

- 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

Für mich ist die folgende Anweisung gearbeitet:

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

Frage war, wie man dies vermeiden und native Ansible-Module verwenden kann, nicht Shell. –

+0

Das ist wahr, danke. –