Skip to content

Instantly share code, notes, and snippets.

@keokent
Created June 21, 2013 01:34
Show Gist options
  • Save keokent/5828241 to your computer and use it in GitHub Desktop.
Save keokent/5828241 to your computer and use it in GitHub Desktop.
Nginx,MySQLの設定、起動のManifestを書いた
puppet manifestを書いていくどん
app002の/home/keoken/sample_app_puppet/sample_app_manifest.ppに
manifestを書いていく
もろもろのインストール
sample_app_manifest.pp
--------------------------------------------
package {
[
'zsh',
'emacs',
'nginx',
'mysql-server',
'mysql-devel',
'gcc',
'gcc-c++',
'make',
'openssl',
'openssl-devel',
'libxml2-devel',
'libxslt-devel',
]:
ensure => insta
--------------------------------------------
puppet applyを実行してみる
[keoken@app002 sample_app_puppet]$ sudo puppet apply sample_app_manifest.pp
[sudo] password for keoken:
Notice: /Stage[main]//Package[make]/ensure: created
Notice: /Stage[main]//Package[gcc-c++]/ensure: created
Notice: /Stage[main]//Package[openssl-devel]/ensure: created
Notice: /Stage[main]//Package[nginx]/ensure: created
Notice: /Stage[main]//Package[libxslt-devel]/ensure: created
Notice: /Stage[main]//Package[mysql-server]/ensure: created
Notice: /Stage[main]//Package[mysql-devel]/ensure: created
Notice: /Stage[main]//Package[zsh]/ensure: created
Notice: Finished catalog run in 164.61 seconds
入ったっぽい
serverspecでテストしてみる
~/rails_projects/sample_app_puppet
% ASK_SUDO_PASSWORD=1 ASK_LOGIN_PASSWORD=1 bundle exec rspec spec/app002.keoken.pb
Enter sudo password:
User:
keoken
Enter login password:
FFFFFFF.FFF.FFF
    ・
    ・
    ・
Finished in 9.25 seconds
15 examples, 13 failures
Failed examples:
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:4 # Group "appuser"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:5 # Group "appuser"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:11 # User "appuser"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:12 # User "appuser"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:13 # User "appuser"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:14 # User "appuser"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:18 # File "/home/appuser/sample_app/tmp/sockets/.unicorn.sock"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:26 # Service "nginx"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:27 # Service "nginx"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:31 # Port "80"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:39 # Service "mysqld"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:40 # Service "mysqld"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:44 # Port "3306"
appuserいないじゃないか、nginx動いてないぞとか言われてる
appuserを追加する
sample_app_manifest.pp
--------------------------------------------
        ・
        ・
user { 'appuser':
ensure => present,
uid => 1000,
gid => appuser,
comment => 'appuser',
home => '/home/appuser',
managehome => ture,
shell => '/bin/bash'
}
group { 'appuser':
ensure => present,
gid => 1000,
}
--------------------------------------------
実行する
[keoken@app002 sample_app_puppet]$ puppet apply sample_app_manifest.pp
Error: Could not prefetch package provider 'yum': The yum provider can only be used as root
Error: Could not find a suitable provider for group
Error: Could not find a suitable provider for user
Notice: Finished catalog run in 0.99 seconds     sudoじゃなかったから怒られた
[keoken@app002 sample_app_puppet]$ emacs sample_app_manifest.pp
[keoken@app002 sample_app_puppet]$ sudo puppet apply sample_app_manifest.pp
[sudo] password for keoken:
Notice: /Stage[main]//Group[appuser]/ensure: created
Notice: /Stage[main]//User[appuser]/ensure: created
Notice: Finished catalog run in 0.83 seconds  
ユーザとグループ作れたっぽい
serverspecでテストするどん
~/rails_projects/sample_app_puppet
% ASK_SUDO_PASSWORD=1 ASK_LOGIN_PASSWORD=1 bundle exec rspec spec/app002.keoken.pb
Enter sudo password:
User:
keoken
Enter login password:
......F.FFF.FFF
    ・
    ・
Finished in 7.25 seconds
15 examples, 7 failures  減った!
Failed examples:
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:18 # File "/home/appuser/sample_app/tmp/sockets/.unicorn.sock"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:26 # Service "nginx"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:27 # Service "nginx"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:31 # Port "80"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:39 # Service "mysqld"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:40 # Service "mysqld"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:44 # Port "3306"
設定ファイルとか書いて起動させていく
sample_app_manifest.pp
--------------------------------------------
        ・
        ・
service { 'nginx':
enable => true,
ensure => running,
hasrestart => true,
require =>Package['nginx'],
}
file { '/etc/my.conf':
content => "character-set-server = utf8",
}
service { 'mysqld':
enable => true,
ensure => running,
hasrestart => true,
require => Package['mysql-server'],
}
--------------------------------------------
puppet applyを実行する
[keoken@app002 sample_app_puppet]$ sudo puppet apply sample_app_manifest.pp
Notice: /Stage[main]//File[/etc/my.conf]/ensure: defined content as '{md5}8e571b6907a60df7fc66ffce39105e8d'
Notice: /Stage[main]//Service[nginx]/ensure: ensure changed 'stopped' to 'running'
Notice: /Stage[main]//Service[mysqld]/ensure: ensure changed 'stopped' to 'running'
Notice: Finished catalog run in 5.52 seconds  できたっ
serverspecでテストするどん
~/rails_projects/sample_app_puppet
% ASK_SUDO_PASSWORD=1 ASK_LOGIN_PASSWORD=1 bundle exec rspec spec/app002.keoken.pb (git)-[master]
Enter sudo password:
User:
keoken
Enter login password:
......F........
     ・
     ・
Finished in 6.84 seconds
15 examples, 1 failure
Failed examples:
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:18 # File "/home/appuser/sample_app/tmp/sockets/.unicorn.sock"
とりあえず、Nginx MySQLは起動している
serverspecのテスト内容が全然足りてない・・・
manifest書きながらテスト内容を更新していく
テスト内容の更新 nginxの設定をテスト
describe file('/etc/nginx/nginx.conf') do
it { should contain 'user nginx nginx;' }
it { should contain 'server unix:/home/appuser/sample_app/tmp/sockets/.unicorn.sock fail_timeout=0;' }
it { should contain('root /home/appuser/sample_app/public;').from(/^\s+server {/).to(/^\s+location @app/) }
end
serverspecでテストするどん
~/rails_projects/sample_app_puppet
% ASK_SUDO_PASSWORD=1 ASK_LOGIN_PASSWORD=1 bundle exec rspec spec/app002.keoken.pb
......F....FFF.... 
      ・
      ・
      ・
Finished in 6.44 seconds
18 examples, 4 failures   Fが多くなった
Failed examples:
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:18 # File "/home/appuser/sample_app/tmp/sockets/.unicorn.sock"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:35 # File "/etc/nginx/nginx.conf"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:36 # File "/etc/nginx/nginx.conf"
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:37 # File "/etc/nginx/nginx.conf"
nginx.confに関するテストが落ちた
sample_app_manifest.pp
--------------------------------------------
       ・
       ・
file { '/etc/nginx/nginx.conf':
owner => 'root',
group => 'root',
mode => '0644',
content => template('nginx.conf'),
require => Package['nginx'],
notify => Service['nginx'],
}
--------------------------------------------
 Nginxの設定ファイルをテンプレートでロードする。
 テンプレートのnginx.confはapp001のものをそのまま持ってきた
[keoken@app002]~/sample_app_puppet% sudo puppet apply --templatedir=. sample_app_manifest.pp   *--templatedir= でテンプレートファイルの位置を指定 今回はmanifestファイルと同じディレクトリ内なので「.」とする
Notice: /Stage[main]//File[/etc/nginx/nginx.conf]/content: content changed '{md5}d9dfc198c249bb4ac341198a752b9458' to '{md5}9db2b2f98436cb671d5670954d5c1141'
Notice: /Stage[main]//Service[nginx]: Triggered 'refresh' from 1 events
Notice: Finished catalog run in 4.24 seconds  
serverspecでテストするどん
~/rails_projects/sample_app_puppet
% ASK_SUDO_PASSWORD=1 ASK_LOGIN_PASSWORD=1 bundle exec rspec spec/app002.keoken.pb
......F...........
        ・
        ・
Finished in 8.18 seconds  減った!
18 examples, 1 failure
Failed examples:
rspec ./spec/app002.keoken.pb/sample_app_spec.rb:18 # File "/home/appuser/sample_app/tmp/sockets/.unicorn.sock"
@hiboma
Copy link

hiboma commented Jun 21, 2013

serverspec で ASK_LOGIN_PASSWORD=1 だと毎回パスワード入力を求められて大変なので、公開鍵認証の設定をして楽をしよう

sample: http://www.tooyama.org/ssh-key.html

(もし設定済みだったら ASK_LOGIN_PASSWORD を外すといいよ )

@hiboma
Copy link

hiboma commented Jun 21, 2013

テストが足らないって気がついてるのはよい感じ 🍣

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment