自动化运维工具——Ansible学习(二)

这篇具有很好参考价值的文章主要介绍了自动化运维工具——Ansible学习(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、handlers和notify结合使用触发条件

1.新建httpd.yml文件

2.复制配置文件到ansible的files目录中

3.卸载被控机已安装的httpd

4.执行httpd.yml脚本

5.更改httpd.conf配置文件

6.使用handlers

7.重新执行httpd.yml脚本

8.检查被控机的端口号是否改变

9.handlers也可以触发多个

二、tags

1.通过指定标签来执行特定的动作

2.停止httpd服务

3.检查是否成功停止

4.执行启动服务的tags

5.重新检查服务是否启动

6.也可以针对多个标签执行脚本

7.多个动作对应一个标签tags

三、playbook中变量的使用

1.定义1个变量

(1)编写脚本

(2)启动脚本时对脚本中的变量进行赋值

(3)检查程序是否成功安装、服务是否成功开启

2.定义2个变量

(1)编写脚本

(2)执行脚本

(3)查看程序是否安装成功

(4)卸载程序

3.在脚本内部给变量赋值

(1)编写脚本

(2)执行脚本

(3)检查程序是否成功安装

(4)卸载程序

4.在主机清单中给脚本定义变量


一、handlers和notify结合使用触发条件

Handlers

        是task列表,这些task与前述的task的task并没有本质上的不同,用于当关注的资源发生变化时,才会采取一定的操作。

        Notify此action可用于在每个play的最后被触发,这样可避免多次有改变发生时每次都执行指定的操作,仅在所有的变化发生完成后一次性地执行指定操作。在notify中列出的操作成为handler,也即notify中调用handler中定义的操作。

例如:更新配置文件,重新启动playbook,系统不会重启服务。

1.新建httpd.yml文件

[root@ansible145 ansible]# vim httpd.yml

---
- hosts: websrvs
  remote_user: root

  tasks:
    - name: install httpd package
      yum: name=httpd
    - name: copy conf file
      copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
    - name: start service
      service: name=httpd state=started enabled=yes

2.复制配置文件到ansible的files目录中

[root@ansible145 ansible]# ll /etc/httpd/conf/httpd.conf 
-rw-r--r--. 1 root root 11753 May 30 21:49 /etc/httpd/conf/httpd.conf

[root@ansible145 ansible]# cp /etc/httpd/conf/httpd.conf files/

[root@ansible145 ansible]# tree
.
├── files
│   ├── httpd.conf
│   ├── index.html
│   └── test.html
├── file.yml
├── hello2.yml
├── hello.yml
├── host.sh
└── selinux

3.卸载被控机已安装的httpd

检查端口号,80端口已开启,需要卸载httpd

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

卸载命令

[root@ansible145 ansible]# ansible all -m yum -a 'name=httpd state=absent'

检查被控机的80端口已消失

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

4.执行httpd.yml脚本

# 检查语法
[root@ansible145 ansible]# ansible-playbook -C httpd.yml

# 语法没问题再执行脚本
[root@ansible145 ansible]# ansible-playbook -C httpd.yml

被控机已成功安装并启动httpd服务,80端口已启动

[root@ansible145 ansible]# ansible websrvs -m shell -a 'ss -ntl | grep :80'
192.168.22.142 | CHANGED | rc=0 >>
LISTEN     0      128         :::80                      :::*                  
192.168.22.141 | CHANGED | rc=0 >>
LISTEN     0      128         :::80                      :::* 

5.更改httpd.conf配置文件

修改端口号为8080

[root@ansible145 ansible]# vim ./files/httpd.conf

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

再次执行httpd.yml后,检查80端口号,依然还在启动,没有变为8080

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

6.使用handlers

因此,当我们修改程序的配置文件时,重新执行ansible脚本需要重启服务,变为最新的配置和服务,此时,就需要用到handlers。

---
- hosts: websrvs
  remote_user: root

  tasks:
    - name: install httpd package
      yum: name=httpd
    - name: copy conf file
      copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
      notify: restart service  # 标记改变的任务,名字要与handlers下的name一一对应
      # 告诉handlers,当配置文件发生改变时,执行handlers下面的重启服务任务
    - name: start service
      service: name=httpd state=started enabled=yes

   handlers: # 当上面的某个或某些任务改变时,执行下面的任务
    - name: restart service
      service: name=httpd state=restarted

更改主控机的配置文件,因为第二次执行脚本时,更改后的配置文件8080端口已经复制到被控机上了,如果不更改,就相当于配置文件没有变。

[root@ansible145 ansible]# vim ./files/httpd.conf

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

7.重新执行httpd.yml脚本

[root@ansible145 ansible]# ansible-playbook httpd.yml 

8.检查被控机的端口号是否改变

端口号改变,服务成功重启!

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

9.handlers也可以触发多个

- hosts: websrvs
  remnte user: root
  
  tasks:
    - name: add group nginx
      tags: user
      user: name=nginx state=present
    - name: add user nginx
      user: name=nginx state=present group=nginx
    - name: Inslall Ngiix
      yum: name=nginx state=present
    - name: config
      copy: src=/root/contig.txt dest=/etc/nginx/nginx.conf
    notify:
      - Restart Nginx
      - Check Nginx Process
 
  handlers:
    - name: Restart Nginx
      service: name=nginx state=restarted enabled=yes
    - name: Check Nginx process
      shell: killall -0 nginx > /tmp/nginx.log

二、tags

1.通过指定标签来执行特定的动作

---
- hosts: websrvs
  remote_user: root

  tasks:
    - name: install httpd package
      yum: name=httpd
      tags: inshttpd
    - name: copy conf file
      copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
      notify: restart service
    - name: start service
      service: name=httpd state=started enabled=yes
      tags: rshttpd

  handlers:
    - name: restart service
      service: name=httpd state=restarted

2.停止httpd服务

[root@ansible145 ansible]# ansible websrvs -m service -a 'name=httpd state=stopped'

3.检查是否成功停止

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

4.执行启动服务的tags

[root@ansible145 ansible]# ansible-playbook -t rshttpd httpd.yml

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

5.重新检查服务是否启动

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

6.也可以针对多个标签执行脚本

# 卸载httpd
[root@ansible145 ansible]# ansible websrvs -m yum -a 'name=httpd state=absent'

# 检查是否成功卸载
[root@ansible145 ansible]# ansible websrvs -m shell -a 'rpm -q httpd'

# 执行多个tags
[root@ansible145 ansible]# ansible-playbook -t inshttpd,rshttpd httpd.yml 

# 启动的服务为默认的80端口
[root@ansible145 ansible]# ansible websrvs -m shell -a 'ss -ntl | grep :80'
192.168.22.141 | CHANGED | rc=0 >>
LISTEN     0      128         :::80                      :::*                  
192.168.22.142 | CHANGED | rc=0 >>
LISTEN     0      128         :::80                      :::* 

7.多个动作对应一个标签tags

脚本:

---
- hosts: websrvs
  remote_user: root

  tasks:
    - name: install httpd package
      yum: name=httpd
      tags: httpd
    - name: copy conf file
      copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
      notify: restart service
    - name: start service
      service: name=httpd state=started enabled=yes
      tags: httpd

  handlers:
    - name: restart service
      service: name=httpd state=restarted
# 卸载httpd
[root@ansible145 ansible]# ansible websrvs -m yum -a 'name=httpd state=absent'

# 检查是否成功卸载
[root@ansible145 ansible]# ansible websrvs -m shell -a 'rpm -q httpd'

# 执行tags
[root@ansible145 ansible]# ansible-playbook -t httpd httpd.yml 

# 启动的服务为默认的80端口
[root@ansible145 ansible]# ansible websrvs -m shell -a 'ss -ntl | grep :80'
192.168.22.141 | CHANGED | rc=0 >>
LISTEN     0      128         :::80                      :::*                  
192.168.22.142 | CHANGED | rc=0 >>
LISTEN     0      128         :::80                      :::* 

查看标签:

[root@ansible145 ansible]# ansible-playbook httpd.yml --list-tags

playbook: httpd.yml

  play #1 (websrvs): websrvs	TAGS: []
      TASK TAGS: [httpd]

三、playbook中变量的使用

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

使用变量可以对不同的被控机进行不同的操作。

ansible websrvs -m setup | grep ansible_fqdn

ansible websrvs -m setup | grep ansible_hostname

ansible websrvs -m setup -a 'filter=ansible_fqdn'

ansible websrvs -m setup -a 'filter=ansible_hostname'

ansible websrvs -m setup -a 'filter=ansible_*'

ansible websrvs -m setup -a 'filter=*address'

ansible websrvs -m setup -a 'filter=ansible_all_ipv4_addresses'

ansible websrvs -m setup -a 'filter=ansible_eth0'

1.定义1个变量

(1)编写脚本
vim app.yml


---
- hosts: appsrvs
  remote_user: root

  tasks:
    - name: install  package
      yum: name={{ pkname }}
    - name: start service
      service: name={{ pkname }} state=started enabled=yes
(2)启动脚本时对脚本中的变量进行赋值
[root@ansible145 ansible]# ansible-playbook -e 'pkname=vsftpd' app.yml
(3)检查程序是否成功安装、服务是否成功开启

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

2.定义2个变量

(1)编写脚本
---
- hosts: appsrvs
  remote_user: root

  tasks:
    - name: install  package
      yum: name={{ pkname1 }}
    - name: install  package
      yum: name={{ pkname2 }}
(2)执行脚本
[root@ansible145 ansible]# ansible-playbook -e 'pkname1=httpd pkname2=memcached' app.yml 
(3)查看程序是否安装成功

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

(4)卸载程序
[root@ansible145 ansible]# ansible appsrvs -m shell -a 'yum -y remove httpd memcached vsftpd'

3.在脚本内部给变量赋值

上面两个脚本都是在命令行对脚本中的变量进行赋值的,我们也可以在脚本内部给变量赋值。

(1)编写脚本
---
- hosts: appsrvs
  remote_user: root
  vars:
    - pkname1: httpd
    - pkname2: vsftpd
  tasks:
    - name: install  package
      yum: name={{ pkname1 }}
    - name: install  package
      yum: name={{ pkname2 }}
(2)执行脚本
[root@ansible145 ansible]# ansible-playbook app.yml 
(3)检查程序是否成功安装

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

(4)卸载程序
[root@ansible145 ansible]# ansible appsrvs -m shell -a 'yum -y remove httpd vsftpd'

4.在主机清单中给脚本定义变量

[root@ansible145 ansible]# vim /etc/ansible/hosts

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

vim hostname.yml


---
- hosts: websrvs
  remote_user: root

  tasks:
    - name: set hostname
      hostname: name=www{{ http_port }}.test.com

执行脚本

# 检查语法
[root@ansible145 ansible]# ansible-playbook -C hostname.yml 


# 执行脚本
[root@ansible145 ansible]# ansible-playbook hostname.yml


# 查看websrvs主机名是否成功更改
[root@ansible145 ansible]# ansible websrvs -a 'hostname'
192.168.22.141 | CHANGED | rc=0 >>
www81.test.com
192.168.22.142 | CHANGED | rc=0 >>
www82.test.com

上面的修改主机名的脚本中,www{}test.com部分是公用的,也可以对其进行修改

修改/etc/ansible/hosts文件

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

修改脚本

vim hostname.yml

---
- hosts: websrvs
  remote_user: root

  tasks:
    - name: set hostname
      hostname: name={{ nodename }}{{ http_port }}.{{ domainname }}

执行脚本后查看主机名,已经被成功修改

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习

注意:如果在上述地方都设置后,在命令行对变量进行重新赋值,则命令行的优先级最高

[root@ansible145 ansible]# ansible-playbook -e 'nodename=web domainname=example.com' hostname.yml 

普通变量的优先级比分组的公共变量的优先级高

自动化运维工具——Ansible学习(二),Linux学习,自动化,ansible,学习文章来源地址https://www.toymoban.com/news/detail-590842.html

到了这里,关于自动化运维工具——Ansible学习(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自动化运维工具—Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 市面上其他自动化工具:pupet(ruby语言) saltstack(python) chef(C/S模式)等 Ansible能批量配

    2024年02月10日
    浏览(33)
  • 自动化运维工具——Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个

    2024年02月14日
    浏览(36)
  • Ansible自动化运维工具

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 ansible 自动化运维工具(机器管理工具) 可以实现批量管理多台(成百上千)主机,应用级

    2024年02月14日
    浏览(32)
  • 【Ansible】Ansible自动化运维工具之playbook剧本

      简单来说,playbooks是一种简单的配置管理系统与多机器部署系统的基础。与现有的其他系统有不同之处,且非常适合复杂应用的部署。   Playbooks 可用于声明配置,更强大的地方在于,playbooks可以编排有序的去执行过程,甚至做到多组机器间来回有序的执行特别指定的

    2024年02月14日
    浏览(27)
  • 自动化运维工具之Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个

    2024年02月08日
    浏览(53)
  • 从小白到大神之路之学习运维第61天--------Ansible自动化运维工具(playbook配置文件深入了解)

    第三阶段基础 时  间:2023年7月14日 参加人:全班人员 内  容: playbook配置文件 目录 playbook配置文件 一、playbook配置文件概念 修改hosts文件 建立playbook配置文件 yml脚本写法注释: 二、Playbook的核心元素 三、Playbook的用法 四、实验案例: (一)工作流程 1、语法检查   2.预测

    2024年02月16日
    浏览(46)
  • Ansible 自动化运维工具的使用

    目录   一、Ansible简介 二、Ansible 的安装和使用 1.下载 2.使用 三、Ansible命令和模块 1.命令格式 2.命令行模块 (1)command 模块 (2)shell 模块 (3)cron 模块 (4)user 模块 (5)group 模块 (6)copy 模块 (7)file 模块 (8)hostname 模块 (9)ping 模块  (10)yum 模块 (11)service/

    2024年02月11日
    浏览(29)
  • 自动化运维工具-------Ansible(超详细)

    Ansible是自动化运维工具,基于Python开发,分布式,无需客户端,轻量级,实现了批量系统配置、批量程序部署、批量运行命令等功能, ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架 。 1)、no agents:不需要在

    2024年02月10日
    浏览(27)
  • Ansible 自动化运维工具(完善版)

    目录  Ansible概述 Ansible特点 Ansible应用 1、使用者 2、Ansible工具集合 3、作用对象 Ansible的搭建 环境 ansible主机 1、ansible 2、Ansible-doc Ansible模块 1.command模块 2.shell模块 3.raw模块 Ansible是最近非常火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工

    2024年02月16日
    浏览(32)
  • Ansible自动化运维工具的认识

    目录 一、Ansible概述 二、Ansible特点 三、Ansible应用 1、使用者 2、Ansible工具集合 3、作用对象 四、Ansible的搭建 1、实验环境 2、环境准备 Ansible: 3、创建ssh免密交互登录 client端环境准备 五、Ansible配置 六、Ansible命令 1、ansible 实验案例: 1.检查所有主机是否存活 2.列出Rich组中

    2024年02月16日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包