func()

in cmd/certificate_validate.go [18:72]


func (o certificateValidateOperation) execute() {
	certificate, err := o.findCertificate(o.domainName)

	if err != nil {
		o.output.Fatal(err, "Could not validate certificate")
		return
	}

	if !certificate.IsPendingValidation() {
		o.output.Fatal(fmt.Errorf("certificate %s is in state %s", o.domainName, Humanize(certificate.Status)), "Could not validate certificate")
		return
	}

	o.output.Debug("Listing hosted zones [API=route53 Action=ListHostedZones]")
	hostedZones, err := o.route53.ListHostedZones()

	if err != nil {
		o.output.Fatal(err, "Could not validate certificate")
		return
	}

	for _, v := range certificate.Validations {
		switch {
		case v.IsPendingValidation():
			if zone, ok := hostedZones.FindSuperDomainOf(v.DomainName); ok {
				o.output.Debug("Creating resource record [API=route53 Action=ChangeResourceRecordSets HostedZone=%s]", zone.ID)
				id, err := o.route53.CreateResourceRecord(
					route53.CreateResourceRecordInput{
						HostedZoneID: zone.ID,
						RecordType:   v.ResourceRecord.Type,
						Name:         v.ResourceRecord.Name,
						Value:        v.ResourceRecord.Value,
					},
				)

				if err != nil {
					o.output.Fatal(err, "Could not validate certificate")
					return
				}

				o.output.Debug("Created resource record [ChangeID=%s]", id)
				o.output.Info("[%s] created validation record", v.DomainName)
			} else {
				o.output.Warn("[%s] could not find zone in Amazon Route 53", v.DomainName)
			}
		case v.IsSuccess():
			o.output.Info("[%s] already validated", v.DomainName)
		case v.IsFailed():
			o.output.Fatal(nil, "[%s] failed validation", v.DomainName)
			return
		default:
			o.output.Warn("[%s] unexpected status: %s", v.DomainName, Humanize(v.Status))
		}
	}
}