Создание поставщика подключений для расширения решения

Область применения: Windows Администратор Center, Windows Администратор Center Preview

поставщики Подключение ion играют важную роль в том, как Центр Администратор Windows определяет и взаимодействует с подключенными объектами или целевыми объектами. В первую очередь поставщик Подключение ion выполняет действия во время подключения, например обеспечение доступности целевого объекта в Сети, а также обеспечение доступа к целевому объекту.

По умолчанию Центр Администратор Windows поставляется со следующими поставщиками Подключение ion:

  • Сервер
  • Клиент Windows
  • Кластер отказоустойчивости
  • Кластер HCI

Чтобы создать собственный настраиваемый поставщик Подключение ion, выполните следующие действия.

  • Добавление сведений о поставщике Подключение ion вmanifest.json
  • Определение поставщика состояния Подключение ion
  • Реализация поставщика Подключение ion в уровне приложений

Добавление сведений о поставщике Подключение ion в manifest.json

Теперь мы рассмотрим, что необходимо знать, чтобы определить поставщика Подключение ion в файле проектаmanifest.json.

Создание записи в manifest.json

Файл manifest.json находится в папке \src и содержит, помимо прочего, определения точек входа в проект. Типы точек входа включают средства, решения и поставщики Подключение ion. Мы определим поставщика Подключение ion.

Ниже приведен пример записи поставщика Подключение ion в manifest.json:

    {
      "entryPointType": "connectionProvider",
      "name": "addServer",
      "path": "/add",
      "displayName": "resources:strings:addServer_displayName",
      "icon": "sme-icon:icon-win-server",
      "description": "resources:strings:description",
      "connectionType": "msft.sme.connection-type.server",
      "connectionTypeName": "resources:strings:addServer_connectionTypeName",
      "connectionTypeUrlName": "server",
      "connectionTypeDefaultSolution": "msft.sme.server-manager!servers",
      "connectionTypeDefaultTool": "msft.sme.server-manager!overview",
      "connectionStatusProvider": {
        "powerShell": {
          "script": "## Get-My-Status ##\nfunction Get-Status()\n{\n# A function like this would be where logic would exist to identify if a node is connectable.\n$status = @{label = $null; type = 0; details = $null; }\n$caption = \"MyConstCaption\"\n$productType = \"MyProductType\"\n# A result object needs to conform to the following object structure to be interpreted properly by the Windows Admin Center shell.\n$result = @{ status = $status; caption = $caption; productType = $productType; version = $version }\n# DO FANCY LOGIC #\n# Once the logic is complete, the following fields need to be populated:\n$status.label = \"Display Thing\"\n$status.type = 0 # This value needs to conform to the LiveConnectionStatusType enum. >= 3 represents a failure.\n$status.details = \"success stuff\"\nreturn $result}\nGet-Status"
        },
        "displayValueMap": {
          "wmfMissing-label": "resources:strings:addServer_status_wmfMissing_label",
          "wmfMissing-details": "resources:strings:addServer_status_wmfMissing_details",
          "unsupported-label": "resources:strings:addServer_status_unsupported_label",
          "unsupported-details": "resources:strings:addServer_status_unsupported_details"
        }
      }
    },

Точка входа типа connnectionProvider указывает на оболочку Windows Администратор Center, что настроенный элемент является поставщиком, который будет использоваться решением для проверки состояния подключения. точки входа поставщика Подключение ion содержат ряд важных свойств, определенных ниже.

Свойство Description
entryPointType Это обязательное свойство. Существует три допустимых значения: "tool", "solution" и "connectionProvider".
name Определяет поставщика Подключение ion в область решения. Это значение должно быть уникальным внутри полного экземпляра Центра Администратор Windows (а не только решения).
path Представляет путь URL-адреса для пользовательского интерфейса "Добавить Подключение ion", если он будет настроен решением. Это значение должно сопоставляться с маршрутом, настроенным в файле app-routing.module.ts. Если точка входа решения настроена для использования подключений rootNavigationBehavior, этот маршрут загружает модуль, используемый оболочкой для отображения пользовательского интерфейса Add Подключение ion. Дополнительные сведения см. в разделе rootNavigationBehavior.
displayName Введенное здесь значение отображается в правой части оболочки под черной панелью Центра Windows Администратор при загрузке страницы подключений решения.
значок Представляет значок, используемый в раскрывающемся меню "Решения" для представления решения.
описание Введите краткое описание точки входа.
connectionType Представляет тип подключения, который будет загружать поставщик. Введенное здесь значение также будет использоваться в точке входа решения, чтобы указать, что решение может загружать эти подключения. Введенное здесь значение также будет использоваться в точках входа инструмента, чтобы указать, что средство совместимо с этим типом. Это значение, введенное здесь, также будет использоваться в объекте подключения, отправленном вызову RPC на шаге реализации уровня приложения.
connectionTypeName Используется в таблице подключений для представления подключения, использующего поставщик Подключение ion. Ожидается, что это будет множественное имя типа.
connectionTypeUrlName Используется при создании URL-адреса для представления загруженного решения после подключения Центра windows Администратор к экземпляру. Эта запись используется после подключений и перед целевым объектом. В этом примере "connectionexample" отображается в URL-адресе: http://localhost:6516/solutionexample/connections/connectionexample/con-fake1.corp.contoso.com
connectionTypeDefaultSolution Представляет компонент по умолчанию, который должен загружаться поставщиком Подключение ion. Это значение является сочетанием:
[a] Имя пакета расширения, определенного в верхней части манифеста;
[b] Восклицательный знак (!);
[c] Имя точки входа решения.
Для проекта с именем msft.sme.mySample-extension и точкой входа решения с именем "example", это значение будет "msft.sme.solutionExample-extension!example".
connectionTypeDefaultTool Представляет средство по умолчанию, которое должно быть загружено на успешное подключение. Это значение свойства состоит из двух частей, аналогичных connectionTypeDefaultSolution. Это значение является сочетанием:
[a] Имя пакета расширения, определенного в верхней части манифеста;
[b] Восклицательный знак (!);
[c] Имя точки входа средства для инструмента, которое должно быть загружено изначально.
Для проекта с именем msft.sme.solutionExample-extension и точкой входа решения с именем example это значение будет "msft.sme.solutionExample-extension!example".
connectionStatusProvider См. раздел "Определение поставщика состояния Подключение ion"

Определение поставщика состояния Подключение ion

поставщик состояния Подключение ion — это механизм, с помощью которого целевой объект проверяется в сети и доступен, а также гарантирует, что у подключающегося пользователя есть разрешение на доступ к целевому объекту. В настоящее время существует два типа поставщиков состояния Подключение ion: PowerShell и RelativeGatewayUrl.

  • Поставщик состояния Подключение PowerShell— определяет, доступен ли целевой объект в сети и доступен с помощью скрипта PowerShell. Результат должен быть возвращен в объекте с одним свойством "status", определенным ниже.
  • RelativeGatewayUrl Подключение ion Status Provider — определяет, находится ли целевой объект в сети и доступен с помощью вызова rest. Результат должен быть возвращен в объекте с одним свойством "status", определенным ниже.

Определение состояния

поставщики состояния Подключение ion должны возвращать объект с одним свойствомstatus, соответствующим следующему формату:

{
    status: {
        label: string;
        type: int;
        details: string;
    }
}

Свойства состояния:

  • Метка — метка , описывающая тип возвращаемого состояния. Обратите внимание, что значения метки можно сопоставить в среде выполнения. См. запись ниже для сопоставления значений во время выполнения.

  • Тип — тип возвращаемого состояния. Тип имеет следующие значения перечисления. Для любого значения 2 или более поздней платформы платформа не перейдет к подключенному объекту, и в пользовательском интерфейсе будет отображаться ошибка.

    Типы:

    значение Описание
    0 Миграция по сети
    1 Предупреждение
    2 Не авторизовано
    3 Ошибка
    4 Смертельно
    5 Неизвестно
  • Сведения — дополнительные сведения, описывающие тип возвращаемого состояния.

Скрипт поставщика состояния Подключение PowerShell

Сценарий PowerShell поставщика состояния Подключение ion определяет, находится ли целевой объект в сети и доступен с помощью скрипта PowerShell. Результат должен быть возвращен в объекте с одним свойством "status". Ниже показан пример скрипта.

Пример скрипта PowerShell:

## Get-My-Status ##

function Get-Status()
{
    # A function like this would be where logic would exist to identify if a node is connectable.
    $status = @{label = $null; type = 0; details = $null; }
    $caption = "MyConstCaption"
    $productType = "MyProductType"

    # A result object needs to conform to the following object structure to be interperated properly by the Windows Admin Center shell.
    $result = @{ status = $status; caption = $caption; productType = $productType; version = $version }

    # DO FANCY LOGIC #

    # Once the logic is complete, the following fields need to be populated:
    $status.label = "Display Thing"
    $status.type = 0 # This value needs to conform to the LiveConnectionStatusType enum. >= 3 represents a failure.
    $status.details = "success stuff"

    return $result
}

Get-Status

Определение метода Поставщика состояния состояния RelativeGatewayUrl Подключение ion

Метод поставщика RelativeGatewayUrl состояния Подключение вызывает rest API, чтобы определить, находится ли целевой объект в сети и доступен. Результат должен быть возвращен в объекте с одним свойством "status". Ниже показан пример записи поставщика Подключение ion в manifest.json объекта RelativeGatewayUrl.

    {
      "entryPointType": "connectionProvider",
      "name": "addServer",
      "path": "/add/server",
      "displayName": "resources:strings:addServer_displayName",
      "icon": "sme-icon:icon-win-server",
      "description": "resources:strings:description",
      "connectionType": "msft.sme.connection-type.server",
      "connectionTypeName": "resources:strings:addServer_connectionTypeName",
      "connectionTypeUrlName": "server",
      "connectionTypeDefaultSolution": "msft.sme.server-manager!servers",
      "connectionTypeDefaultTool": "msft.sme.server-manager!overview",
      "connectionStatusProvider": {
        "relativeGatewayUrl": "<URL here post /api>",
        "displayValueMap": {
          "wmfMissing-label": "resources:strings:addServer_status_wmfMissing_label",
          "wmfMissing-details": "resources:strings:addServer_status_wmfMissing_details",
          "unsupported-label": "resources:strings:addServer_status_unsupported_label",
          "unsupported-details": "resources:strings:addServer_status_unsupported_details"
        }
      }
    },

Заметки об использовании RelativeGatewayUrl:

  • "relativeGatewayUrl" указывает, где получить состояние подключения из URL-адреса шлюза. Этот универсальный код ресурса (URI) является относительным из /api. Если $connectionName найден в URL-адресе, оно будет заменено именем подключения.
  • Все относительные свойстваGatewayUrl должны выполняться в шлюзе узла, который можно выполнить путем создания расширения шлюза.

Сопоставление значений во время выполнения

Значения меток и сведений в объекте возвращаемого состояния можно отформатировать во время настройки, включив ключи и значения в свойство defaultValueMap поставщика.

Например, если вы добавите приведенное ниже значение, в любой момент, когда "по умолчанию Подключение ion_test" отображалось в качестве значения метки или сведений, Центр Windows Администратор Center автоматически заменит ключ настроенным строковым значением ресурса.

    "defaultConnection_test": "resources:strings:addServer_status_defaultConnection_label"

Реализация поставщика Подключение ion в уровне приложений

Теперь мы будем реализовывать поставщик Подключение ion в уровне приложения, создав класс TypeScript, реализующий OnInit. Класс имеет следующие функции:

Function Description
конструктор(private appContextService: AppContextService, частный маршрут: ActivatedRoute)
public ngOnInit()
public onSubmit() Содержит логику обновления оболочки при попытке добавления подключения
public onCancel() Содержит логику обновления оболочки при отмене попытки добавления подключения

Определение onSubmit

onSubmitвыдает обратный вызов RPC в контекст приложения, чтобы уведомить оболочку о добавлении Подключение ion. Базовый вызов использует updateData, как показано ниже.

this.appContextService.rpc.updateData(
    EnvironmentModule.nameOfShell,
    '##',
    <RpcUpdateData>{
        results: {
            connections: connections,
            credentials: this.useCredentials ? this.creds : null
        }
    }
);

Результатом является свойство подключения, которое является массивом объектов, которые соответствуют следующей структуре:


/**
 * The connection attributes class.
 */
export interface ConnectionAttribute {

    /**
     * The id string of this attribute
     */
    id: string;

    /**
     * The value of the attribute. used for attributes that can have variable values such as Operating System
     */
    value?: string | number;
}

/**
 * The connection class.
 */
export interface Connection {

    /**
     * The id of the connection, this is unique per connection
     */
    id: string;

    /**
     * The type of connection
     */
    type: string;

    /**
     * The name of the connection, this is unique per connection type
     */
    name: string;

    /**
     * The property bag of the connection
     */
    properties?: ConnectionProperties;

    /**
     * The ids of attributes identified for this connection
     */
    attributes?: ConnectionAttribute[];

    /**
     * The tags the user(s) have assigned to this connection
     */
    tags?: string[];
}

/**
 * Defines connection type strings known by core
 * Be careful that these strings match what is defined by the manifest of @msft-sme/server-manager
 */
export const connectionTypeConstants = {
    server: 'msft.sme.connection-type.server',
    cluster: 'msft.sme.connection-type.cluster',
    hyperConvergedCluster: 'msft.sme.connection-type.hyper-converged-cluster',
    windowsClient: 'msft.sme.connection-type.windows-client',
    clusterNodesProperty: 'nodes'
};

Определение onCancel

onCancelОтменяет попытку "Добавить Подключение" путем передачи пустого массива подключений:

this.appContextService.rpc.updateData(EnvironmentModule.nameOfShell, '##', <RpcUpdateData>{ results: { connections: [] } });

Пример поставщика Подключение ion

Ниже приведен полный класс TypeScript для реализации поставщика подключений. Обратите внимание, что строка connectionType соответствует "connectionType, как определено в поставщике подключений в manifest.json.

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { AppContextService } from '@microsoft/windows-admin-center-sdk/shell/angular';
import { Connection, ConnectionUtility } from '@microsoft/windows-admin-center-sdk/shell/core';
import { EnvironmentModule } from '@microsoft/windows-admin-center-sdk/shell/dist/core/manifest/environment-modules';
import { RpcUpdateData } from '@microsoft/windows-admin-center-sdk/shell/dist/core/rpc/rpc-base';
import { Strings } from '../../generated/strings';

@Component({
  selector: 'add-example',
  templateUrl: './add-example.component.html',
  styleUrls: ['./add-example.component.css']
})
export class AddExampleComponent implements OnInit {
  public newConnectionName: string;
  public strings = MsftSme.resourcesStrings<Strings>().SolutionExample;
  private connectionType = 'msft.sme.connection-type.example'; // This needs to match the connectionTypes value used in the manifest.json.

  constructor(private appContextService: AppContextService, private route: ActivatedRoute) {
    // TODO:
  }

  public ngOnInit() {
    // TODO
  }

  public onSubmit() {
    let connections: Connection[] = [];

    let connection = <Connection> {
      id: ConnectionUtility.createConnectionId(this.connectionType, this.newConnectionName),
      type: this.connectionType,
      name: this.newConnectionName
    };

    connections.push(connection);

    this.appContextService.rpc.updateData(
      EnvironmentModule.nameOfShell,
      '##',
      <RpcUpdateData> {
        results: {
          connections: connections,
          credentials: null
        }
      }
    );
  }

  public onCancel() {
    this.appContextService.rpc.updateData(
      EnvironmentModule.nameOfShell, '##', <RpcUpdateData>{ results: { connections: [] } });
  }
}