chefでattributeファイルを上書きしたい時
attributeファイルのオーバーライド
公式レシピを使う場合に、attributesファイルの一部のパラメータだけ更新したい時があると思います。
jsonでいちいち指定しても良いんですが、共通で設定したいパラメータは
site-cookbooks以下にattributesファイルで書いておきたいこともあります。
その場合、今までは馬鹿正直にオリジナルのレシピを丸々コピペして一部だけ更新する、
といったように使っていたんですが*1
include_attribute使えば簡単に書けるのでは?と思った。
nginxの場合
いままではベタ書きしてたのを…
site-cookbooks/nginx/attributes/default.rb
# オリジナルのattributes/default.rbをコピペ default['nginx']['version'] = '1.2.9' default['nginx']['package_name'] = 'nginx' default['nginx']['dir'] = '/etc/nginx' default['nginx']['script_dir'] = '/usr/sbin' default['nginx']['log_dir'] = '/var/log/nginx' default['nginx']['binary'] = '/usr/sbin/nginx' case node['platform_family'] when 'debian' default['nginx']['user'] = 'www-data' default['nginx']['init_style'] = 'runit' when 'rhel', 'fedora' default['nginx']['user'] = 'nginx' default['nginx']['init_style'] = 'init' default['nginx']['repo_source'] = 'epel' when 'gentoo' default['nginx']['user'] = 'nginx' default['nginx']['init_style'] = 'init' else default['nginx']['user'] = 'www-data' default['nginx']['init_style'] = 'init' end default['nginx']['upstart']['runlevels'] = '2345' default['nginx']['upstart']['respawn_limit'] = nil default['nginx']['upstart']['foreground'] = true default['nginx']['group'] = node['nginx']['user'] default['nginx']['pid'] = '/var/run/nginx.pid' default['nginx']['gzip'] = 'on' default['nginx']['gzip_http_version'] = '1.0' default['nginx']['gzip_comp_level'] = '2' default['nginx']['gzip_proxied'] = 'any' default['nginx']['gzip_vary'] = 'off' default['nginx']['gzip_buffers'] = nil default['nginx']['gzip_types'] = %w[ text/plain text/css application/x-javascript text/xml application/xml application/rss+xml application/atom+xml text/javascript application/javascript application/json text/mathml ] default['nginx']['gzip_min_length'] = 1_000 default['nginx']['gzip_disable'] = 'MSIE [1-6]\.' default['nginx']['keepalive'] = 'on' default['nginx']['keepalive_timeout'] = 65 default['nginx']['worker_processes'] = node['cpu'] && node['cpu']['total'] ? node['cpu']['total'] : 1 default['nginx']['worker_connections'] = 1_024 default['nginx']['worker_rlimit_nofile'] = nil default['nginx']['multi_accept'] = false default['nginx']['event'] = nil default['nginx']['server_tokens'] = nil default['nginx']['server_names_hash_bucket_size'] = 64 default['nginx']['sendfile'] = 'on' default['nginx']['access_log_options'] = nil default['nginx']['error_log_options'] = nil default['nginx']['disable_access_log'] = false default['nginx']['install_method'] = 'package' default['nginx']['default_site_enabled'] = true default['nginx']['types_hash_max_size'] = 2_048 default['nginx']['types_hash_bucket_size'] = 64 default['nginx']['proxy_read_timeout'] = nil default['nginx']['client_body_buffer_size'] = nil default['nginx']['client_max_body_size'] = nil # 一部オーバーライド default['nginx']['version'] = '1.4.3' default['nginx']['install_method'] = 'source'
こう直す。
別ファイルに書く(ファイル名はなんでもいいはず)。
site-cookbooks/nginx/attributes/default_ext.rb
include_attribute 'nginx::default' # customize default['nginx']['version'] = '1.4.3' default['nginx']['install_method'] = 'source'
さっき思いついたのでもしかしたら副作用があるかもしれないですが、
特に問題なければ今まで書いたレシピだいぶ綺麗になりそう。
*1:http://d.hatena.ne.jp/toritori0318/20130509/1368107821 これのopensshのattributeなんかそうですね