#
# Copyright:: Copyright (c) 2017 GitLab Inc.
#
# 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.
#

account_helper = AccountHelper.new(node)
consul_helper = ConsulHelper.new(node)
logfiles_helper = LogfilesHelper.new(node)
logging_settings = logfiles_helper.logging_settings('consul')

gitlab_consul_static_etc_dir = node['consul']['env_directory']

account "Consul user and group" do
  username account_helper.consul_user
  uid node['consul']['uid']
  ugid account_helper.consul_group
  groupname account_helper.consul_group
  gid node['consul']['gid']
  shell '/usr/sbin/nologin'
  home node['consul']['dir']
  manage node['gitlab']['manage_accounts']['enable']
end

directory node['consul']['dir'] do
  owner account_helper.consul_user
  mode '0755'
end

directory gitlab_consul_static_etc_dir do
  owner account_helper.consul_user
  mode '0700'
  recursive true
end

env_dir gitlab_consul_static_etc_dir do
  variables node['consul']['env']
end

%w(
  config_dir
  data_dir
  script_directory
).each do |dir|
  directory node['consul'][dir] do
    owner account_helper.consul_user
  end
end

directory logging_settings[:log_directory] do
  owner logging_settings[:log_directory_owner]
  mode logging_settings[:log_directory_mode]
  if log_group = logging_settings[:log_directory_group]
    group log_group
  end
  recursive true
end

file "#{node['consul']['dir']}/config.json" do
  content consul_helper.configuration
  owner account_helper.consul_user
  mode '0600'
  notifies :run, 'execute[reload consul]'
  notifies :run, 'ruby_block[consul config change]'
end

ruby_block 'consul config change' do
  block do
    message = <<~MESSAGE
      You have made a change to the consul configuration, and the daemon was reloaded.
      If the change isn't taking effect, restarting the consul agents may be required:
      https://docs.gitlab.com/ee/administration/consul.html#restart-consul
    MESSAGE
    LoggingHelper.warning(message)
  end
  action :nothing
end

include_recipe 'consul::configure_services'

include_recipe 'consul::watchers'

include_recipe 'consul::enable_daemon'
