fog-azure-rm-temp 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +0 -5
- data/fog-azure-rm.gemspec +1 -1
- data/lib/fog/azurerm/compute.rb +2 -0
- data/lib/fog/azurerm/docs/storage.md +66 -0
- data/lib/fog/azurerm/models/compute/creation_data.rb +4 -2
- data/lib/fog/azurerm/models/compute/data_disk.rb +26 -0
- data/lib/fog/azurerm/models/compute/managed_disk.rb +5 -4
- data/lib/fog/azurerm/models/compute/server.rb +24 -3
- data/lib/fog/azurerm/models/storage/recovery_vault.rb +50 -0
- data/lib/fog/azurerm/models/storage/recovery_vaults.rb +27 -0
- data/lib/fog/azurerm/requests/compute/attach_data_disk_to_vm.rb +49 -13
- data/lib/fog/azurerm/requests/compute/detach_data_disk_from_vm.rb +1 -2
- data/lib/fog/azurerm/requests/storage/create_or_update_recovery_vault.rb +54 -0
- data/lib/fog/azurerm/requests/storage/delete_recovery_vault.rb +35 -0
- data/lib/fog/azurerm/requests/storage/disable_backup_protection.rb +60 -0
- data/lib/fog/azurerm/requests/storage/enable_backup_protection.rb +61 -0
- data/lib/fog/azurerm/requests/storage/get_all_backup_jobs.rb +56 -0
- data/lib/fog/azurerm/requests/storage/get_backup_container.rb +53 -0
- data/lib/fog/azurerm/requests/storage/get_backup_item.rb +58 -0
- data/lib/fog/azurerm/requests/storage/get_backup_job_for_vm.rb +53 -0
- data/lib/fog/azurerm/requests/storage/get_backup_protection_policy.rb +64 -0
- data/lib/fog/azurerm/requests/storage/get_recovery_vault.rb +49 -0
- data/lib/fog/azurerm/requests/storage/list_recovery_vaults.rb +48 -0
- data/lib/fog/azurerm/requests/storage/set_recovery_vault_context.rb +36 -0
- data/lib/fog/azurerm/requests/storage/start_backup.rb +54 -0
- data/lib/fog/azurerm/storage.rb +18 -1
- data/lib/fog/azurerm/version.rb +1 -1
- data/test/api_stub.rb +2 -0
- data/test/api_stub/models/compute/server.rb +62 -0
- data/test/api_stub/models/storage/recovery_vault.rb +23 -0
- data/test/api_stub/requests/compute/virtual_machine.rb +77 -0
- data/test/api_stub/requests/storage/recovery_vault.rb +189 -0
- data/test/models/{storage → compute}/test_data_disk.rb +2 -2
- data/test/models/compute/test_server.rb +27 -1
- data/test/models/storage/test_recovery_vault.rb +61 -0
- data/test/models/storage/test_recovery_vaults.rb +47 -0
- data/test/requests/compute/test_attach_data_disk_to_vm.rb +21 -6
- data/test/requests/storage/test_create_recovery_vault.rb +35 -0
- data/test/requests/storage/test_delete_recovery_vault.rb +34 -0
- data/test/requests/storage/test_disable_backup_protection.rb +52 -0
- data/test/requests/storage/test_enable_backup_protection.rb +66 -0
- data/test/requests/storage/test_get_all_backup_jobs.rb +35 -0
- data/test/requests/storage/test_get_backup_container.rb +35 -0
- data/test/requests/storage/test_get_backup_item.rb +35 -0
- data/test/requests/storage/test_get_backup_job_for_vm.rb +26 -0
- data/test/requests/storage/test_get_backup_protection_policy.rb +35 -0
- data/test/requests/storage/test_get_recovery_vault.rb +35 -0
- data/test/requests/storage/test_list_recovery_vault.rb +35 -0
- data/test/requests/storage/test_set_recovery_vault_context.rb +34 -0
- data/test/requests/storage/test_start_backup.rb +55 -0
- data/test/test_helper.rb +14 -0
- metadata +38 -13
- data/.arclint +0 -8
- data/lib/fog/azurerm/models/storage/data_disk.rb +0 -27
@@ -0,0 +1,54 @@
|
|
1
|
+
module Fog
|
2
|
+
module Storage
|
3
|
+
class AzureRM
|
4
|
+
# Real class for Recovery Vault request
|
5
|
+
class Real
|
6
|
+
def create_or_update_recovery_vault(resource_group, location, name)
|
7
|
+
msg = "Creating/Updating Recovery Vault #{name} in Resource Group #{resource_group}"
|
8
|
+
Fog::Logger.debug msg
|
9
|
+
|
10
|
+
resource_url = "#{AZURE_RESOURCE}/subscriptions/#{@subscription_id}/resourceGroups/#{resource_group}/providers/Microsoft.RecoveryServices/vaults/#{name}?api-version=#{REST_CLIENT_API_VERSION[1]}"
|
11
|
+
body = {
|
12
|
+
location: location,
|
13
|
+
tags: {},
|
14
|
+
sku: { name: 'standard' },
|
15
|
+
properties: {}
|
16
|
+
}
|
17
|
+
begin
|
18
|
+
token = Fog::Credentials::AzureRM.get_token(@tenant_id, @client_id, @client_secret)
|
19
|
+
response = RestClient.put(
|
20
|
+
resource_url,
|
21
|
+
body.to_json,
|
22
|
+
accept: 'application/json',
|
23
|
+
content_type: 'application/json',
|
24
|
+
authorization: token
|
25
|
+
)
|
26
|
+
rescue RestClient::Exception => e
|
27
|
+
raise_azure_exception(e, msg)
|
28
|
+
end
|
29
|
+
Fog::Logger.debug "Recovery Vault #{name} created/updated successfully"
|
30
|
+
Fog::JSON.decode(response)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Mock class for Recovery Vault request
|
35
|
+
class Mock
|
36
|
+
def create_or_update_recovery_vault(*)
|
37
|
+
recovery_vault = '{
|
38
|
+
"location": "westus",
|
39
|
+
"name": "fog-test-vault",
|
40
|
+
"properties": {
|
41
|
+
"provisioningState": "Succeeded"
|
42
|
+
},
|
43
|
+
"id": "/subscriptions/########-####-####-####-############/resourceGroups/fog-test-rg/providers/Microsoft.RecoveryServices/vaults/fog-test-vault",
|
44
|
+
"type": "Microsoft.RecoveryServices/vaults",
|
45
|
+
"sku": {
|
46
|
+
"name": "standard"
|
47
|
+
}
|
48
|
+
}'
|
49
|
+
Fog::JSON.decode(recovery_vault)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Fog
|
2
|
+
module Storage
|
3
|
+
class AzureRM
|
4
|
+
# Real class for Recovery Vault request
|
5
|
+
class Real
|
6
|
+
def delete_recovery_vault(resource_group, name)
|
7
|
+
msg = "Deleting Recovery Vault #{name} from Resource Group #{resource_group}"
|
8
|
+
Fog::Logger.debug msg
|
9
|
+
resource_url = "#{AZURE_RESOURCE}/subscriptions/#{@subscription_id}/resourceGroups/#{resource_group}/providers/Microsoft.RecoveryServices/vaults/#{name}?api-version=#{REST_CLIENT_API_VERSION[1]}"
|
10
|
+
begin
|
11
|
+
token = Fog::Credentials::AzureRM.get_token(@tenant_id, @client_id, @client_secret)
|
12
|
+
RestClient.delete(
|
13
|
+
resource_url,
|
14
|
+
accept: 'application/json',
|
15
|
+
content_type: 'application/json',
|
16
|
+
authorization: token
|
17
|
+
)
|
18
|
+
rescue RestClient::Exception => e
|
19
|
+
raise_azure_exception(e, msg)
|
20
|
+
end
|
21
|
+
Fog::Logger.debug "Recovery Vault #{name} in Resource Group #{resource_group} deleted successfully"
|
22
|
+
true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Mock class for Recovery Vault request
|
27
|
+
class Mock
|
28
|
+
def delete_recovery_vault(*)
|
29
|
+
Fog::Logger.debug 'Recovery Vault TestVault in Resource Group TestRG deleted successfully'
|
30
|
+
true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
PROTECTION_STOPPED = 'ProtectionStopped'.freeze
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Storage
|
5
|
+
class AzureRM
|
6
|
+
# Real class for Recovery Vault request
|
7
|
+
class Real
|
8
|
+
def disable_backup_protection(rv_name, rv_resource_group, vm_name, vm_resource_group)
|
9
|
+
msg = "Disabling protection for VM #{vm_name} in Recovery Vault #{rv_name}"
|
10
|
+
Fog::Logger.debug msg
|
11
|
+
|
12
|
+
set_recovery_vault_context(rv_resource_group, rv_name)
|
13
|
+
vm_id = get_virtual_machine_id(vm_resource_group, vm_name)
|
14
|
+
|
15
|
+
resource_url = "#{AZURE_RESOURCE}/subscriptions/#{@subscription_id}/resourceGroups/#{rv_resource_group}/providers/Microsoft.RecoveryServices/vaults/#{rv_name}/backupFabrics/Azure/protectionContainers/iaasvmcontainer;iaasvmcontainerv2;#{vm_resource_group.downcase};#{vm_name.downcase}/protectedItems/vm;iaasvmcontainerv2;#{vm_resource_group.downcase};#{vm_name.downcase}?api-version=#{REST_CLIENT_API_VERSION[1]}"
|
16
|
+
body = {
|
17
|
+
properties: {
|
18
|
+
protectedItemType: 'Microsoft.Compute/virtualMachines',
|
19
|
+
policyId: '',
|
20
|
+
sourceResourceId: vm_id,
|
21
|
+
protectionState: PROTECTION_STOPPED
|
22
|
+
},
|
23
|
+
tags: {}
|
24
|
+
}
|
25
|
+
|
26
|
+
begin
|
27
|
+
token = Fog::Credentials::AzureRM.get_token(@tenant_id, @client_id, @client_secret)
|
28
|
+
RestClient.put(
|
29
|
+
resource_url,
|
30
|
+
body.to_json,
|
31
|
+
accept: 'application/json',
|
32
|
+
content_type: 'application/json',
|
33
|
+
authorization: token
|
34
|
+
)
|
35
|
+
rescue RestClient::Exception => e
|
36
|
+
raise_azure_exception(e, msg)
|
37
|
+
end
|
38
|
+
|
39
|
+
Fog::Logger.debug "Successfully disabled protection for VM #{vm_name} in Recovery Vault #{rv_name}"
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def get_virtual_machine_id(vm_resource_group, vm_name)
|
46
|
+
compute_service = Fog::Compute::AzureRM.new(tenant_id: @tenant_id, client_id: @client_id, client_secret: @client_secret, subscription_id: @subscription_id)
|
47
|
+
compute_service.get_virtual_machine(vm_resource_group, vm_name).id
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Mock class for Recovery Vault request
|
52
|
+
class Mock
|
53
|
+
def disable_backup_protection(*)
|
54
|
+
Fog::Logger.debug 'Successfully disabled protection for VM {vm_name} in Recovery Vault {rv_name}'
|
55
|
+
true
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
CONFIGURE_BACKUP = 'ConfigureBackup'.freeze
|
2
|
+
|
3
|
+
module Fog
|
4
|
+
module Storage
|
5
|
+
class AzureRM
|
6
|
+
# Real class for Recovery Vault request
|
7
|
+
class Real
|
8
|
+
def enable_backup_protection(rv_name, rv_resource_group, vm_name, vm_resource_group)
|
9
|
+
msg = "Enabling backup protection for VM #{vm_name} in Resource Group #{vm_resource_group}"
|
10
|
+
Fog::Logger.debug msg
|
11
|
+
|
12
|
+
set_recovery_vault_context(rv_resource_group, rv_name)
|
13
|
+
backup_protection_policy = get_backup_protection_policy(rv_resource_group, rv_name)
|
14
|
+
policy = backup_protection_policy.select { |item| item['name'].eql? 'DefaultPolicy' }[0]
|
15
|
+
vm_id = get_virtual_machine_id(vm_resource_group, vm_name)
|
16
|
+
|
17
|
+
resource_url = "#{AZURE_RESOURCE}/subscriptions/#{@subscription_id}/resourceGroups/#{rv_resource_group}/providers/Microsoft.RecoveryServices/vaults/#{rv_name}/backupFabrics/Azure/protectionContainers/iaasvmcontainer;iaasvmcontainerv2;#{vm_resource_group.downcase};#{vm_name.downcase}/protectedItems/vm;iaasvmcontainerv2;#{vm_resource_group.downcase};#{vm_name.downcase}?api-version=#{REST_CLIENT_API_VERSION[1]}"
|
18
|
+
body = {
|
19
|
+
properties: {
|
20
|
+
protectedItemType: 'Microsoft.Compute/virtualMachines',
|
21
|
+
policyId: policy['id'],
|
22
|
+
sourceResourceId: vm_id
|
23
|
+
},
|
24
|
+
tags: {}
|
25
|
+
}
|
26
|
+
|
27
|
+
begin
|
28
|
+
token = Fog::Credentials::AzureRM.get_token(@tenant_id, @client_id, @client_secret)
|
29
|
+
RestClient.put(
|
30
|
+
resource_url,
|
31
|
+
body.to_json,
|
32
|
+
accept: 'application/json',
|
33
|
+
content_type: 'application/json',
|
34
|
+
authorization: token
|
35
|
+
)
|
36
|
+
rescue RestClient::Exception => e
|
37
|
+
raise_azure_exception(e, msg)
|
38
|
+
end
|
39
|
+
|
40
|
+
@job = get_backup_job_for_vm(rv_name, rv_resource_group, vm_name, vm_resource_group, CONFIGURE_BACKUP)
|
41
|
+
|
42
|
+
until @job.nil?
|
43
|
+
sleep 10
|
44
|
+
@job = get_backup_job_for_vm(rv_name, rv_resource_group, vm_name, vm_resource_group, CONFIGURE_BACKUP)
|
45
|
+
end
|
46
|
+
|
47
|
+
Fog::Logger.debug "Successfully enabled backup protection for VM #{vm_name} in Resource Group #{vm_resource_group}"
|
48
|
+
true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Mock class for Recovery Vault request
|
53
|
+
class Mock
|
54
|
+
def enable_backup_protection(*)
|
55
|
+
Fog::Logger.debug 'Successfully enabled backup protection for VM {vm_name} in Resource Group {vm_resource_group}'
|
56
|
+
true
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Fog
|
2
|
+
module Storage
|
3
|
+
class AzureRM
|
4
|
+
# Real class for Recovery Vault request
|
5
|
+
class Real
|
6
|
+
def get_all_backup_jobs(rv_name, rv_resource_group)
|
7
|
+
msg = "Getting all backup jobs for Recovery Vault #{rv_name}"
|
8
|
+
Fog::Logger.debug msg
|
9
|
+
|
10
|
+
resource_url = "#{AZURE_RESOURCE}/subscriptions/#{@subscription_id}/resourceGroups/#{rv_resource_group}/providers/Microsoft.RecoveryServices/vaults/#{rv_name}/backupJobs?api-version=#{REST_CLIENT_API_VERSION[1]}&$filter=status eq 'InProgress'"
|
11
|
+
begin
|
12
|
+
token = Fog::Credentials::AzureRM.get_token(@tenant_id, @client_id, @client_secret)
|
13
|
+
response = RestClient.get(
|
14
|
+
resource_url,
|
15
|
+
accept: 'application/json',
|
16
|
+
content_type: 'application/json',
|
17
|
+
authorization: token
|
18
|
+
)
|
19
|
+
rescue RestClient::Exception => e
|
20
|
+
raise_azure_exception(e, msg)
|
21
|
+
end
|
22
|
+
Fog::Logger.debug "Successfully retrieved backup jobs for Recovery Vault #{rv_name}"
|
23
|
+
Fog::JSON.decode(response)['value']
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Mock class for Recovery Vault request
|
28
|
+
class Mock
|
29
|
+
def get_all_backup_jobs(*)
|
30
|
+
body = '{
|
31
|
+
"value": [{
|
32
|
+
"id": "/subscriptions/########-####-####-####-############/resourceGroups/fog-test-rg/providers/Microsoft.RecoveryServices/vaults/fog-test-vault/backupJobs/########-####-####-####-############",
|
33
|
+
"name": "########-####-####-####-############",
|
34
|
+
"type": "Microsoft.RecoveryServices/vaults/backupJobs",
|
35
|
+
"properties": {
|
36
|
+
"jobType": "AzureIaaSVMJob",
|
37
|
+
"duration": "XX:XX:XX.XXXXXXX",
|
38
|
+
"actionsInfo": [
|
39
|
+
1
|
40
|
+
],
|
41
|
+
"virtualMachineVersion": "Compute",
|
42
|
+
"entityFriendlyName": "fog-test-vm",
|
43
|
+
"backupManagementType": "AzureIaasVM",
|
44
|
+
"operation": "Backup",
|
45
|
+
"status": "InProgress",
|
46
|
+
"startTime": "2016-10-19T07:49:31.1466534Z",
|
47
|
+
"activityId": "########-####-####-####-############"
|
48
|
+
}
|
49
|
+
}]
|
50
|
+
}'
|
51
|
+
Fog::JSON.decode(body)['value']
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Fog
|
2
|
+
module Storage
|
3
|
+
class AzureRM
|
4
|
+
# Real class for Recovery Vault request
|
5
|
+
class Real
|
6
|
+
def get_backup_container(resource_group, rv_name, vm_name)
|
7
|
+
msg = "Getting backup container from Recovery Vault #{rv_name}"
|
8
|
+
Fog::Logger.debug msg
|
9
|
+
|
10
|
+
resource_url = "#{AZURE_RESOURCE}/subscriptions/#{@subscription_id}/resourceGroups/#{resource_group}/providers/Microsoft.RecoveryServices/vaults/#{rv_name}/backupProtectionContainers?api-version=#{REST_CLIENT_API_VERSION[1]}&$filter=backupManagementType eq 'AzureIaasVM' and status eq 'Registered' and friendlyName eq '#{vm_name}'"
|
11
|
+
begin
|
12
|
+
token = Fog::Credentials::AzureRM.get_token(@tenant_id, @client_id, @client_secret)
|
13
|
+
response = RestClient.get(
|
14
|
+
response = resource_url,
|
15
|
+
accept: 'application/json',
|
16
|
+
content_type: 'application/json',
|
17
|
+
authorization: token
|
18
|
+
)
|
19
|
+
rescue RestClient::Exception => e
|
20
|
+
raise_azure_exception(e, msg)
|
21
|
+
end
|
22
|
+
Fog::Logger.debug "Successfully retrieved backup container from Recovery Vault #{rv_name}"
|
23
|
+
Fog::JSON.decode(response)['value']
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Mock class for Recovery Vault request
|
28
|
+
class Mock
|
29
|
+
def get_backup_container(*)
|
30
|
+
body = '{
|
31
|
+
"value": [{
|
32
|
+
"id": "/subscriptions/########-####-####-####-############/resourceGroups/fog-test-rg/providers/Microsoft.RecoveryServices/vaults/fog-test-vault/backupFabrics/Azure/protectionContainers/IaasVMContainer;iaasvmcontainerv2;fog-test-vm-rg;fog-test-vm",
|
33
|
+
"name": "IaasVMContainer;iaasvmcontainerv2;fog-test-vm-rg;fog-test-vm",
|
34
|
+
"type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers",
|
35
|
+
"properties": {
|
36
|
+
"virtualMachineId": "/subscriptions/########-####-####-####-############/resourceGroups/TestRG/providers/Microsoft.Compute/virtualMachines/TestVM",
|
37
|
+
"virtualMachineVersion": "Compute",
|
38
|
+
"resourceGroup": "fog-test-vm-rg",
|
39
|
+
"friendlyName": "fog-test-vm",
|
40
|
+
"backupManagementType": "AzureIaasVM",
|
41
|
+
"registrationStatus": "Registered",
|
42
|
+
"healthStatus": "Healthy",
|
43
|
+
"containerType": "Microsoft.Compute/virtualMachines",
|
44
|
+
"protectableObjectType": "Microsoft.Compute/virtualMachines"
|
45
|
+
}
|
46
|
+
}]
|
47
|
+
}'
|
48
|
+
Fog::JSON.decode(body)['value']
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Fog
|
2
|
+
module Storage
|
3
|
+
class AzureRM
|
4
|
+
# Real class for Recovery Vault request
|
5
|
+
class Real
|
6
|
+
def get_backup_item(resource_group, rv_name)
|
7
|
+
msg = "Getting backup item from Recovery Vault #{rv_name}"
|
8
|
+
Fog::Logger.debug msg
|
9
|
+
|
10
|
+
resource_url = "#{AZURE_RESOURCE}/subscriptions/#{@subscription_id}/resourceGroups/#{resource_group}/providers/Microsoft.RecoveryServices/vaults/#{rv_name}/backupProtectedItems?api-version=#{REST_CLIENT_API_VERSION[1]}&$filter=backupManagementType eq 'AzureIaasVM' and itemType eq 'VM'"
|
11
|
+
begin
|
12
|
+
token = Fog::Credentials::AzureRM.get_token(@tenant_id, @client_id, @client_secret)
|
13
|
+
response = RestClient.get(
|
14
|
+
response = resource_url,
|
15
|
+
accept: 'application/json',
|
16
|
+
content_type: 'application/json',
|
17
|
+
authorization: token
|
18
|
+
)
|
19
|
+
rescue RestClient::Exception => e
|
20
|
+
raise_azure_exception(e, msg)
|
21
|
+
end
|
22
|
+
Fog::Logger.debug "Successfully retrieved backup item from Recovery Vault #{rv_name}"
|
23
|
+
Fog::JSON.decode(response)['value']
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Mock class for Recovery Vault request
|
28
|
+
class Mock
|
29
|
+
def get_backup_item(*)
|
30
|
+
body = '{
|
31
|
+
"value": [{
|
32
|
+
"id": "/Subscriptions/########-####-####-####-############/resourceGroups/fog-test-rg/providers/Microsoft.RecoveryServices/vaults/fog-test-vault/backupFabrics/Azure/protectionContainers/IaasVMContainer;iaasvmcontainerv2;testrg;testvm/protectedItems/VM;fog-test-container-name",
|
33
|
+
"name": "iaasvmcontainerv2;fog-test-vm-rg;fog-test-vm",
|
34
|
+
"type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems",
|
35
|
+
"properties": {
|
36
|
+
"friendlyName": "fog-test-vm",
|
37
|
+
"virtualMachineId": "/subscriptions/########-####-####-####-############/resourceGroups/fog-test-vm-rg/providers/Microsoft.Compute/virtualMachines/fog-test-vm",
|
38
|
+
"protectionStatus": "Healthy",
|
39
|
+
"protectionState": "Protected",
|
40
|
+
"lastBackupStatus": "Completed",
|
41
|
+
"lastBackupTime": "2016-10-17T10:30:47.2289274Z",
|
42
|
+
"protectedItemType": "Microsoft.Compute/virtualMachines",
|
43
|
+
"backupManagementType": "AzureIaasVM",
|
44
|
+
"workloadType": "VM",
|
45
|
+
"containerName": "iaasvmcontainerv2;fog-test-vm-rg;fog-test-vm",
|
46
|
+
"sourceResourceId": "/subscriptions/########-####-####-####-############/resourceGroups/fog-test-vm-rg/providers/Microsoft.Compute/virtualMachines/fog-test-vm",
|
47
|
+
"policyId": "/subscriptions/########-####-####-####-############/resourceGroups/fog-test-rg/providers/Microsoft.RecoveryServices/vaults/fog-test-vault/backupPolicies/DefaultPolicy",
|
48
|
+
"policyName": "DefaultPolicy",
|
49
|
+
"lastRecoveryPoint": "2016-10-17T10:32:38.4666692Z"
|
50
|
+
}
|
51
|
+
}]
|
52
|
+
}'
|
53
|
+
Fog::JSON.decode(body)['value']
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Fog
|
2
|
+
module Storage
|
3
|
+
class AzureRM
|
4
|
+
# Real class for Recovery Vault request
|
5
|
+
class Real
|
6
|
+
def get_backup_job_for_vm(rv_name, rv_resource_group, vm_name, vm_resource_group, operation)
|
7
|
+
msg = "Getting backup job for VM #{vm_name} in Resource Group #{vm_resource_group}"
|
8
|
+
Fog::Logger.debug msg
|
9
|
+
|
10
|
+
backup_jobs = get_all_backup_jobs(rv_name, rv_resource_group)
|
11
|
+
backup_jobs = backup_jobs.select do |job|
|
12
|
+
(job['properties']['status'].eql? 'InProgress') &&
|
13
|
+
(job['properties']['entityFriendlyName'].eql? vm_name.downcase) &&
|
14
|
+
(job['properties']['operation'].eql? operation)
|
15
|
+
end
|
16
|
+
|
17
|
+
backup_jobs[0]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Mock class for Recovery Vault request
|
22
|
+
class Mock
|
23
|
+
def get_backup_job_for_vm(*)
|
24
|
+
body = '{
|
25
|
+
"id": "/subscriptions/########-####-####-####-############/resourceGroups/fog-test-rg/providers/Microsoft.RecoveryServices/vaults/fog-test-vault/backupJobs/########-####-####-####-############",
|
26
|
+
"name": "########-####-####-####-############",
|
27
|
+
"type": "Microsoft.RecoveryServices/vaults/backupJobs",
|
28
|
+
"properties": {
|
29
|
+
"jobType": "AzureIaaSVMJob",
|
30
|
+
"duration": "00:00:52.3309441",
|
31
|
+
"virtualMachineVersion": "Compute",
|
32
|
+
"extendedInfo": {
|
33
|
+
"tasksList": [],
|
34
|
+
"propertyBag": {
|
35
|
+
"VM Name": "fog-test-vm",
|
36
|
+
"Policy Name": "DefaultPolicy"
|
37
|
+
}
|
38
|
+
},
|
39
|
+
"entityFriendlyName": "fog-test-vm",
|
40
|
+
"backupManagementType": "AzureIaasVM",
|
41
|
+
"operation": "ConfigureBackup",
|
42
|
+
"status": "Completed",
|
43
|
+
"startTime": "2016-10-13T09:55:49.1168243Z",
|
44
|
+
"endTime": "2016-10-13T09:56:41.4477684Z",
|
45
|
+
"activityId": "383f05d9-a4bf-4b95-bb41-d39849b3a86e-2016-10-13 09:55:53Z-PS"
|
46
|
+
}
|
47
|
+
}'
|
48
|
+
Fog::JSON.decode(body)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Fog
|
2
|
+
module Storage
|
3
|
+
class AzureRM
|
4
|
+
# Real class for Recovery Vault request
|
5
|
+
class Real
|
6
|
+
def get_backup_protection_policy(resource_group, name)
|
7
|
+
msg = "Get backup protection policy from Resource Group #{resource_group}"
|
8
|
+
Fog::Logger.debug msg
|
9
|
+
|
10
|
+
resource_url = "#{AZURE_RESOURCE}/subscriptions/#{@subscription_id}/resourceGroups/#{resource_group}/providers/Microsoft.RecoveryServices/vaults/#{name}/backupPolicies?api-version=#{REST_CLIENT_API_VERSION[1]}&$filter=backupManagementType eq 'AzureIaasVM'"
|
11
|
+
begin
|
12
|
+
token = Fog::Credentials::AzureRM.get_token(@tenant_id, @client_id, @client_secret)
|
13
|
+
response = RestClient.get(
|
14
|
+
resource_url,
|
15
|
+
accept: 'application/json',
|
16
|
+
content_type: 'application/json',
|
17
|
+
authorization: token
|
18
|
+
)
|
19
|
+
rescue RestClient::Exception => e
|
20
|
+
raise_azure_exception(e, msg)
|
21
|
+
end
|
22
|
+
Fog::Logger.debug "Successfully retrieved backup protection policy from Resource Group #{resource_group}"
|
23
|
+
Fog::JSON.decode(response)['value']
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Mock class for Recovery Vault request
|
28
|
+
class Mock
|
29
|
+
body = '{
|
30
|
+
"value": [{
|
31
|
+
"id": "/subscriptions/########-####-####-####-############/resourceGroups/fog-test-rg/providers/Microsoft.RecoveryServices/vaults/fog-test-vault/backupPolicies/DefaultPolicy",
|
32
|
+
"name": "DefaultPolicy",
|
33
|
+
"type": "Microsoft.RecoveryServices/vaults/backupPolicies",
|
34
|
+
"properties": {
|
35
|
+
"backupManagementType": "AzureIaasVM",
|
36
|
+
"schedulePolicy": {
|
37
|
+
"schedulePolicyType": "SimpleSchedulePolicy",
|
38
|
+
"scheduleRunFrequency": "Daily",
|
39
|
+
"scheduleRunTimes": [
|
40
|
+
"2016-10-13T19:30:00Z"
|
41
|
+
],
|
42
|
+
"scheduleWeeklyFrequency": 0
|
43
|
+
},
|
44
|
+
"retentionPolicy": {
|
45
|
+
"retentionPolicyType": "LongTermRetentionPolicy",
|
46
|
+
"dailySchedule": {
|
47
|
+
"retentionTimes": [
|
48
|
+
"2016-10-13T19:30:00Z"
|
49
|
+
],
|
50
|
+
"retentionDuration": {
|
51
|
+
"count": 30,
|
52
|
+
"durationType": "Days"
|
53
|
+
}
|
54
|
+
}
|
55
|
+
},
|
56
|
+
"protectedItemsCount": 0
|
57
|
+
}
|
58
|
+
}]
|
59
|
+
}'
|
60
|
+
Fog::JSON.decode(body)['value']
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|