Ansible lineinfile(空白と状態の変更)

Ansible lineinfile(空白と状態の変更)

私たちは理解に時間を費やしたユニークな問題がありますが、私たちが取っているアプローチが本当に正しいかどうかはわかりません。私たちの目標は、特定のUNIXシステムファイル/etc/login.defとそのファイルの特定の値を確認することです。

強化要件のためにPASS_MAX_DAYS構成ファイルにキャプチャし、そのlogins.defステータスを(緑色のOK)または(赤色または黄色)として報告しようとしています。これは追加の確認が必要であることを意味します。私たちの目標はいいえ変更を実行しますが、その構成ファイルの状況をキャプチャーします。

以下はコードスニペットです。


---
- name: My Machine
  hosts: localhost
  gather_facts: true

  tasks:
    - name: "PASS_MAX_DAYS - 90 Days - Validator"
      become: yes
      become_user: ansible
      tags: PASS_MAX_DAYS
      lineinfile:
        path: /etc/login.defs
        regex: '^PASS_MAX_DAYS\s+'
        line: 'PASS_MAX_DAYS    90'
        state: present
      check_mode: yes
      register: PASS_MAX_DAYS_output

これに関するアイデアは簡単です。ファイルがPASS_MAX_DAYS90日に設定されていることを確認し、そうであれば(緑色のOK)と報告したりスキップしても問題ありません。値が90日の値から外れた場合は、問題(赤またはオレンジ)でマークし、値をキャプチャし(登録/デバッグを使用)、ランチャーに意味のあるメッセージを出力し、値をファイルにキャプチャします。 。

注:条件を確認しましたが、when利用可能かどうかはわかりません。 「行が置き換えられました」というメッセージとともに、出力ステータスが「変更済み」に設定されている問題が常に発生します。

注:一部のシステム管理者は単一のスペースを使用し、他のシステム管理者はタブを使用し、他のシステム管理者は複数のスペースを使用するため、正規表現をできるだけ一般的にする必要があります(なぜかと尋ねることができます)。したがって、これらの値を一致させようとしているため、各値の間にいくつかの空白があるかどうか気にしません。

ベストアンサー1

私は "raw"モジュールを使用し、単に次のようなものを使用します:

- name: fetch PASS_MAX_DAYS
  raw: awk '/^PASS_MAX_DAYS/ {print $2}' /etc/login.defs
  register: PASS_MAX_DAYS_output
- name: check PASS_MAX_DAYS ok
  assert:
    that:
      - "PASS_MAX_DAYS_output.stdout != 90"
    msg: "PASS_MAX_DAYS is not 90"

これは、他の検査に簡単に適応できるほど柔軟です。

おすすめ記事