@Override
  public List<CloudVmInstanceStatus> check(AuthenticatedContext ac, List<CloudInstance> vms) {
    List<CloudVmInstanceStatus> statuses = new ArrayList<>();
    AzureRMClient azureRMClient = armClient.getClient(ac.getCloudCredential());
    String stackName = armTemplateUtils.getStackName(ac.getCloudContext());

    for (CloudInstance vm : vms) {
      try {
        Map<String, Object> virtualMachine =
            azureRMClient.getVirtualMachineInstanceView(stackName, vm.getInstanceId());
        List<Map<String, Object>> vmStatuses = (List) virtualMachine.get("statuses");
        for (Map<String, Object> vmStatuse : vmStatuses) {
          String statusCode = vmStatuse.get("code").toString();
          if (statusCode.startsWith("PowerState")) {
            statusCode = statusCode.replace("PowerState/", "");
            statuses.add(new CloudVmInstanceStatus(vm, ArmInstanceStatus.get(statusCode)));
            break;
          }
        }
      } catch (Exception e) {
        statuses.add(new CloudVmInstanceStatus(vm, InstanceStatus.TERMINATED));
      }
    }
    return statuses;
  }
  @Override
  public List<CloudVmInstanceStatus> stop(
      AuthenticatedContext ac, List<CloudResource> resources, List<CloudInstance> vms) {
    AzureRMClient azureRMClient = armClient.getClient(ac.getCloudCredential());
    String stackName = armTemplateUtils.getStackName(ac.getCloudContext());
    List<CloudVmInstanceStatus> statuses = new ArrayList<>();

    for (CloudInstance vm : vms) {
      try {
        azureRMClient.stopVirtualMachine(stackName, vm.getInstanceId());
        statuses.add(new CloudVmInstanceStatus(vm, InstanceStatus.IN_PROGRESS));
      } catch (HttpResponseException e) {
        statuses.add(
            new CloudVmInstanceStatus(
                vm, InstanceStatus.FAILED, e.getResponse().getData().toString()));
      } catch (Exception e) {
        statuses.add(new CloudVmInstanceStatus(vm, InstanceStatus.FAILED, e.getMessage()));
      }
    }
    return statuses;
  }