2017-01-26 16 views
0

Elixirプログラミング言語のバージョンマネージャーをAnsibleを使用してインストールしようとしています。 Ansibleを使ってPATHにバイナリを追加する

これら

は、私はこのために使用戯曲です:

- name: Kiex Installation 
    hosts: web 
    gather_facts: false 
    remote_user: deployer 
    tasks: 
    - shell: \curl -sSL https://raw.githubusercontent.com/taylor/kiex/master/install | bash -s 
    - name: Add Kiex Bin to Path 
     lineinfile: 
     dest: /home/deployer/.bashrc 
     regexp: '^test -s' 
     line: '[[ -s "$HOME/.kiex/scripts/kiex" ]] && source "$HOME/.kiex/scripts/kiex"' 
    - name: Reload Path 
     shell: source /home/deployer/.bashrc 
     args: 
     executable: /bin/bash 
    - shell: echo $PATH 
     register: pathul 
    - debug: 
     var: pathul 

- name: Elixir Installation 
    hosts: web 
    gather_facts: false 
    remote_user: deployer 
    tasks: 
    - shell: echo $PATH 
     register: pathul 
    - debug: 
     var: pathul 
    - name: Install Elixir Version 
     command: /home/deployer/.kiex/bin/kiex list 
     args: 
     executable: /bin/bash 
     chdir: /home/deployer/ 
    - name: Set Elixir Version as Default 
     shell: kiex default 1.4 

Kiexのインストールは成功だと私は、リモートマシンにログインする場合、私はkiexコマンドを使用して、単純にそれを実行することができています。私はバイナリを "〜/ .kiex/scripts/kiex"にソースしたので、これを行うことができます。私は$PATH変数をエコーすると、それはそれでkiexバイナリパス/home/deployer/.kiex/binを示しています

$ echo $PATH 
/home/deployer/.kiex/bin:/home/deployer/.kiex/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 
しかし

kiexkiex listと上に示したエリクサーインストールプレイ中/home/deoployer/.kiex/bin/kiex listがメッセージで失敗しても:

TASK [Set Elixir Version as Default] ******************************************* 
fatal: [local-web-2]: FAILED! => {"changed": true, "cmd": "kiex default 1.4", "delta": "0:00:00.002042", "end": "2017-01-26 22:13:32.898082", "failed": true, "rc": 127, "start": "2017-01-26 22:13:32.896040", "stderr": "/bin/sh: 1: kiex: not found", "stdout": "", "stdout_lines": [], "warnings": []} 

また、012を使用してパスをエコーし​​た結果を登録した変数/home/deployer/.kiex/bin

"stdout": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" 

kiexコマンドは、どのようにしてAnsibleで正常に動作させることができますか?

答えて

1

だけの例では、あなたが投稿の説明では、あなたがInstall Elixir Versionタスクにしようとしたように、完全な絶対パスを使用しますが、あなたはタイプミスを持っている心、両方:

command: /home/deoployer/.kiex/bin/kiex list 

を[ ]でも/home/deoployer/.kiex/bin/kiex list []失敗[S]

は、それはおそらく最初のプレイではなく、deoployerのように、deployerでなければなりません。

正しいパスを入力すると、「kiex:not found」というメッセージで失敗する可能性はありません。他のタスクに関する


説明:

  • man bashを引用:

    ログインシェルではありませんインタラクティブシェルが起動されるとすれば、bashは、~/.bashrcからコマンドを読み込み、実行そのファイルが存在します。

    あなたの~/.bashrcは、対話型セッションではないため、Ansibleでタスクを実行しても読み取られません。

    これは、たとえばpathul変数に~/.bashrcに適用された変更が含まれていない理由です。

  • 次の2つのタスクは、別々のbashプロセスを実行します。最初のタスクで調達環境は、第二の環境に影響を及ぼさない:

    - name: Reload Path 
        shell: source /home/deployer/.bashrc 
        args: 
        executable: /bin/bash 
    - shell: echo $PATH 
        register: pathul 
    
+0

私は私の脚本でデプロイヤを持っていました。タイプミスは、stackoverflowサンプルのちょうどでした。 〜/ .bashrcが読み込まれていないことに関して、私はそこに何か間違っていると思わなかった。どこで '[[-s" $ HOME/.kiex/scripts/kiex "]] && source" $ HOME/.kiex/scripts/kiex "''を置くべきですか? –

+0

私は分かりません。それは、OSと配布に依存します。そして、私は完全な道を使うことを勧めました。 – techraf

+0

私は '〜/ .profile'を試しましたが、まだ運がありません。 –

関連する問題