Puppet Bolt가 작업으로 실행되는 Bash 스크립트에 인수를 전달하지 않습니다.

Puppet Bolt가 작업으로 실행되는 Bash 스크립트에 인수를 전달하지 않습니다.

원격 시스템에서 Bash 스크립트를 실행하기 위해 Puppet Bolt를 사용하려고 할 때, Bolt 명령에 전달된 인수를 받지 못하기 때문에 스크립트가 제대로 작동하지 않는 상황에 항상 직면하게 됩니다. 다음과 같은 작업으로 스크립트를 실행하는 경우:

bolt task run --targets localhost madeUpModule::scriptTakeInUserAndGroup user='testuser' group='testgroup'

No user or group defined스크립트에 대해 정의한 조건을 기반으로 합니다.

이 모든 작업은 스크립트를 로컬에서 테스트하고 매개변수를 처리할 수 있는지 확인한 후에 수행됩니다.

스크립트/작업이 매개변수를 수신하지 못하는 이유는 무엇입니까?


답변1

참고: 이것은 원래 질문의 일부로 게시되었으므로 CW 답변으로 게시하고 있습니다..


좋아요, 그래서 게시하기 전에 이 문제에 대한 해결책을 찾았습니다. 문서화되어 있음에도 불구하고 이것 때문에 시간을 낭비했기 때문에 포스팅을 작성하고 싶었습니다.

스크립트가 설치되지 않았거나 코드 관리 도구를 사용하여 해당 버전을 관리할 수 있도록 응집력 있는 작업으로 전환하려면 스크립트에 코드를 추가하여 환경 변수(접두사 PT_가 붙음)를 확인한 다음 해당 인수를 읽으십시오. .

원격 컴퓨터에서 스크립트를 실행하려고 하는데 원래 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제대로 작동합니다 .

관련 정보