ansible剧本编写

Posted linux运维菜鸟之旅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible剧本编写相关的知识,希望对你有一定的参考价值。

1.1.1 ansible基于口令方式免交互登录

1.编辑/etc/ansible/hosts管理配置文件,实现基于口令免交互登录

vim /etc/ansible/hosts

[client]

172.16.1.7

172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=123456  

172.16.1.41

 

2.测试是否需要进行交互登录

[root@m01 ~]# ansible george -m ping

172.16.1.41 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}


1.1.2 . ansible以交互方式输入密码登录(所有远程主机密码必须一致)

1. 不配置密码

vim /etc/ansible/hosts

[oldboy]

172.16.1.7

172.16.1.31 ansible_ssh_user=root

172.16.1.41

 

2. -k参数实现以交互方式远程登录

[root@m01 ~]# ansible george -m ping -k   #以交互方式输入密码进行远程管理

SSH password:

172.16.1.7 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

  

1.2 ansible剧本编写规则说明

1.2.1 语法格式

ansible剧本格式:遵循yaml语法格式(类似python脚本编写格式)

rsync配置文件格式:ini语法格式

sersync配置文件格式:xml语法格式(标签格式)

 

1.2.2 pyYAML语法规则:

规则一:缩进

    yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组 成。一定不能使用tab

    强调*****:当编写ansible剧本时,请把键盘的tab键扣掉


规则二:冒号

    CMD="echo"

    yaml:

    mykey:

    每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)

    

规则三:短横线

    想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一  部分

    核心规则:有效的利用空格进行剧本的编写,剧本编写是不支持tab


1.2.3  ansible-playbook编写格式 

1.创建部署rsyn服务剧本

vim /etc/ansible/ansible_play_book/rsync.yaml

ansible剧本编写

-空hosts:空yunwei                   : 指定主机组或单个主机,也可以是all所有主机

空空tasks:                          :固定格式

空空空空-空file:空dest=src=/etc/hosts......  :指定模块

PS:下一个级别要比上一个级别多俩个空格

  

2.对剧本语法检测

ansible-playbook --syntax-check  /etc/ansible/ansible-play_book/rsync.yaml

 

3.-C模拟执行剧本

ansible-playbook  -C /etc/ansible/ansible-play_book/rsync.yaml

 

4.执行剧本

ansible-playbook   /etc/ansible/ansible-play_book/rsync.yaml

 

1.2.4  多剧本编写

1. 编写多个剧本

### 剧本的开头,可以不写

- hosts: all                     <- all表示所有主机,可以写某个主机组; -(空格)hosts:(空格)all

  task:                       <- 剧本所要干的事情; (空格)(空格)task:

    - command: echo hello oldboy linux.        (空格)(空格)空格)(空格)-(空格)模块名称:(空格)模块中对应的功能


2.  剧本编写内容扩展:剧本任务定义名称

- hosts: 172.16.1.7            <- 处理指定单台服务器         -(空格)hosts:(空格)all

  task:                     <- 剧本所要干的事情;         (空格)(空格)task:

    - name:               <—注释信息

     command: echo hello oldboy linux.                     (空格)(空格)空格)(空格)-(空格)模块名称:(空格)模块中对应的功能

 

3. 剧本编写内容扩展:剧本任务编写定时任务

# ansible all -m cron -a "name='restart network' minute=00 hour=00 job='/usr/sbin/ntpdate t ime.nist.gov >/dev/null 2>&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'


说明:测试剧本命令后面可以跟多个-v进行调试检查


4. 剧本编写内容扩展:剧本任务编写多个任务

- 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. 剧本编写内容扩展:剧本任务编写多个主机

- 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

 

1.2.5  剧本编写方式

1.多主机单任务编写方式

2.多主机多任务编写方式
3.不同主机多任务编写方式

1.2.6 ansible编写剧本拍错思路:

1. ansible-playbook编写完,检查语法和模式测试运行

2. 打开脚本,根据-name定位异常原因,然后将剧本中的内容转换为命令执行一次

3. 将参数中的脚本文件推送到远程服务器,在远程服务器本地执行一次

4. ansible执行时,加上-vvvv(显示详细执行过程),也可以定位异常原因


小伙伴们可以关注我的博客号:GeorgeKai,点击“阅读原文”进入

以上是关于ansible剧本编写的主要内容,如果未能解决你的问题,请参考以下文章

如何编写清晰的Ansible剧本(复杂剧本如何构建)

ansible剧本编写

ansible剧本编写

ansible服务及剧本编写

41学习自动化运维工具 Ansible 的基本用法,包括剧本编写任务执行

Ansible-playbook 剧本编写