Skip to content

Commit f6bee13

Browse files
committed
Scaffold the Sql Server AzureRM Resource
1 parent cd78db3 commit f6bee13

3 files changed

Lines changed: 248 additions & 0 deletions

File tree

builtin/providers/azurerm/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ func Provider() terraform.ResourceProvider {
6161
"azurerm_storage_blob": resourceArmStorageBlob(),
6262
"azurerm_storage_queue": resourceArmStorageQueue(),
6363
"azurerm_dns_zone": resourceArmDnsZone(),
64+
"azurerm_sql_server": resourceArmSqlServer(),
6465
},
6566
ConfigureFunc: providerConfigure,
6667
}
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
package azurerm
2+
3+
import (
4+
"fmt"
5+
"log"
6+
7+
"github.com/hashicorp/terraform/helper/schema"
8+
"github.com/jen20/riviera/azure"
9+
"github.com/jen20/riviera/sql"
10+
)
11+
12+
func resourceArmSqlServer() *schema.Resource {
13+
return &schema.Resource{
14+
Create: resourceArmSqlServerCreate,
15+
Read: resourceArmSqlServerRead,
16+
Update: resourceArmSqlServerCreate,
17+
Delete: resourceArmSqlServerDelete,
18+
19+
Schema: map[string]*schema.Schema{
20+
"name": &schema.Schema{
21+
Type: schema.TypeString,
22+
Required: true,
23+
ForceNew: true,
24+
},
25+
26+
"location": &schema.Schema{
27+
Type: schema.TypeString,
28+
Required: true,
29+
ForceNew: true,
30+
StateFunc: azureRMNormalizeLocation,
31+
},
32+
33+
"resource_group_name": &schema.Schema{
34+
Type: schema.TypeString,
35+
Required: true,
36+
ForceNew: true,
37+
},
38+
39+
"version": &schema.Schema{
40+
Type: schema.TypeString,
41+
Required: true,
42+
},
43+
44+
"administrator_login": &schema.Schema{
45+
Type: schema.TypeString,
46+
Required: true,
47+
},
48+
49+
"administrator_login_password": &schema.Schema{
50+
Type: schema.TypeString,
51+
Required: true,
52+
},
53+
54+
"fully_qualified_domain_name": &schema.Schema{
55+
Type: schema.TypeString,
56+
Computed: true,
57+
},
58+
59+
"tags": tagsSchema(),
60+
},
61+
}
62+
}
63+
64+
func resourceArmSqlServerCreate(d *schema.ResourceData, meta interface{}) error {
65+
client := meta.(*ArmClient)
66+
rivieraClient := client.rivieraClient
67+
68+
tags := d.Get("tags").(map[string]interface{})
69+
70+
createRequest := rivieraClient.NewRequest()
71+
createRequest.Command = &sql.CreateOrUpdateServer{
72+
Name: d.Get("name").(string),
73+
Location: d.Get("location").(string),
74+
ResourceGroupName: d.Get("resource_group_name").(string),
75+
AdministratorLogin: azure.String(d.Get("administrator_login").(string)),
76+
AdministratorLoginPassword: azure.String(d.Get("administrator_login_password").(string)),
77+
Version: azure.String(d.Get("version").(string)),
78+
Tags: expandTags(tags),
79+
}
80+
81+
createResponse, err := createRequest.Execute()
82+
if err != nil {
83+
return fmt.Errorf("Error creating SQL Server: %s", err)
84+
}
85+
if !createResponse.IsSuccessful() {
86+
return fmt.Errorf("Error creating SQL Server: %s", createResponse.Error)
87+
}
88+
89+
readRequest := rivieraClient.NewRequest()
90+
readRequest.Command = &sql.GetServer{
91+
Name: d.Get("name").(string),
92+
ResourceGroupName: d.Get("resource_group_name").(string),
93+
}
94+
95+
readResponse, err := readRequest.Execute()
96+
if err != nil {
97+
return fmt.Errorf("Error reading SQL Server: %s", err)
98+
}
99+
if !readResponse.IsSuccessful() {
100+
return fmt.Errorf("Error reading SQL Server: %s", readResponse.Error)
101+
}
102+
103+
resp := readResponse.Parsed.(*sql.GetServerResponse)
104+
d.SetId(*resp.ID)
105+
106+
return resourceArmSqlServerRead(d, meta)
107+
}
108+
109+
func resourceArmSqlServerRead(d *schema.ResourceData, meta interface{}) error {
110+
client := meta.(*ArmClient)
111+
rivieraClient := client.rivieraClient
112+
113+
readRequest := rivieraClient.NewRequestForURI(d.Id())
114+
readRequest.Command = &sql.GetServer{}
115+
116+
readResponse, err := readRequest.Execute()
117+
if err != nil {
118+
return fmt.Errorf("Error reading SQL Server: %s", err)
119+
}
120+
if !readResponse.IsSuccessful() {
121+
log.Printf("[INFO] Error reading SQL Server %q - removing from state", d.Id())
122+
d.SetId("")
123+
return fmt.Errorf("Error reading SQL Server: %s", readResponse.Error)
124+
}
125+
126+
resp := readResponse.Parsed.(*sql.GetServerResponse)
127+
128+
d.Set("fully_qualified_domain_name", resp.FullyQualifiedDomainName)
129+
d.Set("administrator_login", resp.AdministratorLogin)
130+
d.Set("version", resp.Version)
131+
132+
flattenAndSetTags(d, resp.Tags)
133+
134+
return nil
135+
}
136+
137+
func resourceArmSqlServerDelete(d *schema.ResourceData, meta interface{}) error {
138+
client := meta.(*ArmClient)
139+
rivieraClient := client.rivieraClient
140+
141+
deleteRequest := rivieraClient.NewRequestForURI(d.Id())
142+
deleteRequest.Command = &sql.DeleteServer{}
143+
144+
deleteResponse, err := deleteRequest.Execute()
145+
if err != nil {
146+
return fmt.Errorf("Error deleting SQL Server: %s", err)
147+
}
148+
if !deleteResponse.IsSuccessful() {
149+
return fmt.Errorf("Error deleting SQL Server: %s", deleteResponse.Error)
150+
}
151+
152+
return nil
153+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package azurerm
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform/helper/acctest"
8+
"github.com/hashicorp/terraform/helper/resource"
9+
"github.com/hashicorp/terraform/terraform"
10+
"github.com/jen20/riviera/sql"
11+
)
12+
13+
func TestAccAzureRMSqlServer_basic(t *testing.T) {
14+
ri := acctest.RandInt()
15+
config := fmt.Sprintf(testAccAzureRMSqlServer_basic, ri, ri)
16+
17+
resource.Test(t, resource.TestCase{
18+
PreCheck: func() { testAccPreCheck(t) },
19+
Providers: testAccProviders,
20+
CheckDestroy: testCheckAzureRMSqlServerDestroy,
21+
Steps: []resource.TestStep{
22+
resource.TestStep{
23+
Config: config,
24+
Check: resource.ComposeTestCheckFunc(
25+
testCheckAzureRMSqlServerExists("azurerm_sql_server.test"),
26+
),
27+
},
28+
},
29+
})
30+
}
31+
32+
func testCheckAzureRMSqlServerExists(name string) resource.TestCheckFunc {
33+
return func(s *terraform.State) error {
34+
35+
rs, ok := s.RootModule().Resources[name]
36+
if !ok {
37+
return fmt.Errorf("Not found: %s", name)
38+
}
39+
40+
conn := testAccProvider.Meta().(*ArmClient).rivieraClient
41+
42+
readRequest := conn.NewRequestForURI(rs.Primary.ID)
43+
readRequest.Command = &sql.GetServer{}
44+
45+
readResponse, err := readRequest.Execute()
46+
if err != nil {
47+
return fmt.Errorf("Bad: GetServer: %s", err)
48+
}
49+
if !readResponse.IsSuccessful() {
50+
return fmt.Errorf("Bad: GetServer: %s", readResponse.Error)
51+
}
52+
53+
return nil
54+
}
55+
}
56+
57+
func testCheckAzureRMSqlServerDestroy(s *terraform.State) error {
58+
conn := testAccProvider.Meta().(*ArmClient).rivieraClient
59+
60+
for _, rs := range s.RootModule().Resources {
61+
if rs.Type != "azurerm_sql_server" {
62+
continue
63+
}
64+
65+
readRequest := conn.NewRequestForURI(rs.Primary.ID)
66+
readRequest.Command = &sql.GetServer{}
67+
68+
readResponse, err := readRequest.Execute()
69+
if err != nil {
70+
return fmt.Errorf("Bad: GetServer: %s", err)
71+
}
72+
73+
if readResponse.IsSuccessful() {
74+
return fmt.Errorf("Bad: SQL Server still exists: %s", readResponse.Error)
75+
}
76+
}
77+
78+
return nil
79+
}
80+
81+
var testAccAzureRMSqlServer_basic = `
82+
resource "azurerm_resource_group" "test" {
83+
name = "acctest_rg_%d"
84+
location = "West US"
85+
}
86+
resource "azurerm_sql_server" "test" {
87+
name = "acctestsqlserver%d"
88+
resource_group_name = "${azurerm_resource_group.test.name}"
89+
location = "West US"
90+
version = "12.0"
91+
administrator_login = "mradministrator"
92+
administrator_login_password = "thisIsDog11"
93+
}
94+
`

0 commit comments

Comments
 (0)