사용 ansible 플레이 북, 판단 및 역할주기

ansible 각본 조건 결정주기 및 계층 적 관리 역할의 제목 III

1. ansible 플레이 북, 루프 구문 분석 :

달성 구문을 결정할 때 재활용 with_items 다음 특정 실시 예를 위해 사용될 수있다 Ansible 각본 :

---
vim httpd_v4.yaml
- hosts: websrvs
  remote_user: '{{uservar}}'
  vars:                  #定义变量,变量的值为列表
    software:
      - python-setuptools
      - httpd
      - mariadb
  tasks:
    - name: run this command ans ignore the result
      shell: hostname
      ignore_errors: True  #忽略错误,可以继续执行
      register: result     #将上面shell的结果赋值给result变量
    - debug: msg='{{result.stdout}}'

    - name: install mysql and httpd
      yum: name={{ software }} state=installed #通过调用循环的变量内容来实现批量安装软件
      become: yes
      with_items:   #循环调用software里面的变量
       - '{{software}}'
      tags: init

    - name: guarantee httpd2 is running
      service: name=httpd state=started
      become: yes

    - name: transfer httpd configfile to remote
      template: src=./httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf  #使用模板,传送jinja2文件,也可以用copy模块传送普通文件
      notify:
        - restart httpd
      when: result.stdout == 'rainbondnode01'  #通过判断主机名是'rainbondnode01才执行拷贝模板文件

  handlers:  #触发器
  - name: restart httpd
    service: name=httpd state=restarted
    become: yes

이 예에서 우리는 몇 가지 기술적 인 포인트를 사용 :

  1. 경우 조건 구문이고;
  2. 원형 목록 with_items이고;
  3. 그것은 변수에 할당 된 태스크의 실행의 결과를 등록한다하는 단계;
  4. sudo는 의미입니다 될;
  5. 명령 변속을 수행시 = -e uservar gytest --check httpd_v4.yaml, -e는 나타냄이 각본 ansible-각본을 수행하는데 사용될 수있다;

역할 계층 구조 관리 2. ansible 각본 :

1. 어떤 역할은 현장에서 사용됩니까?

  우리는 이제 세 개의 호스트를 관리하는 경우, 첫 번째가, 두 번째는 구성 할 아파치 PHP 서버, 세 번째로 구성 할 수는 MySQL 서버를 구성 할 수 있습니다. 우리는 어떻게 플레이 북을 정의합니까?
  첫번째는 아파치를 구축하는 제 1 호스트 컴퓨터에 재생을 사용 번째 플레이 PHP의 구축에 사용 된 두 번째 호스트를 사용하여 세 번째 호스트의 제 플레이는 건물의 MySQL 사용 . 플레이 북에서 연극의 정의는, 미래가 전화를 차단에 도움이되지 않습니다, 너무 많은 문제를 반복해서 전송에 도움이되지 않습니다. 예를 들어, 나중에 믹스에 호스트, 호스트 모두 네 번째 아파치 서버뿐만 아니라 PHP 서버를 추가, 우리는 설치 아파치와 PHP 위에 기록 된 네 번째 경기를 쓸 수 있습니다. 이러한 반복 된 코드를 플레이 북.
  코드 중복을 피하기 위해, 역할은 코드 중복 호출 할 때 달성 할 수있다. websrvs라는 역할 phpappsrvs 불리는 제 역할 제 역할 dbsrvs라고 정의한다. 그래서 다음과 같이 전화를 호출 할 때 :

hosts: host1
role:
- websrvs

hosts: host2
role:
- phpappsrvs

hosts: host3
role:
- dbsrvs

hosts: host4
role:
- websrvs
- phpappsrvs

이러한 코드는 재사용 할 수 있으며, 각 역할은 독립적으로 통화를 반복 할 수 있습니다. 다음 예제를 사용하는 방법을 보여줍니다.

2. 램프 + 워드 프레스 포럼을 설치하는 역할을합니다 :

  역할이 특정 디렉토리 구조를 필요로 다음과 같이 디렉토리 구조 내 실험 램프는 다음과 같습니다

[root@rainbondmanager gytest]# tree
.
├── group_vars
│   └── websrvs
├── hosts
├── roles
│   ├── mysql
│   │   ├── files
│   │   │   └── mysql_init.sh
│   │   ├── handlers
│   │   │   └── main.yaml
│   │   ├── tasks
│   │   │   ├── configure.yml
│   │   │   └── main.yaml
│   │   ├── templates
│   │   │   └── my.cnf
│   │   └── vars
│   │       └── main.yaml
│   ├── php
│   │   ├── files
│   │   ├── handlers
│   │   ├── meta
│   │   ├── tasks
│   │   │   └── main.yaml
│   │   ├── templates
│   │   └── vars
│   │       └── main.yaml
│   └── webserver
│       ├── files
│       │   └── wordpress.tar.gz
│       ├── handlers
│       │   └── main.yaml
│       ├── meta
│       │   └── main.yaml
│       ├── tasks
│       │   └── main.yaml
│       └── templates
│           └── httpd.conf.j2
└── site.yaml

첫 번째 단계 Site.yml 적어도 하나 개의 파일을, 파일 항목이 작전을 수행, 역할은 하나 이상의 디렉토리가 있습니다. 역할 디렉토리는, 예를 들어, 나는 다음 세 개의 디렉토리를 구분, 아파치 PHP는 MySQL의 세 가지 소프트웨어를 설치할 디렉토리 생성 분류 필요가있다 각 디렉토리의 하위 디렉토리가 고정되어, 일반적으로 파일, 처리기 작업으로 나눌 수 있습니다, 템플릿, 바르, 메타. 파일 디렉토리 템플릿 템플릿 파일이며, 작업은 작업 파일입니다, 핸들러가 트리거 YAML 문서를 구성, 파일은 일반적으로 파일 복사 모듈의 로컬 경로에 의해 호출 넣어, 일반 상점 형식 .j2 파일, 바르 변수 정의 파일, 메타 따라 정의 파일입니다;

다음으로, 모든 구성 파일의 내용을 나열하고 간단한 설명을 할 것입니다 :

[root@rainbondmanager gytest]# cat site.yaml
---
- hosts: websrvs
  remote_user: root

  roles:
    - webserver
- hosts: 10.83.32.130
  remote_user: root

  roles:
    - php

사이트가 항목 문서이며, 사용자에 의해 수행 된 호스트, 원격 실행, 역할은 객체를 호출했다. 10.83.32.130 호스트 어플리케이션이 설치된 PHP,이 구성은 호스트 그룹은 상기 어플리케이션 설치 아파치 websrvs를 나타내고;

[root@rainbondmanager gytest]# cat hosts
[websrvs]
10.83.32.130
10.83.32.131

홈 디렉토리는 또한 호스트 파일을 정의에서와 같은 또한 변수를 정의 할 수 있습니다 호스트 파일에 구성된 호스트의 개별 목록의 사용을 지정하는 방법을 호스팅 -i ansible-플레이 북을 사용하여

[websrvs]
10.83.32.130 http_port=80
10.83.32.131 http_port=8080

개인 키와 방법이없는 경우 호스트가 내부 파일에, 사용자는 등의 포트를 SSH, SSH 암호, SSH를 지정할 수 있습니다

[websrvs]
10.83.32.130 ansible_ssh_user=gytest ansible_ssh_pass=123456
10.83.32.131 ansible_ssh_user=gytest ansible_ssh_pass=123456

홈 디렉토리는 전체 그룹에 대한 적용 변수 값, 당신은 그룹을 호스트하는 데 필요한 파일 이름은 호스트 그룹에 적용 할 수라는 이름의 파일에 그룹 이름이 변수의 설정 디렉토리가

[root@rainbondmanager gytest]# cat group_vars/websrvs
http_port: 8080
[root@rainbondmanager gytest]#

의 설치 내용의 아파치 서버 역할을 분석하자

# 第一个是tasks文件内容,里面的copy文件路径直接写相对路径,就是表明file下面的内容,template模板文件也是同理,使用相对路径
[root@rainbondmanager gytest]# cat roles/webserver/tasks/main.yaml
---
- name: installed httpd
  yum:  name=httpd state=present
  tags: install
- name: keep httpd is running
  service: name=httpd state=started enabled=true
  tags: install
- name: insert iptables rules
  shell: iptables -I INPUT -p tcp --dport {{http_port}} -j ACCEPT
- name: transfer index html
  copy: src=wordpress.tar.gz dest=/var/www/html/wordpress.tar.gz
  tags: install
- name: unzip wordpress
  unarchive: src=/var/www/html/wordpress.tar.gz dest=/var/www/html/ copy=no
  ignore_errors: True
  tags: install
- name: mv wordpress
  shell: mv /var/www/html/wordpress/* /var/www/html/
- name: wait for httpd to start
  wait_for: port=8080
  tags: install
- name: transfer httpd configure file
  template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
  tags: conf
  notify:
    - restart httpd

cat roles/webserver/handlers/main.yaml
- name: restart httpd
  service: name=httpd state=restarted
# tasks任务里面调用的notify通知,默认就是handlers目录下面的文件内容;

cat roles/webserver/templates/httpd.conf.j2 |grep "{{"
Listen {{http_port}}
ServerAdmin {{ansible_fqdn}}

# 模板文件里面调用了facts变量和自定义变量

cat roles/webserver/meta/main.yaml
dependencies:
  - {role: mysql, echo_wars: hello_mysql}
# meta目录下面定义了依赖关系,也就是安装httpd的时候,先要确定mysql运行

ls roles/webserver/files/wordpress.tar.gz
roles/webserver/files/wordpress.tar.gz
# file目录是wordpress的源码包,通过copy模块拷贝到远程主机,并通过解压模块解压

그럼 우리가 설치 한 파일 MySQL 데이터베이스 서버 역할의 내용을 보면 :

[root@rainbondmanager gytest]# cat roles/mysql/tasks/main.yaml
---
- name: install mariadb databases
  yum:  name={{software}} state=present
  with_items:
    - '{{software}}'
  tags: install
- name: keep mariadb is running
  service: name=mariadb state=started enabled=true
  tags: install
- name: insert iptables rules
  shell: iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
- name: echo_vars
  shell: echo '{{echo_vars}}'
  register: result
  tags: install
- name: excute mysql init scrpts
  script: /data/playbooks/gytest/roles/mysql/files/mysql_init.sh
- include: configure.yml
# tasks定义了安装mariadb服务器,启动服务,设置防火墙,执行数据库初始脚本等;
[root@rainbondmanager gytest]# cat roles/mysql/tasks/configure.yml
---
- name: transfer mysql configure file
  template: src=my.cnf dest=/etc/my.cnf
  notify:
    - restart mysql
  tags: configure
[root@rainbondmanager gytest]#
# main.yml包含了这个configure.yml,拷贝mysql配置文件到目标机器
[root@rainbondmanager gytest]# cat roles/mysql/handlers/main.yaml
---
- name: restart mysql
  service: name=mysql state=restarted
[root@rainbondmanager gytest]#
# 触发器的配置,配置文件更改之后重启mysql
[root@rainbondmanager gytest]# cat roles/mysql/vars/main.yaml
---
software:
  - mariadb
  - mariadb-server
echo_vars:
  - hello_mysql
mysql_port:
  - '3306'
[root@rainbondmanager gytest]#
# 变量文件定义,定义了安装mysql的软件包和其他变量

[root@rainbondmanager gytest]# cat roles/mysql/files/mysql_init.sh
#!/bin/bash
#

mysql -uroot -pwordpress2018 -e "update mysql.user set password=password('wordpress2019') where user='root' and host='localhost';"
mysql -uroot -pwordpress2018 -e "grant all privileges ON *.* TO root@'%';"
mysql -uroot -pwordpress2019 -e "flush privileges;"
mysql -uroot -pwordpress2019-e "create database wordpress"
[root@rainbondmanager gytest]#
# mysql初始化脚本,更改root密码,创建wordpress数据库,并给root账户赋权;
[root@rainbondmanager gytest]# cat roles/mysql/templates/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

# mysql的配置文件内容

마지막으로, 우리는 함께 PHP 설치보고

cat roles/php/tasks/main.yaml
---
- name: installed php-fpm
  yum:  name={{ software }} state=present
  tags: install

# 定义安装php的任务
  [root@rainbondmanager gytest]# cat roles/php/vars/main.yaml
  ---
  software:
    - php
    - php-mysql
    - php-gd
    - php-imap
    - php-ldap
    - php-odbc
    - php-pear
    - php-xml
    - php-xmlrpc
# 定义安装php的软件包

사용 ansible 플레이 북, 판단 및 역할주기
여기에 쓸 수있는 오늘의 블로그 게시물, 여기에 쓸 수 ansible 시리즈의 주제는 ansible 플레이 북의 더 많은 예제는 GitHub의 주소 https://github.com/ansible/ansible-examples을 참조 할 수 있습니다

더 자세한 사항은 보웬 복원 기술, 인터넷 교통의 새로운 동향을 공유하기 위해 내 개인 마이크로 채널 대중 번호 "클라우드 시대의 IT 운영", 대중 번호에주의하십시오, 공유 할 수있는 IT 운영 및 유지 보수 산업, 컨설팅, 운영 및 기술 문서의 유지 보수를 포함하여. 개발 운영 등 레디 스, MQ 등; 쉘과 운영 및 유지 보수 등의 파이썬 프로그래밍 언어로 젠킨스, zabbix 모니터링는 Kubernetes, 이엘 케이, 미들웨어의 다양한 사용하여, 초점, 내가 십 년에 걸쳐 IT 운영 및 유지 보수에 관한 업무에 종사했다. 리눅스 / 유닉스 시스템 운영 및 유지 보수 작업을 2008 년 풀 타임 때문에, 운영 및 유지 보수 관련 기술에 대한 이해의 어느 정도가있다. 이 숫자는 모든 공공 게시물은 내 실제 업무 경험을 요약, 기본적으로 원래 블로그 게시물입니다. 내가 당신과 함께 공유 할 수있는 I 축적 된 경험, 기술 공유를 경험하는 매우 기쁘게 생각합니다! 그리고 우리는 성장하고 운영 및 IT 경력 경로의 유지 보수에서 함께 진행하도록하겠습니다;사용 ansible 플레이 북, 판단 및 역할주기

추천

출처blog.51cto.com/zgui2000/2425425