ansible 템 플 릿, 조건 테스트, 순환 문 사용

4968 단어 ansibleshell각본
본 고 는 예 를 결합 하여 모듈, 조건 테스트 와 순환 문장의 사용 을 소개 할 것 이다.
2 템 플 릿
모듈 과 템 플 릿 의 차이 점, template 모듈 은 템 플 릿 파일 의 변 수 를 실제 값 으로 다시 생 성 한 후 파일 을 원 격 호스트 에 복사 합 니 다.
모듈: template
템 플 릿 기반 (접미사. j2 로 끝 나 는 파일) 방식 으로 원 격 호스트 에 파일 을 복사 하고 ansible 에서 수집 한 내장 변 수 를 호출 합 니 다. 변수의 끼 워 넣 기 코드 표 지 는 쌍 괄호 입 니 다.
    *src=

                *dest=

                owner=

                group=

                mode=

템 플 릿: templates
텍스트 파일, 스 크 립 트 포함 (템 플 릿 프로 그래 밍 언어 Jinja 2 로 작성)
   :

       :         ;

      :  ,   ;

      :[item1, item2, ...]

      :(item1, item2, ...)

      :{key1:value1, key2:value2, ...}

       :true/false   

    :

    +, -, *, /, //, %, **

    :

    ==, !=, >, >=, 

예 1:
redis 소프트웨어 를 설치 하고 redis 설정 파일 을 템 플 릿 으로 설정 합 니 다.
설정 템 플 릿 파일 을 수정 하여. j2 로 끝 냅 니 다.
vim/root/redis.conf.j2
maxmemory {{ ansible_memtotal_mb/2 }}mb
template 는 명령 행 에서 실행 할 수 없습니다. 명령 에서 - m 지정 모듈 을 template 로 실행 할 수 없습니다. 스 크 립 트 에 정의 하고 playbook 으로 스 크 립 트 를 실행 해 야 합 니 다.
vim/root/ansible/installvar.yml
  • hosts: websrvsremote_user: rootvars:
  • pkgname: redistasks:
  • name: install packageyum: name={{ pkgname }} state=latest
  • name: install redis conftemplate: src=/root/redis.conf.j2 dest=/etc/redis.conf owner=redis group=root mode=644


  • 실행 스 크 립 트 는 다음 과 같 습 니 다.
    ansible-playbook installvar.yml
    웹 rvs 그룹의 호스트 가 redis 를 설치 한 후 파일 설정 을 설정 한 maxmemory 는 ansible 입 니 다.memtotal_mb/2 의 값
    예 2:
    nginx 를 설치 하고 nginx 설정 파일 을 템 플 릿 vim/root/ansible/intnginx. yml 로 설정 합 니 다.
  • hosts: websrvsremote_user: roottasks:
  • name: install nginxyum: name=nginx state=present
  • name: install conf filetemplate: src=/root/nginx.conf.j2 dest=/etc/nginx/nginx.confnotify: restart nginxtags: instconf
  • name: start nginx serviceservice: name=nginx state=startedhandlers:
  • name: restart nginxservice: name=nginx state=restarted

  • 템 플 릿 프로필: nginx. conf. j2workerprocesses {{ ansible_processor_vcpus }};server_name {{ ansible_fqdn }};
    3 조건 부 테스트
    통 제 된 호스트 시스템 이 다 르 면 실행 되 는 문구 가 다 를 수 있 으 므 로 조건 부 판정 이 필요 합 니 다.
    when 구문: task 에서 사용 하 는 jinja 2 의 문법 형식
    예:
    centos 6 와 centos 7 에 nginx 를 설치 하여 호스트 시스템 버 전 을 판단 하고 서로 다른 설정 vim intnginx. yml 을 실현 합 니 다.
  • hosts: nginxremote_user: roottasks:
  • name: install nginx packageyum: name=nginx state=latesttags: instpkg
  • name: install conf file6template: src=/root/nginx.conf.c6.j2 dest=/etc/nginx/nginx.confwhen: ansible_distribution_major_version == "6"notify: restart nginx
  • name: install conf file7template: src=/root/nginx.conf.c7.j2 dest=/etc/nginx/nginx.confwhen: ansible_distribution_major_version == "7"notify: restart nginx
  • name: start nginx serviceservice: name=nginx enabled=true state=startedhandlers:
  • name: restart nginxservice: name=nginx state=restarted


  • 실행
    ansible-playbook instnginx.yml
    예:
    호스트 의 ip 에 따라 서로 다른 파일 을 해당 하 는 호스트 vim cpfile. yml 로 복사 합 니 다.
  • hosts: nginxremote_user: roottasks:
  • name: copy file6copy: src=/root/nginx.conf.c6.j2 dest=/tmp/when: ansible_default_ipv4['address'] == '172.18.50.63'
  • name: copy file7copy: src=/root/nginx.conf.c7.j2 dest=/tmp/when: ansible_default_ipv4['address'] == '172.18.50.75'


  • 집행 하 다.
    1
    ansible-playbook cpfile.yml
    4 순환
    반복 해서 수행 해 야 할 임무;
    1. 교체 항목 에 대한 참조, 고정 변 수 는 "item"입 니 다.
        2    task   with_items          ;

    목록 방법:
    문자열
    사전: 요 소 는 사전 일 수 있 습 니 다. 여러 파일 을 복사 할 때 copy 모듈 을 직접 사용 할 수 있 습 니 다.
    예:
    서비스 패 키 지 를 교체 하 는 방법 으로 설치 하고 사용 자 를 만 듭 니 다.
    vim iteration.yml
  • hosts: dbsrvsremote_user: rootvars:
  • jdk_version: 1.8.0tasks:
  • name: install {{ item }} packageyum: name={{ item.name }}-{{ item.version }} state=latestwith_items:
  • { name: 'nginx',version: '1.10.2' }
  • { name: 'tree',version: '1.5.3' }
  • name: copy nginx confcopy: src={{ item.file }} dest={{ item.conf }}with_items:
  • { file: '/root/nginx.conf.os6',conf: '/etc/nginx.conf' }
  • name: install {{ item }} packageyum: name={{ item }} state=latestwith_items:
  • java-{{ jdk_version }}-openjdk
  • tomcat
  • tomcat-webapps
  • tomcat-docs-webapp
  • tomcat-admin-webapps
  • name: add some groupsgroup: name={{ item }} state=presentwith_items:
  • ansigrp1
  • ansigrp2
  • name: add some usersuser: name={{ item.name }} group={{ item.group }} state=presentwith_items:
  • { name: 'ansiuser1', group: 'ansigrp1' }
  • { name: 'ansiuser2', group: 'ansigrp2' }

  • 좋은 웹페이지 즐겨찾기