Nova CLI는 stderr 및 stdout에서 0 출력을 생성합니다.

Nova CLI는 stderr 및 stdout에서 0 출력을 생성합니다.

다음 문제. 이 쉘 스크립트를 얻었습니다.

#!/bin/sh

# Provide log for debugging
if [ ! -f /home/some-user/port-control.log ]; then
  touch /home/some-user/port-control.log
  chown some-user /home/some-user/port-control.log
fi

# Load environment variables for authentication
source /home/some-user/.openstack/nova-openrc.sh

# Open ports at login
if [ "$PAM_TYPE" = "open_session" ] && [ "$PAM_USER" = "some-user" ]; then
  echo "Opening ports ... Nova response:" >> /home/some-user/port-control.log
  nova --debug add-secgroup some-server some-secgroup &>> /home/some-user/port-control.log
fi

# Close ports at logout
if [ "$PAM_TYPE" = "close_session" ] && [ "$PAM_USER" = "some-user" ]; then
  echo "Closing ports ... Nova response:" >> /home/some-user/port-control.log
  nova --debug remove-secgroup some-server some-secgroup &>> /home/some-user/port-control.log
fi

나는 이미 구성된 secgroup을 내 서버에 동적으로 추가하여 ssh를 통해 연결/연결 해제할 때 내 방화벽의 일부 포트를 열거나 닫는 데 이 스크립트를 사용하고 있습니다. 적어도 그게 아이디어입니다. 불행하게도 nova 명령은 전혀 실행되지 않는 것 같습니다. 로그에 아무 것도 표시되지 않습니다. 이제 표준 오류가 없기 때문에 디버깅이 다소 어렵습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

nova 로그인 자격 증명을 소싱하고 스크립트 외부에서 nova 명령을 수동으로 실행하면 모든 것이 완벽하게 작동합니다.

그런데: 도움이 된다면: Ubuntu:14.04 이미지를 기반으로 하는 도커 컨테이너 내에서 이 모든 것을 실행하고 있습니다. 네, 알아요:도커 컨테이너 내에서 sshd를 사용하고 있다면 잘못한 것입니다.이 경우에는 sshd에 이유가 있습니다.)

답변1

어찌보면 간단하지만 마침내 답을 찾았습니다. 이것이 내가 한 일입니다:

의 도움으로StackOverflow의 다른 질문에 대한 답변스크립트의 전체 출력을 파일로 리디렉션했는데 인증을 위한 환경 변수가 소싱되지 않았다는 것을 깨달았습니다. 이유: 쉘이 명령을 몰랐기 때문입니다 source. 왜? 왜냐하면 나는 내가 사용하고 있는 마녀 껍질을 확인하지 않을 만큼 멍청했기 때문이다.

문제 #/bin/sh는 로 변경하여 간단하게 해결되었습니다 #!/bin/bash. 짜잔!

관련 정보