본문 바로가기
인프라/앤서블(Ansible)

[ansible] disk mount, /etc/fstab 등록 playbook yml

by IT맥구리나스 2022. 7. 1.

젠킨스 빌드 실행 시 아래와 같이 구동하도록 했다.

1. 젠킨스에서 빌드 파라매터로 마운트 디스크와 마운트 디렉터리 경로를 받는다.

2. yml파일내 loop 매개변수를 쉘 스크립트로 삽입

3. ansible 플레이북을 수행하도록한다.

4. 수행 완료되면 yml파일 내 loop 매개변수를 제거한다.

 

아래 코드는 2번에서의 실행 쉘 스크립트이다.

#!/bin/bash


mount_list=/data/ansible/file/mount_list
job_cnt=`cat $mount_list | wc -l`

for ((var=1 ; var <= $job_cnt ; var++));do
  mount_disk=`cat $mount_list | head -n$var | tail -n1 | awk '{print $1}'`
  mount_dir=`cat $mount_list | head -n$var | tail -n1 | awk '{print $2}'`

   sed -i'' -r -e "/      loop:/a\        - { mount_disk: '$mount_disk', mount_dir: '$mount_dir' }" /data/ansible/linux_automount.yml
done

 

state 옵션

- 헷갈릴 수 있으니 주의하자

  • mounted : 디스크를 마운트하고 /etc/fstab에 디스크 마운트 정보 등록
  • absent: 디스크 마운트 해제하고/etc/fstab에서도 삭제함
  • present : /etc/fstab에 디스크 마운트 정보 등록 (마운트는 하지 않음)
  • unmounted : 디스크 마운트 해제하고 /etc/fstab에서도 삭제하지 않음(단순 마운트 해제)
---
- hosts: all
  become: yes
  vars:
    ansible_become_password: "비밀번호"
  tasks:
    - name: disk format
      filesystem:
        fstype: ext4
        dev: "{{ item.mount_disk }}"
      loop:
	    - { mount_disk: '/dev/sdb', mount_dir: '/data/test01' }
 	    - { mount_disk: '/dev/sdc', mount_dir: '/data/test02' } 
    - name: mkdir mount_dir
      shell:
        cmd: "mkdir -p /data/{{ item.mount_dir }}"
      loop:
	    - { mount_disk: '/dev/sdb', mount_dir: '/data/test01' }
 	    - { mount_disk: '/dev/sdc', mount_dir: '/data/test02' } 
 
 
    - name: mount disk & register /etc/fstab
      mount:
        path: "{{ item.mount_dir }}"
        src: "{{ item.mount_disk }}"
        fstype: ext4
        state: mounted
      loop:
	    - { mount_disk: '/dev/sdb', mount_dir: '/data/test01' }
 	    - { mount_disk: '/dev/sdc', mount_dir: '/data/test02' }
        
    - name: collect disk inform
      shell:
        cmd: df -h
      register: diskk
 
    - name: show disk
      debug:
        msg: "{{ diskk.stdout_lines }}"

 

반응형

댓글