2017-12-10 16 views
0

저는 Azure ARM 템플릿에서 링크 된 템플릿을 사용하고 있습니다. 하위 템플릿의 기본값을 사용하려고하지만 여전히 상위 템플릿에서 매개 변수에 대한 참조를 유지하는 데 문제가 있습니다.Azure 트리거 링크 된 템플릿 defaultValue

parent.json

... 
parameters: { 
    foo: { 
    type: "string" 
    } 
}, 
resources: [{ 
    type: "Microsoft.Resources/deployments", 
    properties: { 
    templateLink: { 
     uri: "sub.json", 
     contentVersion: "1.0.0.0" 
    }, 
    parameters: { 
     bar: { 
     value: "[parameters('foo')]" 
     } 
    } 
    } 
}] 
... 

sub.json

... 
parameters: { 
    bar: { 
    type: "string", 
    allowedValues: ["larry", "moe", "curly"], 
    defaultValue: "curly" 
    } 
} 
... 

불행하게도, 부모 템플릿에 foo를위한 값을 전달하는 것은 The value of deployment parameter 'foo' is null 에러 것입니다. foo에 빈 문자열을 전달하면 The provided value '' for the template parameter 'bar' is not valid. The parameter value is not part of the allowed value(s): 'larry,moe,curly' 오류가 발생합니다.

나는 parent.json

... 
resources: [{ 
    type: "Microsoft.Resources/deployments" 
    properties: { 
    ... 
    parameters: { 
     bar: { 
     value: "[if(empty(parameters('foo')), json('null'), parameters('foo'))]" 
     } 
    } 
    } 
}] 
... 

에서 퍼팅 시도했지만 그것은 단지 같은 값이 null 줄 것이다. 값 aws::NoValue을 사용하여 AWS 중첩 스택에서이 작업을 수행 할 수 있지만 azure에서는 해당 항목을 찾을 수 없습니다. 아무도 시도 할 다른 것을 알 수 있습니까?

답변

0

아무 것도 전달하지 말고 매개 변수 이름을 지정하지 마십시오. 나는 그것을 시도하지 않았다

parameters: {} 

,하지만 당신은 같은 것을 사용하여 원하는 결과를 달성 할 수있을 것 : 그래서 전달

parameters: "[variables('passMe')]" 

와 변수 값에 대한 당신과 같이 사용할 수 있습니다

passMe: { 
    bar: { 
     value: "bla-bla-bla" 
    } 
} 

분명히 비행 중에 또는 적어도 부분적으로 이러한 변수를 구성해야합니다.

+0

기술적 즉 그들이해야 함을 변경하려면 내가 찾는거야이 유일한 문제는 당신이 DEFAULTVALUE를 사용하는 사용자를 강제하고 있다는이고 무엇 그래 매개 변수의 값을 전달하는 대신 템플리트를 편집 할 수 있습니다. – SamMade

+0

글쎄, 두 템플릿의 기본값을 '동기화'할 수 있으므로 아무 것도 전달되지 않으면 동일한 기본값을 템플릿에 전달하게됩니다. 또한 나는 대답을 편집 할 것이다. – 4c74356b41

+0

이것이 네거티브라는 것은 변수에서 런타임 상태를 사용할 수 없다는 것입니다. 따라서 다른 리소스의 런타임 상태를 사용하여 속성을 전달해야하는 경우 변수가 아니라 매개 변수에서 직접 선언해야합니다. – SamMade

0

앞으로 다른 사람들을 돕기 위해 @ 4c74356b41의 응답이 확대됩니다. 런타임에 연결된 템플릿의 매개 변수를 동적으로 생성 할 수있는 변수를 만듭니다. 여기

는 작업 예제입니다 :

... 
parameters: { 
    foo: { 
    type: "string" 
    } 
}, 
variables: { 
    emptyObject: {}, 
    subParameterBar: { 
    bar: { 
     value: "[parameters('foo')]" 
    } 
    }, 
    hasSubParameterBar: "[if(empty(parameters('foo')), variables('emptyObject'), variables('subParameterBar'))]", 
    subProperties: "unionvariables('HasSubParameterBar'), ...<any other parameter variables>)]" 
}, 
resources: [{ 
    type: "Microsoft.Resources/deployments", 
    name: "sub", 
    properties: { 
    templateLink: { 
     uri: "sub.json", 
     contentVersion: "1.0.0.0" 
    }, 
    parameters: "[variables('barProperties')]" 
    } 
}] 
...