From 4b39da207ae04cf33a25ec6912f0875f0bacc847 Mon Sep 17 00:00:00 2001 From: Ali Imran Date: Wed, 7 Apr 2021 14:45:55 +0500 Subject: [PATCH 1/4] feature/AKD-132: Added Azure 'Premium SSD Disabled' plugin and test cases --- exports.js | 1 + .../virtualmachines/premiumSsdDisabled.js | 77 +++++++++++ .../premiumSsdDisabled.spec.js | 128 ++++++++++++++++++ 3 files changed, 206 insertions(+) create mode 100644 plugins/azure/virtualmachines/premiumSsdDisabled.js create mode 100644 plugins/azure/virtualmachines/premiumSsdDisabled.spec.js diff --git a/exports.js b/exports.js index 322aa84cad..b1cdfe8f5e 100644 --- a/exports.js +++ b/exports.js @@ -378,6 +378,7 @@ module.exports = { 'scaleSetMultiAz' : require(__dirname + '/plugins/azure/virtualmachines/scaleSetMultiAz.js'), 'scaleSetAutoscaleEnabled' : require(__dirname + '/plugins/azure/virtualmachines/scaleSetAutoscaleEnabled.js'), 'vmAvailabilitySetLimit' : require(__dirname + '/plugins/azure/virtualmachines/vmAvailabilitySetLimit.js'), + 'premiumSsdDisabled' : require(__dirname + '/plugins/azure/virtualmachines/premiumSsdDisabled.js'), 'lbLogAnalyticsEnabled' : require(__dirname + '/plugins/azure/monitor/lbLogAnalyticsEnabled.js'), 'kvLogAnalyticsEnabled' : require(__dirname + '/plugins/azure/monitor/kvLogAnalyticsEnabled.js'), diff --git a/plugins/azure/virtualmachines/premiumSsdDisabled.js b/plugins/azure/virtualmachines/premiumSsdDisabled.js new file mode 100644 index 0000000000..04d78f9418 --- /dev/null +++ b/plugins/azure/virtualmachines/premiumSsdDisabled.js @@ -0,0 +1,77 @@ +var async = require('async'); + +var helpers = require('../../../helpers/azure/'); + +module.exports = { + title: 'Premium SSD Disabled', + category: 'Virtual Machines', + description: 'Ensures that the Azure virtual machines are configured to use standard SSD disk volumes.', + more_info: 'Azure standard SSD disks store data on solid state drives (SSDs), like Azure\'s existing premium storage disks. Standard SSD disks are a cost-effective storage option optimized for workloads that need consistent performance at lower IOPS levels.', + recommended_action: 'Modify virtual machines disks to use standard SSD disk volumes instead of premium SSD disk volumes', + link: 'https://docs.microsoft.com/en-us/azure/virtual-machines/disks-types', + apis: ['disks:list', 'virtualMachines:listAll'], + + run: function(cache, settings, callback) { + var results = []; + var source = {}; + var locations = helpers.locations(settings.govcloud); + + async.each(locations.disks, function(location, rcb){ + const virtualMachines = helpers.addSource(cache, source, ['virtualMachines', 'listAll', location]); + const disks = helpers.addSource(cache, source, ['disks', 'list', location]); + + + if (!virtualMachines || !disks) return rcb(); + + if (virtualMachines.err || !virtualMachines.data) { + helpers.addResult(results, 3, 'Unable to query for virtual machines: ' + helpers.addError(disks), location); + return rcb(); + } + if (!virtualMachines.data.length) { + helpers.addResult(results, 0, 'No existing virtual machines found', location); + return rcb(); + } + + if (disks.err || !disks.data) { + helpers.addResult(results, 3, 'Unable to query for virtual machine disk volumes: ' + helpers.addError(disks), location); + return rcb(); + } + if (!disks.data.length) { + helpers.addResult(results, 0, 'No existing disk volumes found for virtual machines', location); + return rcb(); + } + + const disksMap = new Map(); + disks.data.forEach(disk => { + if (disk.managedBy && disk.sku && disk.sku.tier) { + if (disksMap.get(disk.managedBy.toLowerCase())) { + disksMap.get(disk.managedBy.toLowerCase()).set(disk.id, disk.sku.tier); + } else { + disksMap.set(disk.managedBy.toLowerCase(), new Map()); + disksMap.get(disk.managedBy.toLowerCase()).set(disk.id, disk.sku.tier); + } + } + }); + + + virtualMachines.data.forEach(virtualMachine => { + const attachedDisks = disksMap.get(virtualMachine.id.toLowerCase()); + + if (attachedDisks) { + attachedDisks.forEach((diskType, diskId) => { + if (diskType.toLowerCase() === 'standard') { + helpers.addResult(results, 0, 'Disk volume is of standard SSD type', location, diskId); + } else { + helpers.addResult(results, 2, 'Disk volume is not of standard SSD type', location, diskId); + } + }); + } + }); + + rcb(); + }, function() { + // Global checking goes here + callback(null, results, source); + }); + } +}; \ No newline at end of file diff --git a/plugins/azure/virtualmachines/premiumSsdDisabled.spec.js b/plugins/azure/virtualmachines/premiumSsdDisabled.spec.js new file mode 100644 index 0000000000..940207b79e --- /dev/null +++ b/plugins/azure/virtualmachines/premiumSsdDisabled.spec.js @@ -0,0 +1,128 @@ +var expect = require('chai').expect; +var premiumSsdDisabled = require('./premiumSsdDisabled'); + +const virtualMachines = [ + { + 'name': 'test-vm', + 'id': '/subscriptions/123/resourceGroups/AQUA-RESOURCE-GROUP/providers/Microsoft.Compute/virtualMachines/test-vm', + 'type': 'Microsoft.Compute/virtualMachines' + } +]; + +const disks = [ + { + 'name': 'test', + 'id': '/subscriptions/123/resourceGroups/AQUA-RESOURCE-GROUP/providers/Microsoft.Compute/disks/test', + 'managedBy': '/subscriptions/123/resourceGroups/aqua-resource-group/providers/Microsoft.Compute/virtualMachines/test-vm', + 'type': 'Microsoft.Compute/disks', + 'location': 'eastus', + 'sku': { + 'name': 'StandardSSD_LRS', + 'tier': 'Standard' + } + }, + { + 'name': 'test', + 'id': '/subscriptions/123/resourceGroups/AQUA-RESOURCE-GROUP/providers/Microsoft.Compute/disks/test', + 'managedBy': '/subscriptions/123/resourceGroups/aqua-resource-group/providers/Microsoft.Compute/virtualMachines/test-vm', + 'type': 'Microsoft.Compute/disks', + 'location': 'eastus', + 'sku': { + 'name': 'Premium_LRS', + 'tier': 'Premium' + } + } +]; + +const createCache = (virtualMachines, disks) => { + const machine = {}; + const disk = {}; + if (virtualMachines) { + machine['data'] = virtualMachines; + } + if (disks) { + disk['data'] = disks; + } + return { + disks: { + list: { + 'eastus': disk + } + }, + virtualMachines: { + listAll: { + 'eastus': machine + } + } + }; +}; + +describe('premiumSsdDisabled', function() { + describe('run', function() { + it('should give passing result if no virtual machines found', function(done) { + const cache = createCache([], []); + premiumSsdDisabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('No existing virtual machines found'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); + + it('should give unknown result if unable to query for virtual machines', function(done) { + const cache = createCache(null, null); + premiumSsdDisabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(3); + expect(results[0].message).to.include('Unable to query for virtual machines'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); + + it('should give passing result if no disk volumes found', function(done) { + const cache = createCache([virtualMachines[0]], []); + premiumSsdDisabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('No existing disk volumes found'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); + + it('should give unknown result if unable to query for disk volumes', function(done) { + const cache = createCache([virtualMachines[0]], null); + premiumSsdDisabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(3); + expect(results[0].message).to.include('Unable to query for virtual machine disk volumes'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); + + it('should give passing result if disk volume is of Standard SSD type', function(done) { + const cache = createCache([virtualMachines[0]], [disks[0]]); + premiumSsdDisabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('Disk volume is of standard SSD type'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); + + it('should give failing result if disk volume is not of Standard SSD type', function(done) { + const cache = createCache([virtualMachines[0]], [disks[1]]); + premiumSsdDisabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('Disk volume is not of standard SSD type'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); + }); +}); \ No newline at end of file From 76787c9da2bba45c7c5c3920ee0b527144e76055 Mon Sep 17 00:00:00 2001 From: Ali Imran Date: Wed, 7 Apr 2021 16:24:05 +0500 Subject: [PATCH 2/4] feature/AKD-132: Added Azure 'Premium SSD Disabled' plugin and test cases --- .../virtualmachines/premiumSsdDisabled.js | 60 +++----- .../premiumSsdDisabled.spec.js | 137 ++++++++++++------ 2 files changed, 111 insertions(+), 86 deletions(-) diff --git a/plugins/azure/virtualmachines/premiumSsdDisabled.js b/plugins/azure/virtualmachines/premiumSsdDisabled.js index 04d78f9418..6f70b7dd68 100644 --- a/plugins/azure/virtualmachines/premiumSsdDisabled.js +++ b/plugins/azure/virtualmachines/premiumSsdDisabled.js @@ -5,67 +5,51 @@ var helpers = require('../../../helpers/azure/'); module.exports = { title: 'Premium SSD Disabled', category: 'Virtual Machines', - description: 'Ensures that the Azure virtual machines are configured to use standard SSD disk volumes.', + description: 'Ensures that the Azure virtual machines are configured to use standard SSD disk volumes instead of premium SSD disk volumes.', more_info: 'Azure standard SSD disks store data on solid state drives (SSDs), like Azure\'s existing premium storage disks. Standard SSD disks are a cost-effective storage option optimized for workloads that need consistent performance at lower IOPS levels.', recommended_action: 'Modify virtual machines disks to use standard SSD disk volumes instead of premium SSD disk volumes', link: 'https://docs.microsoft.com/en-us/azure/virtual-machines/disks-types', - apis: ['disks:list', 'virtualMachines:listAll'], + apis: ['virtualMachines:listAll'], run: function(cache, settings, callback) { var results = []; var source = {}; var locations = helpers.locations(settings.govcloud); - async.each(locations.disks, function(location, rcb){ + async.each(locations.virtualMachines, function(location, rcb){ const virtualMachines = helpers.addSource(cache, source, ['virtualMachines', 'listAll', location]); - const disks = helpers.addSource(cache, source, ['disks', 'list', location]); - - if (!virtualMachines || !disks) return rcb(); + if (!virtualMachines) return rcb(); if (virtualMachines.err || !virtualMachines.data) { - helpers.addResult(results, 3, 'Unable to query for virtual machines: ' + helpers.addError(disks), location); + helpers.addResult(results, 3, 'Unable to query for virtual machines: ' + helpers.addError(virtualMachines), location); return rcb(); } if (!virtualMachines.data.length) { helpers.addResult(results, 0, 'No existing virtual machines found', location); return rcb(); } + + virtualMachines.data.forEach(virtualMachine => { + if (virtualMachine.storageProfile && virtualMachine.storageProfile.osDisk && + virtualMachine.storageProfile.osDisk.managedDisk && + virtualMachine.storageProfile.osDisk.managedDisk.storageAccountType && + virtualMachine.storageProfile.osDisk.managedDisk.storageAccountType.toLowerCase() === 'premium_lrs') { + helpers.addResult(results, 2, 'Attached OS disk volume is of Premium SSD type', location, virtualMachine.id); + } else { + helpers.addResult(results, 0, 'Attached OS disk volume is not of Premium SSD type', location, virtualMachine.id); + } - if (disks.err || !disks.data) { - helpers.addResult(results, 3, 'Unable to query for virtual machine disk volumes: ' + helpers.addError(disks), location); - return rcb(); - } - if (!disks.data.length) { - helpers.addResult(results, 0, 'No existing disk volumes found for virtual machines', location); - return rcb(); - } + const dataDisks = (virtualMachine.storageProfile && virtualMachine.storageProfile.dataDisks) ? virtualMachine.storageProfile.dataDisks : []; - const disksMap = new Map(); - disks.data.forEach(disk => { - if (disk.managedBy && disk.sku && disk.sku.tier) { - if (disksMap.get(disk.managedBy.toLowerCase())) { - disksMap.get(disk.managedBy.toLowerCase()).set(disk.id, disk.sku.tier); + for (const dataDisk of dataDisks) { + if (dataDisk.managedDisk && dataDisk.managedDisk.storageAccountType && + dataDisk.managedDisk.storageAccountType.toLowerCase() === 'premium_lrs') { + helpers.addResult(results, 2, 'Attached data disk volume is of Premium SSD type', location, virtualMachine.id); } else { - disksMap.set(disk.managedBy.toLowerCase(), new Map()); - disksMap.get(disk.managedBy.toLowerCase()).set(disk.id, disk.sku.tier); + helpers.addResult(results, 0, 'Attached data disk volume is not of Premium SSD type', location, virtualMachine.id); } - } - }); - - - virtualMachines.data.forEach(virtualMachine => { - const attachedDisks = disksMap.get(virtualMachine.id.toLowerCase()); - - if (attachedDisks) { - attachedDisks.forEach((diskType, diskId) => { - if (diskType.toLowerCase() === 'standard') { - helpers.addResult(results, 0, 'Disk volume is of standard SSD type', location, diskId); - } else { - helpers.addResult(results, 2, 'Disk volume is not of standard SSD type', location, diskId); - } - }); - } + } }); rcb(); diff --git a/plugins/azure/virtualmachines/premiumSsdDisabled.spec.js b/plugins/azure/virtualmachines/premiumSsdDisabled.spec.js index 940207b79e..bc851a2d13 100644 --- a/plugins/azure/virtualmachines/premiumSsdDisabled.spec.js +++ b/plugins/azure/virtualmachines/premiumSsdDisabled.spec.js @@ -5,50 +5,81 @@ const virtualMachines = [ { 'name': 'test-vm', 'id': '/subscriptions/123/resourceGroups/AQUA-RESOURCE-GROUP/providers/Microsoft.Compute/virtualMachines/test-vm', - 'type': 'Microsoft.Compute/virtualMachines' - } -]; - -const disks = [ + 'type': 'Microsoft.Compute/virtualMachines', + 'storageProfile': { + 'osDisk': { + 'managedDisk': { + 'storageAccountType': 'StandardSSD_LRS', + 'id': '/subscriptions/123/resourceGroups/aqua-resource-group/providers/Microsoft.Compute/disks/test-vm_OsDisk_1_d88ee8681dbe4bd3bbbd52a1f8e46d7f' + } + }, + 'dataDisks': [] + } + }, { - 'name': 'test', - 'id': '/subscriptions/123/resourceGroups/AQUA-RESOURCE-GROUP/providers/Microsoft.Compute/disks/test', - 'managedBy': '/subscriptions/123/resourceGroups/aqua-resource-group/providers/Microsoft.Compute/virtualMachines/test-vm', - 'type': 'Microsoft.Compute/disks', - 'location': 'eastus', - 'sku': { - 'name': 'StandardSSD_LRS', - 'tier': 'Standard' + 'name': 'test-vm', + 'id': '/subscriptions/123/resourceGroups/AQUA-RESOURCE-GROUP/providers/Microsoft.Compute/virtualMachines/test-vm', + 'type': 'Microsoft.Compute/virtualMachines', + 'storageProfile': { + 'osDisk': { + 'managedDisk': { + 'storageAccountType': 'Premium_LRS', + 'id': '/subscriptions/123/resourceGroups/aqua-resource-group/providers/Microsoft.Compute/disks/test-vm_OsDisk_1_d88ee8681dbe4bd3bbbd52a1f8e46d7f' + } + }, + 'dataDisks': [] + } + }, + { + 'name': 'test-vm', + 'id': '/subscriptions/123/resourceGroups/AQUA-RESOURCE-GROUP/providers/Microsoft.Compute/virtualMachines/test-vm', + 'type': 'Microsoft.Compute/virtualMachines', + 'storageProfile': { + 'osDisk': { + 'managedDisk': { + 'storageAccountType': 'StandardSSD_LRS', + 'id': '/subscriptions/123/resourceGroups/aqua-resource-group/providers/Microsoft.Compute/disks/test-vm_OsDisk_1_d88ee8681dbe4bd3bbbd52a1f8e46d7f' + } + }, + 'dataDisks': [ + { + 'managedDisk': { + 'storageAccountType': 'StandardSSD_LRS', + 'id': '/subscriptions/123/resourceGroups/aqua-resource-group/providers/Microsoft.Compute/disks/test-disk' + } + } + ] } }, { - 'name': 'test', - 'id': '/subscriptions/123/resourceGroups/AQUA-RESOURCE-GROUP/providers/Microsoft.Compute/disks/test', - 'managedBy': '/subscriptions/123/resourceGroups/aqua-resource-group/providers/Microsoft.Compute/virtualMachines/test-vm', - 'type': 'Microsoft.Compute/disks', - 'location': 'eastus', - 'sku': { - 'name': 'Premium_LRS', - 'tier': 'Premium' + 'name': 'test-vm', + 'id': '/subscriptions/123/resourceGroups/AQUA-RESOURCE-GROUP/providers/Microsoft.Compute/virtualMachines/test-vm', + 'type': 'Microsoft.Compute/virtualMachines', + 'storageProfile': { + 'osDisk': { + 'managedDisk': { + 'storageAccountType': 'Premium_LRS', + 'id': '/subscriptions/123/resourceGroups/aqua-resource-group/providers/Microsoft.Compute/disks/test-vm_OsDisk_1_d88ee8681dbe4bd3bbbd52a1f8e46d7f' + } + }, + 'dataDisks': [ + { + 'managedDisk': { + 'storageAccountType': 'Premium_LRS', + 'id': '/subscriptions/123/resourceGroups/aqua-resource-group/providers/Microsoft.Compute/disks/test-disk' + } + } + ] } } ]; -const createCache = (virtualMachines, disks) => { +const createCache = (virtualMachines) => { const machine = {}; - const disk = {}; if (virtualMachines) { machine['data'] = virtualMachines; } - if (disks) { - disk['data'] = disks; - } return { - disks: { - list: { - 'eastus': disk - } - }, virtualMachines: { listAll: { 'eastus': machine @@ -60,7 +91,7 @@ const createCache = (virtualMachines, disks) => { describe('premiumSsdDisabled', function() { describe('run', function() { it('should give passing result if no virtual machines found', function(done) { - const cache = createCache([], []); + const cache = createCache([]); premiumSsdDisabled.run(cache, {}, (err, results) => { expect(results.length).to.equal(1); expect(results[0].status).to.equal(0); @@ -71,7 +102,7 @@ describe('premiumSsdDisabled', function() { }); it('should give unknown result if unable to query for virtual machines', function(done) { - const cache = createCache(null, null); + const cache = createCache(null); premiumSsdDisabled.run(cache, {}, (err, results) => { expect(results.length).to.equal(1); expect(results[0].status).to.equal(3); @@ -81,45 +112,55 @@ describe('premiumSsdDisabled', function() { }); }); - it('should give passing result if no disk volumes found', function(done) { - const cache = createCache([virtualMachines[0]], []); + it('should give passing result if OS disk volume is not of Premium SSD type', function(done) { + const cache = createCache([virtualMachines[0]]); premiumSsdDisabled.run(cache, {}, (err, results) => { expect(results.length).to.equal(1); expect(results[0].status).to.equal(0); - expect(results[0].message).to.include('No existing disk volumes found'); + expect(results[0].message).to.include('Attached OS disk volume is not of Premium SSD type'); expect(results[0].region).to.equal('eastus'); done(); }); }); - it('should give unknown result if unable to query for disk volumes', function(done) { - const cache = createCache([virtualMachines[0]], null); + it('should give failing result if OS disk volume is of Premium SSD type', function(done) { + const cache = createCache([virtualMachines[1]]); premiumSsdDisabled.run(cache, {}, (err, results) => { expect(results.length).to.equal(1); - expect(results[0].status).to.equal(3); - expect(results[0].message).to.include('Unable to query for virtual machine disk volumes'); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('Attached OS disk volume is of Premium SSD type'); expect(results[0].region).to.equal('eastus'); done(); }); }); - it('should give passing result if disk volume is of Standard SSD type', function(done) { - const cache = createCache([virtualMachines[0]], [disks[0]]); + it('should give passing results if OS and data disk volumes is not of Premium SSD type', function(done) { + const cache = createCache([virtualMachines[2]]); premiumSsdDisabled.run(cache, {}, (err, results) => { - expect(results.length).to.equal(1); + expect(results.length).to.equal(2); + expect(results[0].status).to.equal(0); - expect(results[0].message).to.include('Disk volume is of standard SSD type'); + expect(results[0].message).to.include('Attached OS disk volume is not of Premium SSD type'); + + expect(results[1].status).to.equal(0); + expect(results[1].message).to.include('Attached data disk volume is not of Premium SSD type'); + expect(results[0].region).to.equal('eastus'); done(); }); }); - it('should give failing result if disk volume is not of Standard SSD type', function(done) { - const cache = createCache([virtualMachines[0]], [disks[1]]); + it('should give failing results if OS and data disk volume is of Premium SSD type', function(done) { + const cache = createCache([virtualMachines[3]]); premiumSsdDisabled.run(cache, {}, (err, results) => { - expect(results.length).to.equal(1); + expect(results.length).to.equal(2); + expect(results[0].status).to.equal(2); - expect(results[0].message).to.include('Disk volume is not of standard SSD type'); + expect(results[0].message).to.include('Attached OS disk volume is of Premium SSD type'); + + expect(results[1].status).to.equal(2); + expect(results[1].message).to.include('Attached data disk volume is of Premium SSD type'); + expect(results[0].region).to.equal('eastus'); done(); }); From 3a703a0b66bd59662aed2798fd95b8b06ab9d0dd Mon Sep 17 00:00:00 2001 From: ali-imran7 <79709033+ali-imran7@users.noreply.github.com> Date: Sat, 24 Apr 2021 07:38:37 +0500 Subject: [PATCH 3/4] Update plugins/azure/virtualmachines/premiumSsdDisabled.js Co-authored-by: Gio Rodriguez --- plugins/azure/virtualmachines/premiumSsdDisabled.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/azure/virtualmachines/premiumSsdDisabled.js b/plugins/azure/virtualmachines/premiumSsdDisabled.js index 6f70b7dd68..cb07e6bb42 100644 --- a/plugins/azure/virtualmachines/premiumSsdDisabled.js +++ b/plugins/azure/virtualmachines/premiumSsdDisabled.js @@ -5,7 +5,7 @@ var helpers = require('../../../helpers/azure/'); module.exports = { title: 'Premium SSD Disabled', category: 'Virtual Machines', - description: 'Ensures that the Azure virtual machines are configured to use standard SSD disk volumes instead of premium SSD disk volumes.', + description: 'Ensures that the Azure virtual machines are configured to use standard SSD disk volumes instead of premium SSD disk volumes for managed disks.', more_info: 'Azure standard SSD disks store data on solid state drives (SSDs), like Azure\'s existing premium storage disks. Standard SSD disks are a cost-effective storage option optimized for workloads that need consistent performance at lower IOPS levels.', recommended_action: 'Modify virtual machines disks to use standard SSD disk volumes instead of premium SSD disk volumes', link: 'https://docs.microsoft.com/en-us/azure/virtual-machines/disks-types', @@ -58,4 +58,4 @@ module.exports = { callback(null, results, source); }); } -}; \ No newline at end of file +}; From 5eae1d14837572f1c61b21fa0801bbc2cafdf83a Mon Sep 17 00:00:00 2001 From: Ali Imran Date: Sat, 24 Apr 2021 09:16:51 +0500 Subject: [PATCH 4/4] feature/AKD-132: Added Azure 'Premium SSD Disabled' plugin and test cases --- plugins/azure/virtualmachines/premiumSsdDisabled.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/azure/virtualmachines/premiumSsdDisabled.js b/plugins/azure/virtualmachines/premiumSsdDisabled.js index be20579ff4..d630c44f41 100644 --- a/plugins/azure/virtualmachines/premiumSsdDisabled.js +++ b/plugins/azure/virtualmachines/premiumSsdDisabled.js @@ -6,7 +6,7 @@ module.exports = { title: 'Premium SSD Disabled', category: 'Virtual Machines', description: 'Ensures that the Azure virtual machines are configured to use standard SSD disk volumes instead of premium SSD disk volumes for managed disks.', - more_info: `Azure standard SSD disks store data on solid state drives (SSDs), like Azure's existing premium storage disks. Standard SSD disks are a cost-effective storage option optimized for workloads that need consistent performance at lower IOPS levels.`, + more_info: 'Azure standard SSD disks store data on solid state drives (SSDs), like Azure\'s existing premium storage disks. Standard SSD disks are a cost-effective storage option optimized for workloads that need consistent performance at lower IOPS levels.', recommended_action: 'Modify virtual machines disks to use standard SSD disk volumes instead of premium SSD disk volumes', link: 'https://docs.microsoft.com/en-us/azure/virtual-machines/disks-types', apis: ['virtualMachines:listAll'],