2016-05-17 2 views
2

おはよう!インストールされているyumパッケージ/ rpmバージョンが無能であるかどうかをチェックして使用する最も良い方法

私はCentOS 7のAnsible(2.0.0.2)で足を濡らしています。インストールされているrpm/yumパッケージからバージョンを取得しようとしていますが、スクリプト実行時に警告メッセージが表示されました。

Ansibleスクリプト:

これは正常に動作し、それがになっているものありませんが、それを実行した後、それは警告を返します実行
--- 
- name: Get version of RPM 
    shell: yum list installed custom-rpm | grep custom-rpm | awk '{print $2}' | cut -d'-' -f1 
    register: version 
    changed_when: False 

- name: Update some file with version 
    lineinfile: 
    dest: /opt/version.xml 
    regexp: "<version>" 
    line: " <version>{{ version.stdout }}</version>" 

OK:[デフォルト] => { "に変更"-d1"、 "delta": "0:00:00.255406"、: "false"、 "cmd": "yum list installedカスタムrpm | grepカスタムrpm | awk '{print $ 2} 、 "end": "2016-05-17 23:11:54.998838"、 "rc":0、 "start": "2016-05-17 23:11:54.743432"、 "stderr": ""、 "stdout ":" 3.10.2 "、" stdout_lines ":[" 3.10.2 "]、" warnings ":["実行中ではなくyumモジュールの使用を検討してくださいYUM "]}

[警告]:私はAnsible site上のyumモジュールの情報を見上げyumのモジュールを使用してではなく、

yumを実行している考えてみましょうが、私は本当にインストールしたくありません/更新/削除する。

私は単にそれを無視したり抑制したりすることができましたが、もっと良い方法があれば私は好奇心が強いのですか?

ありがとうございます!

+0

「yum」は私のためには機能しませんでしたが、最後に「警告=いいえ」でした。シェルのように見える:yum list installed elasticsearch | grep elasticsearch | awk '{print $ 2}' | cut -d'- '-f1 warn = no'ありがとう! – radtek

答えて

1

あなたのやり方は全く問題ありません。警告の原因となっている小切手は非常に簡単で、最初のという単語をあらかじめ定義されたリストと照合するだけです。これ以上のオプションは無視され、多くの場合、yumのような対応するモジュールでは解決できない警告が発生します。あなたは、単にwhichを行うことができます警告を取り除くために

shell: `which yum` list installed custom-rpm | grep custom-rpm | awk '{print $2}' | cut -d'-' -f1 

whichが実行されるyumの完全なパスを、検索します。それはまったく同じことですが、Ansibleの観点からはwhichであり、警告を回避するのはyumではありません。

この種の警告をグローバルに非アクティブ化する場合は、ansible.cfgcommand_warnings = Falseを設定することができます。 (docsを参照してください)

ドキュメントによると、コマンドの最後にwarn=noを追加することもできますが、これはコマンドの一部であるように見えます。

+0

優秀、ありがとう! –

+0

事実などを使って集めることは可能ですか? –

+0

タスクの出力をvarとして保存したり、リモートホスト上に小さなスクリプトを追加してローカルファクトを使用することができます(https://docs.ansible.com/ansible/playbooks_variables.html#local-facts-facts)。 -d – udondan

2

推奨のYUMモジュールを使用してください。これは本当に役立ちます。インストール/アップデート/削除は必要ありません。 これ以上のオプションがあると、パッケージが既にインストールされている場合は無視されます。

+2

しかし、彼はインストール/アップグレード/削除していません。彼はTimを使って "custom-rpn"のバージョンを決定しています。私はプレイブックの特定のセクションに何らかの理由で "使用することを検討する"という警告メッセージを表示しないようにする方法があると思います... –

+0

yumモジュールには、指定されたパッケージで再クエリを実行する* list *引数がありますインストールされたパッケージに関する情報を見つけることができます。 この質問はより良い回答です。http://stackoverflow.com/questions/41551620/how-to-get-the-installed-yum-packages-with-ansible – user771555

+0

これは受け入れられる回答である必要があります。 –

0

これを処理するには、ignore_errors オプションを追加してみてください。詳細と例については、Error Handingのページを参照してください。

+0

'ignore_errors'は、エラーが発生した後にプレイブックの実行を継続します。しかし、ここで警告がありますので、とにかく進めます。 'ignore_errors'は警告を抑止しません。 (エラーメッセージでさえない) – udondan

2

この警告を表示しないようにしてください。

shell:ライン上の warn=noと等価しかし整然と
--- 
- name: Get version of RPM 
    shell: yum list installed custom-rpm | grep custom-rpm | awk '{print $2}' | cut -d'-' -f1 
    register: version 
    changed_when: False 
    args: 
    warn: no 

:ようargsを使用してください。

1

他の人が述べたように、シェルコマンドを使用できます。 私はansible警告によって推奨される代わりに、シェルコマンドのansible yumのモジュールを使用するため、この答えは有用であることが判明:簡単に参照のためにここでそれを要約すると How to get the installed yum packages with Ansible?

: あなたはansibleでネイティブのyumモジュールからyumのリストを使用することができます。

- hosts: localhost tasks: - name: Get installed packages sudo: yes yum: list=installed register: yum_packages changed_when: False

yum_packagesの内容を表示するには、次の - debug: var: yum_packages yum_packagesをインストールされているすべてのパッケージのリストが含まれています。

あなたはそれまでに関心のパッケージのバージョンを取得することができます: - debug: var=item with_items: "{{yum_packages|json_query(jsonquery)}}" vars: jsonquery: "results[?name=='tar'].version"

jsonqueryは以降ansible 2.2でしか入手できないことに注意してください。

1

futherテストのためにインストールされたパッケージのバージョン番号と


- name: Find if custom_rpm is installed 
    yum: 
    list: custom_rpm 
    register: custom_rpm_yum_packages 
    when: ansible_os_family == "RedHat" 

- name: Extract custom_rpm actual installed version 
    set_fact: 
    actual_custom_rpm_version: "{{custom_rpm_yum_packages|json_query(jsonquery)}}" 
    vars: 
    jsonquery: "results[?yumstate=='installed'].version" 
    when: ansible_os_family == "RedHat" 

- debug: 
    var: actual_custom_rpm_version 
1

の事実を設定peaxolの答えのVaraint私はより多くのネイティブansible方法があることだと思う:

- name: get package version 
    yum: 
    list: package_name 
    register: package_name_version 

- name: set package version 
    set_fact: 
    package_name_version: "{{ package_name_version.results|selectattr('yumstate','equalto','installed')|map(attribute='version')|list|first }}" 
0

Iのいずれかを好きではなかったですこれらの答え。

- name: use command to pull version 
    command: '/usr/bin/rpm -qa custom-rpm --queryformat %{VERSION}' 
    register: version 
    ignore_warnings: True 
    changed_when: False 
関連する問題