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 ping SSH 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 ping SSH 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
最新文章
- WPF - 属性系统 (3 of 4)
- git无法定位程序输入点libiconv
- Delphi面向对象编程
- BZOJ2434 [Noi2011]阿狸的打字机(AC自动机 + fail树 + DFS序 + 线段树)
- Android -- 仿ios上下反弹效果
- Managing the Lifecycle of a Service
- 如何查看,关闭和开启selinux
- 解决tomcat部署多个虚拟机时报IllegalStateException: Web app root system property already set to 的问题
- 反人类的MyEclipse之-MyEclipse代码自动补全
- hdoj 5288 OO’s Sequence
- MongoDB的常用命令
- Java [leetcode 34]Search for a Range
- Ignatius and the Princess II(全排列)
- python 循环中的else
- Windows 驱动发展基金会(九)内核函数
- Ubuntu Server 17.04安装GNOME指令
- Pi Hybrids问题
- PyCharm使用小技巧
- 常用的flex布局
- phpMyAdmin 安装教程全攻略