質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

2回答

8391閲覧

Ansibleでディレクトリ名を変更できない

Akkey247

総合スコア14

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

0クリップ

投稿2020/07/30 09:29

お世話になります。

現在、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でファイル名を変更するという行為は邪道なんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

unarchive モジュールを使うのはいかがでしょう。ディレクトリはあらかじめ作っておく必要があります。

tasks: - name: Create a directory file: path: /usr/local/phpmyadmin state: directory mode: '0755' - name: Unarchive a file with extra options unarchive: src: https://files.phpmyadmin.net/phpMyAdmin/4.9.5/phpMyAdmin-4.9.5-all-languages.tar.gz dest: /usr/local/phpmyadmin remote_src: true extra_opts: --strip-components=1

zip ファイルに対して -j をつけるのも試したのですが、これはうまく動きませんでした。

投稿2020/07/30 10:19

SugiTK

総合スコア495

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Akkey247

2020/07/31 00:56 編集

回答ありがとうございます! まさしくこれがやりたかったことでした。 「--strip-components=1」を付ければ中身のみをディレクトリ内に展開できるのですね。 展開後にディレクトリ名を変更することに固執しすぎて本質を見失っていました。 すごくベストアンサーしたいのですが、自分の中で一番引っかかっていたのがAnsibleでリネームできない理由だったので今回はそれを回答いただいたy_shinodaさんにベストアンサーさせていただきました。
guest

0

ベストアンサー

Ansibleでファイル名を変更するという行為は邪道なんでしょうか?

Ansible が目指している性質とは異なっています

Anisble の task は基本的に冪等性という性質を持っています
つまり、何度実行しても同じ状態になる、ということです
その中での例外が shellcommand です

ディレクトリー名を変更するということは、
最終的な状態を定義していることとは異なります

・・とは言っても、やはり、なかなかそうは理想通りに行かないこともあります

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
すべてのタスクの最後で、
filestate: absent で実行し、 /tmp をクリアします
Answer: Ansible: How to delete files and folders inside a directory?

投稿2020/07/30 10:00

y_shinoda

総合スコア3272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Akkey247

2020/07/31 00:36

回答ありがとうございます! なるほど。Ansibleの目指している性質と異なるのですね。 確かにリネームだと最終的な状態を定義することにはならないですね。 すごく引っかかっていた部分なのですっきりしました。納得です。 手順まで説明いただいてありがとうございます。とても参考になります。 頑張ってやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問