Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Azure Microsoft SQL Server Plugin - Adding databases, firewall_rules, elastic_pools,and failover_groups links #23

Merged
merged 2 commits into from Jul 20, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 2 additions & 5 deletions azure/rs_azure_sql/README.md
Expand Up @@ -14,9 +14,6 @@ The Azure SQL Database Plugin integrates RightScale Self-Service with the basic
- The following packages are also required (See the Installation section for details):
- [sys_log](sys_log.rb)

## Getting Started
**Coming Soon**

## Installation
1. Be sure your RightScale account has Self-Service enabled
1. Connect AzureRM Cloud credentials to your RightScale account (if not already completed)
Expand All @@ -38,10 +35,10 @@ The Azure SQL Database Plugin has been packaged as `plugins/rs_azure_sql`. In or
```
import "plugins/rs_azure_sql"
```
For more information on using packages, please refer to the RightScale online documenataion. [Importing a Package](http://docs.rightscale.com/ss/guides/ss_packaging_cats.html#importing-a-package)
For more information on using packages, please refer to the RightScale online documentation. [Importing a Package](http://docs.rightscale.com/ss/guides/ss_packaging_cats.html#importing-a-package)

Azure SQL Database resources can now be created by specifying a resource declaration with the desired fields. See the Supported Actions section for a full list of supported actions.
The resulting resrouce can be manipulated just like the native RightScale resources in RCL and CAT. See the Examples Section for more examples and complete CAT's.
The resulting resource can be manipulated just like the native RightScale resources in RCL and CAT. See the Examples Section for more examples and complete CAT's.

## Supported Resources
- sql_server
Expand Down
97 changes: 64 additions & 33 deletions azure/rs_azure_sql/azure_sql_plugin.rb
Expand Up @@ -2,6 +2,7 @@
type 'plugin'
rs_ca_ver 20161221
short_description "Azure SQL Plugin"
long_description "Version: 1.1"
package "plugins/rs_azure_sql"
import "sys_log"

Expand Down Expand Up @@ -105,29 +106,33 @@
body_path "properties.state"
end

# link "databases" do
# path "$href/databases?api-version=2014-04-01"
# type "databases"
# end
link "databases" do
path "$id/databases?api-version=2014-04-01"
type "databases"
output_path "value[*]"
end

# link "firewall_rule" do
# path "$href/firewallRules?api-version=2014-04-01"
# type "firewall_rule"
# end
link "firewall_rules" do
path "$id/firewallRules?api-version=2014-04-01"
type "firewall_rule"
output_path "value[*]"
end

# link "failover_group" do
# path "$href/failoverGroups?api-version=2015-05-01-preview"
# type "failover_group"
# end
link "failover_groups" do
path "$id/failoverGroups?api-version=2015-05-01-preview"
type "failover_group"
output_path "value[*]"
end

# link "elastic_pool" do
# path "$href/elasticPools?api-version=2014-04-01"
# type "elastic_pool"
# end
link "elastic_pools" do
path "$id/elasticPools?api-version=2014-04-01"
type "elastic_pool"
output_path "value[*]"
end
end

type "databases" do
href_templates "{{type=='Microsoft.Sql/servers/databases' && join('?',[id,'api-version=2014-04-01']) || null}}"
href_templates "{{type=='Microsoft.Sql/servers/databases' && join('?',[id,'api-version=2014-04-01']) || null}}","{{value[0].type=='Microsoft.Sql/servers/databases' && map(&join('?',[id,'api-version=2014-04-01']),value) || null}}"
provision "provision_database"
delete "delete_resource"

Expand Down Expand Up @@ -341,7 +346,7 @@
end

type "firewall_rule" do
href_templates "{{type=='Microsoft.Sql/servers/firewallRules' && join('?',[id,'api-version=2014-04-01']) || null}}"
href_templates "{{type=='Microsoft.Sql/servers/firewallRules' && join('?',[id,'api-version=2014-04-01']) || null}}","{{value[0].type=='Microsoft.Sql/servers/firewallRules' && map(&join('?',[id,'api-version=2014-04-01']),value) || null}}"
provision "provision_firewall_rule"
delete "delete_resource"

Expand Down Expand Up @@ -408,7 +413,7 @@
end

type "elastic_pool" do
href_templates "{{type=='Microsoft.Sql/servers/elasticPools' && join('?',[id,'api-version=2014-04-01']) || null}}"
href_templates "{{type=='Microsoft.Sql/servers/elasticPools' && join('?',[id,'api-version=2014-04-01']) || null}}","{{value[0].type=='Microsoft.Sql/servers/elasticPools' && map(&join('?',[id,'api-version=2014-04-01']),value) || null}}"
provision "provision_elastic_pool"
delete "delete_resource"

Expand Down Expand Up @@ -466,6 +471,24 @@
verb "PATCH"
end

action "show" do
type "elastic_pool"
path "/subscriptions/$subscription_id/resourceGroups/$resource_group/providers/Microsoft.Sql/servers/$server_name/elasticPools/$name?api-version=2014-04-01"
verb "GET"

field "resource_group" do
location "path"
end

field "name" do
location "path"
end

field "server_name" do
location "path"
end
end

output "id","name","type","location","kind"

output "creationDate" do
Expand Down Expand Up @@ -498,7 +521,7 @@
end

type "failover_group" do
href_templates "{{type=='Microsoft.Sql/servers/failoverGroups' && join('?',[id,'api-version=2015-05-01-preview']) || null}}"
href_templates "{{type=='Microsoft.Sql/servers/failoverGroups' && join('?',[id,'api-version=2015-05-01-preview']) || null}}","{{value[0].type=='Microsoft.Sql/servers/failoverGroups' && map(&join('?',[id,'api-version=2015-05-01-preview']),value) || null}}"
provision "provision_failover_group"
delete "delete_resource"

Expand Down Expand Up @@ -782,17 +805,15 @@
$name = $fields["name"]
$server_name = $fields["server_name"]
$resource_group = $fields["resource_group"]
call sys_log.detail("sleeping 120")
sleep(120)
call sys_log.detail("entering while(empty?()) loop")
@new_resource = @operation.show(name: $name, server_name: $server_name, resource_group: $resource_group )
while empty?(@new_resource) do
call sys_log.detail("entering check for database created")
sub on_error: retry, timeout: 60m do
call sys_log.detail("sleeping 10")
sleep(10)
@new_resource = @operation.show(name: $name, server_name: $server_name, resource_group: $resource_group )
end
@new_resource = @operation.show(name: $name, server_name: $server_name, resource_group: $resource_group )
$status = @new_resource.status
call sys_log.detail("entering 2 sub")
call sys_log.detail("Checking that database state is online")
sub on_error: skip, timeout: 60m do
while $status != "Online" do
$status = @operation.show(name: $name, server_name: $server_name, resource_group: $resource_group).status
Expand Down Expand Up @@ -856,19 +877,29 @@
@operation = rs_azure_sql.$type.create($fields)
call stop_debugging()
call sys_log.detail(to_object(@operation))
call start_debugging()
@resource = @operation.get()
$status = @resource.state
call stop_debugging()
$name = $fields["name"]
$server_name = $fields["server_name"]
$resource_group = $fields["resource_group"]
call sys_log.detail("entering check for elastic pool created")
sub on_error: retry, timeout: 60m do
call sys_log.detail("sleeping 10")
sleep(10)
@new_resource = @operation.show(name: $name, server_name: $server_name, resource_group: $resource_group )
end
@new_resource = @operation.show(name: $name, server_name: $server_name, resource_group: $resource_group )
$status = @new_resource.state
call sys_log.detail("Checking that database state is online")
sub on_error: skip, timeout: 60m do
while $status != "Ready" do
call start_debugging()
$status = @resource.state
$status = @operation.show(name: $name, server_name: $server_name, resource_group: $resource_group).state
call stop_debugging()
call sys_log.detail(join(["Status: ", $status]))
call start_debugging()
sleep(10)
end
end
end
@resource = @new_resource
call stop_debugging()
call sys_log.detail(to_object(@resource))
end
end
Expand Down
6 changes: 6 additions & 0 deletions azure/rs_azure_sql/changelog.md
@@ -1,5 +1,11 @@
SQL Plugin changelog

v1.1
-----
- adding links to server plugin(`databases`, `firewall_rules`, `failover_groups`, `elastic_pools`)
- updated elastic_pools provision to have better resiliency
- updated database provision to support longer timeouts, have better failure handling on 404.

v1.0
-----
- initial release
85 changes: 83 additions & 2 deletions azure/rs_azure_sql/sql_test_cat.rb
@@ -1,12 +1,41 @@
name 'SQL Test CAT'
rs_ca_ver 20161221
short_description "Azure SQL Database Service - Test CAT"
import "sys_log"
import "plugins/rs_azure_sql"

parameter "subscription_id" do
like $rs_azure_sql.subscription_id
end

output "databases" do
label "Databases"
category "Databases"
default_value $db_link_output
description "Databases"
end

output "firewall_rules" do
label "firewall_rules"
category "Databases"
default_value $firewall_rules_link_output
description "firewall_rules"
end

output "failover_groups" do
label "failover_groups"
category "Databases"
default_value $failover_groups_link_output
description "failover_groups"
end

output "elastic_pools" do
label "elastic_pools"
category "Databases"
default_value $elastic_pools_link_output
description "elastic_pools"
end

permission "read_creds" do
actions "rs_cm.show_sensitive","rs_cm.index_sensitive"
resources "rs_cm.credentials"
Expand All @@ -18,8 +47,8 @@
location "Central US"
properties do {
"version" => "12.0",
"administratorLogin" =>"rightscale",
"administratorLoginPassword" => "RightScale2017"
"administratorLogin" =>"superdbadmin",
"administratorLoginPassword" => "RightScale2017!"
} end
end

Expand Down Expand Up @@ -83,3 +112,55 @@
"storageEndpoint" => cred("storageEndpoint")
} end
end

operation "launch" do
description "Launch the application"
definition "launch_handler"
output_mappings do {
$databases => $db_link_output,
$firewall_rules => $firewall_rules_link_output,
$failover_groups => $failover_groups_link_output,
$elastic_pools => $elastic_pools_link_output
} end
end

define launch_handler(@sql_server,@database,@transparent_data_encryption,@firewall_rule,@elastic_pool,@auditing_policy,@security_policy) return @databases,$db_link_output,$firewall_rules_link_output,$failover_groups_link_output, $elastic_pools_link_output do
provision(@sql_server)
provision(@database)
provision(@transparent_data_encryption)
provision(@firewall_rule)
provision(@elastic_pool)
provision(@auditing_policy)
provision(@security_policy)
call start_debugging()
sub on_error: skip, timeout: 2m do
call sys_log.detail("getting database link")
@databases = @sql_server.databases()
$db_link_output = to_s(to_object(@databases))
call sys_log.detail("getting firewall link")
@firewall_rules = @sql_server.firewall_rules()
$firewall_rules_link_output = to_s(to_object(@firewall_rules))
call sys_log.detail("getting failover link")
@failover_groups = @sql_server.failover_groups()
$failover_groups_link_output = to_s(to_object(@failover_groups))
call sys_log.detail("getting elastic pool link")
@elastic_pools = @sql_server.elastic_pools()
$elastic_pools_link_output = to_s(to_object(@elastic_pools))
end
call stop_debugging()
end

define start_debugging() do
if $$debugging == false || logic_and($$debugging != false, $$debugging != true)
initiate_debug_report()
$$debugging = true
end
end

define stop_debugging() do
if $$debugging == true
$debug_report = complete_debug_report()
call sys_log.detail($debug_report)
$$debugging = false
end
end