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

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

このガイドでは、ansibleモジュールを使用してファイルを管理する方法を説明します。 Ansibleを使用してファイルをコピー、編集、挿入、ダウンロード、置換する方法を学習します。

何をしますか?

  • 「copy」および「templates」モジュールを使用してファイルをコピーします
  • 「fetch」モジュールを使用してファイルをダウンロード
  • 「blockinfile」、「lineinfile」、および「replace」モジュールを使用してファイルを編集します
  • ファイル属性の管理

Ansibleの「copy」および「templates」モジュールを使用してファイルをコピーします

Ansibleは、ローカルディレクトリからリモートターゲットマシンにファイルをコピーするためのいくつかのモジュールを提供します。これは「コピー」および「テンプレート」モジュールです。

'copy'モジュールと'template'モジュールの違いは、copyモジュールが'files'ディレクトリからファイルをコピーし、'template'がAnsibleプレイブックの'templates'ディレクトリからJinja2テンプレートをコピーすることです。

'copy'モジュールは、証明書などの永続ファイルのコピーに適していますが、'template'は、仮想ホスト構成などの再利用可能な構成に適しています。

1。ローカルからリモートのターゲットマシンにファイルをコピーする

ローカルの「files」ディレクトリにある「sources.list」構成をリモートマシンの「/etc/apt/sources.list」にコピーします。構成がある場合は、タイムスタンプに基づいて置き換えられ、バックアップされます。

- name: Copy from Local to Remote Target Machine with 'copy'
  copy:
    src: sources.list
    dest: /etc/apt/sources.list
    backup: yes

2。リモートマシン上のファイルを別のディレクトリにコピーする

リモートマシンのsudoers構成'/etc/sudoers.d/hakase'を他のディレクトリ'/home/hakase/hakase-suoers.txt'にコピーします。これは、「remote_src」オプションを使用して実行できます。

- name: Copy file from one directory to other on the Remote Machine
  copy:
    src: /etc/sudoers.d/hakase
    dest: /home/hakase/hakase-sudoers.txt
    remote_src: yes

3。ファイルをコピーして権限を変更し、ファイルの所有者を変更します

'files'ディレクトリのbashファイルをリモートサーバーマシンにコピーし、デフォルトのファイル権限を' 0755'にし、ファイルの所有者は'hakase'にします。

- name: Copy file and set up the permission and owner of the file
  copy:
    src: simple.sh
    dest: /home/hakase/simple.sh
    owner: hakase
    group: hakase
    mode: 0755

4。テンプレートモジュールを使用してファイルをコピーする

nginx仮想ホストのJinja2テンプレート構成を「templates」ディレクトリからリモートマシンの「/etc/sites-enabled/」ディレクトリにコピーします。 Jinja2テンプレートを使用すると、構成の変数を作成して、再利用しやすくすることができます。

- name: Copy file using 'template' module
  template:
    src: default.j2
    dest: /etc/nginx/sites-enabled/
    backup: yes
    owner: root
    group: root
    mode: 0644
Ansibleのフェッチモジュールを使用してファイルをダウンロードする

リモートマシンからローカルのansibleノードにファイルをダウンロードするために、「fetch」と呼ばれるansibleモジュールを使用できます。

1。リモートマシンからローカルにダウンロード

nginx構成ファイル「nginx.conf」をリモートサーバーからローカルのansible-nodeディレクトリ「/home/ hakase / backup」にダウンロードして、バックアップを作成します。また、デフォルトのフェッチモジュールにはディレクトリ構造が含まれます。

- name: Download file from Remote Machine to Local ansible-node directory
  become: yes
  fetch:
    src: /etc/nginx/nginx.conf
    dest: /home/hakase/backup/

2。ディレクトリ構造なしでリモートからローカルにダウンロード

'flat'オプションを追加して、リモートマシンからディレクトリ構造のないローカルansible-nodeにダウンロードします。

- name: Download file from Remote Machine to Local ansible node without directory structures
  become: yes
  fetch:
    src: /etc/nginx/nginx.conf
    dest: /home/hakase/backup/
    flat: yes
Ansibleでファイルを編集

次に、Ansibleモジュールを使用してファイルを編集します。 blockinfile、lineinfile、replaceなど、Ansibleを使用してファイルを編集するために知っておく必要のあるモジュールがいくつかあります。

blockinfileは、ファイルに複数の行を挿入/削除します。 lineinfileは単一行用であり、replaceモジュールを使用して文字列を置き換えることができます。

1。 'blockinfile'

を使用してファイルに複数行を挿入します

'blockinfile'モジュールを使用して、ssh構成'sshd_config'に複数行の構成を追加します。また、デフォルトの設定では、新しい構成が行の最後に挿入されます。

- name: Insert multiple lines and Backup
  blockinfile:
    path: /etc/ssh/sshd_config
    backup: yes
    block: |
      ClientAliveInterval 360
      ClientAliveCountMax 0

2。マーカーオプションを使用して複数の行を挿入する

または、特定の行に挿入する場合は、マーカーオプションを使用して、「insertafter」または「insertbefore」と正規表現を続けるか、両方を使用できます。

以下のプレイブックは、「sshd_config」ファイルに新しい追加の構成を挿入します。追加の構成は、デフォルトのマーカー「#BEGINANSIBLEMANAGEDBLOCK」で囲まれた「UserPAM」行の前に追加されます。

- name: Insert after regex, backup, and validate
  blockinfile:
    path: /etc/ssh/sshd_config
    backup: yes
    marker: "# {mark} ANSIBLE MANAGED BLOCK "
    insertbefore: '^UsePAM '
    block: |
      AllowUsers hakase vagrant
      PermitEmptyPasswords no
      PermitRootLogin no
    validate: '/usr/sbin/sshd -T -f %s'

3。マーカー内の周囲をブロックする複数の線を削除/削除

Ansibleマーカー「#BEGINANSIBLEMANAGEDBLOCK」で囲まれた線のブロックを削除します。

- name: Remote text block surrounding by markers
  blockinfile:
    path: /etc/ssh/sshd_config
    marker: "# {mark} ANSIBLE MANAGED BLOCK"
    content: ""
    backup: yes

4。ファイルに新しい行を挿入します

新しい行構成'PasswordAuthenticationno'を行regex'#PermitEmptyPasswords'の下のssh構成'/etc / ssh/sshd_config'に挿入します。

- name: Insert New Line under the Regex configuration
  lineinfile:
    path: /etc/ssh/sshd_config
    backup: yes
    regexp: '^PasswordAuthentication '
    insertafter: '^#PermitEmptyPasswords '
    line: 'PasswordAuthentication no'
    validate: '/usr/sbin/sshd -T -f %s'

5。 lineinfileモジュールを使用してファイルから行を削除します

ファイルから行を削除/削除するには、「state:absent」オプションを使用して、次のような行の正規表現を続けることができます。

- name: Remove a line from the file
  lineinfile:
    path: /etc/ssh/sshd_config
    state: absent
    regexp: '^PasswordAuthentication'
>

6。パターン文字列を正規表現に置き換え、モジュールを置き換えます

次に、「replace」モジュールを使用して文字列を置き換えます。 replaceモジュールでは、文字列の種類を置き換えるために、バックエンド参照として正規表現が必要でした。

モジュールの置換を使用して、「/ etc/hosts」ファイルのホストの名前を変更します。

- name: Replace the default
  replace:
    path: /etc/hosts
    regexp: '(\s+)node\.provision\.labs(\s+.*)?$'
    replace: '\1box.hakase.labs\2'
    backup: yes

7。構成のコメントを解除する

replaceモジュールを使用して、Linuxシステムの構成のコメントを解除できます。簡単です。置換モジュールを使用して、行の先頭にあるコメント文字列「#」を削除できます。

'/etc/nginx/nginx.conf'ファイルの'server_tokens'行構成のコメントを解除します。

- name: Uncomment configuration
  replace:
    path: /etc/nginx/nginx.conf
    regexp: '#(\s+)server_tokens'
    replace: 'server_tokens'
    backup: yes

8。構成行についてのコメント

以下は、行の先頭に「#」を追加して行の構成をコメント化することです。

- name: Comment Line configuration
  replace:
    path: /etc/nginx/nginx.conf
    regexp: '(\s+)gzip on'
    replace: '\n\t#gzip on'
    backup: yes

Ansibleのファイルモジュールを使用してファイルの属性を設定する

ファイルモジュールを使用して、所有者、グループ、権限の変更、シンボリックリンクの作成、新しいディレクトリの作成、シンボリックリンク、ファイル、またはディレクトリの削除など、ファイル自体の属性を設定できます。

「vhost」と呼ばれるnginx仮想ホスト構成のシンボリックリンクファイルを「/etc/ nginx /sites-enabled/」ディレクトリに作成します。

- name: Create Symlink of file
  file:
    src: /etc/nginx/sites-available/vhost
    dest: /etc/nginx/sites-enabled/vhost
    owner: root
    group: root
    state: link

2。ファイルモジュールを使用して新しいディレクトリを作成する

ファイルモジュールを使用して新しいディレクトリを作成するには、次のように値'directory'を指定してstateオプションを使用する必要があります。

- name: Create a New Directory using file
  file:
    path: /etc/nginx/ssl
    state: directory
    owner: root
    group: root
    mode: 0755

Linux
  1. LinuxでLogrotateを使用してログファイルを管理する方法

  2. ファイル拡張子でファイルを再帰的にコピーする方法は??

  3. Bash を使用してファイルを検索してコピーする

  1. Linuxターミナルでファイルをコピーする

  2. systemdを使用してスタートアップを管理する

  3. ansible を使用してテンプレート ファイルのフォルダーをデプロイする

  1. Logrotateを使用してログファイルを管理する方法

  2. AWK を使用して 2 つのファイルをマージする方法は?

  3. diff を使用して 2 つのファイルを手動でマージする