自动化运维工具ansible——安装及模块管理

ansible简介

?ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

?ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

ansible的架构

连接其他主机默认使用ssh协议

ansible core核心引擎:即ansible本身
host inventory主机清单:用来定义ansible所管理主机,默认是在ansible的hosts配置文件中定义被管理主机,同时也支持自定义动态主机清单和指定其他配置文件的位置
connect plugin连接插件:负责和被管理主机实现通信,除支持使用SSH连接被管理主机外,ansible还支持其他的连接方式,所有需要有连接插件将各个主机用连接插件连接到ansible
playbook剧本:用来集中定义ansible任务的配置文件,即将多个任务定义在一个剧本中由ansible自动执行,可以由控制主机针对多台被管理主机同时运行多个任务
core modules核心模块:是ansible自带的模块,使用这些模块将资源分发到被管理主机使其执行特定任务或匹配特定的状态
custom modules自定义模块:用于完成模块功能的补充,可借助相关插件完成记录日志,发送邮件等功能

实验环境

控制主机 192.168.13.128
被管理主机 192.168.13.129
被管理主机 192.168.13.130

一,ansible的安装(在控制主机上)

1,安装ansible服务

[[email protected] ~]# systemctl stop firewalld.service   ##关闭所有主机的防火墙
[[email protected] ~]# setenforce 0
[[email protected] ~]# yum install epel-release -y   ##安装epel源
[[email protected] ~]# yum install ansible -y   ##安装ansible服务
[[email protected] ~]# yum install tree -y
[[email protected] ~]# tree /etc/ansible/   ##查看ansible属性结构
/etc/ansible/
├── ansible.cfg  ##配置文件
├── hosts    ##主机清单
└── roles

2,编辑hosts主机清单

[[email protected] ~]# vim /etc/ansible/hosts   ##编辑ansible主机清单
[webserver]
192.168.13.129  ##web的主机地址
[mysql]
192.168.13.130  ##mysql的主机地址

3,生成秘钥对,推送

[[email protected] ~]# ssh-keygen -t rsa   ##生成秘钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):   ##回车
Created directory ‘/root/.ssh‘.
Enter passphrase (empty for no passphrase):    ##输入密码
Enter same passphrase again:    ##确认密码
[[email protected] ~]# ls .ssh/   ##查看秘钥
id_rsa  id_rsa.pub
[[email protected] ~]# ssh-copy-id [email protected]   ##上传秘钥到后面的服务器上
[[email protected] ~]# ssh-copy-id [email protected]   

4,使用ansible命令行执行

[[email protected] ~]# ansible webserver -m command -a ‘date‘  ##使用ansible命令行模块执行date
Enter passphrase for key ‘/root/.ssh/id_rsa‘:   ##输入秘钥密码
192.168.13.129 | CHANGED | rc=0 >>
2020年 01月 23日 星期三 23:57:16 CST

[[email protected] ~]# ansible mysql -m command -a ‘date‘
Enter passphrase for key ‘/root/.ssh/id_rsa‘:
192.168.13.130 | CHANGED | rc=0 >>
2020年 01月 23日 星期三 23:57:38 CST

[[email protected] ~]# ssh-agent bash  ##免交互代理
[[email protected] ~]# ssh-add    ##添加
Enter passphrase for /root/.ssh/id_rsa:   ##输入秘钥
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
[[email protected] ~]# ansible webserver -m command -a ‘date‘   ##继续执行命令行模块实现免交互
192.168.13.129 | CHANGED | rc=0 >>
2020年 01月 23日 星期三 23:58:26 CST

[[email protected] ~]# ansible mysql -m command -a ‘date‘
192.168.13.130 | CHANGED | rc=0 >>
2020年 01月 23日 星期三 23:58:39 CST

二,ansible模块管理

1,command命令行模块

[[email protected] ~]# ansible all -a ‘date‘
192.168.13.130 | CHANGED | rc=0 >>
2020年 01月 30日 星期四 00:17:02 CST

192.168.13.129 | CHANGED | rc=0 >>
2020年 01月 30日 星期四 00:17:02 CST
[[email protected] ~]# ansible all -a ‘ls /‘  ##查看后两台主机的根目录
##如果不加-m模块,则默认运行command模块all是所有主机

2,cron计划性任务模块

[[email protected] ~]# ansible-doc -s cron  ##查看cron模块信息
[[email protected] ~]# ansible webserver -m cron -a ‘minute="*/1" job="/usr/bin/echo haha" name="test haha"‘
##选择cron模块指定时间,工作内容,名称
192.168.13.129 | CHANGED => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "envs": [],
        "jobs": [
                "test haha"
        ]
}
[[email protected] ~]# ansible webserver -a ‘crontab -l‘   ##执行命令行查看计划性任务
192.168.13.129 | CHANGED | rc=0 >>
#Ansible: test haha
*/1 * * * * /usr/bin/echo haha

[[email protected] ~]# ansible webserver -m cron -a ‘name="test haha" state=absent‘ ##移除计划性任务
192.168.13.129 | CHANGED => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "envs": [],
        "jobs": []
}

3,user模块(请求的是useradd,userdel,usermod三个指令)

[[email protected] ~]# ansible-doc -s user  ##查看user模块信息
[[email protected] ~]# ansible all -m user -a ‘name=test‘  ##给所有主机创建test用户
192.168.13.129 | CHANGED => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "comment": "",
        "create_home": true,
        "group": 1001,
        "home": "/home/test",
        "name": "test",
        "shell": "/bin/bash",
        "state": "present",
        "system": false,
        "uid": 1001
}
192.168.13.130 | CHANGED => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "comment": "",
        "create_home": true,
        "group": 1001,
        "home": "/home/test",
        "name": "test",
        "shell": "/bin/bash",
        "state": "present",
        "system": false,
        "uid": 1001
}
[[email protected] ~]# ansible webserver -m user -a ‘name=test state=absent‘
##删除webserver中test用户
192.168.13.129 | CHANGED => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "force": false,
        "name": "test",
        "remove": false,
        "state": "absent"
}

4,group模块(请求的是groupadd,groupdel,groupmod三个指令)

[[email protected] ~]# ansible mysql -m group -a ‘name=mysql gid=306 system=yes‘
##创建mysql系统组
192.168.13.130 | SUCCESS => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "gid": 306,
        "name": "mysql",
        "state": "present",
        "system": true
}
[[email protected] ~]# ansible mysql -a ‘tail -1 /etc/group‘  ##查看创建的情况
192.168.13.130 | CHANGED | rc=0 >>
mysql:x:306:

[[email protected] ~]# ansible mysql -m user -a ‘name=test02 uid=306 group=mysql system=yes‘
##创建系统用户test02并加入到mysql组中
192.168.13.130 | CHANGED => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "comment": "",
        "create_home": true,
        "group": 306,
        "home": "/home/test02",
        "name": "test02",
        "shell": "/bin/bash",
        "state": "present",
        "system": true,
        "uid": 306
}
[[email protected] ~]# ansible mysql -a ‘id test02‘   ##查看系统用户test02的信息
192.168.13.130 | CHANGED | rc=0 >>
uid=306(test02) gid=306(mysql) 组=306(mysql)

5,copy模块

[[email protected] ~]# ansible-doc -s copy  ##copy模块的信息
[[email protected] ~]# ansible mysql -m copy -a ‘src=/etc/fstab dest=/opt/fstab.bak owner=root mode=644‘
##复制源到目标,属组和文件权限
192.168.13.130 | CHANGED => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "checksum": "0725780c6841b5cae04ba31a054b6090d701bc19",
        "dest": "/opt/fstab.bak",
        "gid": 0,
        "group": "root",
        "md5sum": "4a95e64f6c25098ca5e0613c5283e8f1",
        "mode": "0644",
        "owner": "root",
        "secontext": "system_u:object_r:usr_t:s0",
        "size": 595,
        "src": "/root/.ansible/tmp/ansible-tmp-1580550278.09-89338211954459/source",
        "state": "file",
        "uid": 0
}
[[email protected] ~]# ansible mysql -a ‘ls -l /opt‘   ##查看是否复制成功
192.168.13.130 | CHANGED | rc=0 >>
总用量 4
-rw-r--r--. 1 root root 595 2月   1 17:44 fstab.bak
drwxr-xr-x. 2 root root   6 3月  26 2015 rh
[[email protected] ~]# ansible mysql -m copy -a ‘content="hello!" dest=/opt/test.txt‘
##用copy进行写入文件内容
192.168.13.130 | CHANGED => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "checksum": "8f7d88e901a5ad3a05d8cc0de93313fd76028f8c",
        "dest": "/opt/test.txt",
        "gid": 0,
        "group": "root",
        "md5sum": "5a8dd3ad0756a93ded72b823b19dd877",
        "mode": "0644",
        "owner": "root",
        "secontext": "system_u:object_r:usr_t:s0",
        "size": 6,
        "src": "/root/.ansible/tmp/ansible-tmp-1580550521.27-190936730009060/source",
        "state": "file",
        "uid": 0
}
[[email protected] ~]# ansible mysql -a ‘cat /opt/test.txt‘   ##查看写入的文件内容
192.168.13.130 | CHANGED | rc=0 >>
hello!

6,file模块(文件属性)

[[email protected] ~]# ansible mysql -m file -a ‘path=/opt/test.txt owner=test02 group=mysql mode=666‘
##指定文件的属主,属组,文件的权限
192.168.13.130 | CHANGED => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "gid": 306,
        "group": "mysql",
        "mode": "0666",
        "owner": "test02",
        "path": "/opt/test.txt",
        "secontext": "system_u:object_r:usr_t:s0",
        "size": 6,
        "state": "file",
        "uid": 306
}
[[email protected] ~]# ansible mysql -a ‘ls -l /opt/test.txt‘  ##查看文件的属性
192.168.13.130 | CHANGED | rc=0 >>
-rw-rw-rw-. 1 test02 mysql 6 2月   1 17:48 /opt/test.txt
[[email protected] ~]# ansible mysql -m file -a ‘src=/opt/test.txt path=/opt/test.txt.link state=link‘
##创建链接性文件
192.168.13.130 | CHANGED => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "dest": "/opt/test.txt.link",
        "gid": 0,
        "group": "root",
        "mode": "0777",
        "owner": "root",
        "secontext": "unconfined_u:object_r:usr_t:s0",
        "size": 13,
        "src": "/opt/test.txt",
        "state": "link",
        "uid": 0
}
[[email protected] ~]# ansible mysql -a ‘ls -l /opt/‘          ##查看文件的属性
192.168.13.130 | CHANGED |   rc=0 >>
总用量 8
-rw-r--r--. 1 root   root  595 2月   1 17:44 fstab.bak
drwxr-xr-x. 2 root   root    6 3月  26 2015 rh
-rw-rw-rw-. 1 test02 mysql   6 2月   1 17:48 test.txt
lrwxrwxrwx. 1 root   root   13 2月   1 17:55 test.txt.link -> /opt/test.txt
[[email protected] ~]# ansible mysql -m file -a ‘path=/opt/abc.txt state=touch‘  ##创建一个空文件
192.168.13.130 | CHANGED => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "dest": "/opt/abc.txt",
        "gid": 0,
        "group": "root",
        "mode": "0644",
        "owner": "root",
        "secontext": "unconfined_u:object_r:usr_t:s0",
        "size": 0,
        "state": "file",
        "uid": 0
}
[[email protected] ~]# ansible mysql -a ‘ls -l /opt/‘   ##查看创建情况
192.168.13.130 | CHANGED | rc=0 >>
总用量 8
-rw-r--r--. 1 root   root    0 2月   1 17:57 abc.txt
-rw-r--r--. 1 root   root  595 2月   1 17:44 fstab.bak
drwxr-xr-x. 2 root   root    6 3月  26 2015 rh
-rw-rw-rw-. 1 test02 mysql   6 2月   1 17:48 test.txt
lrwxrwxrwx. 1 root   root   13 2月   1 17:55 test.txt.link -> /opt/test.txt
[[email protected] ~]# ansible mysql -m file -a ‘path=/opt/abc.txt state=absent‘   ##删除文件
192.168.13.130 | CHANGED => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": true,
        "path": "/opt/abc.txt",
        "state": "absent"
}
[[email protected] ~]# ansible mysql -a ‘ls -l /opt/‘           ##查看文件的信息
192.168.13.130 | CHANGED | rc=0 >>
总用量 8
-rw-r--r--. 1 root   root  595 2月   1 17:44 fstab.bak
drwxr-xr-x. 2 root   root    6 3月  26 2015 rh
-rw-rw-rw-. 1 test02 mysql   6 2月   1 17:48 test.txt

7,ping模块(测试被管理主机是否在线)

[[email protected] ~]# ansible all -m ping
192.168.13.130 | SUCCESS => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
}
192.168.13.129 | SUCCESS => {
        "ansible_facts": {
                "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
}

8,yum模块

[[email protected] ~]# ansible-doc -s yum ##yum模块信息
[[email protected] ~]# ansible webserver -m yum -a ‘name=httpd‘  ##安装httpd服务
[[email protected] ~]# ansible webserver -m yum -a ‘name=httpd state=absent‘   ##移除服务

9,service模块

[[email protected] ~]# ansible webserver -m service -a ‘name=httpd enabled=true state=started‘
##开启httpd服务
[[email protected] ~]# ansible webserver -a ‘systemctl status httpd‘ ##查看开启的情况

10,shell模块

[[email protected] ~]# ansible webserver -m user -a ‘name=jerry‘  ##创建用户
[[email protected] ~]# ansible webserver -m shell -a ‘echo abc123 | passwd --stdin jerry‘ ##创建密码
192.168.13.129 | CHANGED | rc=0 >>
更改用户 jerry 的密码 。
passwd:所有的身份验证令牌已经成功更新。

11,script模块(脚本模块)

[[email protected] ~]# cd /opt/
[[email protected] opt]# vim test.sh  ##编辑脚本文件
#!/bin/bash
echo "this is test script" > /opt/script.txt
chmod 666 /opt/script.txt
[[email protected] opt]# chmod +x test.sh   ##给执行权限
[[email protected] opt]# ansible all -m script -a ‘test.sh‘   ##执行脚本
[[email protected] opt]# ansible all -a ‘cat /opt/script.txt‘   ##查看执行情况
192.168.13.130 | CHANGED | rc=0 >>
this is test script

192.168.13.129 | CHANGED | rc=0 >>
this is test script

12,setup模块(收集信息模块)

[[email protected] opt]# ansible mysql -m setup  ##查看mysql主机的信息

谢谢阅读!

原文地址:https://blog.51cto.com/14080162/2468776

时间: 2024-07-29 08:25:28

自动化运维工具ansible——安装及模块管理的相关文章

自动化运维之Ansible安装与模块应用

自动化运维之Ansible Ansible概述 由于互联网快速展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量维护操作,人就按照传统方式进行维护会使工作效率低下,只是,部署自动化运维就尽可能安全,高校的完成工作 一般会把自动化运维工具划分为两类 (一)需要使用代理工具的,也就是基于专用的Agent程序完成管理功能,如:Puppet.Func.Zabbix等(二)不需要配置代理工具,可以直接基于SSH服务来管理完成,如:Ansible,Fabric等 下面介绍几款空能和类似的自动化运维工具

自动化运维工具Ansible详细部署 (转载)

自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1579894 ========================================================================================== 一.基础介绍 ===========================

自动化运维工具——ansible详解案例分享

自动化运维工具--ansible详解案例分享(一)目录ansible 简介ansible 是什么?ansible 特点ansible 架构图ansible 任务执行ansible 任务执行模式ansible 执行流程ansible 命令执行过程ansible 配置详解ansible 安装方式使用 pip(python的包管理模块)安装使用 yum 安装ansible 程序结构ansible配置文件查找顺序ansible配置文件ansuble主机清单ansible 常用命令ansible 命令集a

3.1 自动化运维工具ansible

自动化运维工具ansible 运维自动化发展历程及技术应用 Iaas 基础设施即服务Pass 平台服务SaaS 软件即服务 云计算工程师核心职能 Linux运维工程师职能划分 自动化动维应用场景 文件传输命令执行 应用部署配置管理任务流编排 企业实际应用场景分析 1 Dev开发环境 使用者:程序员功能:程序员开发软件,测试BUG的环境管理者:程序员123 2 测试环境 使用者:QA测试工程师功能:测试经过Dev环境测试通过的软件的功能管理者:运维说明:测试环境往往有多套,测试环境满足测试功能即可

自动化运维工具-Ansible基础

目录 自动化运维工具-Ansible基础 自动化运维的含义 Ansible 基础及安装 Ansible的架构 Ansible的执行流程 ansible配置文件 ansible Inventory(主机清单文件) Ansible ad-hoc ansible常用模块 实战 自动化运维工具-Ansible基础 自动化运维的含义 1.手动运维时代 2.自动化运维时代 3.自动化运维工具给运维带来的好处 Ansible 基础及安装 1.什么是Ansible Ansible是一个自动化统一配置管理工具 2

自动化运维工具--Ansible(安装部署、模块简介与操作)

一.Ansible概述 互联网的快速发展导致产品更新换代速度加快,按照传统维护操作使得工作效率低下,自动化运维以尽可能安全高效的完成工作为目的,实现代替传统工作方式. 自动化运维工具划分为两类: 一是需要使用代理工具的,也就是基于agent程序来实现管理功能,例如puppet.func.zabbix等 二是不需要代理配置工具的,可以直接基于SSH服务来完成管理功能,如ansible,fabric等. 自动化运维工具比较: 工具 开发语言 结构 配置文件格式 运行任务 Ansible Python

自动化运维工具Ansible实战(一)安装部署

1,基本介绍 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:指定操作

自动化运维工具ansible详细介绍以模块的使用

1.anisble 简介anisble 是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible只是提供一种框架.主要包括:(1)连接插件:负责和被监控端实现通信:(2)host inventory :指定操作的主机,是一个配置文件里面定义监控的主机(3)各种模块核心模块,command 模块,自定义模块.(4)借助于插件完成记录日志邮件等功能:(5)playboo

自动化运维之Ansible安装及基本模块应用

ansible简介 Ansible可以同时管理Redhat系的Linux,Debian系的Linux,以及Windows主机.管理节点只在执行脚本时与远程主机连接,没有特别的同步机制,所以断电等异常一般不会影响ansbile. 2.ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真