@@ -456,18 +456,27 @@ resource "aws_iam_instance_profile" "gitlab" {
456456
457457data "template_file" "gitlab_config_template" {
458458 template = join (" \n " , [
459- for fn in fileset (" ." , " ${ local . gitlab_config_template_file_path } /**" ) : file (fn)
459+ file (" ${ local . gitlab_config_template_file_path } /postgres.tftpl" ),
460+ file (" ${ local . gitlab_config_template_file_path } /redis.tftpl" ),
461+ file (" ${ local . gitlab_config_template_file_path } /nginx.tftpl" ),
462+ file (" ${ local . gitlab_config_template_file_path } /rails.tftpl" ),
463+ var . create_ses_identity ? file (" ${ local . gitlab_config_template_file_path } /smtp.tftpl" ) : " " ,
460464 ])
461- vars = {
465+ vars = merge ( {
462466 gitlab_url = local.gitlab_complete_url,
463467 gitlab_db_name = module.gitlab_pg.db_instance_name,
464468 gitlab_db_username = module.gitlab_pg.db_instance_username,
465469 gitlab_db_password = module.gitlab_pg.db_instance_password,
466470 gitlab_db_host = module.gitlab_pg.db_instance_address,
467471 gitlab_redis_host = aws_elasticache_cluster.gitlab_redis.cache_nodes[0 ].address,
468- aws_region = aws_s3_bucket.gitlab_backup[0 ].region
472+ aws_region = aws_s3_bucket.gitlab_backup[0 ].region,
469473 gitlab_backup_s3_bucket_name = aws_s3_bucket.gitlab_backup[0 ].bucket
470- }
474+ }, var. create_ses_identity ? {
475+ smtp_address = " email-smtp.${ var . aws_region } .amazonaws.com" ,
476+ smtp_username = aws_iam_access_key.gitlab_smtp_user[0 ].id,
477+ smtp_password = aws_iam_access_key.gitlab_smtp_user[0 ].ses_smtp_password_v4,
478+ smtp_domain = data.aws_route53_zone.email_domain[0 ].name
479+ } : {})
471480}
472481
473482resource "local_sensitive_file" "rendered_gitlab_config_file" {
@@ -496,3 +505,60 @@ resource "null_resource" "gitlab_reconfigure" {
496505 command = " ansible-playbook -u ubuntu -i '${ aws_instance . gitlab [0 ]. private_ip } ,' --private-key ${ var . private_key } -e 'instance_ip_address=${ aws_instance . gitlab [0 ]. private_ip } workdir=${ local . gitlab_config_tmp_path } config_file=${ local_sensitive_file . gitlab_config_file . filename } ' ${ local . gitlab_config_playbook_file } "
497506 }
498507}
508+
509+ data "aws_route53_zone" "email_domain" {
510+ count = var. create_ses_identity ? 1 : 0
511+ name = var. ses_domain != null ? var. ses_domain : var. hosted_zone
512+ }
513+
514+ resource "aws_ses_domain_identity" "email_domain" {
515+ count = var. create_ses_identity ? 1 : 0
516+ domain = data. aws_route53_zone . email_domain [0 ]. name
517+ }
518+
519+ resource "aws_route53_record" "email_domain_amazonses_verification_record" {
520+ count = var. create_ses_identity ? 1 : 0
521+ zone_id = data. aws_route53_zone . email_domain [0 ]. zone_id
522+ name = " _amazonses.${ aws_ses_domain_identity . email_domain [0 ]. id } "
523+ type = " TXT"
524+ ttl = " 600"
525+ records = [aws_ses_domain_identity . email_domain [0 ]. verification_token ]
526+ }
527+
528+ resource "aws_ses_domain_identity_verification" "email_domain_verification" {
529+ count = var. create_ses_identity ? 1 : 0
530+ domain = aws_ses_domain_identity. email_domain [0 ]. id
531+
532+ depends_on = [aws_route53_record . email_domain_amazonses_verification_record [0 ]]
533+ }
534+
535+ resource "aws_iam_user" "gitlab_smtp_user" {
536+ count = var. create_ses_identity ? 1 : 0
537+ name = var. ses_username
538+ }
539+
540+ resource "aws_iam_access_key" "gitlab_smtp_user" {
541+ count = var. create_ses_identity ? 1 : 0
542+ user = aws_iam_user. gitlab_smtp_user [0 ]. name
543+ }
544+
545+ data "aws_iam_policy_document" "gitlab_ses_sender" {
546+ count = var. create_ses_identity ? 1 : 0
547+ statement {
548+ actions = [" ses:SendRawEmail" ]
549+ resources = [aws_ses_domain_identity . email_domain [0 ]. arn ]
550+ }
551+ }
552+
553+ resource "aws_iam_policy" "gitlab_ses_sender" {
554+ count = var. create_ses_identity ? 1 : 0
555+ name = " gitlab_ses_sender"
556+ description = " Allows sending of e-mails via Simple Email Service"
557+ policy = data. aws_iam_policy_document . gitlab_ses_sender [0 ]. json
558+ }
559+
560+ resource "aws_iam_user_policy_attachment" "gitlab_ses_sender" {
561+ count = var. create_ses_identity ? 1 : 0
562+ user = aws_iam_user. gitlab_smtp_user [0 ]. name
563+ policy_arn = aws_iam_policy. gitlab_ses_sender [0 ]. arn
564+ }
0 commit comments