0

編集:これは、--checkパラメーターを使用して実行している場合にのみ発生するようです。この Playbook をライブで実行しても、このエラーは発生しません。しかし、何が原因なのかを知ることは依然として良いことです。

私は Ansible AWX を使用して一連のサーバーを管理し始めていますが、これまで Ansible を使用したことはありませんでしたが、多くのオンライン チュートリアルを経て、非常に快適に感じています。

多数の Web サーバーに更新をインストールするプレイブックを実行しようとしています。

エラーが発生します。これは、実行ごとに異なるホストに奇妙に表示されます。たとえば、プレイブックを実行すると、ホストserver3.mydomain.comはこのエラーで失敗します。そのサーバーをインベントリから削除すると、で同じエラーが発生しserver2.mydomain.comます。

エラー出力は、これが失敗した理由を理解するのに十分な情報を提供していません.1つの小さなセクションに分離されていますが、オンライン検索で問題を見つけることができませんでした.

これはプレイブックです(オンラインで見つけたテンプレートから、いくつかの変更を加えています):

---
- name: ensure services are up before doing anything
  hosts: webservers
  become: true
  any_errors_fatal: true
  serial: 1
  tasks:

- name: upgrade packages and reboot (if necessary)
  hosts: webservers
  become: true
  serial: 1 
  any_errors_fatal: true
  max_fail_percentage: 0

  tasks: 

    - name: apt-get update
      apt:
        update-cache: yes
      changed_when: 0

    - name: get list of pending upgrades
      command: apt-get --simulate dist-upgrade
      args:
        warn: false 
      register: apt_simulate
      changed_when: 0

    - name: parse apt-get output to get list of changed packages
      set_fact: 
        updates: '{{ apt_simulate.stdout_lines | select("match", "^Inst ") | list | sort }}'
      changed_when: 0

    - name: show pending updates
      debug:
        var: updates
      when: updates.0 is defined

    - name: apt-get autoremove
      command: apt-get -y autoremove
      args:
        warn: false
      when: '"Inst linux-image-" in apt_simulate.stdout'
      changed_when: 0

    - name: apt-get dist-upgrade
      apt:
        upgrade: dist 
      register: upgrade_output

    - name: check if reboot needed
      stat: path=/var/run/reboot-required
      register: file_reboot_required

    - meta: end_play
      when: not file_reboot_required.stat.exists

    - name: reboot node
      shell: sleep 2 && shutdown -r now "Reboot triggered by ansible"
      async: 1
      poll: 0
      ignore_errors: true

    - name: wait for node to finish booting
      wait_for_connection:
          connect_timeout=10
          delay=30
          timeout=120

    - name: wait for ssh to start fully
      pause:
        seconds: 45

そして、これはエラーです:

fatal: [server3.mydomain.com]: FAILED! => {
    "msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'stdout_lines'\n\nThe error appears to have been in '/var/lib/awx/projects/_8__infrastructure_management/projects/infrastructure-management/test/test.yml': line 30, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n    - name: parse apt-get output to get list of changed packages\n      ^ here\n"

したがって、エラーはこのブロックに関連しているように見えますが、それ以上は行き詰まっています:

- name: parse apt-get output to get list of changed packages
  set_fact: 
    updates: '{{ apt_simulate.stdout_lines | select("match", "^Inst ") | list | sort }}'
  changed_when: 0

ここで何が欠けているのかわかりません。

4

1 に答える 1