2017-01-25 14 views
1

迷惑メール設定では、私は仮想マシンをプロビジョニングするためにAnsibleを使用します。可能な役割:ファイル拡張子を変更する

~/bin/one.sh
~/bin/two.sh

私は最終結果がどのように見えるように、それらのファイルのシンボリックリンクを作成したい:Ansible役割の一つで

、私は​​フォルダ内にコピーするいくつかのファイルがタスクを持っています:

~/bin/one.sh
~/bin/two.sh
~/bin/one(syml ~/bin/one.shへのインク)
~/bin/two~/bin/two.shへのシンボリックリンク)

どのように私はそれを達成することができますか?これまでのところ、私はこれを試してみましたが、それは動作しません:

- name: Common tasks =>Create symlinks for utilities 
    file: src=~/bin/{{ item }} dest=~/bin/ mode=755 state=link 
    with_fileglob: 
    - bin/* 

私は(one.shのような)ファイル名を取り、拡張子を削除しdest=~/bin/内部の正規表現を配置する必要があり(one.shoneなります)が、私はどのようにそれを行うか分からない。例えば、

#!/bin/bash 
folder=$1 
command=`ls -1 $folder | grep .sh$` 
for i in $command; do 
    # filename in $i 
    basename=`echo ${i} | gawk 'match($0, /(.*?)\.sh/, a) {print a[1]}'` 
    ln -s $folder/$i $folder/$basename 
done 

パス引数フルパスフォルダ:あなたはbashスクリプトを実行できる場合

- name: Copy common files to ~/bin 
    copy: src={{ item }} dest=~/bin/ mode=755 
    with_fileglob: 
    - bin/* 

- name: Ensure symlinks for utilities exist 
    file: src=~/bin/{{ item | basename | regex_replace('(\w+(?:\.\w+)*$)', '\1') }} dest=~/bin/{{ item | basename | regex_replace('\.sh','') }} mode=755 state=link 
    with_fileglob: 
    - bin/* 
+0

@techraf質問を更新しました。 – numediaweb

答えて

3

でベース名で.SHスクリプトへのすべてのシンボリックリンクを作成します。バージョン2.0で新たに(パスまたはファイル名のルートと拡張子を取得するには

):

# with path == 'nginx.conf' the return would be ('nginx', '.conf') 
{{ path | splitext }} 

あなたはそう、リストの最初の要素を参照する必要があります。

0もちろん

fileglob検索が制御マシン上でローカルに実行されている(およびコピーするために使用前のタスクにされているので、上記課題の作品は、あなたが後で問題外で編集タスクで指定された規定を与えられました同じファイルなので、ローカルマシン上に存在するものと仮定します)。

このタスクを単独で実行する場合は、先にfind moduleでターゲットノード上のファイルのリストを準備してから、上記のループ処理を実行してください。

+0

'with_fileglob'と' with_items'を組み合わせる方法はありますか? – numediaweb

+0

私はその質問を理解していません。どのように組み合わせる? – techraf

+0

私が意味することは、私の不可解な役割の1つに、〜/ bin /フォルダの中にシンボリックリンクを作成する* .shスクリプトである 'devenv \ ansible \ roles \ common \ files \ bin'の中にいくつかのファイルがありますそういうファイル名を手動で入力するのではなく、 'with_fileglob'を使って名前を取得し、それらをwith_itemsに渡したいと思っています。 – numediaweb

-1

更新

は、私は最終的に、このタスクを使用し

./ln.sh /home/techraf/script/bash 

、それはother useful filters章からそのフォルダ

関連する問題