web-dev-qa-db-ja.com

v2.11の廃止に伴うansibleループの変更

aptを介してインストールするいくつかのパッケージを定義したプレイブックを実行しています。

    - name: Install utility packages common to all hosts
      apt:
        name: "{{ item }}"
        state: present
        autoclean: yes
      with_items:
        - aptitude
        - jq
        - curl
        - git-core
        - at
...

私のシステムの最近のansibleの更新により、上記のプレイブックに関する次のメッセージが表示されます。

[DEPRECATION WARNING]: Invoking "apt" only once while using a loop via squash_actions is deprecated. Instead of
 using a loop to supply multiple items and specifying `name: {{ item }}`, please use `name: [u'aptitude', 
u'jq', u'curl', u'git-core', u'at', u'heirloom-mailx', u'Sudo-ldap', u'sysstat', u'vim', u'at', u'ntp', 
u'stunnel', u'sysstat', u'arping', u'net-tools', u'lshw', u'screen', u'tmux', u'lsscsi']` and remove the loop. 

私がこれを正しく理解している場合、Ansibleはこのパッケージのリストを配列としてこれを残すようになりました。

name: [u'aptitude', u'jq', u'curl', u'git-core', u'at','heirloom-mailx', u'Sudo-ldap', u'sysstat', u'vim', u'at', u'ntp',u'stunnel', u'sysstat', u'arping', u'net-tools', u'lshw', u'screen', u'tmux', u'lsscsi']

もっと良い方法はありますか? VIMこれを維持しようとして永遠に右にスクロールするように思えます。それ、またはWordでラップしてWordのパッケージのクラウドを処理します。

18
Server Fault

YAMLスタイルで配列をコーディングして、読みやすくすることができます。

- name: Install utility packages common to all hosts
  apt:
    name:
      - aptitude
      - jq
      - curl
      - git-core
      - at
    state: present
    autoclean: yes
50
Ignacio Millán

まったく同じ問題に出くわしましたが、はるかに長いアプリのリストがvarsファイルに保持されていました。これは、この問題を回避するために実装したコードです。アプリのリストは「apps」変数に配置され、Ansibleはそれを繰り返し処理します。

- name: Install default applications
  apt:
    name: "{{item}}"
    state: latest
  loop: "{{ apps }}"
  when: ansible_distribution == 'Ubuntu' or ansible_distribution == 'Debian'
  tags:
     - instapps

インストールするアプリのリストを保持するファイルは、このタスクの役割ディレクトリの「デフォルト」ディレクトリ、つまり「共通」役割ディレクトリにあります。

roles
    - common
      - Defaults
        - main.yml
1
Nick

これと同じ質問がありましたが、同じ状態のパッケージの各セットは独自のブロックでなければならないようです。 Ansibleのドキュメントを見ると、例として各状態のブロックがあるので、その例を取り上げて、状態に基づいてパッケージを分割し、ignacioの例​​に従って、完全に機能しました。

基本的にはこのようになります

- name: Install packages required for log-deployment
  apt:
    name:
      - gcc
      - python-devel
    state: latest
    autoclean: yes

- name: Install packages required for log-deployment
  apt:
    name:
      - python
      - mariadb
      - mysql-devel
    state: installed

理にかなって助けてくれることを願っています!

0
Sikh