docs: def list_hosted_services(conn=None, call=None):
      '''
      List VMs on this Azure account, with full information
      '''
      if call == 'action':
          raise SaltCloudSystemExit(
              'The list_hosted_services function must be called with '
              '-f or --function'
          )
  
      if not conn:
          conn = get_conn()
  
      ret = {}
      services = conn.list_hosted_services()
      for service in services:
          props = service.hosted_service_properties
          ret[service.service_name] = {
              'name': service.service_name,
              'url': service.url,
              'affinity_group': props.affinity_group,
              'date_created': props.date_created,
              'date_last_modified': props.date_last_modified,
              'description': props.description,
              'extended_properties': props.extended_properties,
              'label': props.label,
              'location': props.location,
              'status': props.status,
              'deployments': {},
          }
          deployments = conn.get_hosted_service_properties(
              service_name=service.service_name, embed_detail=True
          )
          for deployment in deployments.deployments:
              ret[service.service_name]['deployments'][deployment.name] = {
                  'configuration': deployment.configuration,
                  'created_time': deployment.created_time,
                  'deployment_slot': deployment.deployment_slot,
                  'extended_properties': deployment.extended_properties,
                  'input_endpoint_list': deployment.input_endpoint_list,
                  'label': deployment.label,
                  'last_modified_time': deployment.last_modified_time,
                  'locked': deployment.locked,
                  'name': deployment.name,
                  'persistent_vm_downtime_info': deployment.persistent_vm_downtime_info,
                  'private_id': deployment.private_id,
                  'role_instance_list': {},
                  'role_list': {},
                  'rollback_allowed': deployment.rollback_allowed,
                  'sdk_version': deployment.sdk_version,
                  'status': deployment.status,
                  'upgrade_domain_count': deployment.upgrade_domain_count,
                  'upgrade_status': deployment.upgrade_status,
                  'url': deployment.url,
              }
              for role_instance in deployment.role_instance_list:
                  ret[service.service_name]['deployments'][deployment.name]['role_instance_list'][role_instance.role_name] = {
                      'fqdn': role_instance.fqdn,
                      'instance_error_code': role_instance.instance_error_code,
                      'instance_fault_domain': role_instance.instance_fault_domain,
                      'instance_name': role_instance.instance_name,
                      'instance_size': role_instance.instance_size,
                      'instance_state_details': role_instance.instance_state_details,
                      'instance_status': role_instance.instance_status,
                      'instance_upgrade_domain': role_instance.instance_upgrade_domain,
                      'ip_address': role_instance.ip_address,
                      'power_state': role_instance.power_state,
                      'role_name': role_instance.role_name,
                  }
              for role in deployment.role_list:
                  ret[service.service_name]['deployments'][deployment.name]['role_list'][role.role_name] = {
                      'role_name': role.role_name,
                      'os_version': role.os_version,
                  }
                  role_info = conn.get_role(
                      service_name=service.service_name,
                      deployment_name=deployment.name,
                      role_name=role.role_name,
                  )
                  ret[service.service_name]['deployments'][deployment.name]['role_list'][role.role_name]['role_info'] = {
                      'availability_set_name': role_info.availability_set_name,
                      'configuration_sets': role_info.configuration_sets,
                      'data_virtual_hard_disks': role_info.data_virtual_hard_disks,
                      'os_version': role_info.os_version,
                      'role_name': role_info.role_name,
                      'role_size': role_info.role_size,
                      'role_type': role_info.role_type,
                  }
                  ret[service.service_name]['deployments'][deployment.name]['role_list'][role.role_name]['role_info']['os_virtual_hard_disk'] = {
                      'disk_label': role_info.os_virtual_hard_disk.disk_label,
                      'disk_name': role_info.os_virtual_hard_disk.disk_name,
                      'host_caching': role_info.os_virtual_hard_disk.host_caching,
                      'media_link': role_info.os_virtual_hard_disk.media_link,
                      'os': role_info.os_virtual_hard_disk.os,
                      'source_image_name': role_info.os_virtual_hard_disk.source_image_name,
                  }
      return ret