Ansible 에서 Roles 사용
Roles 는 ansible 이 1.2 버 전에 서 도입 한 새로운 특성 으로 차원 적 이 고 구조 적 으로 플레이 북 을 구성 하 는 데 사용 되 며 roles 는 계층 적 구조 에 따라 변수 파일,tasks 와 handlers 에 자동 으로 설치 할 수 있 습 니 다.
기다리다roles 를 사용 하려 면 플레이 북 에서 include 명령 만 사용 하면 됩 니 다.쉽게 말 하면 roles 는 변수,파일,작업,템 플 릿 과 프로 세 서 를 각각 단독 디 렉 터 리 에 배치 하 는 것 입 니 다.
또한 편리 하 게 include 그들의 메커니즘 을 사용 할 수 있 습 니 다.캐릭터 는 보통 호스트 가 서 비 스 를 구축 하 는 장면 에 사용 되 지만 데 몬 을 구축 하 는 장면 에서 도 사용 할 수 있 습 니 다.
roles 만 드 는 절차
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
페이지에 한마디 쓰기helloworld! innerHTML 메서드 appendChild(),createTextNode() 메서드 쓰기 좀 더 복잡한 This is mycontent....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.