원격 시스템에서 Bash 스크립트를 실행하기 위해 Puppet Bolt를 사용하려고 할 때, Bolt 명령에 전달된 인수를 받지 못하기 때문에 스크립트가 제대로 작동하지 않는 상황에 항상 직면하게 됩니다. 다음과 같은 작업으로 스크립트를 실행하는 경우:
bolt task run --targets localhost madeUpModule::scriptTakeInUserAndGroup user='testuser' group='testgroup'
No user or group defined
스크립트에 대해 정의한 조건을 기반으로 합니다.
이 모든 작업은 스크립트를 로컬에서 테스트하고 매개변수를 처리할 수 있는지 확인한 후에 수행됩니다.
스크립트/작업이 매개변수를 수신하지 못하는 이유는 무엇입니까?
답변1
참고: 이것은 원래 질문의 일부로 게시되었으므로 CW 답변으로 게시하고 있습니다..
좋아요, 그래서 게시하기 전에 이 문제에 대한 해결책을 찾았습니다. 문서화되어 있음에도 불구하고 이것 때문에 시간을 낭비했기 때문에 포스팅을 작성하고 싶었습니다.
원격 컴퓨터에서 스크립트를 실행하려고 하는데 원래 stdin을 통해 $1, $2 등으로 bask 스크립트에 매개 변수를 전달할 수 있다고 생각했습니다. 이러한 변수는 Bash에서 스크립트를 시작한 후 다음과 같이 입력된 값을 받습니다../scriptTakeInUserAndGroup 사용자 그룹(여기서 echo $1 이 인쇄됩니다사용자첫 번째 인수를 통과했기 때문입니다).
꼭두각시 볼트에서는 작동하지 않습니다. Unix의 경우 Puppet Bolt에는 input_method에 대한 두 가지 옵션이 있습니다.표준 입력 및 환경. 지금까지 stdin 옵션을 사용하지 않았지만 환경 변수가 변수 이름과 혼동되는 것을 발견하면 작동하는 것으로 나타났습니다.
bolt task run --targets localhost madeUpModule::scriptTakeInUserAndGroup user='testuser' group='testgroup'
이러한 변수는 JSON 메타데이터에서 호출하는 이름으로 전달되지 않습니다.
스크립트를 입력하면 printenv | grep user
환경에 다음이 표시됩니다 PT_user=testuser
.
오히려 귀찮게도 PT_
변수 이름 앞에 추가합니다. $user로 실행하는 bash 스크립트가 충돌합니다.
스크립트를 수정하여 사용하면 $PT_user
제대로 작동합니다 .