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: [] } });
}
}