Skip to content

官当

https://ansible-tran.readthedocs.io/en/latest/docs/playbooks.html

https://docs.ansible.com/ansible/latest/getting_started/get_started_playbook.html

1. Ansible Playbook

1.1 Playbook简介

Playbookad-hoc相比,是一种完全不同的运用ansible的方式,类似与saltstackstate状态文件。ad-hoc无法持久使用,playbook可以持久使用。

playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联合起来按事先编排的机制完成某一任务

1.2 Playbook核心元素

  • hosts 执行的远程主机列表
  • tasks 任务集
  • varniables 内置变量或自定义变量在playbook中调用
  • templates 模板,即使用模板语法的文件,比如配置文件等
  • handlers 和notity结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
  • tags 标签,指定某条任务执行,用于选择运行playbook中的部分代码。

1.3 Playbook语法

playbook使用yaml语法格式,后缀可以是yaml,也可以是yml

  • 在单一一个playbook文件中,可以连续三个连子号(---)区分多个play。还有选择性的连续三个点好(...)用来表示play的结尾,也可省略。
  • 次行开始正常写playbook的内容,一般都会写上描述该playbook的功能。
  • 使用#号注释代码。
  • 缩进必须统一,不能空格和tab混用。
  • 缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行实现的。
  • YAML文件内容和Linux系统大小写判断方式保持一致,是区分大小写的,k/v的值均需大小写敏感
  • k/v的值可同行写也可以换行写。同行使用:分隔。
  • v可以是个字符串,也可以是一个列表
  • 一个完整的代码块功能需要最少元素包括 name: task

案例

sh
# 创建playbook文件
[root@ansible ~/ansible]$ cat playbook01.yml
---                       #固定格式
- hosts: node1     #定义需要执行主机
  remote_user: root       #远程用户
  vars:                   #定义变量
    http_port: 8088       #变量

  tasks:                             #定义一个任务的开始
    - name: create new file          #定义任务的名称
      file: name=/tmp/playtest.txt state=touch   #调用模块,具体要做的事情
    - name: create new user
      user: name=test02 system=yes shell=/sbin/nologin
    - name: install package
      yum: name=httpd
    - name: config httpd
      template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
      notify:                 #定义执行一个动作(action)让handlers来引用执行,与handlers配合使用
        - restart apache      #notify要执行的动作,这里必须与handlers中的name定义内容一致
    - name: copy index.html
      copy: src=/var/www/html/index.html dest=/var/www/html/index.html
    - name: start httpd
      service: name=httpd state=started
  handlers:                                    #处理器:更加tasks中notify定义的action触发执行相应的处理动作
    - name: restart apache                     #要与notify定义的内容相同
      service: name=httpd state=restarted      #触发要执行的动作
# 创建playbook文件
[root@ansible ~/ansible]$ cat playbook01.yml
---                       #固定格式
- hosts: node1     #定义需要执行主机
  remote_user: root       #远程用户
  vars:                   #定义变量
    http_port: 8088       #变量

  tasks:                             #定义一个任务的开始
    - name: create new file          #定义任务的名称
      file: name=/tmp/playtest.txt state=touch   #调用模块,具体要做的事情
    - name: create new user
      user: name=test02 system=yes shell=/sbin/nologin
    - name: install package
      yum: name=httpd
    - name: config httpd
      template: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
      notify:                 #定义执行一个动作(action)让handlers来引用执行,与handlers配合使用
        - restart apache      #notify要执行的动作,这里必须与handlers中的name定义内容一致
    - name: copy index.html
      copy: src=/var/www/html/index.html dest=/var/www/html/index.html
    - name: start httpd
      service: name=httpd state=started
  handlers:                                    #处理器:更加tasks中notify定义的action触发执行相应的处理动作
    - name: restart apache                     #要与notify定义的内容相同
      service: name=httpd state=restarted      #触发要执行的动作

1.4 Playbook运行方式

通过ansible-playbook命令运行

格式:ansible-playbook <filename.yml> ... [options]

sh
[root@ansible ~/ansible]$ ansible-playbook -h
#ansible-playbook常用选项:
--check  or -C    #只检测可能会发生的改变,但不真正执行操作
--list-hosts      #列出运行任务的主机
--list-tags       #列出playbook文件中定义所有的tags
--list-tasks      #列出playbook文件中定义的所以任务集
--limit           #主机列表 只针对主机列表中的某个主机或者某个组执行
-f                #指定并发数,默认为5个
-t                #指定tags运行,运行某一个或者多个tags。(前提playbook中有定义tags)
-v                #显示过程  -vv  -vvv更详细
[root@ansible ~/ansible]$ ansible-playbook -h
#ansible-playbook常用选项:
--check  or -C    #只检测可能会发生的改变,但不真正执行操作
--list-hosts      #列出运行任务的主机
--list-tags       #列出playbook文件中定义所有的tags
--list-tasks      #列出playbook文件中定义的所以任务集
--limit           #主机列表 只针对主机列表中的某个主机或者某个组执行
-f                #指定并发数,默认为5个
-t                #指定tags运行,运行某一个或者多个tags。(前提playbook中有定义tags)
-v                #显示过程  -vv  -vvv更详细

2. 定义模版

bash
cd /etc/ansible/roles

mkdir hello

cd hello

mkdir templates defaults  files  handlers  meta  tasks  vars
cd /etc/ansible/roles

mkdir hello

cd hello

mkdir templates defaults  files  handlers  meta  tasks  vars

3.模块

1.正则

2.lineinfile

yaml
---
- hosts: all
  gather_facts: true
  remote_user: root
  tasks:
    - name: "修改ssh配置文件的安全选项"
      lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^#?UseDNS'
        line: 'UseDNS no'
      notify:
        - restart sshd

  handlers:
    - name: restart sshd
      service:
        name: sshd
        state: restarted
---
- hosts: all
  gather_facts: true
  remote_user: root
  tasks:
    - name: "修改ssh配置文件的安全选项"
      lineinfile:
        path: /etc/ssh/sshd_config
        regexp: '^#?UseDNS'
        line: 'UseDNS no'
      notify:
        - restart sshd

  handlers:
    - name: restart sshd
      service:
        name: sshd
        state: restarted