cookbooks/fb_consul/recipes/default.rb (119 lines of code) (raw):

# # Cookbook:: fb_consul # Recipe:: default # # Copyright (c) 2020-present, Vicarious, Inc. # Copyright (c) 2020-present, Facebook, Inc. # All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # unless node.debian? || node.ubuntu? fail 'fb_consul: Used on unsupported platform!' end node.default['fb_iptables']['filter']['INPUT']['rules']['consul']['rules'] = [ # Gossip protocol between agents and servers '-p tcp --dport 8301 -j ACCEPT', '-p udp --dport 8301 -j ACCEPT', ] node.default['fb_users']['users']['consul'] = { 'comment' => 'consul agent user', 'home' => '/run/consul', 'shell' => '/usr/sbin/nologin', } package 'consul' do only_if { node['fb_consul']['manage_packages'] } action :upgrade notifies :restart, 'service[consul]' end whyrun_safe_ruby_block 'validate config' do block do node['fb_consul']['config'].each_key do |key| if ['config-file', 'config-dir'].include?(key) fail "fb_consul::default: #{key} is not allowed in 'config'! " + 'Please use "services" and "checks" to configure consul.' end end end end directory 'consul data dir' do only_if do node['fb_consul']['enable'] end path lazy { node['fb_consul']['config']['data_dir'] } owner 'consul' group 'root' mode '0770' end directory '/etc/consul' do owner 'root' group 'root' mode '0755' end cookbook_file '/etc/default/consul' do source 'consul.default' owner 'root' group 'root' mode '0644' end cookbook_file '/etc/consul/consul-agent-ca.pem' do # ~FB032 only_if { node['fb_consul']['certificate_cookbook'] } cookbook lazy { node['fb_consul']['certificate_cookbook'] } owner 'root' group 'root' mode '0644' notifies :restart, 'service[consul]' end cookbook_file '/etc/consul/consul-agent-ca-key.pem' do # ~FB032 only_if do node['fb_consul']['config']['server'] && node['fb_consul']['certificate_cookbook'] end cookbook lazy { node['fb_consul']['certificate_cookbook'] } owner 'consul' group 'root' mode '0600' notifies :restart, 'service[consul]' end cookbook_file '/etc/consul/consul-server.pem' do # ~FB032 only_if do node['fb_consul']['config']['server'] && node['fb_consul']['certificate_cookbook'] end cookbook lazy { node['fb_consul']['certificate_cookbook'] } source "consul-server-#{node['hostname']}.pem" owner 'root' group 'root' mode '0644' notifies :restart, 'service[consul]' end cookbook_file '/etc/consul/consul-server-key.pem' do # ~FB032 only_if do node['fb_consul']['config']['server'] && node['fb_consul']['certificate_cookbook'] end cookbook lazy { node['fb_consul']['certificate_cookbook'] } source "consul-server-key-#{node['hostname']}.pem" owner 'consul' group 'root' mode '0600' notifies :restart, 'service[consul]' end whyrun_safe_ruby_block 'add crypto options' do only_if { node['fb_consul']['certificate_cookbook'] } block do node.default['fb_consul']['config']['ca_file'] = '/etc/consul/consul-agent-ca.pem' if node['fb_consul']['config']['server'] node.default['fb_consul']['config']['cert_file'] = '/etc/consul/consul-server.pem' node.default['fb_consul']['config']['key_file'] = '/etc/consul/consul-server-key.pem' end end end template '/etc/consul/consul.json' do owner 'root' group 'root' mode '0644' source 'consul.json.erb' verify '/usr/bin/consul validate %{path}' notifies :restart, 'service[consul]' end service 'consul' do only_if { node['fb_consul']['enable'] } action [:enable, :start] end service 'disable consul' do not_if { node['fb_consul']['enable'] } action [:stop, :disable] end