ansible-palybook剧本
1 ansible基础知识部分补充
1.1 ansible软件特点:
· 可以实现批量管理
· 可以实现批量部署
· ad-hoc(批量执行命令)---针对临时性的操作
ansible clsn -m command -a "hostname" <- 批量执行命令举例
· 编写剧本-脚本(playbook)---针对重复性的操作
1.2 ansible核心功能:
pyYAML-----用于ansible编写剧本所使用的语言格式(saltstack---python)
rsync-ini语法 sersync-xml语法 ansible-pyYAML语法
paramiko---远程连接与数据传输
Jinja2-----用于编写ansible的模板信息
2 ansible剧本编写规则说明
2.1 pyYAML语法规则:
规则一:缩进
yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组成。一定不能使用tab键
注意:编写yaml文件,就忘记键盘有tab
规则二:冒号
CMD="echo"
yaml:
mykey:
每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)
规则三:短横线
想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分
核心规则:有效的利用空格进行剧本的编写,剧本编写是不支持tab的
3 剧本书写格式
### 剧本的开头,可以不写
- hosts: all <- 处理所有服务器,找到所有服务器; -(空格)hosts:(空格)all
tasks: <- 剧本所要干的事情; (空格)(空格)task:
- command: echo hello clsn linux.
(空格)(空格)空格)(空格)-(空格)模块名称:(空格)模块中对应的功能
ansible all -m command -a "echo hello clsn linux"
剧本编写内容扩展:剧本任务定义名称
- hosts: 172.16.1.7 <- 处理指定服务器 -(空格)hosts:(空格)all
task: <- 剧本所要干的事情; (空格)(空格)task:
- name:
command: echo hello clsn linux.
(空格)(空格)空格)(空格)-(空格)模块名称:(空格)模块中对应的功能
3.1 剧本格式示例
[root@m01 ansible-playbook]# vim rsync_sever.yml
- hosts: 172.16.1.41
tasks:
- name: install rsync
yum: name=rsync state=installed
4 剧本编写后检查方法
01:ansible-playbook --syntax-check 01.yml
--- 进行剧本配置信息语法检查
02:ansible-playbook -C 01.yml
--- 模拟剧本执行(彩排)
4.1 语法检查
[root@m01 ansible-playbook]# ansible-playbook --syntax-check 01.yml
playbook: 01.yml
4.2 模拟剧本执行
[root@m01 ansible-playbook]# ansible-playbook -C 01.yml
PLAY [all] **************************************************************** TASK [Gathering Facts] ****************************************************
ok: [172.16.1.41]
ok: [172.16.1.8]
ok: [172.16.1.31] TASK [cron] ***************************************************************
ok: [172.16.1.8]
ok: [172.16.1.41]
ok: [172.16.1.31] PLAY RECAP ****************************************************************
172.16.1.31 : ok=2 changed=0 unreachable=0 failed=0
172.16.1.41 : ok=2 changed=0 unreachable=0 failed=0
172.16.1.8 : ok=2 changed=0 unreachable=0 failed=0
5 剧本示例
5.1 剧本编写内容扩展:剧本任务编写多个任务
- hosts: all
tasks:
- name: restart-network
cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
- name: sync time
cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"
5.2 剧本编写内容扩展:剧本任务编写多个主机
- hosts: 172.16.1.7
tasks:
- name: restart-network
cron: name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'
- name: sync time
cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"
- hosts: 172.16.1.31
tasks:
- name: show ip addr to file
shell: echo $(hostname -i) >> /tmp/ip.txt
6 剧本编写方式
01 多主机单任务编写方式
02 多主机多任务编写方式
03 不同主机多任务编写方式
常见错误
1 ansible编写剧本排错思路
1. ansible-playbook编写完,检査语法和模拟测试运行
2. 打开剧本,定位异常问題原因,将剧本中的内容转换命令执行一次
|
1
2
|
cron: name=clsn64 minute=ee hour=03 job='/bin/sh /server/scripts/test.sh &>/dev/null'ansible clsn -m cron -a "name=clsn64 minute=00 hour=03 job='/bin/sh /server/scripts/test.sh &>/dev/null |
3. 将参数中的脚本文件推送到远程屎务器,在远程服务器本地执行脚本 sh -x test.sh
说明:ansible执行时,加1上-vvvv显示ansible详细执行过程,也可以定位异常原因!
1.1 排错逻辑
01. 剧本执行中的错误
02. 把剧本中的内容转换为ansible命令执行
ansible clsn -m yum -a "name=rsync state=installed"
03. 把ansible服务器上执行的命令放在被管理主机上执行
yum install -y rsync
2 ansible 无法正常使用
2.1 在被控端上 root@notty 进程一直存在
[root@backup ~]# ps -ef|grep sshd
root 35274 1 0 15:25 ? 00:00:00 /usr/sbin/sshd
root 37004 35274 0 16:23 ? 00:00:00 sshd: root@pts/2
root 37062 35274 0 16:55 ? 00:00:00 sshd: root@notty
root 37154 37006 0 16:55 pts/2 00:00:00 grep --color=auto sshd
2.2 解决办法
首先,将该进程干掉
kill pid
2.3 然后使用ansible的 -vvvv 参数查看执行的错误信息
Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.6/site-packages/ansible/plugins/callback/__init__.pyc
META: ran handlers
Using module file /usr/lib/python2.6/site-packages/ansible/modules/system/ping.py
<172.16.1.8> ESTABLISH SSH CONNECTION FOR USER: None
<172.16.1.8> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/923ebeb605 172.16.1.8 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
……
找到在哪里出错。
2.4 可能的错误
在 /etc/ssh/sshd_config 文件中的第132行为空,导致sftp 无法连接,出错~
|
1
|
133 Subsystem sftp /usr/libexec/openssh/sftp-server |
3 常见问题二:
|
1
2
3
|
[root@m01 ~]# ansible -k 172.16.1.51 -m pingSSH password:[WARNING]: No hosts matched, nothing to do |
原因分析:
在ansible的hosts文件中,没有配置相应主机地址信息
3.1 常见问题三:
|
1
2
3
4
5
6
|
# ansible -k 172.16.1.51 -m pingSSH password:172.16.1.51|FAILED! => {"failed": true,"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."} |
原因分析:
因为没有受控端的指纹信息,在known_hosts文件中
转载博文链接:https://www.cnblogs.com/clsn/p/7743792.html#auto_id_69
ansible-palybook剧本的更多相关文章
- ansible的剧本
ansible的playbook的介绍-yaml ansible的playbook是使用yaml语言写的 YAML标记语言介绍YAML是一个可读性高的用来表达资料序列的格式.YAML参考了其他多种语言 ...
- Ansible yaml 剧本(傻瓜式)
优化ansible安装MySQL: Ansible部署MySQL编译安装 - xiao智 - 博客园 (cnblogs.com) Ansible yaml 剧本(傻瓜式): --- - hosts: ...
- 2.Ansible Playbook剧本
1.playbook?playbook翻译过来就是"剧本",那playbook组成如下 play: 定义的是主机的角色 task: 定义的是具体执行的任务 playbook: 由一 ...
- ansible的剧本play(四)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA68AAAETCAYAAADZDzDOAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjw
- ansible批量管理软件部署及剧本
服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 -.el6.x86_64 # SMP Tue Mar :: UTC x86_64 x86_6 ...
- ansible服务及剧本编写
第1章 ansible软件概念说明 python语言是运维人员必会的语言,而ansible是一个基于Python开发的自动化运维工具 (saltstack).其功能实现基于SSH远程连接服务:ansi ...
- ansible 剧本
ansible的管理与剧本 首先我们安装一个ansible. 在7版本,直接用yum安装就可以 yum -y install ansible 然后清空ansible的配置文件,在里面写入自己需要管 ...
- ansible的管理与剧本
首先我们安装一个ansible. 在7版本,直接用yum安装就可以 yum -y install ansible 然后清空ansible的配置文件,在里面写入自己需要管理的服务器的ip和相应的登陆密码 ...
- Linux中ansible批量管理软件部署及剧本编写
服务器版本信息: Centos6.9 [root@db02 ~]# uname -a Linux db02 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29: ...
- 剧本--ansible
剧本不喜欢, 1.1 编写剧本规范:(PYyaml语法格式文件) 剧本中有层级划分 每个层级都要用两个空格进行区分 第一级标题 第二级标题 第三级标题 强调注意:一定使用ansible软件配置剧本时, ...
随机推荐
- python 爬虫初试
python3.5 抓网易新闻的排行榜上的新闻,主要用自带的request模块和lxml import re from urllib import request from lxml import ...
- Notes about Vue Style Guide
A. Necessary Multiple-word for component’s name Data for component must be a function The definition ...
- CRM——讲师与学生
一.课程记录和学习记录 1.初始化 course_record, study_record.2.学习记录3.录入成绩4.显示成绩 ajax 查询 柱状图展示成绩 highcharts 5.上传作业(o ...
- Java NIO(三) Buffer
Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO ...
- 服务器ipmi远程管理
DELL iDRAC (Integrated Dell™ Remote Access Controller )是 Dell PowerEdge 系列服务器上的远程管理方案, 11代 12代服务器已经集 ...
- sqlserver 带输出参数的存储过程
--创建存储过程create procedure proc_stu@sname varchar(20),@pwd varchar(50),@flag bit outputasif exists(sel ...
- Linux中基于apache httpd的svn服务器搭建与配置
mod_dav_svn是apache连接svn的模块 yum install subversion mod_dav_svn httpd 配置文件简单说明, SVNParentPath 说明可以在指定的 ...
- 别跑了,看看脚下有木有money
别跑了,看看脚下有木有money 1.长大论坛 本来是想做个博客的,无奈级别不够,博客过于复杂,所以就做了这个类似于贴吧的东西.在这里,你可以发帖:可以吐槽学校.可以向他人寻求帮助.甚至可以 ...
- 怎样在linux下编写C程序并编译执行
一.Hello, world! 在linux下输入:(以hello.c为例)首先选中文件要保存的路径(如:cd work)vi hello.c(要编辑的文件名) 输入程序:# include<s ...
- C++11之std::future和std::promise和std::std::packaged_task
为什么C++11引入std::future和std::promise?C++11创建了线程以后,我们不能直接从thread.join()得到结果,必须定义一个变量,在线程执行时,对这个变量赋值,然后执 ...