2017-12-01 20 views
1

저는 입력 매개 변수를 패커 프로비저닝 스크립트에 전달하는 데 어려움을 겪고 있습니다. 나는 다양한 옵션을 시도했지만 기쁨은 없습니다.패커 프로비저닝 스크립트에서 인수를 전달하는 방법은 무엇입니까?

목표는 내 provision.sh가 패커 빌드 중에 보내는 입력 매개 변수를 받아 들여야합니다.

포장이 -var 역할을 구축 = ABC test.json

내가 그러나 나는 그것을 제공하는 스크립트를 통과 할 수없는 오전 JSON 파일에서 사용자 변수를 가져올 수 있어요. 입력 매개 변수를 기반으로 결정해야합니다.

나는

"provisioners": 
{ 
    "type": "shell", 
    "scripts": [ 
    "provision.sh {{user `role`}}" 
] 
} 

같은 시도하지만 포장 검증 자체는 해당 파일/디렉터리 오류 메시지와 함께 실패합니다.

누군가가 나를 도울 수 있다면 정말 도움이 될 것입니다.

미리 감사드립니다.

답변

1

environment_vars 옵션을 사용해야합니다 (Shell Provisioner - environment_vars 문서 참조).

예 :

"provisioners": [ 
    { 
    "type": "shell" 
    "environment_vars": [ 
     "HOSTNAME={{user `vm_name`}}", 
     "FOO=bar" 
    ], 
    "scripts": [ 
     "provision.sh" 
    ], 
    } 
] 
+0

리처드에게 감사드립니다. 나는 환경 변수를 이해한다고 생각한다. 이제 선언 된 몇 가지 환경 변수가 있습니다. 내 질문에 provision.sh 스크립트에서 그들을 사용하는 방법입니다? 일반적인 쉘 스크립트에서는 입력 매개 변수를 받기 위해 $ 1, $ 2를 사용합니다. $ 1 & $ 2를 인쇄 할 때 값이 설정되지 않습니다. – Thayz

+1

$ 1, $ 2 등은 _arguments_입니다. _ 환경 변수 _는 스크립트에서 이름과 함께 사용할 수 있습니다 (예 :'$ HOSTNAME' 및'$ FOO'). 나는 (ba) sh 스크립팅에 대한 소개를 읽기 시작할 것을 권장한다. 예를 들면 http://tldp.org/LDP/abs/html/ –

+0

나는 무엇을 의미 하는지를 알 수있다. 감사. – Thayz

1

스크립트가 이미 인수를 사용하도록 구성되어 있으면, scripts 배열이 아닌 inline으로 실행하면됩니다.

이렇게하려면 시스템에 스크립트가 이미 존재해야합니다. file 공급자가있는 시스템에 스크립트를 복사하여이 작업을 수행 할 수 있습니다.

"provisioners": [ 
    { 
     "type":  "file", 
     "source":  "scripts/provision.sh", 
     "destination": "/tmp/provision.sh" 
    }, 
    { 
     "type": "shell", 
     "inline": [ 
     "chmod u+x /tmp/provision.sh", 
     "/tmp/provision.sh {{user `vm_name`}}"] 
    } 
    ] 
+0

대단히 감사합니다. – Thayz

+0

언제든지! 그것이 도움이된다면 답을 받아 들여야합니다 @ Thhayz –

+0

TJ Biddle. @ Rickard-von-Essen의 해결책이 내 문제를 해결한다고 생각합니다. 그래서 나는 그의 대답을 받아 들였습니다. 그럼에도 불구하고 당신의 솔루션은 앞으로도 유용 할 것입니다. 정말 고마워요. – Thayz