fog-azure-rm-temp 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|