Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Ansibleでファイル修正してみる

More than 1 year has passed since last update.

概要

Ansibleでファイルを修正してみる

structure.jpeg

ファイル構成

├ origin_file
│ └ hoge.txt       <- 転送して修正するテキストファイル
├ hosts            <- Inventryファイル
├ site.yml         <- Playbookファイル
└ Vagrantfile

対象ファイル

修正対象のファイルを下記のように準備しておきます。

origin_file/hoge.txt
Hello World.
This is a sample file.

Remove Line Sample text.
hoge hoge
fuga fuga

条件に該当する行を修正する

正規表現にマッチする行を指定の文字列に修正します。

site.yml
---
- name: Playbook Sample
  hosts: all
  become: true
  tasks:
    - name: install libselinux-python
      yum:
        name: libselinux-python
        state: present

    - name: ファイル(./origin_file/hoge.txt)を転送する
      copy:
        src: origin_file/hoge.txt
        dest: /tmp/hoge.txt
        owner: vagrant
        group: vagrant
        mode: "u=rw,g=r,o=r"

    - name: 条件に該当する行を修正する
      lineinfile:
        dest: /tmp/hoge.txt
        regexp: '^Hello\s+'
        line: Hello Hoge

playbookを実行する。

$ ansible-playbook -i hosts site.yml 

条件に該当する行を削除する

正規表現にマッチする行を1行まるごと削除します。

site.yml
---
- name: Playbook Sample
  hosts: all
  become: true
  tasks:
    - name: install libselinux-python
      yum:
        name: libselinux-python
        state: present

    - name: ファイル(./origin_file/hoge.txt)を転送する
      copy:
        src: origin_file/hoge.txt
        dest: /tmp/hoge.txt
        owner: vagrant
        group: vagrant
        mode: "u=rw,g=r,o=r"

    - name: 条件該当する行を削除する
      lineinfile:
        dest: /tmp/hoge.txt
        regexp: '^Remove\s+'
        state: absent

playbookを実行する。

$ ansible-playbook -i hosts site.yml 

ファイル修正してコマンド実行する

sshd_configを修正してsshdを再起動し、RootでSSHログインを禁止する。

site.yml
---
- name: Playbook Sample
  hosts: all
  become: true
  tasks:
    - name: install libselinux-python
      yum:
        name: libselinux-python
        state: present

    - name: rootのパスワードでSSHログイン禁止
      lineinfile:
        dest: /etc/ssh/sshd_config
        regexp: '^PermitRootLogin\s+'
        line: PermitRootLogin no
        validate: sshd -t -f %s
      notify:
        - sshdRestart

  handlers:
    - name: sshdRestart
      service:
        name: sshd
        state: restarted

※ validate: 編集ファイルを検証するコマンド (リターン0 = 成功)
※ validateの場合は、%s指定が必須
※ notify: タスク実行結果がchangedの時に実行される処理を指定する

playbookを実行する。

$ ansible-playbook -i hosts site.yml 

参考文献

以上

reflet
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away