2016-09-16 8 views
1

우리의 응용 프로그램은 /etc/services에 많은 정의를 만듭니다. 우리는 이러한 정의와 핸디 services 파일을 유지 있도록 우리가 할 수있는이 같은 /etc/services에 단지 파이프를 :퍼시스턴시를 사용하여 파일에 많은 양의 텍스트를 추가하려면 어떻게해야합니까?

cp /etc/services /etc/services.stock 
cat /path/to/build/services >> /etc/services 

그것은 작동하지만 함께 추가 얻을 수있는 서비스 파일의 원인이됩니다 반복적으로이 명령을 실행 즉 멱등 아니에요 정보를 다시.

나는 우리의 무책임한 플레이 북을 통해이 작업을 수행하는 방법을 찾고 있습니다. 나는 이런 식으로 할 수있다 :

- command: "cat /path/to/build/services >> /etc/services" 

그러나 내가 연극을 할 때마다 나는 뛰고 싶지 않다.

또 다른 옵션은 다음과 같이 할 수 있습니다 :

- name: add services 
    lineinfile: 
    state: present 
    insertafter: EOF 
    dest: /etc/services 
    line: "{{ item }}" 
    with_items: 
    - line 1 
    - line 2 
    - line 3 
    - line 4 
    - ... 

을하지만 개별적으로 각 라인을 않기 때문에, 정말 느립니다.

더 좋은 방법이 있습니까? 템플리트는 서비스 파일을 완전히 덮어 쓰기 때문에 도움이되지 않습니다. 이는 약간 무례하게 보입니다.

+1

가 아닌 경우 ansible 사용자,하지만 당신은 같은 것을 할 수 있습니다 : 1) 경우에만, 파일'은/etc/services.stock'이 존재하지 않는 다음'은 cp/etc/services에/etc/services.stock'. 2)'cat /etc/services.stock/path/to/build/ services>/etc/services' 명령을 사용하십시오. – msandiford

답변

2

blockinfile은 지정된 줄 집합이 파일에 존재하는지 확인하기위한 기본 멱등원 모듈입니다.

예 :

- name: add services 
    blockinfile: 
    state: present 
    insertafter: EOF 
    dest: /etc/services 
    marker: "<!-- add services ANSIBLE MANAGED BLOCK -->" 
    content: | 
     line 1 
     line 2 
     line 3 
관련 문제