ansible——playbook

ansible——playbook

      • 一、设置ansible主机清单
        • 1、主机变量
        • 2、组变量
        • 3、组嵌套
        • 4、inventory变量参数
      • 二、YAML
        • 1、YAML介绍
        • 2、格式
        • 3、YAML支持的数据格式
      • 三、playbook简介
      • 四、playbook的核心元素
      • 五、playbook剧本示例
        • 1、ansible剧本命令
        • 2、hosts和users介绍
        • 3、为每个任务定义远程执行用户
        • 4、创建httpd
        • 5、远程切换用户
        • 6、Handlers
        • 7、引用变量
        • 8、条件测试
        • 9、迭代测试

一、设置ansible主机清单

#ansible主机清单是/etc/ansible/hosts文件

vim /etc/ansible/hosts

[webserver] #括号里设置组名

www1.example.org #定义被监控主机,这边可以是主机名也可以是IP地址,主机名需要修改/etc/hosts文件

www2.example.org:222 #冒号后定义远程连接端口,默认是ssh的22端口

#如果是名称类似的主机,可以使用列表的方式标识各个主机

[webserver]

www[01:50].xxxxxxx.com ansible_ssh_user=root ansible_ssh_pass=123123

# 这句话表示01到50的主机,可以使用免交互的方式进行管理

[dbbservers]

db-[a:f].xxxxxxx.com # 支持匹配a b c d e f

1、主机变量

[webserver]

www1.xxxxxxx.com http_port=80 maxRequestsChild=808

www2.xxxxxxx.com http_port=8080 maxRequestsChild=909

2、组变量

[servers:vars]

ntp_server=ntp.xxxxxx.com

nfs_server=nfs.xxxxxx.com

3、组嵌套

[apache]
http1.xxxxxxx.com
http2.xxxxxxx.com
[nginx]
ngx1.xxxxxxx.com
ngx2.xxxxxxx.com
[webservers:children]
apache
nginx

4、inventory变量参数

参数 说明
ansible_ssh_host 将要连接的远程主机名,与你想要设定的主机的别名不同的话,可通过此变量设置
ansible_ssh_port ssh端口号,如果不是默认的端口号,通过此变量设置
ansible_ssh_user 默认的ssh用户名
ansible_ssh_pass ssh密码(这种方式并不安全,强烈建议使用–ask-pass或SSH密钥)
ansible_ssh_private_key_file ssh使用的私钥文件,适用于有多个密钥,而你不想用SSH代理的情况
ansible_ssh_common_args 此设置附加到sftp,scp和ssh默认命令行
ansible_sftp_extra_args 此设置附加到默认sftp命令行
ansible_scp_extra_args 此设置附加到默认scp命令行
ansible_ssh_extra_args 此设置附加到默认ssh命令行
ansible_ssh_pipelining 确定是否使用SSH管道,可以覆盖ansible.cfg中的设置
ansible_shell_type 目标系统的shell类型,默认情况下,命令的执行使用”sh“语法,可设置为”csh“或”fish“
ansible_python_interpreter 目标主机的python路径,适用于的情况系统中有多个 Python, 或者命令路径不是"/usr/bin/python
ansible_*_interpreter 这里的*可以是ruby或Perl或者其他语言的解释器,作用和ansible_python_interpreter类似
ansible_shell_executable 将设置ansible控制器将在目标机器上使用的shell,覆盖ansible.cfg中的默认为/bin/sh

二、YAML

1、YAML介绍

YAML另一种标记语言,是用来写配置文件的语言,非常简洁和强大

YAML语法和其他语言类似,也可以表达散列表,标量等数据结构

结构通过空格来展示,序列里配置项通过”-“来代表,Map里键值用”:“来分隔;

2、格式

大小写敏感

使用缩进表示层级关系

缩进时不允许使用制表符,只允许使用空格

缩进的空格数不重要,只要相同层级的元素左侧对齐即可

3、YAML支持的数据格式

对象:键值对的集合,又称映射(mapping)、哈希(hashes)、字典(dictionary)

例如:name:example Developer

​ 键 值

数组:一组按次序排列的值,又称为序列(sequence)、列表(list)

例如: - football

​ - basketball

纯量:单个的、不可再分的值

例如:number:33.33

​ sure:true

三、playbook简介

playbook配置文件使用了YAML语法,具有简介明了、结构清晰等特点,playbook配置文件类似于shell脚本,是一个YAML格式的文件,用于保存针对特定需求的任务列表,之前介绍的ansible命令虽然可以完成各种任务,但是当配置一些复杂的任务时,逐条输入就显得效率非常地下了,更有效的方案是在playbook配置文件中放置所有的任务代码,利用ansible-playbook命令执行该文件,可实现自动化运维,YAML文件的扩展名通常为.yaml或者.yml

四、playbook的核心元素

tasks:任务,即调用模块完成某操作

variables:变量

templates:模板

handlers:处理器,当某种条件满足时,触发执行的操作

roles:角色

五、playbook剧本示例

1、ansible剧本命令

ansible-playbook nginx.yaml --syntax-check # 检查yaml文件的语法

ansible-playbook nginx.yaml --list-task # 检查tasks任务

ansible-playbook nginx.yaml --list-hosts # 检查生效的主机

ansible-playbook nginx.yaml --start-at-task=‘Copy Nginx.conf’ # 从某一个task任务开始

2、hosts和users介绍

- hosts: 主机组名称 #指定主机,可以是一个或多个组

remote_user: root #指定远程主机执行的用户名

3、为每个任务定义远程执行用户

[root@master opt]# vim a.yaml

- hosts: mysql
remote_user: root
tasks:

- name: change user
ping:
remote_user: root

#需要的用户一定是root用户

ansible——playbook_第1张图片

4、创建httpd

[root@master opt]# vim b.yaml

- hosts: 192.168.200.13
remote_user: root
tasks:
- name: disable selinux
command: ‘/sbin/setenforce 0’
- name: install httpd
yum : name=httpd
- name: run httpd
service: name=httpd state=started

ansible——playbook_第2张图片

#ignore_errors 忽略错误,强制返回成功

ansible——playbook_第3张图片

5、远程切换用户

[root@master opt]# ansible-playbook c.yaml

- hosts: 192.168.200.13
remote_user: root
become: yes
become_user: fyf

ansible——playbook_第4张图片

6、Handlers

#Handlers也是一些task的列表,和一般的task并没有什么区别。是由通知者进行的notify,如果没有被notify,则Handlers不会执行,加入被notify了,则Handlers被执行,不管有多少个通知者进行了notify,等到play中的所有task执行完成之后,handelers也只会被执行一次

- hosts: test
remote_user: root
tasks:
- name: install httpd package
yum: name=httpd state=latest
- name: install configuration file for httpd
copy: src=/opt/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify:
- restart httpd
- name: start httpd service
service: enabled=true name=httpd state=started
handlers:
- name: restart httpd
service: name=httpd state=restarted

7、引用变量

#在使用命令时用-e

[root@master opt]# vim d.yaml

- hosts: 192.168.200.12
remote_user: root
vars:
- user:
tasks:
- name: add user
user: name={{user}}

[root@master opt]# ansible-playbook d.yaml -e “user=ppp”

#在剧本中使用

[root@master opt]# vim d.yaml

- hosts: 192.168.200.12
remote_user: root
vars:
- user: ttt
tasks:
- name: add user
user: name={{user}}

#定义在主机清单节点后面

[root@master opt]# vim d.yaml

- hosts: 192.168.200.12
remote_user: root
tasks:
- name: add uer
user: name={{user}}

[root@master opt]# vim /etc/ansible/hosts

[webserver]
192.168.200.12 user=aa

ansible——playbook_第5张图片

8、条件测试

#单条件测试

[root@master opt]# vim e.yaml

- hosts: 192.168.200.12
remote_user: root
tasks:
- name: shutdown centos
command: /sbin/shutdown -h now #将被控制端关机 -h是关机 -r是重启
when: ansible_distribution == “CentOS” #判断如果被控制端是CentOS系统

ansible——playbook_第6张图片

#多条件判断

[root@master opt]# vim e.yaml

- hosts: 192.168.200.12
remote_user: root
tasks:
- name: shutdown centos
command: /sbin/shutdown -h now
when:
- ansible_distribution == “CentOS” #判断是CentOS系统
- ansible_distribution_major_version == “7” #而且是7版本的

ansible——playbook_第7张图片

#组条件判断

vim when.yml
- hosts: test01
remote_user: root
tasks:
- name: shutdown CentOS 6 and Debian 7 systems
command: /sbin/shutdown -t now
when: (ansible_distribution == “CentOS” and ansible_distribution_major_version == “6”) or
(ansible_distribution == “Debian” and ansible_distribution_major_version == “7”)

9、迭代测试

[root@master opt]# vim f.yaml

- hosts: 192.168.200.13
remote_user: root
tasks:
- name: add user
user: name={{item}}
with_items:
- 111
- 222
- 333

#只能使用item这个变量,因为这个是ansible中默认的变量

ansible——playbook_第8张图片

你可能感兴趣的:(ansible——playbook)