linux系统ansible工具中的剧本playbook基础内容

playbook

    • playbook
      • 使用场景
      • 核心元素
      • 剧本格式
      • 运行剧本
        • 运行剧本的方式
        • playbook查看执行命令过程
      • 角色roles
        • 介绍
        • 角色创建
        • 角色创建后的目录
        • 角色使用
      • 变量定义
        • facts调用
          • 批量修改主机 host 文件
        • 自定义变量
          • 命令行传入
          • playbook中定义
        • roles定义变量
        • 主机清单定义
          • 向不同的主机传递不同的变量
          • 向组中的主机传递相同的变量
          • 主机清单定义内置参数
      • when语句
      • with循环
      • 字典

playbook

playbook 是 ansible 用于配置,部署,和管理被控节点的剧本。

通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态
playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成
在Ansible中,由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。

使用场景

执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook

不过playbook有自己的语法格式。使用playbook可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。

在使用Ansible的过程中,将所处理的大部分操作都是编写playbook。可以把常见的应用都编写成playbook,之后管理服务器会变得十分简单

核心元素

Hosts:主机组
Tasks:任务列表
Variables:变量,设置方式有四种,vars
Templates:包含了模板语法的文本文件
Handlers:由特定条件触发的任务
remote_user:在远程主机上执行任务的用户
某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers
任务可以通过“tags“打标签,而后可在ansible-playbook命令上使用-t或者--tags指定进行调用

剧本格式

文件的第一行应该以 "---" (三个连字符)开始,表明YMAL文件的开始。   
在同一行中,#之后的内容表示注释,类似于shell,python和ruby。   
YMAL中的列表元素以”-”开头然后紧跟着一个空格,后面为元素内容。   
同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。   
play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以":"分隔表示,":"后面还要增加一个空格。
host部分:使用hosts指示使用哪个主机或主机组来运行下面的tasks,每个playbook都必须指定hosts,hosts也可以使用通配符格式。在运行清单文件的时候,–list-hosts选项会显示那些主机将会参与执行task的过程中。

remote_user:指定远端主机中的哪个用户来登录远端系统,在远端系统执行task的用户,可以任意指定,也可以使用sudo,但是用户必须要有执行相应task的权限。 

tasks:指定远端主机将要执行的一系列动作。tasks的核心为 ansible 的模块,前面已经提到模块的用法。tasks包含name和要执行的模块,name是可选的,只是为了便于用户阅读,不过还是建议加上去,模块是必须的,同时也要给予模块相应的参数。

运行剧本

运行剧本的方式
ansible-playbook 剧本名                 //运行剧本

ansible-playbook 剧本名 --syntax-check  //检查剧本语法正确与否

ansible-playbook 剧本名 --list-task     //列出所有任务

ansible-playbook 剧本名 --list-hosts    //列出在那些机器执行

ansible-playbook --tags=标签名  剧本名   //只运行标签语句
ansible-playbook -t=标签名 剧本名        //只运行标签语句
playbook查看执行命令过程
ad-hoc:点对点运行可以看到命令执行结果

playbook:只能看到命令是否执行成功
如果需要查看执行过程的数据需要添加模块

tasks
- name:xxx
  模块:执行名令
  register: result      register:变量名
- name: debug
  debug 
  Var: 变量名["对变量名进行裁剪"]

角色roles

介绍
roles 用于层次性、结构化地组织playbook。

roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等。

使用roles只需要在playbook中使用include指令即可。roles就是通过分别将变量(vars)、文件(file)、任务(tasks)、模块(modules)及处理器(handlers)放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,也是用于构建守护进程等场景中。
角色创建
ansible-galaxy init 角色名字      //在当前所在目录下创建角色文件
角色创建后的目录
defaults:用于设定默认变量;

files:存放剧本所需文件

handlers:用于定义各handler;其它的文件需要由main.yml进行“包含”调用; 

meta:定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用; 

README.md:说明书

tasks:用于定义各task;其它的文件需要由main.yml进行“包含”调用;

templates:存储由template模块调用的模板文本;

tests:用于存放测试文件的目录

vars:用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
角色使用
和角色同级创建 执行剧本文件.yaml,文件内编写执行主机、执行用户、执行角色
---
- hosts: 主机
  remote_user: root
  roles:
    - 角色名字
运行角色剧本
ansible-playbook 执行剧本文件.yaml

变量定义

facts调用
直接调用setup收集的信息,这个模块就是通过调用facts组件来实现的。这里的variables也可以直接调用facts组件。具体的facters可以使用setup模块来获取,然后直接放入剧本中调用即可。
ansible_all_ipv4_addresses:仅显示ipv4的信息==》显示ipv4所有的信息
ansible_ens33['ipv4']['address']:仅显示ipv4的信息==》ens33的ip地址
ansible_devices:仅显示磁盘设备信息
ansible_distribution:显示是什么系统,例:centos,suse等
ansible_distribution_version:仅显示系统版本
ansible_machine:显示系统类型,例:32位,还是64位
ansible_eth0:仅显示eth0的信息
ansible_hostname:仅显示主机名
ansible_kernel:仅显示内核版本
ansible_lvm:显示lvm相关信息
ansible_memtotal_mb:显示系统总内存
ansible_memfree_mb:显示可用系统内存
ansible_memory_mb:详细显示内存情况
ansible_swaptotal_mb:显示总的swap内存
ansible_swapfree_mb:显示swap内存的可用内存
ansible_mounts:显示系统磁盘挂载情况
ansible_processor:显示cpu个数(具体显示每个cpu的型号)
ansible_processor_vcpus:显示cpu个数(只显示总的个数)
ansible_python_version:显示python版本
批量修改主机 host 文件
---
- hosts: web  
  vars:        
    IP: "{{ ansible_eth0['ipv4']['address'] }}"  
  tasks:        
  - name: 将原有的hosts文件备份          
    shell: mv /etc/hosts /etc/hosts_bak        
  - name: 将ansible端的hosts复制到各自机器上          
    copy: src=/etc/hosts dest=/etc/ owner=root group=root mode=0644        
  - name: 在新的hosts文件后面追加各自机器内网ip和hostname          
    lineinfile: dest=/etc/hosts line="{{ IP }}  {{ ansible_hostname }} "
自定义变量
命令行传入
执行剧本时,-e 变量名=变量值
ansible-playbook 剧本名 -e 变量名=变量值

{{ 变量名 }}    //调用变量
playbook中定义
在playbook中定义
vars:
- 变量名: 变量值

{{ 变量名 }}    //调用变量
roles定义变量
创建角色后,在角色的目录下的vars/main.yml里面定义变量

变量名: 变量值
主机清单定义
主机清单定义:/etc/ansible/hosts
向不同的主机传递不同的变量
[主机组]
主机1
主机2

[主机1]
主机变量名=主机变量值

[主机2]
主机变量名=主机变量值
向组中的主机传递相同的变量
[主机组]
主机
主机

[主机主:vars]
变量名=变量值
主机清单定义内置参数
参数 用途
ansible ssh host 定义 hosts ssh 地址
ansible ssh port 定义 hosts ssh 端口
ansible ssh user 定义 hosts ssh 认证用户
ansible ssh pass 定义 hosts ssh 认证密码
ansible sudo 定义 hosts sudo 用户
ansible sudo pass 定义 hosts sudo 密码
ansible sudo exe 定义 hosts sudo 路径
ansible connection 定义 hosts 连接方式
ansible ssh private key file 定义 hosts 私钥
ansible ssh shell type 定义 hosts shell 类型
ansible python interpreter 定义 hosts 任务执行python路径
ansible * interpreter 定义 hosts 其它语言解析路径

when语句

- name: Task Name
  ansible.builtin.command: /bin/reboot
  when: ansible_facts['os_family'] == "RedHat"

ansible_when语句的格式是
when: condition
其中condition是一个布尔表达式,如果为真,则执行该任务。

with循环

tasks:
- name: unstall web packages
  yum: name={{ item }} state=absent
  with_items:
  - httpd
  - php
  - php-mysql
现在模块也支持多次运行

tasks:
- name: unstall web packages
  yum: name=httpd,php,php-mysql state=absent

字典

多个with是字典

- name: install some packages
  yum: name={{ item }} state=present
  with_items:
    - nginx
    - memcached
    - php-fpm
- name: add some groups
  group: name={{ item }} state=present
  with_items:
    - group11
    - group12
    - group13
- name: add some users
  user: name={{ item.name }} group={{ item.group }} state=present
  with_items:
    - { name: 'user11', group: 'group11' }
    - { name: 'user12', group: 'group12' }
    - { name: 'user13', group: 'group13' }

你可能感兴趣的:(linux,linux,ansible,服务器)