Ansible で、ファイル名が入った変数の拡張子を省いて展開したい

投稿者: Anonymous

Ansible で、変数にファイル名がバインドされているとします。その拡張子を省いて展開したいです。

以下の通り、 regex_replace を用いればできるではないか、と思っているのですが、うまくいっていないです。

どうやったら、やりたいことが実現できるでしょうか。

追記:

以下のプログラムは、本当にやりたいことである、「変数から拡張子を省いて展開」をどうにかしてできないかと試行するために作った playbook です。シェルの機能で回避したいわけではないです。。


test.yml

---
- name: test ansible
  hosts: localhost
  user: ubuntu
  vars:
    file_name: "hoge.txt"
  tasks:
    - name: Hello server
      shell: echo "{{ file_name | regex_replace('^(.*)\.[^\.]*$','\1') }}" > test.txt

実行コマンド

ansible-playbook test.yml

期待する動作

  • test.txt の中身が hoge になる。

実際の動作

  • test.txt の中身が hoge.txt になる

解決

@unarist さんのコメントに従い、 debug モジュールを試してみることにしました。すると、期待通りの動作をしていることがわかりました。

何が、問題だったのだろうと今考えている状態です。

改良した playbook

---
- name: test ansible
  hosts: localhost
  user: ubuntu
  vars:
    file_name: "hoge.txt"
  tasks:
    - name: Hello server
      debug:
        msg: "Expand file_name Result: {{ file_name | regex_replace('^(.*)\.[^\.]*$','\1') }}"

実行結果

PLAY [test ansible] ************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [Hello server] ************************************************************
ok: [localhost] => {
    "msg": "Expand file_name Result: hoge"
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *