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

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

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

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

Q&A

解決済

2回答

6924閲覧

ansibleでyum removeを実行した際にエラーが返るのですが原因がわかりません(removeは完了している)

alpaca923

総合スコア24

Ansible

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

0グッド

0クリップ

投稿2016/03/24 09:16

ansible-playbookコマンドを用いて、
対象サーバ上の特定のrpmパッケージをyum remove同様に削除したいのですが
エラーが発生し、処理が途中で止まっていまいます。
また、ansibleの処理自体は途中で止まっているのですが、
yum removeは完了しているのです。

原因がつかめないため何か心当たりが思いつく方は助言頂けますと幸いです。

#実行時のログと設定内容
Postgresql9.4を入れた後、古いPostgresql-libsを消そうとしています。

▼実行時のログ

Bash

1ansible-playbook -k -i hosts postgresql_common.yml 2SSH password: 3 4PLAY [Development] ************************************************************ 5 6GATHERING FACTS *************************************************************** 7ok: [xx.xx.xx.xx] 8 9TASK: [postgresql_common | Install postgres process] ************************** 10changed: [xx.xx.xx.xx] => (item=postgresql94,postgresql94-devel,postgresql94-libs,postgresql94-contrib) 11 12TASK: [postgresql_common | remove old postgresql packages] ******************** 13failed: [xx.xx.xx.xx] => {"changed": false, "failed": true, "rc": 0, "results": ["Loaded plugins: fastestmirror, security, versionlock 14Setting up Remove Process 15Resolving Dependencies 16--> Running transaction check 17---> Package postgresql-libs.x86_64 0:8.4.20-5.el6_7 will be erased 18--> Finished Dependency Resolution 19 20Dependencies Resolved 21 22================================================================================ 23 Package Arch Version Repository Size 24================================================================================ 25Removing: 26 postgresql-libs x86_64 8.4.20-5.el6_7 @updates 625 k 27 28Transaction Summary 29================================================================================ 30Remove 1 Package(s) 31 32Installed size: 625 k 33Downloading Packages: 34Running rpm_check_debug 35Running Transaction Test 36Transaction Test Succeeded 37Running Transaction 38 Erasing : postgresql-libs-8.4.20-5.el6_7.x86_64 1/1 39 Verifying : postgresql-libs-8.4.20-5.el6_7.x86_64 1/1 40 41Removed: 42 postgresql-libs.x86_64 0:8.4.20-5.el6_7 43Complete! 44"]} 45 46FATAL: all hosts have already failed -- aborting 47 48PLAY RECAP ******************************************************************** 49 to retry, use: --limit @/Users/akinorisakamoto/postgresql_common.retry 50 51xx.xx.xx.xx : ok=2 changed=1 unreachable=0 failed=1

▼設定ファイル

- name: Install postgres process yum: name={{ item }} state=present enablerepo=pgdg94 disable_gpg_check=yes with_items: - postgresql94 - postgresql94-devel - postgresql94-libs - postgresql94-contrib tags: - postgresql_common - name: remove old postgresql packages yum: name=postgresql-libs state=absent - name: Postgresql PATH shell: | echo 'export PATH=$PATH:/usr/pgsql-9.4/bin'>>/root/.bash_profile echo 'export PATH=$PATH:/usr/pgsql-9.4/bin'>>/home/deploy/.bash_profile tags: - postgresql_common

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

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

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

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

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

guest

回答2

0

ベストアンサー

先にインストールした postgresql94-libs が影響しているようです。

# rpm -q --provides postgresql94-libs config(postgresql94-libs) = 9.4.6-1PGDG.rhel6 libecpg.so.6()(64bit) libecpg_compat.so.3()(64bit) libpgtypes.so.3()(64bit) libpq.so.5()(64bit) libpqwalreceiver.so()(64bit) postgresql-libs ←ここ postgresql94-libs = 9.4.6-1PGDG.rhel6 postgresql94-libs(x86-64) = 9.4.6-1PGDG.rhel6

2つ目のタスクで yum remove postgresql-libs したにもかかわらず、「postgresql-libs」を提供するパッケージがあるため、失敗するのだと思います。

1つ目と 2つ目のタスクを入れ替えるとエラーは出なくなります。(→ダメでした。追記参照)
ただし、結果的に冪等性が保たれますが、ちょっとややこしいことに。

(初期状態) postgresql-libs (1回目実行) # yum remove postgresql-libs # yum install postgresql94 ... ↓ postgresql94 postgresql94-devel postgresql94-libs postgresql94-contrib (2回目実行) postgresql94-libs が「postgresql-libs」を提供するので、それを消そうとする。 # yum remove postgresql-libs ↓ (postgresql94* の 4つのパッケージが消える) # yum install postgresql94 ... ↓ postgresql94 postgresql94-devel postgresql94-libs postgresql94-contrib

###(2016/03/25 08:03) 追記
先にアンインストールする案ですが、「postgresql-libs」(Provides)を必要とするパッケージも一緒にアンインストールされてしまうので、ダメでした。
順番はそのままで、アンインストールのところで ansible yum モジュールではなく、shell:scrpit: を使う方法はどうでしょうか。格好悪いですが。

shell: rpm -q postgresql-libs && yum -y remove postgresql-libs || true または shell: rpm -e postgresql-libs || true

投稿2016/03/24 15:45

編集2016/03/24 23:04
TaichiYanagiya

総合スコア12139

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

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

alpaca923

2016/03/25 00:04

ご回答ありがとうございます。 やはり他の書き方で回避するしかないですかね。 不恰好ですが一旦、shell等で回避してみます。
guest

0

Ansible のバージョンはいくつでしょうか?

状況は少し違うので、別件かもしれませんが、2.0.0.2 の yum モジュールで問題が報告されています。

alpaca923さんの問題では、yum remove で発生していて、"changed": false"rc": 0 ですが、上の件では、すでにインストールされた状態での yum install で、"changed": true"rc": 1 です。なので、状況が少し違いますし、そもそも、バージョンも違うのかもしれません。(報告した人によると、1.9では起きないそうです)

なお、#14997 は、Ansible の開発者(?)から、別の GitHub レポジトリで issue をオープンしてくださいというコメントがあって、クローズされてしまっています。

まずは、Ansible のバージョンを教えてください。

投稿2016/03/24 10:37

tatsuya6502

総合スコア2035

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

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

alpaca923

2016/03/24 10:58

回答ありがとうございます。 今、手元で確認ができないためコマンドの結果は貼れないのですが versionは1.8.2だったと思います。
tatsuya6502

2016/03/24 11:23

ありがとうございます。1.8.x ですか。では、上記の #14997 は別件の可能性が高いですね。あと、聞き忘れてしまったのですが、対象サーバーのOSとバージョンも教えてください。パッケージ名が el6_7 なので、CentOS 6.x ですか?
alpaca923

2016/03/25 00:01

回答ありがとうございます。 バージョンをあげられないか少し検討してみます。 対象サーバはご察しの通りCentOS 6.xです また、ansibleのバージョンは先のコメントで書いた通り1.8.2でした ansible 1.8.2 configured module search path = None
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問