このガイドでは、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ノードにファイルをダウンロードするために、「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モジュールを使用してファイルを編集します。 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のファイルモジュールを使用してファイルの属性を設定する
ファイルモジュールを使用して、所有者、グループ、権限の変更、シンボリックリンクの作成、新しいディレクトリの作成、シンボリックリンク、ファイル、またはディレクトリの削除など、ファイル自体の属性を設定できます。
1。ファイルのシンボリックリンクを作成する
「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