{"action":"created","comment":{"url":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls/comments/212934338","pull_request_review_id":149652418,"id":212934338,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMjkzNDMzOA==","diff_hunk":"@@ -0,0 +1,540 @@\n+﻿// ----------------------------------------------------------------------------------\n+//\n+// Copyright Microsoft Corporation\n+// Licensed under the Apache License, Version 2.0 (the \"License\");\n+// you may not use this file except in compliance with the License.\n+// You may obtain a copy of the License at\n+// http://www.apache.org/licenses/LICENSE-2.0\n+// Unless required by applicable law or agreed to in writing, software\n+// distributed under the License is distributed on an \"AS IS\" BASIS,\n+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+// See the License for the specific language governing permissions and\n+// limitations under the License.\n+// ----------------------------------------------------------------------------------\n+\n+using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;\n+using Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.ServiceClientAdapterNS;\n+using Microsoft.Azure.Commands.RecoveryServices.Backup.Helpers;\n+using Microsoft.Azure.Commands.RecoveryServices.Backup.Properties;\n+using Microsoft.Azure.Management.RecoveryServices.Backup.Models;\n+using Microsoft.Rest.Azure.OData;\n+using System;\n+using System.Collections.Generic;\n+using System.Linq;\n+using System.Management.Automation;\n+using CmdletModel = Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models;\n+using RestAzureNS = Microsoft.Rest.Azure;\n+using ServiceClientModel = Microsoft.Azure.Management.RecoveryServices.Backup.Models;\n+using SystemNet = System.Net;\n+\n+namespace Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.ProviderModel\n+{\n+    /// <summary>\n+    /// This class implements implements methods for File share backup provider\n+    /// </summary>\n+    public class AzureFilesPsBackupProvider : IPsBackupProvider\n+    {\n+        private const int defaultOperationStatusRetryTimeInMilliSec = 5 * 1000; // 5 sec\n+        private const string separator = \";\";\n+\n+        Dictionary<Enum, object> ProviderData { get; set; }\n+\n+        ServiceClientAdapter ServiceClientAdapter { get; set; }\n+\n+        AzureWorkloadProviderHelper AzureWorkloadProviderHelper { get; set; }\n+\n+        /// <summary>\n+        /// Initializes the provider with the data recieved from the cmdlet layer\n+        /// </summary>\n+        /// <param name=\"providerData\">Data from the cmdlet layer intended for the provider</param>\n+        /// <param name=\"serviceClientAdapter\">Service client adapter for communicating with the backend service</param>\n+        public void Initialize(\n+            Dictionary<Enum, object> providerData, ServiceClientAdapter serviceClientAdapter)\n+        {\n+            ProviderData = providerData;\n+\n+            ServiceClientAdapter = serviceClientAdapter;\n+\n+            AzureWorkloadProviderHelper = new AzureWorkloadProviderHelper(ServiceClientAdapter);\n+        }\n+\n+        /// <summary>\n+        /// Triggers the enable protection operation for the given item\n+        /// </summary>\n+        /// <returns>The job response returned from the service</returns>\n+        public RestAzureNS.AzureOperationResponse EnableProtection()\n+        {\n+            string vaultName = (string)ProviderData[VaultParams.VaultName];\n+            string vaultResourceGroupName = (string)ProviderData[VaultParams.ResourceGroupName];\n+            string azureFileShareName = (string)ProviderData[ItemParams.AzureFileShareName];\n+            string storageAccountName = (string)ProviderData[ItemParams.StorageAccountName];\n+            string storageAccountResourceGroupName = (string)ProviderData[ItemParams.StorageAccountResourceGroupName];\n+            string parameterSetName = (string)ProviderData[ItemParams.ParameterSetName];\n+\n+            PolicyBase policy = (PolicyBase)ProviderData[ItemParams.Policy];\n+\n+            ItemBase itemBase = (ItemBase)ProviderData[ItemParams.Item];\n+\n+            AzureFileShareItem item = (AzureFileShareItem)ProviderData[ItemParams.Item];\n+            // do validations\n+            string containerUri = \"\";\n+            string protectedItemUri = \"\";\n+            string sourceResourceId = null;\n+\n+            if (itemBase == null)\n+            {\n+                ValidateAzureFilesWorkloadType(policy.WorkloadType);\n+\n+                ValidateFileShareEnableProtectionRequest(\n+                    azureFileShareName,\n+                    storageAccountName,\n+                    storageAccountResourceGroupName);\n+\n+                WorkloadProtectableItemResource protectableObjectResource =\n+                    GetAzureFileShareProtectableObject(\n+                        azureFileShareName,\n+                        storageAccountName,\n+                        storageAccountResourceGroupName,\n+                        vaultName: vaultName,\n+                        vaultResourceGroupName: vaultResourceGroupName);\n+\n+                Dictionary<UriEnums, string> keyValueDict =\n+                    HelperUtils.ParseUri(protectableObjectResource.Id);\n+                containerUri = HelperUtils.GetContainerUri(\n+                    keyValueDict, protectableObjectResource.Id);\n+                protectedItemUri = HelperUtils.GetProtectableItemUri(\n+                    keyValueDict, protectableObjectResource.Id);\n+\n+                AzureFileShareProtectableItem azureFileShareProtectableItem =\n+                    (AzureFileShareProtectableItem)protectableObjectResource.Properties;\n+                if (azureFileShareProtectableItem != null)\n+                {\n+                    sourceResourceId = azureFileShareProtectableItem.ParentContainerFabricId;\n+                }\n+            }\n+            else\n+            {\n+                ValidateAzureFilesWorkloadType(item.WorkloadType, policy.WorkloadType);\n+                ValidateAzureFilesModifyProtectionRequest(itemBase, policy);\n+\n+                Dictionary<UriEnums, string> keyValueDict = HelperUtils.ParseUri(item.Id);\n+                containerUri = HelperUtils.GetContainerUri(keyValueDict, item.Id);\n+                protectedItemUri = HelperUtils.GetProtectedItemUri(keyValueDict, item.Id);\n+                sourceResourceId = item.SourceResourceId;\n+            }\n+\n+            // construct Service Client protectedItem request\n+\n+            AzureFileshareProtectedItem properties = new AzureFileshareProtectedItem();\n+\n+            properties.PolicyId = policy.Id;\n+            properties.SourceResourceId = sourceResourceId;\n+\n+            ProtectedItemResource serviceClientRequest = new ProtectedItemResource()\n+            {\n+                Properties = properties\n+            };\n+\n+            return ServiceClientAdapter.CreateOrUpdateProtectedItem(\n+                containerUri,\n+                protectedItemUri,\n+                serviceClientRequest,\n+                vaultName: vaultName,\n+                resourceGroupName: vaultResourceGroupName);\n+        }\n+\n+        private void ValidateAzureFilesWorkloadType(CmdletModel.WorkloadType type)\n+        {\n+            if (type != CmdletModel.WorkloadType.AzureFiles)\n+            {\n+                throw new ArgumentException(string.Format(Resources.UnExpectedWorkLoadTypeException,\n+                                            CmdletModel.WorkloadType.AzureFiles.ToString(),\n+                                            type.ToString()));\n+            }\n+        }\n+\n+        private void ValidateAzureFilesWorkloadType(CmdletModel.WorkloadType itemWorkloadType,\n+            CmdletModel.WorkloadType policyWorkloadType)\n+        {\n+            ValidateAzureFilesWorkloadType(itemWorkloadType);\n+            ValidateAzureFilesWorkloadType(policyWorkloadType);\n+            if (itemWorkloadType != policyWorkloadType)\n+            {\n+                throw new ArgumentException(string.Format(Resources.UnExpectedWorkLoadTypeException,\n+                                            CmdletModel.WorkloadType.AzureFiles.ToString(),\n+                                            itemWorkloadType.ToString()));\n+            }\n+        }\n+\n+        private void ValidateFileShareEnableProtectionRequest(string fileShareName, string storageAccountName,\n+            string storageAccountResourceGroupName)\n+        {\n+            if (string.IsNullOrEmpty(fileShareName))\n+            {\n+                throw new ArgumentException(string.Format(Resources.InvalidFileShareName));\n+            }\n+            if (string.IsNullOrEmpty(storageAccountName) && string.IsNullOrEmpty(storageAccountResourceGroupName))\n+            {\n+                throw new ArgumentException(\n+                    string.Format(Resources.BothStorageAccountNameAndStorageAccountResourceGroupNameShouldNotBeEmpty)\n+                    );\n+            }\n+        }\n+\n+        private void ValidateAzureFilesModifyProtectionRequest(ItemBase itemBase,\n+            PolicyBase policy)\n+        {\n+            if (itemBase == null || itemBase.GetType() != typeof(AzureFileShareItem))\n+            {\n+                throw new ArgumentException(string.Format(Resources.InvalidProtectionPolicyException,\n+                                            typeof(AzureFileShareItem).ToString()));\n+            }\n+\n+            if (string.IsNullOrEmpty(((AzureFileShareItem)itemBase).ParentContainerFabricId))\n+            {\n+                throw new ArgumentException(Resources.VirtualMachineIdIsEmptyOrNull);\n+            }\n+        }\n+\n+        private WorkloadProtectableItemResource GetAzureFileShareProtectableObject(\n+            string azureFileShareName,\n+            string storageAccountName,\n+            string storageAccountResourceGroupName,\n+            string vaultName = null,\n+            string vaultResourceGroupName = null)\n+        {\n+            //Trigger Discovery\n+            ODataQuery<BMSRefreshContainersQueryObject> queryParam = new ODataQuery<BMSRefreshContainersQueryObject>(\n+               q => q.BackupManagementType\n+                    == ServiceClientModel.BackupManagementType.AzureStorage);\n+            AzureWorkloadProviderHelper.RefreshContainer(vaultName, vaultResourceGroupName, queryParam);\n+\n+            //get registered storage accounts\n+            bool isRegistered = false;\n+            string storageContainerName = null;\n+            List<ContainerBase> registeredStorageAccounts = GetRegisteredStorageAccounts(vaultName, vaultResourceGroupName);\n+            ContainerBase registeredStorageAccount = registeredStorageAccounts.Find(storageAccount =>\n+            string.Compare(storageAccount.Name.Split(';').Last(), storageAccountName) == 0);\n+            if (registeredStorageAccount != null)\n+            {\n+                isRegistered = true;\n+                storageContainerName = \"StorageContainer;\" + registeredStorageAccount.Name;\n+            }\n+\n+            //get unregistered storage account\n+            if (!isRegistered)\n+            {\n+                List<ProtectableContainerResource> unregisteredStorageAccounts =\n+                    GetUnRegisteredStorageAccounts(vaultName, vaultResourceGroupName);\n+                ProtectableContainerResource unregisteredStorageAccount = unregisteredStorageAccounts.Find(\n+                    storageAccount => string.Compare(storageAccount.Name.Split(';').Last(),\n+                    storageAccountName) == 0);\n+                if (unregisteredStorageAccount != null)\n+                {\n+                    //unregistered\n+                    //check for source Id for storageAccountId in ProtectionContainerResource\n+                    storageContainerName = unregisteredStorageAccount.Name;\n+                    ProtectionContainerResource protectionContainerResource =\n+                        new ProtectionContainerResource(unregisteredStorageAccount.Id,\n+                        unregisteredStorageAccount.Name);\n+                    AzureStorageContainer prop = new AzureStorageContainer(\n+                        friendlyName: storageAccountName,\n+                        backupManagementType: ServiceClientModel.BackupManagementType.AzureStorage,\n+                        sourceResourceId: unregisteredStorageAccount.Properties.ContainerId,\n+                        resourceGroup: vaultResourceGroupName);\n+                    protectionContainerResource.Properties = prop;\n+                    AzureWorkloadProviderHelper.RegisterContainer(unregisteredStorageAccount.Name,\n+                        protectionContainerResource,\n+                        vaultName,\n+                        vaultResourceGroupName);\n+                }\n+            }\n+\n+            //inquiry\n+            TriggerInquiry(vaultName, vaultResourceGroupName, storageContainerName);\n+\n+            //get protectable item\n+            WorkloadProtectableItemResource protectableObjectResource = null;\n+            protectableObjectResource = TriggerDiscovery(vaultName, vaultResourceGroupName, azureFileShareName, storageAccountName);\n+\n+            if (protectableObjectResource == null)\n+            {\n+                // Container is not discovered. Throw exception\n+                string errorMessage = string.Format(\n+                    Resources.DiscoveryFailure,\n+                    azureFileShareName,\n+                    vaultResourceGroupName);\n+                Logger.Instance.WriteDebug(errorMessage);\n+                Logger.Instance.WriteError(\n+                    new ErrorRecord(new Exception(Resources.FileShareNotDiscovered),\n+                        string.Empty, ErrorCategory.InvalidArgument, null));\n+            }\n+\n+            return protectableObjectResource;\n+        }\n+\n+        private WorkloadProtectableItemResource TriggerDiscovery(string vaultName, string vaultResourceGroupName,\n+            string azureFileShareName, string storageAccountName)\n+        {\n+            WorkloadProtectableItemResource protectableObjectResource = null;\n+            ODataQuery<BMSPOQueryObject> queryParam = new ODataQuery<BMSPOQueryObject>(\n+                q => q.BackupManagementType\n+                     == ServiceClientModel.BackupManagementType.AzureStorage);\n+\n+            var protectableItemList = ServiceClientAdapter.ListProtectableItem(\n+                queryParam,\n+                vaultName: vaultName,\n+                resourceGroupName: vaultResourceGroupName);\n+\n+            if (protectableItemList.Count == 0)\n+            {\n+                //Container is not discovered\n+                Logger.Instance.WriteDebug(Resources.ContainerNotDiscovered);\n+            }\n+\n+            foreach (var protectableItem in protectableItemList)\n+            {\n+                AzureFileShareProtectableItem azureFileShareProtectableItem =\n+                    (AzureFileShareProtectableItem)protectableItem.Properties;\n+                if (azureFileShareProtectableItem != null &&\n+                    string.Compare(azureFileShareProtectableItem.FriendlyName, azureFileShareName, true) == 0 &&\n+                    string.Compare(azureFileShareProtectableItem.ParentContainerFriendlyName, storageAccountName, true) == 0)\n+                {\n+                    protectableObjectResource = protectableItem;\n+                    break;\n+                }\n+            }\n+            return protectableObjectResource;\n+        }\n+\n+        private void TriggerInquiry(string vaultName, string vaultResourceGroupName,\n+            string storageContainerName)\n+        {\n+            ODataQuery<BMSContainersInquiryQueryObject> queryParams = new ODataQuery<BMSContainersInquiryQueryObject>(\n+                q => q.WorkloadType\n+                     == ServiceClientModel.WorkloadType.AzureFileShare);\n+            string errorMessage = string.Empty;\n+            var inquiryResponse = ServiceClientAdapter.InquireContainers(\n+               storageContainerName,\n+               queryParams,\n+               vaultName,\n+               vaultResourceGroupName);\n+\n+            var operationStatus = TrackingHelpers.GetOperationResult(\n+                inquiryResponse,\n+                operationId =>\n+                    ServiceClientAdapter.GetRefreshContainerOperationResult(","path":"src/ResourceManager/RecoveryServices/Commands.RecoveryServices.Backup.Providers/Providers/AzureFilesPsBackupProvider.cs","position":326,"original_position":326,"commit_id":"c68a8f92e4e81333a3c34977f313fa756ffb75f0","original_commit_id":"c68a8f92e4e81333a3c34977f313fa756ffb75f0","user":{"login":"dragonfly91","id":1173819,"node_id":"MDQ6VXNlcjExNzM4MTk=","avatar_url":"https://avatars0.githubusercontent.com/u/1173819?v=4","gravatar_id":"","url":"https://api.github.com/users/dragonfly91","html_url":"https://github.com/dragonfly91","followers_url":"https://api.github.com/users/dragonfly91/followers","following_url":"https://api.github.com/users/dragonfly91/following{/other_user}","gists_url":"https://api.github.com/users/dragonfly91/gists{/gist_id}","starred_url":"https://api.github.com/users/dragonfly91/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dragonfly91/subscriptions","organizations_url":"https://api.github.com/users/dragonfly91/orgs","repos_url":"https://api.github.com/users/dragonfly91/repos","events_url":"https://api.github.com/users/dragonfly91/events{/privacy}","received_events_url":"https://api.github.com/users/dragonfly91/received_events","type":"User","site_admin":false},"body":"Method name should be `GetContainerRefreshOrInquiryOperationResult`","created_at":"2018-08-27T10:39:05Z","updated_at":"2018-08-27T10:58:16Z","html_url":"https://github.com/MabOneSdk/azure-powershell/pull/361#discussion_r212934338","pull_request_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls/361","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls/comments/212934338"},"html":{"href":"https://github.com/MabOneSdk/azure-powershell/pull/361#discussion_r212934338"},"pull_request":{"href":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls/361"}}},"pull_request":{"url":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls/361","id":208287392,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA4Mjg3Mzky","html_url":"https://github.com/MabOneSdk/azure-powershell/pull/361","diff_url":"https://github.com/MabOneSdk/azure-powershell/pull/361.diff","patch_url":"https://github.com/MabOneSdk/azure-powershell/pull/361.patch","issue_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/issues/361","number":361,"state":"open","locked":false,"title":"[REBASE] afs enable protection","user":{"login":"siddharth7","id":8725244,"node_id":"MDQ6VXNlcjg3MjUyNDQ=","avatar_url":"https://avatars2.githubusercontent.com/u/8725244?v=4","gravatar_id":"","url":"https://api.github.com/users/siddharth7","html_url":"https://github.com/siddharth7","followers_url":"https://api.github.com/users/siddharth7/followers","following_url":"https://api.github.com/users/siddharth7/following{/other_user}","gists_url":"https://api.github.com/users/siddharth7/gists{/gist_id}","starred_url":"https://api.github.com/users/siddharth7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/siddharth7/subscriptions","organizations_url":"https://api.github.com/users/siddharth7/orgs","repos_url":"https://api.github.com/users/siddharth7/repos","events_url":"https://api.github.com/users/siddharth7/events{/privacy}","received_events_url":"https://api.github.com/users/siddharth7/received_events","type":"User","site_admin":false},"body":"<!-- DO NOT DELETE THIS TEMPLATE -->\r\n\r\n## Description\r\n<!--\r\nPlease add an informative description that covers the changes made by the pull request.\r\n\r\nIf applicable, reference the bug/issue that this pull request fixes here.\r\n-->\r\n\r\n---\r\n\r\nThis checklist is used to make sure that common guidelines for a pull request are followed. You can find a more complete discussion of PowerShell cmdlet best practices [here](https://msdn.microsoft.com/en-us/library/dd878270(v=vs.85).aspx).\r\n\r\n- [ ] **I have read the [contribution guidelines](https://github.com/Azure/azure-powershell/blob/dev/CONTRIBUTING.md).**\r\n- [ ] **If changes were made to any cmdlet, the XML help was regenerated using the [platyPSHelp module](https://github.com/Azure/azure-powershell/blob/dev/documentation/platyPSHelp-documentation.md).**\r\n- [ ] **If any large changes are made to a service, they are reflected in the respective [change log](https://github.com/Azure/azure-powershell/blob/dev/CONTRIBUTING.md#updating-the-change-log).**\r\n\r\n### [General Guidelines](https://github.com/Azure/azure-powershell/blob/dev/CONTRIBUTING.md#general-guidelines)\r\n- [ ] Title of the pull request is clear and informative.\r\n- [ ] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/dev/documentation/cleaning-up-commits.md).\r\n- [ ] The pull request does not introduce [breaking changes](https://github.com/Azure/azure-powershell/blob/dev/documentation/breaking-changes.md) (unless a major version change occurs in the assembly and module).\r\n\r\n### [Testing Guidelines](https://github.com/Azure/azure-powershell/blob/dev/CONTRIBUTING.md#testing-guidelines)\r\n- [ ] Pull request includes test coverage for the included changes.\r\n- [ ] PowerShell scripts used in tests should do any necessary setup as part of the test or suite setup, and should not use hard-coded values for locations or existing resources.\r\n\r\n### [Cmdlet Signature Guidelines](https://github.com/Azure/azure-powershell/blob/dev/CONTRIBUTING.md#cmdlet-signature-guidelines)\r\n- [ ] New cmdlets that make changes or have side effects should implement `ShouldProcess` and have `SupportShouldProcess=true` specified in the cmdlet attribute. You can find more information on `ShouldProcess` [here](https://gist.github.com/markcowl/338e16fe5c8bbf195aff9f8af0db585d#what-is-the-change).\r\n- [ ] Cmdlet specifies `OutputType` attribute if any output is produced - if the cmdlet produces no output, it should implement a `PassThrough` parameter.\r\n\r\n### [Cmdlet Parameter Guidelines](https://github.com/Azure/azure-powershell/blob/dev/CONTRIBUTING.md#cmdlet-parameter-guidelines)\r\n- [ ] Parameter types should not expose types from the management library - complex parameter types should be defined in the module.\r\n- [ ] Complex parameter types are discouraged - a parameter type should be simple types as often as possible. If complex types are used, they should be shallow and easily creatable from a constructor or another cmdlet.\r\n- [ ] Cmdlet parameter sets should be mutually exclusive - each parameter set must have at least one mandatory parameter not in other parameter sets.","created_at":"2018-08-14T13:47:04Z","updated_at":"2018-08-27T10:58:16Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b91b1f7aee9e3b3c1d7e566ac042ed83e80d2358","assignee":{"login":"siddharth7","id":8725244,"node_id":"MDQ6VXNlcjg3MjUyNDQ=","avatar_url":"https://avatars2.githubusercontent.com/u/8725244?v=4","gravatar_id":"","url":"https://api.github.com/users/siddharth7","html_url":"https://github.com/siddharth7","followers_url":"https://api.github.com/users/siddharth7/followers","following_url":"https://api.github.com/users/siddharth7/following{/other_user}","gists_url":"https://api.github.com/users/siddharth7/gists{/gist_id}","starred_url":"https://api.github.com/users/siddharth7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/siddharth7/subscriptions","organizations_url":"https://api.github.com/users/siddharth7/orgs","repos_url":"https://api.github.com/users/siddharth7/repos","events_url":"https://api.github.com/users/siddharth7/events{/privacy}","received_events_url":"https://api.github.com/users/siddharth7/received_events","type":"User","site_admin":false},"assignees":[{"login":"siddharth7","id":8725244,"node_id":"MDQ6VXNlcjg3MjUyNDQ=","avatar_url":"https://avatars2.githubusercontent.com/u/8725244?v=4","gravatar_id":"","url":"https://api.github.com/users/siddharth7","html_url":"https://github.com/siddharth7","followers_url":"https://api.github.com/users/siddharth7/followers","following_url":"https://api.github.com/users/siddharth7/following{/other_user}","gists_url":"https://api.github.com/users/siddharth7/gists{/gist_id}","starred_url":"https://api.github.com/users/siddharth7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/siddharth7/subscriptions","organizations_url":"https://api.github.com/users/siddharth7/orgs","repos_url":"https://api.github.com/users/siddharth7/repos","events_url":"https://api.github.com/users/siddharth7/events{/privacy}","received_events_url":"https://api.github.com/users/siddharth7/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":1033087045,"node_id":"MDU6TGFiZWwxMDMzMDg3MDQ1","url":"https://api.github.com/repos/MabOneSdk/azure-powershell/labels/needs%20revision","name":"needs revision","color":"e08b35","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls/361/commits","review_comments_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls/361/comments","review_comment_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls/comments{/number}","comments_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/issues/361/comments","statuses_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/statuses/c68a8f92e4e81333a3c34977f313fa756ffb75f0","head":{"label":"MabOneSdk:users/sisi/afs-enable-protection","ref":"users/sisi/afs-enable-protection","sha":"c68a8f92e4e81333a3c34977f313fa756ffb75f0","user":{"login":"MabOneSdk","id":12197086,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyMTk3MDg2","avatar_url":"https://avatars3.githubusercontent.com/u/12197086?v=4","gravatar_id":"","url":"https://api.github.com/users/MabOneSdk","html_url":"https://github.com/MabOneSdk","followers_url":"https://api.github.com/users/MabOneSdk/followers","following_url":"https://api.github.com/users/MabOneSdk/following{/other_user}","gists_url":"https://api.github.com/users/MabOneSdk/gists{/gist_id}","starred_url":"https://api.github.com/users/MabOneSdk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MabOneSdk/subscriptions","organizations_url":"https://api.github.com/users/MabOneSdk/orgs","repos_url":"https://api.github.com/users/MabOneSdk/repos","events_url":"https://api.github.com/users/MabOneSdk/events{/privacy}","received_events_url":"https://api.github.com/users/MabOneSdk/received_events","type":"Organization","site_admin":false},"repo":{"id":35209738,"node_id":"MDEwOlJlcG9zaXRvcnkzNTIwOTczOA==","name":"azure-powershell","full_name":"MabOneSdk/azure-powershell","owner":{"login":"MabOneSdk","id":12197086,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyMTk3MDg2","avatar_url":"https://avatars3.githubusercontent.com/u/12197086?v=4","gravatar_id":"","url":"https://api.github.com/users/MabOneSdk","html_url":"https://github.com/MabOneSdk","followers_url":"https://api.github.com/users/MabOneSdk/followers","following_url":"https://api.github.com/users/MabOneSdk/following{/other_user}","gists_url":"https://api.github.com/users/MabOneSdk/gists{/gist_id}","starred_url":"https://api.github.com/users/MabOneSdk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MabOneSdk/subscriptions","organizations_url":"https://api.github.com/users/MabOneSdk/orgs","repos_url":"https://api.github.com/users/MabOneSdk/repos","events_url":"https://api.github.com/users/MabOneSdk/events{/privacy}","received_events_url":"https://api.github.com/users/MabOneSdk/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/MabOneSdk/azure-powershell","description":"Microsoft Azure PowerShell","fork":true,"url":"https://api.github.com/repos/MabOneSdk/azure-powershell","forks_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/forks","keys_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/teams","hooks_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/hooks","issue_events_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/issues/events{/number}","events_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/events","assignees_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/assignees{/user}","branches_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/branches{/branch}","tags_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/tags","blobs_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/git/refs{/sha}","trees_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/statuses/{sha}","languages_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/languages","stargazers_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/stargazers","contributors_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/contributors","subscribers_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/subscribers","subscription_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/subscription","commits_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/commits{/sha}","git_commits_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/git/commits{/sha}","comments_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/comments{/number}","issue_comment_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/issues/comments{/number}","contents_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/contents/{+path}","compare_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/merges","archive_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/downloads","issues_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/issues{/number}","pulls_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls{/number}","milestones_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/milestones{/number}","notifications_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/labels{/name}","releases_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/releases{/id}","deployments_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/deployments","created_at":"2015-05-07T09:00:47Z","updated_at":"2016-02-04T09:28:27Z","pushed_at":"2018-08-27T09:42:58Z","git_url":"git://github.com/MabOneSdk/azure-powershell.git","ssh_url":"git@github.com:MabOneSdk/azure-powershell.git","clone_url":"https://github.com/MabOneSdk/azure-powershell.git","svn_url":"https://github.com/MabOneSdk/azure-powershell","homepage":null,"size":440785,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":11,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":2,"open_issues":11,"watchers":0,"default_branch":"devSwagger"}},"base":{"label":"MabOneSdk:afs_dev","ref":"afs_dev","sha":"e4d0057ea60d5cf3f1c00cbae9703bd04c0958ec","user":{"login":"MabOneSdk","id":12197086,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyMTk3MDg2","avatar_url":"https://avatars3.githubusercontent.com/u/12197086?v=4","gravatar_id":"","url":"https://api.github.com/users/MabOneSdk","html_url":"https://github.com/MabOneSdk","followers_url":"https://api.github.com/users/MabOneSdk/followers","following_url":"https://api.github.com/users/MabOneSdk/following{/other_user}","gists_url":"https://api.github.com/users/MabOneSdk/gists{/gist_id}","starred_url":"https://api.github.com/users/MabOneSdk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MabOneSdk/subscriptions","organizations_url":"https://api.github.com/users/MabOneSdk/orgs","repos_url":"https://api.github.com/users/MabOneSdk/repos","events_url":"https://api.github.com/users/MabOneSdk/events{/privacy}","received_events_url":"https://api.github.com/users/MabOneSdk/received_events","type":"Organization","site_admin":false},"repo":{"id":35209738,"node_id":"MDEwOlJlcG9zaXRvcnkzNTIwOTczOA==","name":"azure-powershell","full_name":"MabOneSdk/azure-powershell","owner":{"login":"MabOneSdk","id":12197086,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyMTk3MDg2","avatar_url":"https://avatars3.githubusercontent.com/u/12197086?v=4","gravatar_id":"","url":"https://api.github.com/users/MabOneSdk","html_url":"https://github.com/MabOneSdk","followers_url":"https://api.github.com/users/MabOneSdk/followers","following_url":"https://api.github.com/users/MabOneSdk/following{/other_user}","gists_url":"https://api.github.com/users/MabOneSdk/gists{/gist_id}","starred_url":"https://api.github.com/users/MabOneSdk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MabOneSdk/subscriptions","organizations_url":"https://api.github.com/users/MabOneSdk/orgs","repos_url":"https://api.github.com/users/MabOneSdk/repos","events_url":"https://api.github.com/users/MabOneSdk/events{/privacy}","received_events_url":"https://api.github.com/users/MabOneSdk/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/MabOneSdk/azure-powershell","description":"Microsoft Azure PowerShell","fork":true,"url":"https://api.github.com/repos/MabOneSdk/azure-powershell","forks_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/forks","keys_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/teams","hooks_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/hooks","issue_events_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/issues/events{/number}","events_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/events","assignees_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/assignees{/user}","branches_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/branches{/branch}","tags_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/tags","blobs_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/git/refs{/sha}","trees_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/statuses/{sha}","languages_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/languages","stargazers_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/stargazers","contributors_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/contributors","subscribers_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/subscribers","subscription_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/subscription","commits_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/commits{/sha}","git_commits_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/git/commits{/sha}","comments_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/comments{/number}","issue_comment_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/issues/comments{/number}","contents_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/contents/{+path}","compare_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/merges","archive_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/downloads","issues_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/issues{/number}","pulls_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls{/number}","milestones_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/milestones{/number}","notifications_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/labels{/name}","releases_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/releases{/id}","deployments_url":"https://api.github.com/repos/MabOneSdk/azure-powershell/deployments","created_at":"2015-05-07T09:00:47Z","updated_at":"2016-02-04T09:28:27Z","pushed_at":"2018-08-27T09:42:58Z","git_url":"git://github.com/MabOneSdk/azure-powershell.git","ssh_url":"git@github.com:MabOneSdk/azure-powershell.git","clone_url":"https://github.com/MabOneSdk/azure-powershell.git","svn_url":"https://github.com/MabOneSdk/azure-powershell","homepage":null,"size":440785,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":11,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":2,"open_issues":11,"watchers":0,"default_branch":"devSwagger"}},"_links":{"self":{"href":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls/361"},"html":{"href":"https://github.com/MabOneSdk/azure-powershell/pull/361"},"issue":{"href":"https://api.github.com/repos/MabOneSdk/azure-powershell/issues/361"},"comments":{"href":"https://api.github.com/repos/MabOneSdk/azure-powershell/issues/361/comments"},"review_comments":{"href":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls/361/comments"},"review_comment":{"href":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/MabOneSdk/azure-powershell/pulls/361/commits"},"statuses":{"href":"https://api.github.com/repos/MabOneSdk/azure-powershell/statuses/c68a8f92e4e81333a3c34977f313fa756ffb75f0"}},"author_association":"NONE"}}
{"actor":{"display_login":"dragonfly91"}}