Ansible自动化运维 (PlayBook 详解 示例)

文章目录

    • 1. ansible的工作流程
    • 2. PlayBook介绍
    • 3. Ymal语言
    • 4. Playbook小示例
      • 4.1 httpd firewalld服务开启及 配置
      • 4.2 查询主机信息
      • 4.3 对PlayBook进行加密
      • 4.4 配置haproxy
      • 4.5 配置 keepalived+haproxy
      • 4.6 不同的变量设置方法
      • 4.7 例子整合

1. ansible的工作流程

  • 使用者使用ansible或ansible-playbook(会额外读取playbook文件)时,在服务器终端输入ansible的ad-hoc命令集或playbook后,ansible会遵循预先编排的规则将playbooks逐条拆解为play,再将play组织成ansible可识别的任务(task)。随后调用任务涉及的所有模块(module)和插件(plugin),根据inventory中定义的主机列表通过ssh将任务集以临时文件或命令的形式传输到远程客户端执行并返回执行结果,如果临时文件执行完毕则自动删除.

2. PlayBook介绍

  • playbook-剧本 介绍
  • playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。
  • 核心元素

Tasks:任务,由模板定义的操作列表
Variables:变量
Templates:模板,即使用模板语法的文件
Handlers:处理器.当某条件满足时,触发执行的操作
Roles:角色

3. Ymal语言

  • playbook使用yml标记语言,这是一种标记语言,这种标记语言在文件的最开始需要使用三个“-”来说明文件开始,然后使用缩进来说明代码块的范围。下面通过一个简易的实例,来说明playbook的语法。【实例来自官方文档】
---                             #标记文件的开始
- hosts: webservers             #指定该playbook在哪个服务器上执行
  vars:                         #表示下面是定义的变量,
    http_port: 80               #变量的形式,key: value,这里http_port是变量名,80是值
    max_clients: 200
  remote_user: root             #指定远程的用户名,这里缩进和vars保持了一致,说明变量的代码块已经结束。
  tasks:                        #下面构成playbook的tasks,每个task都有 - name: 开始,name指定该任务的名称。
  - name: ensure apache is at the latest version  #指定该任务的名称。
    yum: pkg=httpd state=latest                   #yum说明要是用的模板名称,后面指定对应的参数,这两行结合起来就相当于一个shell命令。

  - name: write the apache config file            #每个task之间可以使用空行来做区分。
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf

#需要说明的是缩进的意义和python中缩进的意义是一样,是来区分代码块的。

ansible-playbook playbook.yml --syntax-check 检查语法是否有误

ansible-playbook playbook.yml 执行

4. Playbook小示例

4.1 httpd firewalld服务开启及 配置

  1. 初级版本
---
- hosts: test
  tasks:
  - name: install apache
    yum:
      name: httpd
      state: present
  - name: start apache
    service:
      name: httpd
      state: started
      enabled: yes
  - name: start firewalld
    service:
      name: firewalld
      state: started
      enabled: yes
  - name: enable http
    firewalld:
      service: http
      permanent: yes
      immediate: yes
      state: enabled

Ansible自动化运维 (PlayBook 详解 示例)_第1张图片
2. 增加配置文件

mkdir ansible/httpd 存放httpd的配置文件

[devops@server1 ansible]$ cd httpd/
[devops@server1 httpd]$ ls
httpd.conf
---
- hosts: test
  tasks:
  - name: install apache
    yum:
      name: httpd
      state: present
  - name: config apache
    copy:
      src: httpd/httpd.conf
      dest: /etc/httpd/httpd.conf
  
  - name: start apache 
    service:
      name: httpd
      state: started
      enabled: yes
  - name: start firewalld
    service:
      name: firewalld
      state: started
      enabled: yes
  - name: enable http
    firewalld:
      service: http
      permanent: yes
      immediate: yes
      state: enabled
  1. 增加jinja模板的使用,以及触发器的使用
  • 在 ansible目录下创建template目录,将配置文件重命名为httpd.conf.j2放在此目录中
[devops@server1 httpd]$ mv httpd.conf httpd.conf.j2
[devops@server1 httpd]$ cd ..
[devops@server1 ansible]$ mkdir templates
[devops@server1 ansible]$ mv httpd/httpd.conf.j2 templates/
[devops@server1 ansible]$ cd templates/
[devops@server1 templates]$ ls
httpd.conf.j2

vim hosts
在这里插入图片描述
vim templates/httpd.conf.j2

Ansible自动化运维 (PlayBook 详解 示例)_第2张图片

---
- hosts: test
  tasks:
  - name: install apache
    yum:
      name: httpd
      state: present
  - name: config apache
    template:
      src: templates/httpd.conf.j2
      dest: /etc/httpd/httpd.conf
      notify: restart apache
  
  - name: start apache 
    service:
      name: httpd
      state: started
      enabled: yes
  - name: start firewalld
    service:
      name: firewalld
      state: started
      enabled: yes
  - name: enable http
    firewalld:
      service: http
      permanent: yes
      immediate: yes
      state: enabled
  
  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted

Ansible自动化运维 (PlayBook 详解 示例)_第3张图片

4.2 查询主机信息

vim playbook2.yml

---
- hosts: all
  tasks:
  - name: create hostinfo
    template:
      src: templates/hostinfo.j2
      dest: /tmp/hostinfo

vim templates/hostinfo.j2

hostname: {
  { ansible_facts['hostname'] }}
hostip: {
  { ansible_facts["eth0"]["ipv4"]["address"] }}
DNS: {
  { ansible_facts['dns']['nameservers'][-1] }}
kernel: {
  { ansible_facts['kernel'] }}
memory_free: {
  { ansible_facts.memfree_mb }}MB
boot partition size: {
  { ansible_facts.devices.vda.partitions.vda1.size }}
  • 此例在KVM虚拟机下完成,使用VMware会报错,参数找不到
[root@server20 ~]# cat /temp/hostinfo 
hostname: server2
hostip: 192.168.43.2
DNS: 114.114.114.114
kernel: 3.10.0-957.el7.x86_64
memory_free: 582MB
boot partition size: 1.00 GB

4.3 对PlayBook进行加密

ansible-vault encrypt playbook.yml对它进行加密<

你可能感兴趣的:(自动化运维,linux,运维,ansible)