本文共 24294 字,大约阅读时间需要 80 分钟。
ansible基础
ansible是基于Python研发,实现了批量操作系统配置,批量程序部署,批量执行命令等功能的IT自动化和DevOps软件。自动化运维和运维开发两个职位、下一步架构工程师、 ansible可以实现:自动化部署APP;自动化管理配置项;自动化持续交付;自动化(AWS)云服务管理。 ansible优点:只需要SSH和Python即可使用;无客户端;ansible功能强大,模块丰富;上手容易,门槛低;基于Python开发,做二次开发更容易;使用公司比较多,社区活跃。 ansible特性:模块化设计,调用特定的模块完成特定任务;基于Python语言实现(paramiko、PyYAML半结构化语言、Jinja2);其模块支持JSON等标准输出格式,可以采用任何编程语言重写。部署简单;主从模式工作;支持自定义模块;支持playbook;易于使用;支持多层部署;支持异构IT环境。 ansible主机工作流程:主机的集合,命令的集合 对管理主机:要求Python 2.6或Python 2.7 ansible使用的模块:paramiko、PyYAML、Jinmja2、httpdlib2、six 对于被托管主机的要求:ansible默认通过SSH协议管理机器;被管理主机要开启ssh服务,允许ansible主机登录;在托管节点上也需要安装Python2.5或以上的版本;如果托管节点上开启了SELinux,需要安装libselinux-python 4.执行ansible命令时会调用配置文件去执行,调用配置文件的顺序如下: 首先检测ANSIBLE——CONFIG变量定义的配置文件 其次检查当前目录下的./ansible.cfg文件 再次检查当前用户家目录下~/ansible.cfg文件 最后检查/etc/ansible/ansible.cfg文件(是ansible的默认配置文件路径) !!!也就是说有自定义配置文件时,要切换到该自定义配置文件所在的目录才能执行ansible命令。!!!一、部署ansible
1.启动6台虚拟机:2cpu,1.5G以上内存,10G以上硬盘,1块网卡 ansible 192.168.1.40 管理主机 web1 192.168.1.41 托管主机 web2 192.168.1.42 托管主机 db1 192.168.1.43 托管主机 db2 192.168.1.44 托管主机 cache 192.168.1.45 托管主机 2.真机 ]# cp -a /linux-soft/04/ansible /var/ftp/ ]# createrepo /var/ftp/ansible/ ]# base-vm ansible web1 web2 db1 db2 cache 3.给每台机配IP,改主机名,配yum源 ]# eip 40 ]# hostnamectl set-hostname ansible ]# vim /etc/yum.repos.d/local.repo 搭建阿里云yum仓库 [aliyun_os] name=aliyun_os baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/ enabled=1 gpgcheck=0[aliyun_extras]
name=aliyun_extras baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/ enabled=1 gpgcheck=0[aliyun_epel]
name=aliyun_epel baseurl=https://mirrors.aliyun.com/epel/7/x86_64/ enabled=1 gpgcheck=04.给ansible主机装软件
]# yum -y install ansible ]# ansible --version #查版本ansible 2.4.2.0 ]# ansible-config dump | grep -i fork DEFAULT_FORKS(default) = 5 #改为大一点,比如50,一次可以执行的主机数量 ]# vim /etc/ansible/ansible.cfg forks = 100 #改第19行把5改大 5.改配置文件ansible主机 ]# vim /etc/ansible/ansible.cfg inventory = /etc/ansible/hosts #14行去除注释即可,托管主机群文件路径 host_key_checking = False #61行去除注释即可,ssh管理主机时不需要输入yes 6.定义hosts主机名 ]# vim /etc/hosts #增加以下内容 192.168.1.40 ansible 192.168.1.41 web1 192.168.1.42 web2 192.168.1.43 db1 192.168.1.44 db2 192.168.1.45 cache ]# scp /etc/hosts root@192.168.1.41:/etc/ 7.定义主机名 ]# vim /etc/ansible/hosts #在最后面增加以下内容 [web] web1 #也可以写成web[1:2],如果有10台可以写成web[1:10];也可以写IP地址,如:192.168.1.[41:42][db]
db1 db2[other]
cache 8.ansible命令基础:ansible 主机集合 -m 模块名称 -a 模块参数 主机集合:主机名或分组名,多个使用“逗号分隔” -i inventory文件路径,或可执行脚本 -k 使用交互式登录密码 -e 定义变量 -v 显示详细信息 ]# ansible web --list-hosts #显示所有web组的主机 ]# ansible db --list-hosts #显示所有db组的主机 ]# ansible web1 --list-hosts #显示web1主机 ]# ansible web1,db --list-hosts #显示web1主机和所有db组的主机 ]# ansible all --list-hosts #显示所有的主机 ]# ansible web -m ping #报错,因为没有密码,可以先设置免密登录 ]# ansible web -m ping -k #输入密码 9.创建一对密钥,设置免密登录 ]# cd /root/.ssh ]# ssh-keygen -t rsa -b 2048 -N ‘’ -f key ]# ssh-copy-id -i key.pub web1 #输入密码 ]# ssh-copy-id -i key.pub web2 #输入密码 ]# ssh-copy-id -i key.pub db1 #输入密码 ]# ssh-copy-id -i key.pub db2 #输入密码 ]# ssh-copy-id -i key.pub cache #输入密码 10.验证免密 ]# ssh -i /root/.ssh/key web1 ]# ssh -i /root/.ssh/key web2 ]# ssh -i /root/.ssh/key db1 ]# ssh -i /root/.ssh/key db2 ]# ssh -i /root/.ssh/key cache 11.如果连接的远程主机是个普通用户,应按以下操作 ]# vim /etc/ansible/ansible.cfg [defaults] inventory = inventory remote_user = zhangsan[priviledge_escalation] #提权
become = yes #需要切换用户 become_method = sudo #切换的方式是sudo(另一种方式是su) become_user = root #切换成管理员 become_ask_pass = no #不询问切换密码 ]# vim /etc/sudoers #被管理的服务器,需要配置sudo zhangsan ALL=(ALL) NOPASSWD: ALL二、inventory扩展参数
1.设置免密路径一 ]# vim /etc/ansible/hosts #增加以下内容,对other组申明密钥对路径 [other:vars] ansible_ssh_private_key_file="/root/.ssh/key" ]# ansible other -m ping 2.设置免密路径二 ]# vim /etc/ansible/hosts #增加以下内容,对所有主机申明密钥对路径 [all:vars] ansible_ssh_private_key_file="/root/.ssh/key" ]# ansible all -m ping #验证 3.设置免密路径三 ]# vim /etc/ansible/hosts #增加以下内容,对db2主机申明密钥对路径 [db] db1 db2 ansible_ssh_private_key_file="/root/.ssh/key" ]# ansible db2 -m ping #验证 4.设置端口 ]# vim /etc/ansible/hosts #增加以下内容,对db2主机申明ssh端口号 [db] db1 db2 ansible_ssh_port=222 #同时db2主机的ssh配置文件的端口改为222,重启sshd服务才有效。ansible_ssh_user=用户名 ]# vim /etc/ssh/sshd_config #db2主机修改端口号 Port 222 ]# systemctl restart sshd #db2主机重启sshd服务 ]# ssh 192.168.1.44 #在ansible主机远程测试,报错 ]# ssh -p 222 192.168.1.44 #在ansible主机远程测试,成功 ]# ansible db2 -m ping # #在ansible主机测试,成功 5.设置子组 ]# vim /etc/ansible/hosts #定义子组,增加以下内容 [app:children] web #web组 db #db组 ]# ansible app --list-hosts三、自定义配置文件
1.自定义配置文件 ]# mkdir /myansible ]# cd /myansible ]# vim ansible.cfg [defaults] inventory = myhosts host_key_checking = False ]# vim myhosts [app1] web1 db1 ]# ansible app1 --list-hosts #要在当前/myansible目录下才可以执行此命令 2.利用脚本自定义配置文件 ]# mkdir /myansible ]# cd /myansible ]# vim ansible.cfg [defaults] inventory = aa.py host_key_checking = False ]# vim aa.py #!/usr/bin/python import json hostlist = {} hostlist[“aa”] = [“web1”,“db2”] hostlist[“bb”] = [“web2”,“db1”,“cache”] print json.dumps(hostlist) ]# chmod 755 aa.py ]# ./aa.py ]# ansible aa --list-hosts #要在当前/myansible目录下才可以执行此命令 ]# ansible bb --list-hosts #要在当前/myansible目录下才可以执行此命令四、ansible模块:
1.ansible-doc:模块的手册相当于shell的man ]# ansible-doc -l #列出所有模块 ]# ansible-doc aci_ap #查看aci_ap的帮助,aci_ap是用ansible-doc -l命令查的 2.ping模块:测试ssh的连通性 ]# ansible all -m ping 3.command模块:默认模块,远程执行命令。若命令里有如下字符(<,>,|,&)则执行不成功。不能解析系统变量。不启动shell直接在ssh进程中执行, ]# ansible all -m command -a ‘date +%F_%T’ #查看所有机器的日期和时间 4.shell模块:是通过/bin/sh进行执行命令,可以执行任意命令,不能执行交互式的命令,如:vim top等。能用shell模块的尽量不要用command模块。有变量时按这样写’echo ${HOSTNAME}’ ]# ansible all -m shell -a ‘uptime’ ]# ansible web1 -m shell -a ‘useradd nb’ #给web1主机添加nb用户 ]# ansible web1,db2 -m shell -a ‘useradd nb’ #给web1,db2主机添加nb用户 ]# ansible web1,db2 -m shell -a ‘echo 123 | passwd --stdin nb’ #给web1,db2主机添加nb用户设置密码为123 ]# ansible cache -m shell -a ‘cd /tmp’ #此命令执行完后,还是回到cache主机的家目录,并不会保持在/tmp目录 ]# ansible cache -m shell -a ‘touch testfile’ #此时testfile文件在cache主机的家目录 ]# ansible cache -m shell -a ‘chdir=/tmp touch testfile’ #表示切换到/tmp目录下执行touch命令,此处的chdir的作用是cd的作用 ]# ansible web -m shell -a ‘echo ${HOSTNAME}’ !!?????!! 变量解析:ansible执行命令是二次解析;第一次在本机解析,第二次在执行机器解析;需要第二次解析的变量要转义(\) ]# ansible web -m shell -a “echo ${HOSTNAME}” web2 | SUCCESS | rc=0 >> ansile web1 | SUCCESS | rc=0 >> ansile ]# ansible web -m shell -a ‘echo ${HOSTNAME}’ #'echo ${HOSTNAME}'和"echo ${HOSTNAME}"结果一样 web1 | SUCCESS | rc=0 >> web1 web2 | SUCCESS | rc=0 >> web2 ]# ansible cache -m shell -a ‘echo ${HOSTNAME}’ #'echo ${HOSTNAME}'和"echo \${HOSTNAME}"结果一样 cache | SUCCESS | rc=0 >> ${HOSTNAME} ]# ansible cache -m command -a ‘echo ${HOSTNAME}’ cache | SUCCESS | rc=0 >> ${HOSTNAME} !!?????!! 5.script模块:在本机写脚本,对所有机批量执行。 ]# vim user.sh #!/bin/bash id nb if [ $? != 0 ];then useradd wk echo 123 | passwd --stdin wk fi ]# chmod 755 user.sh ]# ansible web -m script -a ‘./user.sh’ #给所有web主机添加wk用户,要求nb用户与wk用户不能出现在同一台主机上,设置wk用户的密码是123 6.yum模块:安装和移除软件 ]# ansible db -m yum -a ‘name=mariadb-server state=installed’ #给db组的所有主机安装mariadb-server软件 ]# ansible db -m yum -a ‘name=mariadb-server state=removed’ #给db组的所有主机删除mariadb-server软件 7.service模块:设置开机启动,启动、停止、重启、重新加载。enabled=yes/on; state=started/stoped/restarted/reloaded。正在运行的服务,修改配置文件后,用reload重新加载。]# ansible db -m service -a ‘name=mariadb state=started enabled=yes’ #给db组的所有主机启动mariadb和设为开机自启动
8.copy模块:复制本机文件到远程主机。src:本机。dest:目录机。baskup:覆盖前先备份原文件,备份文件包含时间信息,有两个选项:yes/no。force:若目标主机包含该文件,但内容不同,如果设为yes,则强制覆盖,设为no,则只有当目标主机的目标位置不存在该文件时才复制,默认为yes。 ]# ansible all -m copy -a ‘src=/etc/resolv.conf dest=/etc/resolv.conf’ #把本机的resolv.conf文件复制给所有主机 ]# ansible all -m copy -a ‘src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/’ #把本机的/etc/yum.repos.d/目录下的所有内容复制给所有主机,如果/etc/yum.repos.d这样表示把 ]# ansible ansible-demo3 -m copy -a “src=/testdir/copytest dest=/testdir/ force=no” ]# ansible ansible-demo3 -m copy -a “src=/testdir/copytest dest=/testdir/ backup=yes” yum.repos.d目录复制 给所有db主机开启binlog日志 ]# scp /etc/my.cnf root@192.168.1.40:/root #在db1主机把my.cnf配置文件复制给ansible主机 ]# vim my.cnf #在ansible主机把my.cnf配置文件改好,增加以下两行 [mysqld] log_bin = mysql-bin binlog-format = mixed ]# ansible db -m copy -a ‘src=my.cnf dest=/etc/my.cnf’ #把改好的配置文件复制给db组的所有主机 9.lineinfile模块(line=整行要写完整):替换文件的某一行,正则匹配有多行时只换一行 ]# ansible db -m lineinfile -a ‘path="/etc/my.cnf" regexp="^binlog-format" line=“binlog-format = row”’ #把db组的所有主机的/etc/my.cnf文件中binlog-format开头的行的值修改为row ]# ansible db -m shell -a ‘grep -i binlog-format /etc/my.cnf’ #查看修改结果 10.replace模块(replace=只写修改的字符):替换文件的指定字符 ]# ansible db -m replace -a ‘path="/etc/my.cnf" regexp=" row$" replace=" mixed"’ ##把db组的所有主机的/etc/my.cnf文件中row结尾的改为mixed ]# ansible db -m shell -a ‘grep -i mixed /etc/my.cnf’ #查看修改结果 11.setup模块:获取主机信息 ]# ansible cache -m setup #查看cache主机的信息 ]# ansible cache -m setup | grep hostname #查看cache主机的主机名 ]# ansible web -m setup | grep hostname #查看web组的所有主机的主机名 ]# ansible cache -m setup -a ‘filter=ansible_distribution’ #filter过滤所需信息 ]# ansible web -m setup | grep distribution一、常用命令
1.ansible命令,用于执行临时性的工作,必须掌握。!! 2.ansible-doc是ansible模块的文档说明,针对每个模块都有详细的说明及应用案例介绍,功能和Linux系统man命令类似,必须掌据。!! 3.ansible-playbook是日常应用中使用频率最高的命令,工作机制:通过读取先编写好的playbook文件实现批量管理,可以理解为按一定条件组成的ansible任务集,必须掌握。!! 4.ansible-console是ansible为用户提供的交互式工具,用户可以在ansible-console虚拟出来的终端上像Shell一样使用ansible内置的各种命令,这为习惯使用Shell交互方式的用户提供了良好的使用体验 5.ansible-galaxy从github上下载管理Roles的一款工具,与python的pip类拟。 6.ansible-vault主要用于配置文件加密,如编写的playbook文件中包含敏感信息,不榻其他人随意查看,可用它加密/解密这个文件。 7.ansible有两人种工作模式pull/push,默认使用push模式工作,pull和push工作模式机制刚好相反。适用场景:有大批量机器需要配置,即便使用高并发线程依旧要花费很多时间。通常在配置大批量机器的场景下用,灵活性稍有欠缺,但效率几乎可以无限提升,对运维人员的技术水平和前瞻性规划有较高要求。一般用push,2000台以上用pull。二、JSON简介
1.JSON是JavaScript对象表示法,它是一种基于文本独立于语言的轻量级数据交换格式。JSON中的分隔符限于单引号、小括号、中括号、大括号、冒号、逗号 2.JSON特性:是纯文本,具有“自我描述性”(人类可读),具有层级结构(值中存在值),可通过JavaScript进行解析 3.JSON数据的书写格式是:名称/值对(包括字段名称(在双引号中),后面写一个冒号,然后是值)。如:“诗仙”:“李白” 4.语法规则:数据在名称/值对中;数据由逗号分隔;大括号保存对象;中括号保存数组 {key: value} #大括号保存对象 [a,b,c,d,e] #中括号保存数组 [“a”,“b”,“123”] #数据由逗号分隔 key: [“a”,“b”,“123”] #数据在名称/值对中 [“a”,“b”,“d”: “123”] [“a”,“b”,[1,2,3]] key:{k1:v1} “第一阶段”: “nb” { “讲师”: [“nb”,“wk”,“plj”] } {“讲师”: [{“姓名”: “nb”,“爱好”: “唱歌”}, {“姓名”: “wk”,“爱好”: “看书”}, {“姓名”: “plj”,“爱好”: “写字”}] }三、YAML简介
1.YAML是一个可读性高的语言,用来表达数据序列的格式。 2.YAML基础语法:YAML的结构通过空格来展示;数组使用“- ”来表示;键值对使用“: ”来表示;YAML使用一个固定的缩进风格表示数据层级结构关系;一般每个缩进级别由两个以上空格组成;#表示注释。 3.注意:不要使用tab,缩进是初学者容易出错的地方之一;同一层级缩进必须对齐。 4.YAML的键值表示方法:采用冒号分隔;冒号后面必须有一个空格。 如:“诗仙”: “李白” #不能用中文的冒号,冒号后面要有空格,不能用tab键产生的空格 “诗仙”: “李白”{key: value} #JSON格式
{key: value} #YAML格式[“a”,“b”,“123”] #JSON格式
key: [“a”,“b”,“123”] #JSON格式
key: #YAML格式“第一阶段”: “nb” #JSON格式
“第一阶段”: “nb” #YAML格式,冒号后要有空格“讲师”: [“nb”,“wk”,“plj”] #JSON格式
“讲师”:{“讲师”: #JSON格式
[{“姓名”: “nb”,“爱好”:“唱歌”}, {“姓名”: “wk”,“爱好”:“看书”}, {“姓名”: “plj”,“爱好”:“写字”}] }“姓名”: “plj”
“爱好”: “写字”四、Jinja2模版简介
1.Jinja2是基于Python的模板引擎,包含变量和表达式两部分,两者在模板求值时会被替换为值,模板中还有标签,控制模板的逻辑。 2.为什么要学习Jinja2模版:因为playbook的模板使用Python的Jinja2模块来处理。 3.Jinja2模版基本语法: 模板的表达式都是包含在分隔符"{ { }}“内的 控制语句都是包含在分隔符”{% %}“内的 模板支持注释,都是包含在分隔符”{# #}"内,支持块注释 调用变量 { {varname}} 计算 { {2+3}} 判断 { {1 in [1,2,3]}} Jinja2模版控制语句 {% if name == ‘诗仙’ %} 李白 {% elif name == ‘诗圣’ %} 杜甫 {% elif name == ‘诗魔’ %} 白居易 {% else %} 李贺 {% endif %} Jinja2模版控制语句 {% if name == … … %} … … {% elif name == ‘于谦’ %} {% for method in [抽烟,喝洒,打牌] %} { {do method}} {% endfor %} … … {% endif %} Jinja2过滤器:变量可以通过过滤器修改。过滤器与变量用管道符号(|)分割,也可以用圆括号传递可选参数,多个过滤器可以链式调用,前一个过滤器的输出会会被作为后一个过滤器的输入。 如:加密一个字符串{ {‘astr’|password_hash(‘sha512’)}} http://docs.jinkan.org/docs/jinja2/templates.html五、playbook:即是ansible的脚本
1.playbook是ansible用于配置,部署和管理托管主机剧本,通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期状态。 2.执行复杂任务时,最好使用playbook,可以反复使用编写的代码,可以放到不同的机器上面,像函数一样,最大化的利用代码,在使用ansible的过程中,处理的大部分操作都是在编写playbook 3.playbook语法格式: playbook由YAML语言编写,遵循YAML标准 在同一行中,#之后的内容表示注释 同一个列表中的元素应该保持相同的缩进 playbook由一个或多个play组成 play中hosts、variables、roles、tasks等对象的表示方法都是键值中间发": "分隔表示 YAML还有一个小的怪癖,它的文件开始行都应该是—,这是YAML格式的一部分,表明一个文件的开始 4.playbook构成: hosts: 定义将要执行playbook的远程主机组。主机的集合,定义要执行任务的主机。 vars: 定义playbook运行时需要使用的变量。 tasks: 定义将要在远程主机上执行的任务列表。命令的集合,每一个play包含了一个task列表(任务列表),一个task在其所对应的所有主机上(通过host pattern匹配的所有主机)执行完毕之后,下一个task才会执行。 handlers: 定义task执行完成以后需要调用的任务 5.playbook执行结果 使用ansible-playbook运行playbook文件,输出内容为JSON格式,由不同颜色组成便于识别,绿色代表执行成功,***代表系统状态发生改变,红色代表执行失败。六、playbook案例
1.测试所有主机ssh连通性 ]# vim ping.yml #要求.yml或.yaml后缀 — #表示开始。语法格式username:
“zhang” ]# ansible-playbook user.yml -e @args.yml #调用变量文件,测试 。-e 参数(参数格式必须是json或yaml,yaml格式时可以使用文件)lftp sftp://web1 ?? #下载web1的配置文件????????????????
13.利用include把其他文件包含进来
一般所需的目录层级有 vars:变量层 tasks:任务层 handlers:触发条件 files:文件 template:模板 default:默认,优先级最低 tasks:- name: reload_httpd service: name: httpd state: restarted
####################
playbook总结:即是ansible的脚本,用YAML语言格式编写
一、YAML简介 1.YAML是一个可读性高的语言,用来表达数据序列的格式。 2.YAML基础语法: YAML的结构通过空格来展示 数组使用“- ”来表示,横线后面必须有一个空格 键值对使用“: ”来表示,不能用中文的冒号,冒号后面必须有一个空格 YAML使用一个固定的缩进风格表示数据层级结构关系 一般每个缩进级别由两个以上空格组成 在同一行中,#之后的内容表示注释 不要使用tab缩进 同一个列表中的元素应该保持相同的缩进,必须对齐 YAML还有一个小的怪癖,它的文件开始行都应该是—,这是YAML格式的一部分,表明一个文件的开始 文件名要求.yml或.yaml结尾 二、playbook 1.playbook是ansible用于配置,部署和管理托管主机剧本,通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期状态。 2.执行复杂任务时,最好使用playbook,可以反复使用编写的代码,可以放到不同的机器上面,像函数一样,最大化的利用代码 3.playbook语法格式: playbook由YAML语言编写,遵循YAML标准 playbook由一个或多个play组成 play中hosts、variables、roles、tasks等对象的表示方法都是键值中间发": "分隔表示 尽量不要用shell模块改用file模块,或在shell模块下面加入ignore_errors: True加入这句的作用是当有报错时忽略错误,继续执行。ignore_errors: False表示遇到错误时就停止执行。默认为False 4.tags打标签、notfy定义触发器、handlers触发后的动作 handlers当关注的资源发生变化时采取的操作 notify这个tion可用于在每个play的最后被触发,这样可以避免有多次改变发生时每次都执行指定的操作,取而代之仅在所有的变化发生完成后一次性地执行指定操作 在notify中列出的操作称为handler,即notify调用handler中定义的操作 11.when条件、register保存执行结果 when:有些时候需要在满足特定的条件后再触发某一项操作,或在特定的条件下终止某个行为,这个时候需要进行条件判断,when正是解决这个问题的最佳选择,远程中的系统变量facts作为when的条件,可以通过setup模块查看 register:有时候我们还需要更复杂的例子,如判断前一个命令的执行结果去处理后面的操作,这时候就需要register模块来保存前一个命令的返回状态,在后面进行调用。 12.with_items是playbook标准循环,可以用于迭代一个列表或字典,通过{ {item}}获取每次迭代的值 5.playbook构成: hosts: 定义将要执行playbook的远程主机组。主机的集合,定义要执行任务的主机。内容是一个(多个)组或主机的patterns,以逗号为分隔符。如:- hosts: all/web/db/web,db vars: 定义playbook运行时需要使用的变量。 tasks: 定义将要在远程主机上执行的任务列表。命令的集合,每一个play包含了一个task列表(任务列表),一个task在其所对应的所有主机上(通过host pattern匹配的所有主机)执行完毕之后,下一个task才会执行。任务模块用ansible-doc查看,如:ansible-doc copy handlers: 定义task执行完成以后需要调用的任务 5.playbook执行结果 使用ansible-playbook运行playbook文件,输出内容为JSON格式,由不同颜色组成便于识别,绿色代表执行成功,***代表系统状态发生改变,红色代表执行失败。 13.利用include把其他文件包含进来 14.利用role把a文件夹下的相关文件自动添加进这个play 15.debug: var=result #debug模块可以在运行时输出更为详细的信息,帮助我们排错一般所需的目录层级有
vars:变量层 tasks:任务层 handlers:触发条件 files:文件 template:模板 default:默认,优先级最低一、典型案例
]# vim es.yml #要求.yml或.yaml后缀 — #表示开始二、调试:
]# ansible-playbook load.yml #当负载超过0.7后在ansible执行脚本,结果web1主机显示为httpd关闭状态 ]# ansible-playbook --syntax-check load.yml #–syntax-check 检测语法(不太准) ]# ansible-playbook -C load.yml #-C 测试运行(不太准) ]# ansible-playbook load.yml --list-hosts #显示受到影响的主机 ]# ansible-playbook load.yml --list-tasks #显示工作的task ]# ansible-playbook load.yml --list-tags #显示将要运行的tag ]# ansible-playbook ping.yml -f 5 #-f并发进程数量,默认是5,可以写CPU核数的8倍 ]# ansible-playbook user.yml -e @args.yml #调用变量文件,测试 。-e 参数(参数格式必须是json或yaml,yaml格式时可以使用文件) ]# ansible-playbook copy.yml -t chage_index #执行脚本的标签,带了标签时只执行脚本中此标的内容转载地址:http://nlfob.baihongyu.com/