2013-10-15 4 views
6

내가 나중에 사용하기 위해 값 스크립트를 실행하고 저장하는 local_action 실행을위한 작업 파일의 디렉토리 방법 : 나는에 내 각본 이동이 큰 일을상대 경로 내 플레이 북

- local_action: command python release.py 
    register: release_url 

을 때까지 하위 디렉토리. 그것은 당신의 현재 작업 디렉토리에서 명령이 실행이 (당신이에서 ansible를 실행하는 것이), 그래서 경로는 다음과 같이해야한다고 밝혀 :

- local_action: command python roles/ghost/release.py 

나는 아래와 같은 디렉토리 구조가 있습니다

  • 을 group_vars/
  • 역할/
    • 유령/
      • 작업/
        • main.yml
      • 템플릿/
      • release.py
  • site.yml

역할이/유령 폴더 이름을 변경할 수 있습니다 그러나 (하드 코딩하면 다른 디렉토리에서 플레이 북을 실행할 수 없습니다).

local_action 명령을 실행하는 tasks/main.yml의 디렉토리 경로를 어떻게 얻을 수 있습니까? 상대 경로를 지정할 수 있습니까?

답변

2

당신은 역할/유령/파일에 release.py 스크립트를 넣어/다음 local_action

- name: local scrpt 
    local_action: script release.py 

와 함께 사용 그리고 그런 식으로 당신은

이이 기준을 만드는 디렉토리 경로를 얻을 필요하지 않을 수도 있습니다 디렉토리 레이아웃 부분에서 그렇게하는 것 http://www.ansibleworks.com/docs/playbooks_best_practices.html

0

나는이 질문을보기 전에 pull request을 제출했지만, 여기에 그 요지가있다.

- name: copy ghost release script to tmp 
    local_action: copy src=release.py dest=/tmp/release.py 
    sudo: no 
  • : 우리는 스크립트가 될 것이다 경로를 알 수 없기 때문에

      는/tmp로 복사, 역할
    1. 내에서 '파일'디렉토리에 스크립트를 이동

    2. 그런 다음 우리는

      - name: get ghost release version 
          local_action: command python /tmp/release.py 
          register: ghost_release 
          sudo: no 
      

    우리는을 선택 스크립트를 실행할 수 있습니다 외부 플레이 북이 전체적으로 on으로 설정하면이됩니다. 이 작업을 수행하는 데 루트가 필요하지 않으며 암호를 요청해야하는 경우 실행을 중단 할 수 있습니다.

    는 또한 우리가 스크립트를 실행 한 후에 다음 추가 단계에서 파일을 제거 사실을 이용하여 어떻게 든 파일 이름을 무작위 화에 의해, 2 단계를 할 수있는 더 좋은 방법이있을 수 있습니다. 이렇게하면 잠재적으로 이미 /tmp/release.py이라는 파일이있을 수있는 위험을 최소화 할 수 있습니다.