質問: お世話になります。 現在、Ansible(ver:2.9.10)を使ってサーバー(AmazonLinux2)の構築をしようと思っています。 Playbookの中で、phpMyAdminをダウンロードしてきて展開した後、ディレクトリ名をリネームしてから任意の場所に配置するという手順を記述したいのですが、ディレクトリ名のリネームがどうしてもできません。 実際shellモジュールやcommanndモジュールを使えば可能なのですが、もしAnsibleの機能で出来るならそちらを使いたいと思っています。 試してみた感じでは、 fileモジュールはファイルの作成・削除とパーミッションなどの変更ならできますが、ディレクトリ名のリネームはできませんでした。 copyモジュールもdistに新しいディレクトリ名を指定すればリネームできるかと思ったのですがこれも出来ませんでした。 他のファイルモジュールの中にもそれっぽいものは無いように見えます。 https://docs.ansible.com/ansible/latest/modules/list_of_files_modules.html ファイル名やディレクトリ名を変更したい需要は結構あるような気がするのですが、Ansibleの機能ではファイル名変更は出来ないのでしょうか? もしかしてAnsibleでファイル名を変更するという行為は邪道なんでしょうか?
回答: > > Ansibleでファイル名を変更するという行為は邪道なんでしょうか? > > > Ansible が目指している性質とは異なっています Anisble の task は基本的に`冪等性`という性質を持っています つまり、何度実行しても同じ状態になる、ということです その中での例外が `shell` や `command` です ディレクトリー名を変更するということは、 最終的な状態を定義していることとは異なります ・・とは言っても、やはり、なかなかそうは理想通りに行かないこともあります > > Playbookの中で、phpMyAdminをダウンロードしてきて展開した後、 > > ディレクトリ名をリネームしてから任意の場所に配置するという手順を記述したいのですが、 > > ディレクトリ名のリネームがどうしてもできません。 > > > 以降は飽くまで「僕の場合は」ですが、 そのようなとき、なるべく次のようにしています: 1 `unarchive` で `/tmp` にダウンロード・解凍します unarchive – Unpacks an archive after (optionally) copying it from the local machine — Ansible Documentation 2 'copy' で本来配置したいパスに配置します copy – Copy files to remote locations — Ansible Documentation 3 すべてのタスクの最後で、 `file`を `state: absent` で実行し、 `/tmp` をクリアします Answer: Ansible: How to delete files and folders inside a directory?