# はじめに

Mackerel🐟 を触っていて・・・Blogの更新が遅れてしまったまるちゃん です。

こちらのストーリーでは、実際に Apache を使って解説しています。

また、説明ではなく・・・実際に描いてみる事が一番理解しやすいと僕は思っています。

# ストーリー

  1. VMware ESXi セットアップ
  2. Puppet 入門 準備編 01
  3. Puppet 入門 マニフェストの書き方編 02

# Apache を使ったコード解説

# 内容としては

  1. 基本的なコードの実行方法
  2. Apache パッケージのインストール
    • package リソースタイプの使用
  3. 設定ファイルの置き換え
    • file リソースタイプの使用
  4. Apacheを起動/自動起動を有効に設定
    • service リソースタイプの使用

1: package,2: file,3: service の3つのResources Typeを使ってマニフェスト(manifest)を記載していきます。

# 事前準備

Listen 8081 に変更されているだけのexampleコードです。

# cd ~
# mkdir puppet_work src
# wget -P src/ https://gist.githubusercontent.com/maruchan76/4e391ca1a8e076a2f99913c509ea9c6f/raw/09978bdcad9e394c9f172528e8eb644f3a889703/Apache_Default.conf
# cd puppet_work
# vim apache_install.pp

このストーリーで使うコードの例です。

  • ファイル名 : apache_install.pp
# 基本的なコードの実行方法編
package {'httpd':
  ensure  =>  installed,
}

# 設定ファイルの置き換え編
file {'/etc/httpd/conf/httpd.conf':
  owner   =>  'root',
  group   =>  'root',
  mode    =>  '644',
  source  =>  '/root/src/Apache_Default.conf',
  require =>  Package['httpd'],
}

# Apacheを起動/自動起動を有効に設定編
service {'httpd':
  ensure      =>  running,
  enable      =>  true,
  hasrestart  =>  true,
  subscribe   =>  [
    Package['httpd'],
    File['/etc/httpd/conf/httpd.conf'],
  ],
}

# 基本的なコードの実行方法

  • ドライランによるマニフェストの実行

最後に --noop を付けると実行をしてくれますが、実際にはシステムに反映はされません。

# puppet apply apache_install.pp --noop
  • マニフェストの実行
# puppet apply apache_install.pp

# Apache パッケージのインストール

コード部分

package {'httpd':
  ensure  =>  installed,
}

解説

  • package { 'httpd': ~ }
    • インストールをするパッケージ名を指定
  • ensure => installed,
    • 状態を指定
      • installed/present : インストール
      • absent : アンインストール

# 設定ファイルの書き換え

コード部分

file {'/etc/httpd/conf/httpd.conf':
  owner   =>  'root',
  group   =>  'root',
  mode    =>  '644',
  source  =>  '/root/src/Apache_Default.conf',
  require =>  Package['httpd'],
}

解説

  • file {'/etc/httpd/conf/httpd.conf': ~ }
    • 書き換え先ファイルへのパスを指定
  • owner,group,mode
    • chown,chmod
  • source => '/root/src/Apache_Default.conf',
    • フルパスでソースとなるファイルへのパスを指定
  • require => Package['httpd'],
    • 依存関係の指定
    • 指定したリソースが適用されたあと、自身のリソースを実行

# Apacheを起動/自動起動を有効に設定編

コード部分

service {'httpd':
  ensure      =>  running,
  enable      =>  true,
  hasrestart  =>  true,
  subscribe   =>  [
    Package['httpd'],
    File['/etc/httpd/conf/httpd.conf'],
  ],
}

解説

  • service {'httpd': ~ }
    • サービス名を指定
  • ensure => running,
    • running/true : サービスを起動
    • stopped/false : サービスを停止
  • enable => true,
    • true : 自動起動する
    • false : 自動起動しない
  • hasrestart => true,
    • subscribe で指定したリソースによる動作を指定
    • true : 再起動を可能
    • false : 再起動しない
  • subscribe => [ ~ ]
    • 指定したリソースに変更点が入った場合は、自身を再起動
  • File['/etc/httpd/conf/httpd.conf'],
    • どこのファイルをトリガーにするかを指定

# おまけ Nginx のインストール

  • 準備
# cd puppet_work
# vim nginx_install.pp
  • ファイル名 : nginx_install.pp
$template_nginx  = @(END)
server {
    listen       8085;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
END

yumrepo { 'nginx':
  descr    => 'Hello Nginx yum repository',
  baseurl  => 'http://nginx.org/packages/centos/7/$basearch/',
  enabled  => '1',
  gpgcheck => '0',
}

package { 'nginx':
  ensure  => installed,
  require => Yumrepo['nginx'],
}

file {'/etc/nginx/conf.d/default.conf':
  ensure  =>  present,
  owner   =>  'root',
  group   =>  'root',
  mode    =>  '644',
  # source  =>  '/root/src/nginx_Default.conf',
  content =>  inline_template($template_nginx),
  require =>  Package['nginx'],
}

service {'nginx':
  ensure      =>  running,
  enable      =>  true,
  hasrestart  =>  true,
  subscribe   =>  [
    Package['nginx'],
    File['/etc/nginx/conf.d/default.conf'],
  ],
}

  • 実行
# puppet apply nginx_install.pp