Azure Automation DSC를 사용하여 Azure VM을 구성하려고합니다. 내가 설정하려는 리소스 중 하나는 xDnsServerAddress
from xNetworking
모듈이 있는 클라이언트 워크 스테이션의 DNS입니다 .
문제는 Azure VM에서 인터페이스 별칭이 필요하고 인터페이스 별칭이 배포에 따라 달라진다는 것입니다 (주로 VM은 Ethernet
또는 을 가져 오는 것 같습니다 Ethernet 2
).
다음 cmdlet 식을 사용하여 로컬에서 인터페이스 이름을 쿼리 할 수 있습니다.
$Interface=Get-NetAdapter|Where Name -Like "Ethernet*"|Select-Object -First 1
$InterfaceAlias=$($Interface.Name)
그러나 DSC 내부에서 사용하는 방법을 모르겠습니다.
내 DSC 구성은 다음과 같습니다 (관련 부분 만 해당).
Configuration MyDscConfig
{
Import-DscResource -ModuleName xNetworking
# place-1
Node $AllNodes.where{$_.Role -eq "Workstation"}.NodeName
{
# place-2
xDnsServerAddress DnsServerAddressSetToDc1
{
Address = '10.0.0.4'
InterfaceAlias = $InterfaceAlias
AddressFamily = 'IPv4'
Validate = $true
}
}
}
문제는 cmdlet 식을에 배치 place-1
하거나 place-2
컴파일 작업이 다음과 함께 실패한다는 것입니다.
기본 설정 변수 "ErrorActionPreference"또는 일반 매개 변수가 Stop으로 설정되어 실행중인 명령이 중지되었습니다. 'Get-NetAdapter'라는 용어는 cmdlet, 함수, 스크립트 파일 또는 작동 가능한 프로그램의 이름으로 인식되지 않습니다. 이름의 철자를 확인하거나 경로가 포함 된 경우 경로가 올바른지 확인하고 다시 시도하십시오.
Get-NetAdapter
풀 서버에서 실행 을 시도한다고 가정 하지만 오류 메시지를 잘못 해석 할 수 있습니다.
cmdlet 식의 결과를 대상 컴퓨터에 등록 $InterfaceAlias
하고 xDnsServerAddress
리소스에 대한 변수에 등록 하려면 어떻게해야합니까?
현재는 쿼리를 수행하여 작업 결과를 유지하고 다음 상태를 선언하는 데 사용할 수 없습니다 (답변 끝에있는 참고 사항 참조).
xNetworking에서 문서화 된 해결 방법 / 솔루션을 사용하여이 제한 사항을 해결할 수 있습니다. xNetworking 은 이름 Ethernet1
이없는 활성 이더넷 어댑터를 찾고 첫 번째 활성 이더넷 어댑터를 찾고 이름이 Ethernet1
. 그런 다음 리소스를 사용하여에 DSC 서버 주소를 설정합니다 Ethernet1
.
이것은 조 사용이며 이름과 매개 변수는 변경 될 수 있습니다. DSC 팀은이를위한 더 나은 방법을 조사하고 있습니다.
Configuration SetDns
{
param
(
[string[]]$NodeName = 'localhost'
)
Import-DSCResource -ModuleName xNetworking
Node $NodeName
{
script NetAdapterName
{
GetScript = {
Import-module xNetworking
$getResult = Get-xNetworkAdapterName -Name 'Ethernet1'
return @{
result = $getResult
}
}
TestScript = {
Import-module xNetworking
Test-xNetworkAdapterName -Name 'Ethernet1'
}
SetScript = {
Import-module xNetworking
Set-xNetworkAdapterName -Name 'Ethernet1' -IgnoreMultipleMatchingAdapters
}
}
xDnsServerAddress DnsServerAddress
{
Address = '10.0.0.4'
InterfaceAlias = 'Ethernet1'
AddressFamily = 'IPv4'
DependsOn = @('[Script]NetAdapterName')
}
}
}
메모:
댓글에 질문이 있습니다. 질문의 요약은 쿼리가 선언적 패러다임을 명령형 패러다임으로 바꾸는 지 여부입니다.
대답:
쿼리가 명령형 패러다임으로 바뀐다 고 생각하지 않지만 현재 쿼리를 수행하여 작업 결과를 유지하고 다음 상태를 선언하는 데 사용할 수는 없습니다.
이것은 현재 내가 원하는 문제에 대해 선언적인 것에서 조금 더 멀어지게 만듭니다. 제 개인적인 의견 은 우리가 가지고있는 것으로 작업하고 알려진 상태를 쿼리하고 설정하는 리소스를 작성해야한다는 것입니다. 그런 다음 나머지 구성을 통해 알려진 상태를 사용합니다 (용어에 따라 선언적 상대 형식).
DSC 팀에는 이 요청을 추적하는 데 사용하는 이와 유사한 UserVoice 제안 이 있습니다. 이것이 유용한 기능이라고 생각되면 찬성하십시오.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다