gokigenmaruのブログ

40から始めるクラウドエンジニア

ansibleのsearch_stringでエラーになる

ansibleでファイルを操作しようとしたところ、search_stringでエラーが発生しファイル操作が出来ませんでした。
今回はその対応について。

ansible

ansibleはIaCの1つで、Redhat社が提供するオープンソース(課金版もあります)のIaCツールです。
クラウドのほかにLinux系のサーバOSやCisco系のNWOSに対応しています。

今回のエラー

エラー内容

エラーは以下の構文の実行時に発生しました。

- name: test
  ansible.builtin.lineinfile:
    path: xxxxxxxx
    state: present
    search_string: "xxxx"
    line: "xxxx"

エラー内容は以下の通りです。

fatal: [vpctestserver]: FAILED! => {"changed": false, "msg": "Unsupported parameters for (ansible.builtin.lineinfile) module: search_string Supported parameters include: attributes, backrefs, backup, create, firstmatch, group, insertafter, insertbefore, line, mode, owner, path, regexp, selevel, serole, setype, seuser, state, unsafe_writes, validate"}

調査

エラーメッセージ

エラーメッセージに「"Unsupported parameters for (ansible.builtin.lineinfile) module: search_string」とあるので、search_stringがansible.builtin.lineinfileでは対応していないと読み取れます。
対応しているは「attributes, backrefs, backup, create, firstmatch, group, insertafter, insertbefore, line, mode, owner, path, regexp, selevel, serole, setype, seuser, state, unsafe_writes, validate」であると。
しかしながら、ansibleのホームページ上はsearch_stringについて記載があるので、ansibleとして対応していないわけではなさそうです。

docs.ansible.com

調べてみると

調べてみると、どうやらsearch_stringはansible2.11から追加されたようです。
自端末(WSL2のUbuntu22.04)のansibleのバージョンを確認すると、ansible 2.10.8でした…。
このansibleはubuntuリポジトリから持ってきたもので、2024/9/17時点での最新版は2.10.8、これだとsearch_string使えない…。

調べてみると、ubuntuリポジトリにppa:ansible/ansibleを追加することで最新版を手に入れられそう。

対応

ということで、既存のansibleをアンインストールし、PPAから最新のansibleを持ってくることにします。

docs.ansible.com

$ sudo apt remove ansible
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo apt-add-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible
$ ansible --version
ansible [core 2.16.11]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/xxxx/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  ansible collection location = /home/xxxx/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.10.12 (main, Jul 29 2024, 16:56:48) [GCC 11.4.0] (/usr/bin/python3)
  jinja version = 3.0.3
  libyaml = True

無事、ansible 2.16が手に入りました。
この状態で実行するとsearch_stringのエラーは出なくなりました。