Linux--Ansible 自动化运维

部署配置实验

实验环境

虚拟机 3台 centos7.9

网卡NAT模式 数量 1

组件包 ansiblerepo

设备

IP

备注

Centos01

192.168.161.11

node01

Centos02

192.168.161.12

node02

Centos03

192.168.161.13

node03

14.2.1  Ansible安装

1) 通过YUM安装Ansible 复制提供的ansiblerepo文件夹到Linux本地目录,并设置为yum仓库。然后安装软件。

[root@node01 ~]# yum -y install createrepo

[root@node01 ~]# mv ansiblerepo/ /usr/local/src/

[root@node01 ~]# cd /usr/local/src/ansiblerepo/

[root@node01 ansiblerepo]# createrepo ./

[root@node01 ansiblerepo]# ls

[root@node01 ansiblerepo]# cd

[root@node01 ~]# vim /etc/yum.repos.d/local.repo

[local]
name=CnetOS 7.3
baseurl=file:///mnt/
enabled=1
gpgcheck=0

[ansiblerepo]
name=ansiblerepo
baseurl=file:///usr/local/src/ansiblerepo/
gpgcheck=0

[root@node01 ~]# yum repolist                 //查看yum源是否可用 

[root@node01 ~]# yum -y install ansible

[root@node01 ~]# ansible --version            //验证安装结果

3) 创建SSH免交互登录

       Ansible通过SSH 对设备进行管理,而SSH包含两种认证方式:一种是通过密码认证,另一种是 通过密钥对认证。前者必须和系统交互,而后者是免交互登录。如果希望通过Ansible自动管理设备 应该配置为免交互登录被管理设备。

[root@node01 ~]# ssh-keygen -t rsa   //生成密钥对,后面操作为默认路径,直接回车

[root@node01 ~]# ssh-copy-id root@192.168.161.12  //复制公钥到远端192.168.161.12

[root@node01 ~]# ssh-copy-id root@192.168.161.13  //复制公钥到远端

[root@node01 ~]# ssh 192.168.161.12               //可以免密码登录到192.168.161.12

[root@node02 ~]# exit

[root@node01 ~]# ssh 192.168.161.13

[root@node03 ~]# exit

到此,已经完成Ansible的部署,下面就可以通过Ansible对设备进行管理了。

14.2.2 Ansible配置

      linventory 是 Ansible管理主机信息的配置文件,相当于系统Hosts 文件的功能,默认存放在 /etc/ansible/hosts。在hosts文件中,通过分组来组织设备,Ansible通过Inventory来定义主机和分 组,通过在ansible命令中使用选项-i或--inventory-file指定Inventory。

      Ansible通过将设备列表以分组的方式添加到/etc/ansible/hosis文件来实现对设备的管理,所以 在正式管理之前,首先要编写 hosts 文件。hosts文件中,以]包含的部分代表组名,设备列表支持 主机名和IP地址,默认情况下。通过访问22端口(SSH)来管理设备。着目标主机使用了非默认的 SSH端口,还可以在主机名称之后使用雷号加端口号标明,以行为单位分隔配置。另外,hosts 文件 还支持通配符,

[root@node01 ~]# vim /etc/ansible/hosts 

[web]
192.168.161.12
192.168.161.13
[test01]
www.bdqn.cn:222  //通过222端口管理设备
[mail]
zsl.kgc.cn
zs[2:5].kgc.cn

可以将同一个主机同时归置在多个不同的组中。

      配置完成后,可以针对 hosts 定义的组进行远程操作,也可以针对组中指定的某一个或多个主机操作。下面介绍如何针对特定的服务器操作。

(1)只对 web组中192.168.161.12主机操作。通过--limit参数限定主机的变更。

[root@node01 ~]# ansible web -m command -a "systemctl status firewalld" --limit "192.168.161.12"

(3) 只对192.168.161.0网段主机操作。通过通配符限定主机的变更。

14.2.5 playbook 配置文件

1、执行配置文件

       playbook 配置文件使用YAML语法,具有简洁明了、结构清晰等特点。playbook配置文件类似于Shell 脚本,是一个YAM_ 格式的文件,用于保存针对特定需求的任务列表。前面介绍的ansible命令 虽然可以完成各种任务。但是当配置一些复杂任务时,逐条输入命令就显得效率非常低下。更有效 的方案是在playbook配置文件中放置所有的任务代码,利用 ansible-playbook命令执行该文件,可以 实现自动化运维。YAM_文件的扩展名通常为 yeml 或 yml。

      YAML语法和其他高级语言类似,其结构通过缩进来展示,通过“-”来代表项,通过冒号 “:" 来分隔键和值,整个文件以“---”开始并以“...”结束,如下所示。

[root@node01 ~]# vim /etc/ansible/hosts 

[web1]
192.168.161.12
[web2]
192.168.161.13

[root@node01 ~]# vim /etc/ansible/a.yml

---
- hosts: web1
  remote_user: root
  tasks:
        - name: adduser
          user: name=user2 state=present
          tags:
          - aaa
        - name: addgroup
          group: name=root system=yes
          tags:
          - bbb
- hosts: web2
  remote_user: root
  tasks:
       - name: copy file to web
         copy: src=/etc/passwd dest=/home
         tags:
                      - ccc

所有的 “-” 和 “:” 后面均有空格,而且要注意缩进和对齐。

playbook 的核心元素包含:

> hosts:任务的目标主机,多个主机用冒号分隔,一般调用/etc/ansible/hosts 中的分组信息。

> rernote_user:远程主机上,运行此任务的身份默认为root 。

> tasks:任务,即定义的具体任务,由模块定义的操作列表。

> handlers:触发器,类似tasks,只是在特定的条件下才会触发的任务。某任务的状态在运行 后为changed时,可通过 "notify" 通知给相应的 handlers进行触发执行。

> roles:角色。将hosts剥离出去,由tasks、handlers等所组成的一种特定的结构集合。 

执行pleybook的示例如下。

[root@node01 ~]# ansible-playbook --syntax-check /etc/ansible/a.yml

[root@node01 ~]# ansible-playbook -C /etc/ansible/a.yml  //预测试

[root@node01 ~]# ansible-playbook --list-hosts /etc/ansible/a.yml  //列出主机

[root@node01 ~]# ansible-playbook --list-tasks /etc/ansible/a.yml  //列出任务

[root@node01 ~]# ansible-playbook --list-tags /etc/ansible/a.yml   //列出标签

[root@node01 ~]# ansible-playbook /etc/ansible/a.yml               //执行任务

预测试结果 

列出主机 

执行任务结果 

确认结果 

[root@node01 ~]# ssh 192.168.161.12 tail -2 /etc/passwd

[root@node01 ~]# ssh 192.168.161.13 ls -1 /home/passwd

2. 触发器

       需要触发才能执行的任务,当之前定义在tasks中的任务执行成功后,若希望在此基础上触发其他的任务,这时就需要定义handlers。例如,当通过 ansible 的模块对目标主机的配置文件进行修改之 后,如果任务执行成功,可以触发一个触发器,在触发器中定义目标主机的服务重启操作,以使配置文件生效。handlers触发器具有以下特点。

       > handlers是Ansible提供的条件机制之一。handlers 和 task 很类似,但是它只在被task通知的时候才会触发执行。

       > handlers 只会在所有任务执行完后执行。而且即使被通知了多次,它也只会执行一次,handlers 按照定义的顺序依次执行。

   handlers触发器的使用示例如下。

[root@node01 ~]# ssh 192.168.161.12 netstat -lnupt | grep 80

[root@node01 ~]# vim /etc/ansible/httpd.yml

---
- hosts: web1
  remote_user: root
  tasks:
       - name: change port     //修改端口
         command: sed -i 's/Listen\ 80/Listen\ 8080/g' /etc/httpd/conf/httpd.conf
         notify:               //配置触发条件
      - restart httpd server   //完成该任务后调用名为 restart httpd server 的触发器
 handlers:                     //配置触发器
 - name: restart httpd server  //指定触发器名字
   service: name=httpd state=restarted  //触发任务为重启httpd服务
...

[root@node01 ~]# ansible-playbook /etc/ansible/httpd.yml  //执行yml文件

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值