Ansible copyでディレクトリを指定したときに階層が1つ深くなることを防ぐ
環境
$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
$ ansible --version
ansible 2.9.7
やりたいこと
files/
hoge/
aaa
bbb
ccc
tasks/
main.yml
$ cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
$ ansible --version
ansible 2.9.7
files/
hoge/
aaa
bbb
ccc
tasks/
main.yml
上記構成でhoge
ディレクトリとその中身を構築対象サーバ(ノード)に/tmp/hoge
として配置したい。
失敗例1
main.yml
- name: copy hoge
copy:
src: "hoge"
dest: "/tmp/hoge"
- name: copy hoge
copy:
src: "hoge"
dest: "/tmp/hoge"
これを実行すると以下のようになる。
$ cd /
$ find /tmp/hoge
/tmp/hoge
/tmp/hoge/hoge
/tmp/hoge/hoge/ccc
/tmp/hoge/hoge/bbb
/tmp/hoge/hoge/aaa
んん~~1階層多いぞう!
失敗例2(失敗ではない)
main.yml
- name: copy hoge
copy:
src: "hoge"
dest: "/tmp"
- name: copy hoge
copy:
src: "hoge"
dest: "/tmp"
結果
$ find /tmp/hoge
/tmp/hoge
/tmp/hoge/ccc
/tmp/hoge/bbb
/tmp/hoge/aaa
期待したどおりなんだけど、例えば転送したファイルaaa
をこの先の処理で使いたい場合に/tmp/hoge
をgroup_vars/all.yml
などに定義しておいて変数として扱いたくなる。この例では
# 転送先ディレクトリ
hoge_base_dir: "/tmp"
# ディレクトリ
hoge_dir: "/tmp/hoge"
と変数を2つ定義しなくちゃいけない?(Linuxのdirname
コマンドみたいなものが使えるのだろうか)。
成功例
main.yml
- name: copy hoge
copy:
src: "hoge/"
dest: "/tmp/hoge"
- name: copy hoge
copy:
src: "hoge/"
dest: "/tmp/hoge"
src
の最後に「/
」をつけることで「指定したディレクトリ配下のファイル」という指示になる。よってこの指定は厳密には「files/hoge/
ディレクトリ配下のファイル(aaa
,bbb
,ccc
)をリモートの/tmp/hoge
ディレクトリ配下にコピーする」となる。
結果
$ find /tmp/hoge
/tmp/hoge
/tmp/hoge/aaa
/tmp/hoge/ccc
/tmp/hoge/bbb
これなら変数も以下で済む。
# 転送先ディレクトリ
hoge_dir: "/tmp/hoge"
Author And Source
この問題について(Ansible copyでディレクトリを指定したときに階層が1つ深くなることを防ぐ), 我々は、より多くの情報をここで見つけました https://qiita.com/Ki2neudon/items/455ec1686c8a12690c70著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .