Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: Windows PowerShell 4.0, Windows PowerShell 5.0
Può essere utile separare i dati utilizzati in una configurazione DSC dalla configurazione stessa utilizzando i dati di configurazione. In questo modo, è possibile utilizzare un'unica configurazione per più ambienti.
Ad esempio, se si sta sviluppando un'applicazione, è possibile utilizzare una configurazione sia per l'ambiente di sviluppo che per quello di produzione e utilizzare i dati di configurazione per specificare i dati per ogni ambiente.
Cosa sono i dati di configurazione?
I dati di configurazione sono dati definiti in una tabella hash e passati a una configurazione DSC durante la compilazione di tale configurazione.
Per una descrizione dettagliata della tabella hash ConfigurationData , vedere Utilizzo dei dati di configurazione.
Un semplice esempio
Diamo un'occhiata a un esempio molto semplice per vedere come funziona. Verrà creata una singola configurazione che garantisce che IIS sia presente in alcuni nodi e che Hyper-V sia presente in altri:
Configuration MyDscConfiguration {
Node $AllNodes.Where{$_.Role -eq "WebServer"}.NodeName
{
WindowsFeature IISInstall {
Ensure = 'Present'
Name = 'Web-Server'
}
}
Node $AllNodes.Where{$_.Role -eq "VMHost"}.NodeName
{
WindowsFeature HyperVInstall {
Ensure = 'Present'
Name = 'Hyper-V'
}
}
}
$MyData =
@{
AllNodes =
@(
@{
NodeName = 'VM-1'
Role = 'WebServer'
},
@{
NodeName = 'VM-2'
Role = 'VMHost'
}
)
}
MyDscConfiguration -ConfigurationData $MyData
L'ultima riga di questo script compila la configurazione, passando $MyData come valore il parametro ConfigurationData .
Il risultato è che vengono creati due file MOF:
Directory: C:\DscTests\MyDscConfiguration
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/31/2017 5:09 PM 1968 VM-1.mof
-a---- 3/31/2017 5:09 PM 1970 VM-2.mof
$MyData Specifica due nodi diversi, ciascuno con il proprio NodeName e Role. La configurazione crea dinamicamente blocchi di nodi prendendo la raccolta di nodi da $MyData cui ottiene (in particolare, $AllNodes) e filtra tale raccolta rispetto alla Role proprietà.
Utilizzo dei dati di configurazione per definire gli ambienti di sviluppo e produzione
Diamo un'occhiata a un esempio completo che utilizza un'unica configurazione per impostare sia gli ambienti di sviluppo che quelli di produzione di un sito web. Nell'ambiente di sviluppo, sia IIS che SQL Server sono installati in un singolo nodo. Nell'ambiente di produzione, IIS e SQL Server vengono installati in nodi separati. Useremo un file con estensione psd1 dei dati di configurazione per specificare i dati per i due ambienti diversi.
File di dati di configurazione
Definiremo i dati dell'ambiente di sviluppo e produzione in un file denominato DevProdEnvData.psd1 come segue:
@{
AllNodes = @(
@{
NodeName = "*"
SQLServerName = "MySQLServer"
SqlSource = "C:\Software\Sql"
DotNetSrc = "C:\Software\sxs"
WebSiteName = "New website"
},
@{
NodeName = "Prod-SQL"
Role = "MSSQL"
},
@{
NodeName = "Prod-IIS"
Role = "Web"
SiteContents = "C:\Website\Prod\SiteContents\"
SitePath = "\\Prod-IIS\Website\"
},
@{
NodeName = "Dev"
Role = "MSSQL", "Web"
SiteContents = "C:\Website\Dev\SiteContents\"
SitePath = "\\Dev\Website\"
}
)
}
File di script di configurazione
Ora, nella configurazione, che è definita in un .ps1 file, filtriamo i nodi che abbiamo definito in DevProdEnvData.psd1 base al loro ruolo (MSSQL, Dev, o entrambi) e li configuriamo di conseguenza. L'ambiente di sviluppo dispone sia di SQL Server che di IIS in un nodo, mentre l'ambiente di produzione li ha in due nodi diversi. Anche il contenuto del SiteContents sito è diverso, come specificato dalle proprietà.
Alla fine dello script di configurazione, chiamiamo la configurazione (la compiliamo in un documento MOF), passando DevProdEnvData.psd1 come $ConfigurationData parametro.
Nota: Questa configurazione richiede che i moduli
xSqlPssianoxWebAdministrationinstallati nel nodo di destinazione.
Definiamo la configurazione in un file chiamato MyWebApp.ps1:
Configuration MyWebApp
{
Import-DSCResource -ModuleName PSDesiredStateConfiguration
Import-DSCResource -ModuleName xSqlPs
Import-DSCResource -ModuleName xWebAdministration
Node $AllNodes.Where{$_.Role -contains "MSSQL"}.NodeName
{
# Install prerequisites
WindowsFeature installdotNet35
{
Ensure = "Present"
Name = "Net-Framework-Core"
Source = "c:\software\sxs"
}
# Install SQL Server
xSqlServerInstall InstallSqlServer
{
InstanceName = $Node.SQLServerName
SourcePath = $Node.SqlSource
Features = "SQLEngine,SSMS"
DependsOn = "[WindowsFeature]installdotNet35"
}
}
Node $AllNodes.Where{$_.Role -contains "Web"}.NodeName
{
# Install the IIS role
WindowsFeature IIS
{
Ensure = 'Present'
Name = 'Web-Server'
}
# Install the ASP .NET 4.5 role
WindowsFeature AspNet45
{
Ensure = 'Present'
Name = 'Web-Asp-Net45'
}
# Stop the default website
xWebsite DefaultSite
{
Ensure = 'Present'
Name = 'Default Web Site'
State = 'Stopped'
PhysicalPath = 'C:\inetpub\wwwroot'
DependsOn = '[WindowsFeature]IIS'
}
# Copy the website content
File WebContent
{
Ensure = 'Present'
SourcePath = $Node.SiteContents
DestinationPath = $Node.SitePath
Recurse = $true
Type = 'Directory'
DependsOn = '[WindowsFeature]AspNet45'
}
# Create the new Website
xWebsite NewWebsite
{
Ensure = 'Present'
Name = $Node.WebSiteName
State = 'Started'
PhysicalPath = $Node.SitePath
DependsOn = '[File]WebContent'
}
}
}
MyWebApp -ConfigurationData DevProdEnvData.psd1
Quando si esegue questa configurazione, vengono creati tre file MOF (uno per ogni voce denominata nella matrice AllNodes ):
Directory: C:\DscTests\MyWebApp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/31/2017 5:47 PM 2944 Prod-SQL.mof
-a---- 3/31/2017 5:47 PM 6994 Dev.mof
-a---- 3/31/2017 5:47 PM 5338 Prod-IIS.mof
Utilizzo di dati non nodali
È possibile aggiungere altre chiavi alla tabella hash ConfigurationData per i dati che non sono specifici di un nodo. La seguente configurazione garantisce la presenza di due siti web. I dati per ogni sito Web sono definiti nell'array AllNodes . Il file Config.xml viene utilizzato per entrambi i siti web, quindi lo definiamo in una chiave aggiuntiva con il nome NonNodeData. Si noti che è possibile avere tutte le chiavi aggiuntive che si desidera e si può denominarle come si desidera.
NonNodeData non è una parola riservata, è solo il modo in cui abbiamo deciso di chiamare la chiave aggiuntiva.
È possibile accedere a chiavi aggiuntive utilizzando la variabile speciale $ConfigurationData. In questo esempio, ConfigFileContents si accede con la riga:
Contents = $ConfigurationData.NonNodeData.ConfigFileContents
nel blocco di File risorse.
$MyData =
@{
AllNodes =
@(
@{
NodeName = "*"
LogPath = "C:\Logs"
},
@{
NodeName = "VM-1"
SiteContents = "C:\Site1"
SiteName = "Website1"
},
@{
NodeName = "VM-2"
SiteContents = "C:\Site2"
SiteName = "Website2"
}
);
NonNodeData =
@{
ConfigFileContents = (Get-Content C:\Template\Config.xml)
}
}
configuration WebsiteConfig
{
Import-DscResource -ModuleName xWebAdministration -Name MSFT_xWebsite
node $AllNodes.NodeName
{
xWebsite Site
{
Name = $Node.SiteName
PhysicalPath = $Node.SiteContents
Ensure = "Present"
}
File ConfigFile
{
DestinationPath = $Node.SiteContents + "\\config.xml"
Contents = $ConfigurationData.NonNodeData.ConfigFileContents
}
}
}