2017-04-05 1 views
0

현재 2.2 버전을 사용하여 AWS에서 스크립트 로그 아웃하고 syslog 서버를 배포합니다. 한가지 전제 조건은 우리가 S3에 로그 아웃 할 때까지 한 달 동안 로그를 보관할 영구 EBS 볼륨을 갖는 것입니다. 따라서 우리가 syslog를 분해하여 Anabilities를 통해 재배포해야하는 경우, 새로 배치 된 서버에 다시 연결하면 여전히 이전 로그가 남아있게됩니다. 그 부분은 괜찮아요, 제가 처리 했어요.이전 작업이 실패한 경우에만 두 작업 만 실행

내 모든 문제는 EBS 볼륨이 X, Y 또는 Z 이유로 존재하지 않는 경우 새 EBS 볼륨을 생성하고 첨부하며, (가지고있다), 파티션을 만들고 (가지고있다), 포맷을하고 (가지고있다) 마운트한다. 잘하면 다음 코드가 있음을 이해하는 데 도움이 될 것입니다 : 그 코드가 완벽하게 작동하고

- name: Create log partition 
    shell: /bin/echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/xvdb 


- name: Format log partition 
    filesystem: 
    fstype: ext4 
    dev: "/dev/xvdb1" 


- name: Mount log drive 
    mount: 
    name: /log 
    src: "/dev/xvdb1" 
    fstype: ext4 
    state: mounted 

,하지만이를 실행하고 기존 EBS 볼륨을 다시 연결하는 동안, 난 아직도 다시 분할 할 것을 깨달았다 내 기록 데이터를 삭제, 볼륨을 포맷하고 처음부터 시작하는 것은 매우 좋지 않습니다.

달성하기를 바라고있는 것은 데이터를 지우지 않도록 파티셔닝과 포맷팅 전에 일종의 검사입니다. 드라이브 장착을 시도하는 것이 가장 좋은 방법이라고 생각하고 성공하면 파티션 및 포맷을 건너 뜁니다. 그러나 드라이브가 마운트되지 않으면 파티션, 포맷 및 마운트를 수행하십시오.

저는 매우 신참입니다. 그래서 어떤 아이디어라도 열어 주시면 도움이 될 것입니다. 감사!

답변

1

는이 예 각본에 conditionalsblocks

봐 볼 수 있습니다 여기에

우리는/dev/xvdb1 파티션에 FS를 만들어보십시오. 그것이 없거나 다른 파일 시스템을 포함하고 있다면 (조심하십시오!) - 레지스터 "result"는 실패한 작업에 대한 정보를 포함합니다. 그 다음에는 이전 작업이 실패한 경우에만 실행될 작업으로 블록을 정의합니다.

- name: create new fs on device 
    filesystem: 
    fstype: ext4 
    dev: /dev/xvdb1 
    register: result 
    ignore_errors: true 

- block: 
    - name: Create log partition 
    shell: /bin/echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/xvdb 


    - name: Format log partition 
    filesystem: 
     fstype: ext4 
     dev: "/dev/xvdb1" 


    - name: Mount log drive 
    mount: 
     name: /log 
     src: "/dev/xvdb1" 
     fstype: ext4 
     state: mounted 
    when: result|failed 
당신은 result.stderr을 분석하여 다른 유효한 파일 시스템을 닦아 피하기 위해이를 조정할 수 있습니다,하지만 그건 또 다른 이야기

. 희망이 도움이됩니다! 당신은 파티션없이 원시 블록 장치를 사용하여 괜찮다면

1

는,이 코드 조각이 매우 나무 등입니다 다음에서 ext4 파일 시스템이 이미 장치에 존재하는 경우,이와

- name: Make filesystem 
    filesystem: 
    fstype: ext4 
    dev: /dev/xvdb 

- name: Mount log drive 
    mount: 
    name: /log 
    src: /dev/xvdb 
    fstype: ext4 
    state: mounted 
+0

, 그것을 다시 닦아 않습니다 데이터? 또는 본질적으로 "오, 이미 ext4입니다. 건너 뛰자"라고 말하고 있습니까? – Chiggins

+0

후자입니다. ext4가 있다면, Ansible은 아무것도하지 않고 그냥 'ok'라고 말합니다. –

관련 문제