AWX

YAML with AWX : Absolute Path for FILE COPY . is it a BUG?

거나미스 2019. 1. 2. 11:19
반응형
  1. Yaml을 이용하여 파일을 Node에 복사하는 작업 도중 발생한 이상 현상에 대한 내용
  2. 다양한 예제 파일이 존재하나 다음 소스를 가지고 테스트 
    • 위 소스를 바탕으로 ansible-playbook을 이용하여 command로 실행시 다음과 같은 결과 도출
    • #ansible-playbook -i hosts.inv notworking_filecopy.yml
    • 성공
    • AWX에 적용
    • 실패
    • -
  3. 원인 파악
    • 먼저 AWX의 로그를 살펴보면
    • "Could not find or access '/testdir/doc.tar' on the Ansible Controller." 라고 표현되어 있음
    • could not find? - 아래와 같이 파일 존재 함
    • could not access? - 아래와 같이 모든 권한이 부여 됨
    • ..... Thniking and Thniking .....
    • 파일의 권한과 존재는 이미 확인되었으며,
    • ansible-playbook 실행 시에도 정확하게 동작 됨
      • 접근 방법 1 (실패) - AWX_WEB의 계정 권한 ?
        • Docker의 Container에 실행되는 AWX_WEB이 root의 계정이 아니라 다른 계정으로 실행되고 있을수 있다는 생각에서 시작
        • 그러나, 위에서 언급한대로 권한은 744로.. 모든 사용자가 접근이 가능하므로 의미 없음으로 판단
        • -
      • 접근 방법 2 (실패) - AWX_WEB의 디렉토리 접근 문제 ?
        • 터미널에서 #ansible-playbook 명령어로는 정상실행 되나, AWX에서 안되면
        • Docker 실행 시 AWX_WEB의 도커 내의 폴더를 절대경로로 인식한다고 의심
        • 이를테면 테스트 PC내의 Docker내의 AWX_WEB의 경로는 
        • /var/lib/docker/overlay2/9a61d8e0b1f574bea31bd208edde4fac0edb8458a3fc4ef00decd5d7ef525fc4/merged/var/lib/awx/public/static로 설정되어 있음
        • /var/lib/docker/overlay2/9a61d8e0b1f574bea31bd208edde4fac0edb8458a3fc4ef00decd5d7ef525fc4/merged/var/lib/awx/public/static를 절대경로 root(/)로 설정하여 사용한다는 의심
        • 그러나 다시 생각해 보면, 배포시 마다 사용자가 매번 저 경로로 파일을 옮겨 작업한다는 것은 사실상 불가능
        • 시스템 어드민이 아니고서는 저 경로를 접근하는 것도 어렵고, Docker의 사상(?)과도 맞지 않음
        • 결정적으로
        • AWX에서 Playbook이 저장된 Yml파일 경로는 처음 설치시 설정한 /var/lib/awx/projects에서 읽어서 처리하게 되어 있음
        • 이 또한 의미 없음으로 판단
        • -
      • 접근 방법 3(성공) - Absolut path(절대경로)를 인식하지 못하는 문제?
        • AWX에서 Playbook을 선택하여 실행하는 경우 
        • 해당 yml파일을 읽어서 메모리에서 처리한다라고 생각하는게 잘못된 생각임
        • yml파일을 해당 위치에서 실행하는것으로 판단 - import나 기타 등등을 생각해보면 됨.
        • 배포 테스트 파일을 yml이 위치한 폴더로 이동
        • yml을 수정
        • Absolute path (절대 경로)를 Relative Path(상대 경로)로 변경
        • 터미널에서는 당연히 성공
        • AWX에서는
        • 성공
  4. 결론
    • Yaml파일에서 절대 경로를 인식하지 못함 (모든 명령어에서 확인한 부분은 아님)
    • 이는 copy나 shell:cp .. 혹은 Command 등 모든 명령어에서 동일하게 현상이 발생하는 문제
    • 절대 경로를 인식하지 못하는 버그 혹은 설치시 뭔가 설정을 잘못 했다는 결론에 이름
    • 절대 경로 인식 버그일 확률 90% 이상
    • playbook 사용시에는 반드시 상대 경로로 작업할 것을 권장