spec/chef/support/shared_context/recipes_shared_context.rb (118 lines of code) (raw):

require 'chef_helper' RSpec.shared_context 'recipes' do let(:chef_run) { ChefSpec::SoloRunner.converge('gitlab-ee::default') } let(:mandatory_recipes) do recipes = [ "gitlab-ee::default", "pgbouncer::user", "gitlab::default", "gitlab::config", "postgresql::directory_locations", "gitlab::web-server", "gitlab::users", "gitlab::selinux", "gitlab::add_trusted_certs", "package::runit", "package::sysctl", "logrotate::enable", "logrotate::folders_and_configs", "postgresql::bin", "gitlab::bootstrap", "monitoring::default", "monitoring::node-exporter", "monitoring::user" ] runit_recipe = if File.directory?('/run/systemd/system') ["package::runit_systemd"] else [] end recipes + runit_recipe end let(:default_service_enable_recipes) do ["gitlab::gitlab-rails", "gitaly::git_data_dirs", "gitlab::rails_pages_shared_path", "gitlab::gitlab-shell", "redis::enable", "gitaly::enable", "postgresql::enable", "postgresql::user", "postgresql::sysctl", "postgresql::standalone", "gitlab-kas::enable", "gitlab::database_migrations", "gitlab::puma", "gitlab::sidekiq", "gitlab::gitlab-workhorse", "gitlab::nginx", "nginx::enable", "gitlab::gitlab-healthcheck", "monitoring::gitlab-exporter", "monitoring::redis-exporter", "monitoring::prometheus", "monitoring::alertmanager", "monitoring::postgres-exporter", "gitlab-ee::suggested_reviewers"] end let(:default_service_disable_recipes) do [ "redis::disable", "gitaly::disable", "postgresql::disable", "gitlab-kas::disable", "gitlab::puma_disable", "gitlab::sidekiq_disable", "gitlab::gitlab-workhorse_disable", "gitlab::nginx_disable", "monitoring::gitlab-exporter_disable", "monitoring::redis-exporter_disable", "monitoring::prometheus_disable", "monitoring::alertmanager_disable", "monitoring::postgres-exporter_disable", ] end let(:extra_disable_recipes) do [ "spamcheck::disable", "praefect::disable", "crond::disable", "gitlab::mailroom_disable", "gitlab::remote-syslog_disable", "gitlab::storage-check_disable", "gitlab-pages::disable", "registry::disable", "mattermost::disable", "letsencrypt::disable", "monitoring::pgbouncer-exporter_disable", "gitlab::gitlab-backup-cli_disable", "gitlab::database_reindexing_disable", "gitlab-ee::sentinel_disable", "gitlab-ee::geo-postgresql_disable", "gitlab-ee::geo-logcursor_disable", "consul::disable", "consul::disable_daemon", "pgbouncer::disable", "patroni::disable", "gitlab-ee::geo-secondary_disable", ] end shared_examples 'enable only default service recipes' do it 'only default service recipes are run' do expected_recipes = mandatory_recipes + default_service_enable_recipes + extra_disable_recipes expect(chef_run.run_context.loaded_recipes).to match_array(expected_recipes) end end shared_examples 'enable recipes required for the service only' do |roles, include_recipes, exclude_recipes| before do stub_gitlab_rb( roles: roles ) end it 'only recipes required for the service are run' do expected_recipes = mandatory_recipes + default_service_disable_recipes + extra_disable_recipes + include_recipes - exclude_recipes expect(chef_run.run_context.loaded_recipes).to match_array(expected_recipes) end end end