私たちは理解に時間を費やしたユニークな問題がありますが、私たちが取っているアプローチが本当に正しいかどうかはわかりません。私たちの目標は、特定の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_DAYS
90日に設定されていることを確認し、そうであれば(緑色の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"
これは、他の検査に簡単に適応できるほど柔軟です。
答え2
尋ねる:「PASS_MAX_DAYSファイルが90日に設定されていることを確認してください。そうである場合は、報告(緑色のOK)またはスキップしてください。問題ありません。値が90日の値を超えている場合は、問題を引き続き表示してください(赤またはオレンジ)。」
回答:Ansibleモジュールの冪等性はコアパラダイムです。この点で、Ansibleコードはプロセスではなく状態の定義として見なければなりません。したがって、Ansibleコードを実行するだけで、定義されたシステム状態が設定されます。たとえば、スクリプト
$ cat test.yml
- hosts: localhost
gather_facts: false
tasks:
- lineinfile:
path: /scratch/tmp/login.defs
regex: '^PASS_MAX_DAYS\s+'
line: 'PASS_MAX_DAYS 90'
ジョブが変更されたことを報告します(設定したい色で)。ANSIBLE_COLOR_CHANGED)
$ ansible-playbook test.yml
PLAY [localhost]
TASK [lineinfile]
changed: [localhost]
PLAY RECAP
localhost: ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
$ cat /scratch/tmp/login.defs
PASS_MAX_DAYS 90
プレイブックを再実行して、1つのタスクが正常であることを報告します(設定したいすべての色で)。ANSIBLE_COLOR_OK)
PLAY RECAP
localhost: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
審査
システムを変更せずに潜在的な違いのみを見つけるには、確認モードでプレイブックを実行してください。
-C, --check
don't make any changes; instead, try to predict some of the changes that may occur
たとえば、スクリプト
$ cat login.defs
PASS_MAX_DAYS 80
$ ansible-playbook test.yml --check
1つのことが変更される予定であると報告します。つまり、レビューに失敗しました。
PLAY [localhost]
TASK [lineinfile]
changed: [localhost]
PLAY RECAP
localhost: ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
レポート
かなりたくさんありますコールバックプラグイン書くことができる。どちらもあなたの目的に合わない場合は、カスタムプラグインを作成するか、次のものを使用できます。アンサーブルランナーそして分析する文化遺物。Pythonモジュール利用可能。
尋ねる:「/etc/login.defsファイルにはファイルにタブ値があります。Unixプラットフォームで同じテストを実行すると、ansible PlayBookの実行状態が常に変更されたときに返されることがわかります。」
答え:それはあなたの選択です。間隔を変更したり、間隔を同じにしたいです。スペースとタブは login.defs で有効な区切り文字です。利用できる逆参照、regex
スペースを変更してそのままにしてくださいline
。たとえば、次のタスク
- lineinfile:
path: /scratch/tmp/login.defs
regex: '^PASS_MAX_DAYS(\s+)(\S*)$'
line: 'PASS_MAX_DAYS\g<1>90'
backrefs: true
〜しないだろう「いつも変わって帰ってください」。