More sessions

This commit is contained in:
2026-02-24 18:03:22 +00:00
parent eb5bd4a929
commit 23cc78aa98
284 changed files with 129543 additions and 4 deletions

View File

@@ -0,0 +1,394 @@
module Dalmatian
class Cluster
def initialize(description, helper: Helper, logger: Logger)
properties = description.last
@id = description.first
@account_id = properties["account_id"]
@environments = properties["environments"]
@properties = properties["cluster"]
@logger = logger
@helper = helper
@hosted_zones = build_hosted_zones(properties["hosted_zones"])
@s3s = build_s3s(properties["s3"])
@vpn_customer_gateways = build_vpn_customer_gateways(properties["vpn_customer_gateway"])
@sources = build_sources(properties["dalmatian_config_source"])
@services = build_services(properties["services"])
@wafs = build_wafs(properties["waf"])
@rdss = build_rdss(properties["rds"])
@auroras = build_auroras(properties["aurora"])
@elasticache_clusters = build_elasticache_clusters(properties["elasticache_cluster"])
@opensearch_clusters = build_opensearch_clusters(properties["opensearch_cluster"])
@shared_loadbalancers = build_shared_loadbalancers(properties["shared_loadbalancer"])
end
attr_reader :hosted_zones, :s3s, :vpn_customer_gateways, :sources, :services, :wafs, :rdss, :auroras, :elasticache_clusters,
:opensearch_clusters, :shared_loadbalancers, :environments, :properties, :account_id, :id
def name
properties["name"] || id
end
def fetch(infrastructure_name: "all")
sources.each do |source|
next unless ["all", source.cluster_id].include? infrastructure_name
return verify_source_path(source) unless remotely_held?(source)
destination = "#{Infrastructure::PATH}/#{source.name}.config"
fetch_source(source, destination)
end
end
def deploy(environment_name: "all", service_name: "all", skip_deployments: "", test: false, auto_approve: false, plan: false, destroy: false, verbose: false)
skip_deployments = skip_deployments.split(/\s*,\s*/)
hosted_zones.each do |hosted_zone|
unless skip_deployments.include?("hosted-zone")
deploy_hosted_zone(hosted_zone, test, auto_approve, plan, destroy, verbose)
end
end
s3s.each do |s3|
unless skip_deployments.include?("s3")
deploy_s3(s3, test, auto_approve, plan, destroy, verbose)
end
end
vpn_customer_gateways.each do |vpn_customer_gateway|
unless skip_deployments.include?("vpn-customer-gateway")
deploy_vpn_customer_gateway(vpn_customer_gateway, test, auto_approve, plan, destroy, verbose)
end
end
environments.each do |name, details|
next unless ["all", name].include?(environment_name)
environment = {name: name, details: details}
deploy_cluster(environment, test, auto_approve, plan, destroy, verbose) if create? && !skip_deployments.include?("ecs")
wafs.each do |waf|
unless skip_deployments.include?("waf")
deploy_waf(waf, environment, test, auto_approve, plan, destroy, verbose)
end
end
rdss.each do |rds|
unless skip_deployments.include?("rds")
deploy_rds(rds, environment, test, auto_approve, plan, destroy, verbose)
end
end
auroras.each do |aurora|
unless skip_deployments.include?("aurora")
deploy_aurora(aurora, environment, test, auto_approve, plan, destroy, verbose)
end
end
elasticache_clusters.each do |elasticache_cluster|
unless skip_deployments.include?("elasticache-cluster")
deploy_elasticache_cluster(elasticache_cluster, environment, test, auto_approve, plan, destroy, verbose)
end
end
opensearch_clusters.each do |opensearch_cluster|
unless skip_deployments.include?("opensearch-cluster")
deploy_opensearch_cluster(opensearch_cluster, environment, test, auto_approve, plan, destroy, verbose)
end
end
services.each do |service|
next unless service.to_params["launch_on"].include?(name)
if [service.to_params["name"], "all"].include?(service_name) && !skip_deployments.include?("ecs-services")
deploy_service(service, environment, test, auto_approve, plan, destroy, verbose)
end
end
shared_loadbalancers.each do |shared_loadbalancer|
unless skip_deployments.include?("shared-loadbalancer")
deploy_shared_loadbalancer(shared_loadbalancer, environment, test, auto_approve, plan, destroy, verbose)
end
end
sources.each do |source|
deploy_source(source, environment, test, auto_approve, plan, destroy, verbose)
end
end
end
def target_directory
File.join(Infrastructure::APP_ROOT, Infrastructure::PATH, "ecs")
end
private
attr_reader :logger, :helper
def build_hosted_zones(hosted_zones_references)
(hosted_zones_references || []).map do |reference|
HostedZone.new(cluster: self, reference: reference)
end
end
def build_s3s(s3_references)
(s3_references || []).map do |reference|
S3.new(cluster: self, reference: reference)
end
end
def build_vpn_customer_gateways(vpn_customer_gateway_references)
(vpn_customer_gateway_references || []).map do |reference|
VpnCustomerGateway.new(cluster: self, reference: reference)
end
end
def build_sources(source_references)
(source_references || []).map do |reference|
Source.new(cluster: self, reference: reference)
end
end
def build_services(service_references)
(service_references || []).map do |reference|
Service.new(cluster: self, reference: reference)
end
end
def build_elasticache_clusters(elasticache_references)
(elasticache_references || []).map do |reference|
ElasticacheCluster.new(cluster: self, reference: reference)
end
end
def build_opensearch_clusters(opensearch_references)
(opensearch_references || []).map do |reference|
OpensearchCluster.new(cluster: self, reference: reference)
end
end
def build_wafs(waf_references)
(waf_references || []).map do |reference|
WAF.new(cluster: self, reference: reference)
end
end
def build_rdss(rds_references)
(rds_references || []).map do |reference|
Rds.new(cluster: self, reference: reference)
end
end
def build_auroras(aurora_references)
(aurora_references || []).map do |reference|
Aurora.new(cluster: self, reference: reference)
end
end
def build_shared_loadbalancers(shared_loadbalancer_references)
(shared_loadbalancer_references || []).map do |reference|
SharedLoadbalancer.new(cluster: self, reference: reference)
end
end
def deploy_hosted_zone(hosted_zone, test, auto_approve, plan, destroy, verbose)
test_hosted_zone(hosted_zone) if test
HostedZoneDeployment.new(
hosted_zone: hosted_zone,
plan: plan,
auto_approve: auto_approve,
destroy: destroy,
verbose: verbose
).call
end
def deploy_s3(s3, test, auto_approve, plan, destroy, verbose)
test_s3(s3) if test
S3Deployment.new(
s3: s3,
plan: plan,
auto_approve: auto_approve,
destroy: destroy,
verbose: verbose
).call
end
def deploy_vpn_customer_gateway(vpn_customer_gateway, test, auto_approve, plan, destroy, verbose)
test_vpn_customer_gateway(vpn_customer_gateway) if test
VpnCustomerGatewayDeployment.new(
vpn_customer_gateway: vpn_customer_gateway,
plan: plan,
auto_approve: auto_approve,
destroy: destroy,
verbose: verbose
).call
end
def deploy_source(source, env, test, auto_approve, plan, destroy, verbose)
test_source(source, env) if test
SourceDeployment.new(
source: source,
env: env,
plan: plan,
auto_approve: auto_approve,
destroy: destroy,
verbose: verbose
).call
end
def deploy_cluster(env, test, auto_approve, plan, destroy, verbose)
test_cluster(env) if test
ClusterDeployment.new(
cluster: self,
env: env,
plan: plan,
auto_approve: auto_approve,
destroy: destroy,
verbose: verbose
).call
end
def deploy_service(service, env, test, auto_approve, plan, destroy, verbose)
test_service(service, env) if test
ServiceDeployment.new(
service: service,
env: env,
plan: plan,
auto_approve: auto_approve,
destroy: destroy,
verbose: verbose
).call
end
def deploy_waf(waf, env, test, auto_approve, plan, destroy, verbose)
test_waf(waf, env) if test
WAFDeployment.new(
waf: waf,
env: env,
plan: plan,
auto_approve: auto_approve,
destroy: destroy,
verbose: verbose
).call
end
def deploy_rds(rds, env, test, auto_approve, plan, destroy, verbose)
test_rds(rds, env) if test
RdsDeployment.new(
rds: rds,
env: env,
plan: plan,
auto_approve: auto_approve,
destroy: destroy,
verbose: verbose
).call
end
def deploy_aurora(aurora, env, test, auto_approve, plan, destroy, verbose)
test_aurora(aurora, env) if test
AuroraDeployment.new(
aurora: aurora,
env: env,
plan: plan,
auto_approve: auto_approve,
destroy: destroy,
verbose: verbose
).call
end
def deploy_elasticache_cluster(elasticache_cluster, env, test, auto_approve, plan, destroy, verbose)
test_elasticache_cluster(elasticache_cluster, env) if test
ElasticacheClusterDeployment.new(
elasticache_cluster: elasticache_cluster,
env: env,
plan: plan,
auto_approve: auto_approve,
destroy: destroy,
verbose: verbose
).call
end
def deploy_opensearch_cluster(opensearch_cluster, env, test, auto_approve, plan, destroy, verbose)
test_opensearch_cluster(opensearch_cluster, env) if test
OpensearchClusterDeployment.new(
opensearch_cluster: opensearch_cluster,
env: env,
plan: plan,
auto_approve: auto_approve,
destroy: destroy,
verbose: verbose
).call
end
def deploy_shared_loadbalancer(shared_loadbalancer, env, test, auto_approve, plan, destroy, verbose)
test_shared_loadbalancer(shared_loadbalancer, env) if test
SharedLoadbalancerDeployment.new(
shared_loadbalancer: shared_loadbalancer,
env: env,
plan: plan,
auto_approve: auto_approve,
destroy: destroy,
verbose: verbose
).call
end
def create?
properties["create"]
end
def test_hosted_zone(hosted_zone)
HostedZoneTest.new(hosted_zone: hosted_zone).call
end
def test_s3(s3)
S3Test.new(s3: s3).call
end
def test_vpn_customer_gateway(vpn_customer_gateway)
VpnCustomerGatewayTest.new(vpn_customer_gateway: vpn_customer_gateway).call
end
def test_cluster(env)
ClusterTest.new(cluster: self, env: env).call
end
def test_source(source, env)
SourceTest.new(source: source, env: env).call
end
def test_service(service, env)
ServiceTest.new(service: service, env: env).call
end
def test_waf(waf, env)
WAFTest.new(waf: waf, env: env).call
end
def test_rds(rds, env)
RdsTest.new(rds: rds, env: env).call
end
def test_aurora(aurora, env)
puts "debug Testing Aurora"
AuroraTest.new(aurora: aurora, env: env).call
end
def test_elasticache_cluster(elasticache_cluster, env)
ElasticacheClusterTest.new(elasticache_cluster: elasticache_cluster, env: env).call
end
def test_opensearch_cluster(opensearch_cluster, env)
OpensearchClusterTest.new(opensearch_cluster: opensearch_cluster, env: env).call
end
def test_shared_loadbalancer(shared_loadbalancer, env)
SharedLoadbalancerTest.new(shared_loadbalancer: shared_loadbalancer, env: env).call
end
def fetch_source(source, destination)
logger.info("Cloning #{source.reference} ...")
helper.remove(destination)
helper.git_clone(source.reference, destination)
helper.change_to(destination)
helper.terrafile
helper.change_to(Infrastructure::APP_ROOT)
end
def verify_source_path(source)
if File.directory?(source.reference)
logger.info "Found #{source.reference}"
else
logger.error "#{source.reference} does not exist"
end
end
def remotely_held?(source)
source.reference.start_with?("https://", "git@", "git://", "git+ssh://")
end
end
end