GNU/Linux >> Linux の 問題 >  >> Linux

ファイル内の Ansible アンコメント行

「#」文字の後に 0 個以上の空白が必要な場合は、次のようにすれば十分です:

- name: Uncomment line from /etc/ssh/sshd_config
    lineinfile:
      dest: /etc/ssh/sshd_config
      regexp: '^#\s*AuthorizedKeysFile.*$'
      line: 'AuthorizedKeysFile    .ssh/authorized_keys'

元のコードへの変更は \s* の追加です そして .*$

説明:

\s - 空白 (スペース、タブ、改行、フォーム フィード) に一致

* - その式が左にあることを指定します (\s ) は、一致で 0 個以上のインスタンスを持つことができます

.* - ゼロ個以上の任意の文字に一致

$ - 行末に一致


まず、あなたは間違った言語を使用しています。 Ansible では、何をすべきかを指示するのではなく、目的の状態を定義します。したがって、Uncomment line form /etc/ssh/sshd_config であってはなりません。 、しかし Ensure AuthorizedKeysFile is set to .ssh/authorized_keys .

第二に、初期状態が何であるかは問題ではありません (行がコメントされているかどうか)。行を識別する一意の文字列を 1 つ指定する必要があります。

sshd_config で これは AuthorizedKeysFile として可能です ディレクティブは、ファイル内で 1 回だけ発生します。他の構成ファイルでは、これはより困難になる可能性があります。

- name: Ensure AuthorizedKeysFile is set to .ssh/authorized_keys
  lineinfile:
    dest: /etc/ssh/sshd_config
    regexp: AuthorizedKeysFile
    line: 'AuthorizedKeysFile    .ssh/authorized_keys'

AuthorizedKeysFile を含む行と一致します 文字列 (コメント化されているかどうか、またはスペースの数に関係なく) を入力し、行全体が次のようになっていることを確認します:

AuthorizedKeysFile .ssh/authorized_keys

行が異なる場合、Ansible は「変更された」状態を報告します。

2 回目の実行で、Ansible は AuthorizedKeysFile を見つけます。 再び、ラインがすでに目的の状態にあることを発見したため、「ok」状態でタスクを終了します。

上記のタスクに関する 1 つの注意点は、いずれかの行に実際の意図的なコメントなどのコメントが含まれている場合です (たとえば、文字列 AuthorizedKeysFile を含む英語の説明)。 )、Ansible はその行を line で指定された値に置き換えます。 .


Linux
  1. Ansibleガイド:Ansibleを使用してファイルを管理する

  2. VIM:Ubuntu で正確な行に移動する方法

  3. unix - ファイル内の列数

  1. 巨大なファイルの線Xから線Yへの猫?

  2. Busy Boxはファイルを1行ずつ読み取りますか?

  3. パス/ファイル:行を表示せずにgrep

  1. 入力行3でパッチを適用するファイルが見つかりませんか?

  2. Pip3依存関係がありませんか?

  3. まだファイルにない場合にのみ、ファイルに行を追加します