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

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

ただいまの
回答率

90.48%

  • Ansible

    156questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,804

alpaca923

score 16

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

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

実行時のログと設定内容

Postgresql9.4を入れた後、古いPostgresql-libsを消そうとしています。

▼実行時のログ

ansible-playbook -k -i hosts postgresql_common.yml
SSH password:

PLAY [Development] ************************************************************

GATHERING FACTS ***************************************************************
ok: [xx.xx.xx.xx]

TASK: [postgresql_common | Install postgres process] **************************
changed: [xx.xx.xx.xx] => (item=postgresql94,postgresql94-devel,postgresql94-libs,postgresql94-contrib)

TASK: [postgresql_common | remove old postgresql packages] ********************
failed: [xx.xx.xx.xx] => {"changed": false, "failed": true, "rc": 0, "results": ["Loaded plugins: fastestmirror, security, versionlock
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package postgresql-libs.x86_64 0:8.4.20-5.el6_7 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package               Arch         Version                Repository      Size
================================================================================
Removing:
 postgresql-libs       x86_64       8.4.20-5.el6_7         @updates       625 k

Transaction Summary
================================================================================
Remove        1 Package(s)

Installed size: 625 k
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Erasing    : postgresql-libs-8.4.20-5.el6_7.x86_64                        1/1
  Verifying  : postgresql-libs-8.4.20-5.el6_7.x86_64                        1/1

Removed:
  postgresql-libs.x86_64 0:8.4.20-5.el6_7
Complete!
"]}

FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************
           to retry, use: --limit @/Users/akinorisakamoto/postgresql_common.retry

xx.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
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

先にインストールした 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/25 09:04

    ご回答ありがとうございます。
    やはり他の書き方で回避するしかないですかね。

    不恰好ですが一旦、shell等で回避してみます。

    キャンセル

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 19:58

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

    キャンセル

  • 2016/03/24 20:23

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

    キャンセル

  • 2016/03/25 09:01

    回答ありがとうございます。
    バージョンをあげられないか少し検討してみます。

    対象サーバはご察しの通りCentOS 6.xです
    また、ansibleのバージョンは先のコメントで書いた通り1.8.2でした
    ansible 1.8.2
    configured module search path = None

    キャンセル

関連した質問

同じタグがついた質問を見る

  • Ansible

    156questions

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