Ansible 에서 Roles 사용

Roles 의 소개
Roles 는 ansible 이 1.2 버 전에 서 도입 한 새로운 특성 으로 차원 적 이 고 구조 적 으로 플레이 북 을 구성 하 는 데 사용 되 며 roles 는 계층 적 구조 에 따라 변수 파일,tasks 와 handlers 에 자동 으로 설치 할 수 있 습 니 다.
기다리다roles 를 사용 하려 면 플레이 북 에서 include 명령 만 사용 하면 됩 니 다.쉽게 말 하면 roles 는 변수,파일,작업,템 플 릿 과 프로 세 서 를 각각 단독 디 렉 터 리 에 배치 하 는 것 입 니 다.
또한 편리 하 게 include 그들의 메커니즘 을 사용 할 수 있 습 니 다.캐릭터 는 보통 호스트 가 서 비 스 를 구축 하 는 장면 에 사용 되 지만 데 몬 을 구축 하 는 장면 에서 도 사용 할 수 있 습 니 다.
roles 만 드 는 절차
  • roles 이름 의 디 렉 터 리 만 들 기:
  • roles 디 렉 터 리 에서 각각 캐릭터 이름 을 가 진 디 렉 터 리 를 만 듭 니 다.예 를 들 어 웹 서버 등:
  • 각 캐릭터 이름 의 디 렉 터 리 에 files,handlers,meta,tasks,templates 와 vars 디 렉 터 리 를 각각 만 듭 니 다.사용 하지 않 는 디 렉 터 리 는 빈 디 렉 터 리 로 만 들 수도 있 고 만 들 지 않 아 도 됩 니 다.
  • 플레이 북 파일 에서 각 캐릭터 호출
  • roles 내 각 디 렉 터 리 에서 사용 가능 한 파일
  • tasks 디 렉 터 리:main.yml 이라는 파일 을 최소한 만 듭 니 다.이 캐릭터 의 작업 목록 을 정의 합 니 다.이 파일 은 사용 할 수 있 습 니 다.      include 는 이 디 렉 터 리 에 있 는 다른 tasks 파일 을 포함 합 니 다:
  • files 디 렉 터 리:copy 나 script 등 모듈 에서 호출 된 파일 저장:
  • templates 디 렉 터 리:templates 모듈 은 이 디 렉 터 리 에서 Jinjia 2 템 플 릿 파일 을 자동 으로 찾 습 니 다.
  • handlers 디 렉 터 리:이 디 렉 터 리 에는 main 이 포함 되 어야 합 니 다.
  • yml 파일:이 캐릭터 를 정의 하 는 데 사용 되 는 각 handler:handler 에서 include 에 포 함 된 다른 handler 파일 을 사용 하 는 것 도 이 디 렉 터 리 에 있어 야 합 니 다.
  • vars 디 렉 터 리:main.yml 파일 을 포함 하여 이 캐릭터 에 사용 할 변 수 를 정의 해 야 합 니 다
  • meta 디 렉 터 리:main.yml 파일 을 포함 하여 이 캐릭터 의 특수 설정 과 의존 관 계 를 정의 해 야 합 니 다.ansible 1.3 과 그 이후 버 전 만 지원 합 니 다
  • default 디 렉 터 리:현재 캐릭터 에 기본 변 수 를 정의 할 때 이 디 렉 터 리 를 사용 합 니 다.main.yml 파일
  • 을 포함 해 야 합 니 다.
     roles:
            (1)디 렉 터 리 이름과 캐릭터 명
            (2)디 렉 터 리 구 조 는 고정 형식 이 있 습 니 다.
            (3)files:정적 파일
            (4)templates:Jinjia 2 템 플 릿 파일
            (5)tasks:최소한 하나의 main.yml 파일 이 있 습 니 다.tasks 를 정의 합 니 다.
            (6)  hangdlers:최소한 하나의 main.yml 파일 이 있 습 니 다.각 handlers 를 정의 합 니 다.
            (7)vars:최소한 하나의 main.yml 파일 이 있 고 변 수 를 정의 합 니 다.
            (8)  meta:의존 관계 정의 등 정보
    Roles 사용 사례
    다음은 role 디 렉 터 리 구조 입 니 다.
    zengchengpeng@iZ2339ljvmkZ:/etc/ansible/roles/wf_jdk$ tree
    .
    ├── defaults
    │   └── main.yml
    ├── files
    │   └── rpm
    │       └── jdk-8u66-linux-x64.rpm
    ├── handlers
    ├── Readme
    └── tasks
        └── main.yml

    설명:
    위의 role 은 JDK 를 설치 하 는 데 사 용 됩 니 다.패 키 지 를 files 디 렉 터 리 에 설치 하고 defaults 디 렉 터 리 아래 의 main.yml 은 기본 변 수 를 정의 합 니 다.파일 내용 은 다음 과 같 습 니 다.
    zengchengpeng@iZ2339ljvmkZ:/etc/ansible/roles/wf_jdk$ cat defaults/main.yml 
    ---
    # stable or latest
    jdk_path: /etc/ansible/roles/wf_jdk

    이 파일 을 볼 수 있 습 니 다.jdk 를 정의 합 니 다.path 변수
    tasks 디 렉 터 리 의 main.yml 파일 내용:
    zengchengpeng@iZ2339ljvmkZ:/etc/ansible/roles/wf_jdk$ cat tasks/main.yml
    ---
    - name: create /srv/jdk directory
      file: path=/srv/jdk state=directory mode=0755
    - name: sync jdk rpm package
      synchronize: src={{ jdk_path }}/files/rpm/ dest=/srv/jdk/ delete=yes
    - name: install jdk
      yum: name={{ item }} state=present disable_gpg_check=yes
      with_items:
        - /srv/jdk/jdk-8u66-linux-x64.rpm
    - name: Edit profile JDK conf
      blockinfile:
        dest: /etc/profile
        backup: yes
        marker: "# {mark} jdk config"
        content: |
          JAVA_HOME=/usr/java/jdk1.8.0_66
          CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
          PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
          export JAVA_HOME CLASSPATH PATH

    위의 tasks 의 main.yml 파일 에서 JDK 를 설치 하 는 기본 절 차 를 볼 수 있 습 니 다.
    1.원 격 서버 에/srv/jdk 디 렉 터 리 만 들 기
    2.로 컬 JDK RPM 패 키 지 를 원 격 호스트 의/srv/jdk 디 렉 터 리 에 동기 화 합 니 다.원 격 디 렉 터 리 에 이 파일 이 존재 하면 먼저 삭제 하고 동기 화 합 니 다.
    3.yum 모듈 로 이 RPM 패 키 지 를 설치 합 니 다.
    4.원 격 호스트 의/etc/profile 파일 을 편집 하고 파일 에 다음 설정 을 추가 합 니 다.
    JAVA_HOME=/usr/java/jdk1.8.0_66
    CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
    PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
    export JAVA_HOME CLASSPATH PATH

    역할 을 어떻게 호출 합 니까?
    Roles 가 작성 되면 플레이 북 파일 을 만 들 고 ansible-playbook 명령 으로 이 플레이 북 을 호출 해 야 합 니 다.모든 플레이 북 은 한 디 렉 터 리 에 놓 을 수 있 습 니 다.이 디 렉 터 리 이름 은 스스로 정의 하기 시 작 했 습 니 다.예 를 들 어 생산 환경의 플레이 북 디 렉 터 리 이름 은 워 크 플 로 우 입 니 다.다음은 모든 플레이 북.
    zengchengpeng@iZ2339ljvmkZ:/etc/ansible/workflow$ ls
    update_fm.yml              wf_init_iptables.yml      wf_iptables_disabled_port.yml  wf_start_app.yml
    wf_add_user.yml            wf_init_kernel.yml        wf_iptables_open_port.yml      wf_stop_app.yml
    wf_app_check.yml           wf_init_vim.yml           wf_link_latest_version.yml     wf_web_cdn.yml
    wf_check_host.yml          wf_init.yml               wf_logstash.yml                wf_web_check.yml
    wf_code_upload.yml         wf_init_zabbix_agent.yml  wf_pgdb.yml                    wf_web_code_upload.yml
    wf_del_user.yml            wf_install_jdk.yml        wf_redis.yml                   wf_zabbix_add_template.yml
    wf_init_command_audit.yml  wf_install_nginx.yml      wf_reload_nginx.yml            wf_zabbix_create_host.yml
    wf_init_common.yml         wf_install_python27.yml   wf_slb_in.yml                  wf_zabbix_maintenance.yml
    wf_init_deploy_user.yml    wf_install_tomcat.yml     wf_slb_out.yml

    플레이 북 의 내용 은 다음 과 같 습 니 다.
    zengchengpeng@iZ2339ljvmkZ:/etc/ansible/workflow$ cat wf_install_jdk.yml
    ---
      - hosts: '{{ HOST if HOST|length()>0 }}'
        remote_user: root
        roles:
          - yaegashi.blockinfile
          - wf_jdk

    메모:위 에 JDK 가 설 치 된 플레이 북 에 하나 더 있 습 니 다.
    yaegashi.blockinfile

    이것 은 생산 환경의 ansible 이 1.9 버 전 으로 blockinfile 모듈 을 지원 하지 않 기 때 문 입 니 다.그래서 단독으로 roles 를 써 서 이 문 제 를 해결 했다.
    요약:
    위 에 JDK 를 설치 한 roles 는 비교적 간단 한 roles 로 비교적 자주 사용 하 는 모듈 을 사용 합 니 다.잘 보이 지 않 으 면 ansible 관련 모듈 의 사용 을 숙지 해 야 합 니 다.
    Ansible 공식 문서 에는 모든 모듈 의 소개 가 있 습 니 다.다음은 홈 페이지 링크 입 니 다.
    http://docs.ansible.com/ansible/modules_by_category.html

    좋은 웹페이지 즐겨찾기