10

.deb パッケージを直接インストールするためのモジュールはありません。dpkg をコマンドとして実行する必要がある場合、常にインストール タスクが変更されたものとしてマークされます。正しく設定するのに苦労したので、公開ノートブックとしてここに投稿します。

dpkg でインストールするタスクは次のとおりです。

- name: Install old python 
  command: dpkg -i {{ temp_dir }}/{{ item }}
  with_items: 
    - python2.4-minimal_2.4.6-6+precise1_i386.deb
    - python2.4_2.4.6-6+{{ ubuntu_release }}1_i386.deb
    - libpython2.4_2.4.6-6+{{ ubuntu_release }}1_i386.deb
    - python2.4-dev_2.4.6-6+{{ ubuntu_release }}1_i386.deb

別のタスクで {{temp_dir}} にアップロードされたファイル。

4

3 に答える 3

13

以下の回答は引き続き機能しますが、新しい ansible バージョンにはapt モジュールがあります。現在、Mariusz Sawicki の回答が推奨されています。私はそれを受け入れられた答えとしてマークしました。

changed_whenパラメータが追加された場合、Ansible バージョン 1.3 でのみ動作します。少し不器用ですが、誰かが解決策を改善できるかもしれません。この「レジスタ」オブジェクトのドキュメントは見つかりませんでした。

- name: Install old python 
  command: dpkg --skip-same-version -i {{ temp_dir }}/{{ item }}
  register: dpkg_result
  changed_when: "dpkg_result.stdout.startswith('Selecting')"
  with_items: 
    - python2.4-minimal_2.4.6-6+precise1_i386.deb
    - python2.4_2.4.6-6+{{ ubuntu_release }}1_i386.deb
    - libpython2.4_2.4.6-6+{{ ubuntu_release }}1_i386.deb
    - python2.4-dev_2.4.6-6+{{ ubuntu_release }}1_i386.deb

ここで同じタスクを実行すると、初回のみインストールされます。初回以降、パッケージはインストールされません。

2 つの変更がありました。--skip-same-version1 つは、 dpkg によるソフトウェアの再インストールを防止するためのパラメーターです。もう 1 つは、register 属性と changed_when 属性です。dpkg を初めて実行すると、'Selecting' で始まる文字列が stdout に出力され、変更が通知されます。後で、別の出力が得られます。より読みやすい条件を試してみましたが、「not」を使用したり、部分文字列を検索したりする、より洗練された条件では機能しませんでした。

于 2013-10-01T23:09:03.603 に答える
8

Ansible 1.6 (およびそれ以降) では、aptモジュールに deb オプションがあります。

- apt: deb=/tmp/mypackage.deb
于 2014-07-31T09:11:46.567 に答える