@@ -103,6 +103,49 @@ func TestAccDigitalOceanCDN_Create_and_Update(t *testing.T) {
103103 })
104104}
105105
106+ func TestAccDigitalOceanCDN_CustomDomain (t * testing.T ) {
107+ spaceName := generateBucketName ()
108+ certName := randomTestName ()
109+ updatedCertName := generateBucketName ()
110+ domain := randomTestName () + ".com"
111+ config := testAccCheckDigitalOceanCDNConfig_CustomDomain (domain , spaceName , certName )
112+ updatedConfig := testAccCheckDigitalOceanCDNConfig_CustomDomain (domain , spaceName , updatedCertName )
113+
114+ resource .ParallelTest (t , resource.TestCase {
115+ PreCheck : func () { testAccPreCheck (t ) },
116+ ProviderFactories : testAccProviderFactories ,
117+ CheckDestroy : testAccCheckDigitalOceanCDNDestroy ,
118+ ExternalProviders : map [string ]resource.ExternalProvider {
119+ "tls" : {
120+ Source : "hashicorp/tls" ,
121+ VersionConstraint : "3.0.0" ,
122+ },
123+ },
124+ Steps : []resource.TestStep {
125+ {
126+ Config : config ,
127+ Check : resource .ComposeTestCheckFunc (
128+ testAccCheckDigitalOceanCDNExists ("digitalocean_cdn.space_cdn" ),
129+ resource .TestCheckResourceAttr (
130+ "digitalocean_cdn.space_cdn" , "certificate_name" , certName ),
131+ resource .TestCheckResourceAttr (
132+ "digitalocean_cdn.space_cdn" , "custom_domain" , "foo." + domain ),
133+ ),
134+ },
135+ {
136+ Config : updatedConfig ,
137+ Check : resource .ComposeTestCheckFunc (
138+ testAccCheckDigitalOceanCDNExists ("digitalocean_cdn.space_cdn" ),
139+ resource .TestCheckResourceAttr (
140+ "digitalocean_cdn.space_cdn" , "certificate_name" , updatedCertName ),
141+ resource .TestCheckResourceAttr (
142+ "digitalocean_cdn.space_cdn" , "custom_domain" , "foo." + domain ),
143+ ),
144+ },
145+ },
146+ })
147+ }
148+
106149func testAccCheckDigitalOceanCDNDestroy (s * terraform.State ) error {
107150 client := testAccProvider .Meta ().(* CombinedConfig ).godoClient ()
108151
@@ -175,3 +218,69 @@ resource "digitalocean_cdn" "foobar" {
175218 origin = "${digitalocean_spaces_bucket.bucket.bucket_domain_name}"
176219 ttl = %d
177220}`
221+
222+ func testAccCheckDigitalOceanCDNConfig_CustomDomain (domain string , spaceName string , certName string ) string {
223+ return fmt .Sprintf (`
224+ resource "tls_private_key" "example" {
225+ algorithm = "ECDSA"
226+ ecdsa_curve = "P384"
227+ }
228+
229+ resource "tls_self_signed_cert" "example" {
230+ key_algorithm = "ECDSA"
231+ private_key_pem = tls_private_key.example.private_key_pem
232+ dns_names = ["foo.%s"]
233+ subject {
234+ common_name = "foo.%s"
235+ organization = "%s"
236+ }
237+
238+ validity_period_hours = 24
239+
240+ allowed_uses = [
241+ "key_encipherment",
242+ "digital_signature",
243+ "server_auth",
244+ ]
245+ }
246+
247+ resource "digitalocean_spaces_bucket" "space" {
248+ name = "%s"
249+ region = "sfo3"
250+ }
251+
252+ resource "digitalocean_certificate" "spaces_cert" {
253+ name = "%s"
254+ type = "custom"
255+ private_key = tls_private_key.example.private_key_pem
256+ leaf_certificate = tls_self_signed_cert.example.cert_pem
257+
258+ lifecycle {
259+ create_before_destroy = true
260+ }
261+ }
262+
263+ resource digitalocean_domain "domain" {
264+ name = "%s"
265+ }
266+
267+ resource digitalocean_record "record" {
268+ domain = digitalocean_domain.domain.name
269+ type = "CNAME"
270+ name = "foo"
271+ value = "${digitalocean_spaces_bucket.space.bucket_domain_name}."
272+ }
273+
274+ resource "digitalocean_cdn" "space_cdn" {
275+ depends_on = [
276+ digitalocean_spaces_bucket.space,
277+ digitalocean_certificate.spaces_cert,
278+ digitalocean_record.record
279+ ]
280+
281+ origin = digitalocean_spaces_bucket.space.bucket_domain_name
282+ ttl = 2400
283+ certificate_name = digitalocean_certificate.spaces_cert.name
284+ custom_domain = "foo.%s"
285+ }` , domain , domain , certName , spaceName , certName , domain , domain )
286+ }
0 commit comments