CentOS-7.3 + ansible-2.3.1.0 で、PGDG 版の PostgreSql(postgresql96-*)
を導入するための playbook を運用していて問題が発生しました。
デフォルトで入っている postgresql-libs (バージョン番号なし)を消すための
テストスクリプトで実験しています。
bash
1$ cat test.yml 2--- 3- hosts: localhost 4 tasks: 5 - yum: 6 name: postgresql-libs 7 state: absent 8 become: yes
これを、
bash
1$ rpm -qa|grep ^postg 2postgresql96-libs-9.6.3-1PGDG.rhel7.x86_64 3postgresql-libs-9.2.18-1.el7.x86_64
という状態で流すと想定した動きをしますが、postgresql-libs が消えた後に
もう一度流すと、postgresql96-libs が消えてしまうことに気が付きました。
これは、postgresql96-libs が postgresql-libs という名前を名乗っている
からではないかと推定しています。
bash
1$ rpm -q --provides postgresql96-libs | grep postgresql-libs 2postgresql-libs = 9.6
事前に shell でパッケージの存在を確認するように、以下のように
bash
1- hosts: localhost 2 tasks: 3 - shell: rpm -qa | grep postgresql-libs | sed -E 's/libs-.*$/libs/' 4 register: default_pkg 5 - yum: 6 name: postgresql-libs 7 state: absent 8 become: yes 9 when: default_pkg.stdout == 'postgresql-libs'
とすれば通りますが、以下のような警告が出ます。
bash
1 [WARNING]: Consider using yum, dnf or zypper module rather than running rpm
そもそも、shell ディレクティブはセキュリティ上あまり推奨されないようです。
なにかもっとすっきりした解決方法があればご教示願います。
【追記】
「yumモジュールのlist」 は、存在だけは知っていたのですが、使い方が
今ひとつよくわかりません。今回のケースだと、以下のように書けば、一応
通りはするようです。
bash
1$ cat test3.yml 2--- 3- hosts: localhost 4 tasks: 5 - yum: 6 list: postgresql-libs 7 register: default_pkg 8# - debug: var=default_pkg 9 - yum: 10 name: postgresql-libs 11 state: absent 12 when: (default_pkg.results[0].name == 'postgresql-libs' and default_pkg.results[0].yumstate == 'installed') or 13 (default_pkg.results[1].name == 'postgresql-libs' and default_pkg.results[1].yumstate == 'installed') or 14 (default_pkg.results[2].name == 'postgresql-libs' and default_pkg.results[2].yumstate == 'installed')
ただ、一般に yum list で候補が何個出てくるのかは不定なので、ここでは
3個と決め打ちになってしまっています。どう書くのが正解でしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/30 06:52
2017/06/30 08:27
2017/06/30 13:51
2017/06/30 14:43