Подтвердить что ты не робот

Выключение VM возвращает все состояния VM как неизвестные

При использовании приведенных ниже методов выключение и запрос экземпляров роли. Когда я завершаю работу виртуальной машины, все другие экземпляры роли возвращаются с неизвестным статусом готовности. Примерно через пару минут я могу запросить еще раз и получить фактический статус. Как я могу получить фактический статус в режиме реального времени, используя API управления Azure. Или это проблема с настройкой виртуальных машин? Они сконфигурированы с одинаковым местом хранения и одной виртуальной сетью.

Показанный код основывался на шаблоне для развертывания и управления виртуальными машинами в Visual Studio 2015.

Вызов завершения работы виртуальной машины:

var shutdownParams = new VirtualMachineShutdownParameters();

if (deallocate)//deallocate is true in this instance
    shutdownParams.PostShutdownAction = PostShutdownAction.StoppedDeallocated; // Fully deallocate resources and stop billing
else
    shutdownParams.PostShutdownAction = PostShutdownAction.Stopped; // Just put the machine in stopped state, keeping resources allocated

await _computeManagementClient.VirtualMachines.ShutdownAsync(_parameters.CloudServiceName, _parameters.CloudServiceName, vmName, shutdownParams);

Вызов запроса для всех экземпляров роли XXX_VirtualMachine - это класс, который содержит имя и статус экземпляра:

internal List<XXX_VirtualMachine> GetAllVirtualMachines()
{
    List<XXX_VirtualMachine> vmList = new List<XXX_VirtualMachine>();
    try
    {
        DeploymentGetResponse deployment;

        deployment = _computeManagementClient.Deployments.GetByName(_parameters.CloudServiceName, _parameters.CloudServiceName);

        for (int i = 0; i < deployment.RoleInstances.Count; i++)
        {
            vmList.Add(new XXX_VirtualMachine(deployment.RoleInstances[i].InstanceName, deployment.RoleInstances[i]));
        }
    }
    catch (Exception e)
    {
        System.Windows.Forms.MessageBox.Show(e.Message);
    }
    return vmList;
}
4b9b3361

Ответ 1

Итак, я наконец добрался до этого удара! (приносят извинения за задержку, люди все время ожидали, что эта работа - неразумные дураки!)

Во-первых, на самом деле это не ответ! просто исследуйте проблему, и вы, вероятно, знаете все это уже, но, возможно, кто-то, кто ее прочитает, увидит то, что я пропустил.

Я создал три виртуальных машины, в одном облачном сервисе и lo-and-behold! он сделал именно то, что вы предсказали, когда вы закрыли его.

Во-первых, оба портала, похоже, дают надежные ответы, даже когда запрос .Net сообщает RoleStatusUnknown.

Глядя на Xml, который выходит из запроса

https://management.core.windows.net/{subscriptionid}/services/hostedservices/vm01-u3rzv2q6/deploymentslots/Production

получаем

<RoleInstance>
  <RoleName>vm01</RoleName>
  <InstanceName>vm01</InstanceName>
  <InstanceStatus>RoleStateUnknown</InstanceStatus>
  <InstanceSize>Basic_A1</InstanceSize>
  <InstanceStateDetails />
  <PowerState>Started</PowerState>

Затем я запустил Powershell, чтобы узнать, делает ли это то же самое, что и было (не неожиданно, так как он вызывает ту же точку REST). с Get-AzureVm возвращением

ServiceName   Name Status          
-----------   ---- ------          
vm01-u3rzv2q6 vm01 CreatingVM      
vm01-u3rzv2q6 vm02 RoleStateUnknown
vm01-u3rzv2q6 vm03 RoleStateUnknown

В соответствующие моменты, которые снова, как видно.

Удивительно, что было время, я тогда запускал этот

while ($true) { (get-azurevm -ServiceName vm01-u3rzv2q6 -Name vm01).InstanceStatus ; get-azurevm ; (date).DateTime } 

ReadyRole
vm01-u3rzv2q6 vm01 ReadyRole
vm01-u3rzv2q6 vm02 ReadyRole
vm01-u3rzv2q6 vm03 ReadyRole
07 March 2016 04:31:01

07 March 2016 04:31:36
StoppedDeallocated
vm01-u3rzv2q6 vm01 Stoppe...
vm01-u3rzv2q6 vm02 RoleSt...
vm01-u3rzv2q6 vm03 RoleSt...
07 March 2016 04:31:49

07 March 2016 04:33:44
StoppedDeallocated
vm01-u3rzv2q6 vm01 Stoppe...
vm01-u3rzv2q6 vm02 ReadyRole
vm01-u3rzv2q6 vm03 ReadyRole
07 March 2016 04:33:52

Итак, кажется, что машина отключается, тогда процесс должен начать обновлять облачную службу, которая берет на себя способность запрашивать ее статус, что кажется, ровно две минуты.

Где-то в API должно быть место, где оно сообщается правильно, потому что у порталов нет этой проблемы.

Я провел некоторое время в тупике, ища "InstanceView" для виртуальной машины, но, похоже, этого не существует для классических развертываний.

Моя следующая мысль состоит в том, чтобы собрать простой клиент для отдыха, который берет сертификат управления и видит, можно ли взломать URI немного, чтобы дать что-нибудь более интересное. (его где-то там!)

Что может быть полезно, так это то, что эта проблема не затрагивает PowerState. Таким образом, вы можете иметь дополнительную проверку для этого, в то время как у вас есть ошибка RoleStateUnknown, ее далеко не идеальная, но в зависимости от того, что вы хотите сделать, это может сработать.

В противном случае я бы сказал, что это явно ошибка в Azure, и определенно может быть вызван призыв к поддержке.