Dela via


Skapa en anslutningsprovider för ett lösningstillägg

Anslutningsleverantörer spelar en viktig roll i hur Administrationscenter för Windows definierar och kommunicerar med anslutningsbara objekt eller mål. I första hand utför en anslutningsprovider åtgärder när en anslutning görs, till exempel att se till att målet är online och tillgängligt, samt att se till att den anslutande användaren har behörighet att komma åt målet.

Som standard levereras Windows Admin Center med följande anslutningsprovidrar:

  • Server
  • Windows-klient
  • Kluster för failover
  • HCI-kluster

Följ dessa steg för att skapa en egen anpassad anslutningsprovider:

  • Lägg till information om anslutningsprovidern i manifest.json
  • Definiera anslutningsstatusprovider
  • Implementera anslutningsprovider i programlager

Lägg till information om anslutningsprovidern i manifest.json

Nu ska vi gå igenom vad du behöver veta för att definiera en anslutningsprovider i projektets manifest.json-fil.

Skapa post i manifest.json

Den manifest.json filen finns i mappen \src och innehåller bland annat definitioner av startpunkter i projektet. Typer av startpunkter är verktyg, lösningar och anslutningsproviders. Vi kommer att definiera en anslutningsprovider.

Ett exempel på en post för anslutningsprovidern i manifest.json finns nedan:

    {
      "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"
        }
      }
    },

En startpunkt av typen "connnectionProvider" anger för Windows Admin Center-gränssnittet att objektet som konfigureras är en provider som ska användas av en lösning för att verifiera ett anslutningstillstånd. Anslutningsproviderns startpunkter innehåller ett antal viktiga egenskaper som definieras nedan:

Fastighet Beskrivning
Typ av inmatningspunkt Det här är en obligatorisk egenskap. Det finns tre giltiga värden: "tool", "solution" och "connectionProvider".
namn Identifierar anslutningsprovidern inom omfånget för en lösning. Det här värdet måste vara unikt i en fullständig Windows Admin Center-instans (inte bara en lösning).
väg Representerar URL-sökvägen för användargränssnittet "Lägg till anslutning" om det ska konfigureras av lösningen. Det här värdet måste mappas till en väg som har konfigurerats i app-routing.module.ts fil. När lösningens startpunkt har konfigurerats för att använda anslutningarnas rootNavigationBehavior, läser den här rutten in modulen som används av Shell för att visa lägg-till-anslutning-användargränssnittet. Mer information finns i avsnittet om rootNavigationBehavior.
visningsnamn Värdet som anges här visas till höger i gränssnittet, under det svarta Windows Admin Center-fältet när en användare läser in en lösnings anslutningssida.
ikon Representerar ikonen som används i den nedrullningsbara menyn Lösningar för att representera lösningen.
beskrivning Ange en kort beskrivning av startpunkten.
anslutningstyp Representerar den anslutningstyp som providern ska läsa in. Värdet som anges här kommer också att användas i lösningens startpunkt för att ange att lösningen kan ladda dessa anslutningar. Värdet som anges här används också i Verktygs startpunkter för att indikera att verktyget är kompatibelt med den här typen. Det här värdet används också i anslutningsobjektet som skickas till RPC-anropet i "Lägg till fönster" i implementeringssteget för programskiktet.
anslutningstypnamn Används i anslutningstabellen för att representera en anslutning som använder anslutningsprovidern. Detta förväntas vara pluralnamnet för typen.
connectionTypeUrlName Används för att skapa URL:en för att representera den inlästa lösningen efter att Windows Administrationscenter har anslutit till en instans. Den här posten används efter anslutningar och före målet. I det här exemplet är "connectionexample" platsen där detta värde visas i URL:en: http://localhost:6516/solutionexample/connections/connectionexample/con-fake1.corp.contoso.com
anslutningstypFörvaldLösning Representerar standardkomponenten som ska läsas in av anslutningsprovidern. Det här värdet är en kombination av:
[a] Namnet på tilläggspaketet som definierats överst i manifestet.
[b] Utropstecken (!);
[c] Namnet på lösningens startpunkt.
För ett projekt med namnet "msft.sme.mySample-extension" och en startpunkt för lösningen med namnet "example" skulle det här värdet vara "msft.sme.solutionExample-extension!example".
anslutningstypStandardverktyg Vid en lyckad anslutning representerar det standardverktyget som ska laddas in. Det här egenskapsvärdet består av två delar, ungefär som connectionTypeDefaultSolution. Det här värdet är en kombination av:
[a] Namnet på tilläggspaketet som definierats överst i manifestet.
[b] Utropstecken (!);
[c] Verktygets startpunktsnamn för det verktyg som initialt ska läsas in.
För ett projekt med namnet "msft.sme.solutionExample-extension" och en lösningsinmatningspunkt med namnet "example" skulle det här värdet vara "msft.sme.solutionExample-extension!example".
anslutningsstatusleverantör Se avsnittet "Definiera anslutningsstatusprovider"

Definiera anslutningsstatusprovider

Anslutningsstatusprovider är den mekanism med vilken ett mål verifieras vara online och tillgängligt, vilket också säkerställer att den anslutande användaren har behörighet att komma åt målet. Det finns för närvarande två typer av anslutningsstatusprovidrar: PowerShell och RelativeGatewayUrl.

  • PowerShell-anslutningsstatusprovider – Avgör om ett mål är online och tillgängligt med ett PowerShell-skript. Resultatet måste returneras i ett objekt med en enda egenskap "status", som definieras nedan.
  • RelativeGatewayUrl Anslutningsstatusprovider — Avgör om ett mål är online och tillgängligt med ett REST-anrop. Resultatet måste returneras i ett objekt med en enda egenskap "status", som definieras nedan.

Definiera status

Anslutningsstatusprovidrar måste returnera ett objekt med en enda egenskap status som överensstämmer med följande format:

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

Statusegenskaper:

  • Etikett – en etikett som beskriver statusreturtypen. Observera att värden för etiketten kan mappas under körning. Se posten nedan för att koppla värden under körning.

  • Typ – statusreturtypen. Typen har följande uppräkningsvärden. För värde 2 eller senare navigerar inte plattformen till det anslutna objektet och ett fel visas i användargränssnittet.

    Typer:

    Värde Beskrivning
    0 Online
    1 Varning
    2 Otillåten
    3 Fel
    4 Dödlig
    5 Okänd
  • Information – Ytterligare information som beskriver statusreturtypen.

Skript för PowerShell-anslutningsstatusprovider

PowerShell-skriptet för anslutningsstatusprovidern avgör om ett mål är online och tillgängligt med ett PowerShell-skript. Resultatet måste returneras i ett objekt med en enda egenskap "status". Ett exempelskript visas nedan.

Exempel på PowerShell-skript:

## 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

Definiera metoden RelativeGatewayUrl-anslutningsstatusprovider

Metoden Connection Status Provider RelativeGatewayUrl anropar ett REST-API för att avgöra om ett mål är online och tillgängligt. Resultatet måste returneras i ett objekt med en enda egenskap "status". Ett exempel på en post för anslutningsprovidern i manifest.json för en RelativeGatewayUrl visas nedan.

    {
      "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"
        }
      }
    },

Information om hur du använder RelativeGatewayUrl:

  • "relativeGatewayUrl" anger var anslutningsstatusen ska hämtas från en gateway-URL. Den här URI:n är relativ från /api. Om $connectionName finns i URL:en ersätts den med namnet på anslutningen.
  • Alla relativeGatewayUrl-egenskaper måste köras mot värdgatewayen, vilket kan åstadkommas genom att skapa ett gatewaytillägg

Mappa värden under körning

Etikett- och informationsvärdena i statusreturobjektet kan formateras vid justeringstid genom att inkludera nycklar och värden i egenskapen "defaultValueMap" för providern.

Om du till exempel lägger till värdet nedan, varje gång som "defaultConnection_test" visas som ett värde för antingen etikett eller information, ersätter Windows Administrationscenter automatiskt nyckeln med det konfigurerade resurssträngsvärdet.

    "defaultConnection_test": "resources:strings:addServer_status_defaultConnection_label"

Implementera anslutningsprovider i programlager

Nu ska vi implementera anslutningsprovidern i programlagret genom att skapa en TypeScript-klass som implementerar OnInit. Klassen har följande funktioner:

Funktion Beskrivning
konstruktor(privat appContextService: AppContextService, privat rutt: ActivatedRoute)
public ngOnInit()
public onSubmit() Innehåller logik för att uppdatera gränssnittet när ett tilläggsanslutningsförsök görs
public onCancel() Innehåller logik för att uppdatera gränssnittet när ett tilläggsanslutningsförsök avbryts

Definiera funktionen onSubmit

onSubmit utfärdar ett RPC-anrop tillbaka till appkontexten för att meddela gränssnittet om en "Lägg till anslutning". Det grundläggande anropet använder "updateData" så här:

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

Resultatet är en anslutningsegenskap, som är en matris med objekt som överensstämmer med följande struktur:


/**
 * 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'
};

Definiera onCancel

onCancel avbryter ett försök att lägga till anslutning genom att skicka en tom anslutningsmatris:

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

Exempel på anslutningsprovider

Den fullständiga TypeScript-klassen för att implementera en anslutningsprovider finns nedan. Observera att "connectionType"-strängen matchar "connectionType enligt definitionen i anslutningsprovidern i 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: [] } });
  }
}