ansible自动化运维工具

简介:

简介

ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。


1.ansible的安装直接用yum安装,配置好epel源即可。

2.ansible安装目录在/etc/ansible下。


服务器环境

192.168.32.200:作为ansible管理节点

192.168.32.202:被管理节点

ansible.cfg配置文件

hostfile=/etc/ansible/hosts #指定默认hosts配置的位置

host_key_checking = False   #不进行host_key检查,省去目标key发生变化时输入(yes/no)的步骤

ask_pass=True               # 每次执行ansible命令是否询问ssh密码

ask_sudo_pass=True          # 每次执行ansible命令时是否询问sudo密码


3.首先在ansible管理节点上修改hosts文件

 cd /etc/ansible/

 vim hosts // 在最后一行加入以下内容

[test]

192.168.32.202

4.ssh-keygen -P '' 生成公钥

 ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.32.202 //将公钥文件传输到各节点上

5.示例 Ansible有一个非常有用的模块是 command,相信很多人都需要它!Command模块就是“远程执行命令”

 相比Ansible的内置模块而言,Command模块无法通过返回值来判断命令是否执行成功。

 但Ansible添加了creates 和 removes 的属性,以此检查命令是否成功执行或者是否应该被执行。

 如果你定义了 creates 属性,当文件已存在时,它不会再执行。相反如果定义了 removes 属性,

 则只有文件存在的情况下命令才会被执行

ansible webhosts -m command -a 'rm -rf /tmp/test removes=/tmp/test'

192.168.32.202 | success | rc=0 >>

如果“受控节点”上 /tmp/testfile 并不存在,Ansible则提示跳过,输出如下: MachineName | skipped

否则,如果文件存在,则返回成功:

ansible test -m command -a 'date' //command和shell模块可以在被控端执行命令

192.168.32.202 | success | rc=0 >>

Sat Jan 10 16:13:44 EST 2015

ansible webhosts -m shell -a 'date'       

Enter passphrase for key '/root/.ssh/id_rsa': 输入公钥密码

192.168.32.202 | success | rc=0 >>

Sat Jan 10 16:17:40 EST 2015

安装软件和启动服务。yum,service模块

ansible test -m yum -a 'name=vsftpd state=present' // yum模块远程安装软件

ansible test -m service -a ‘name=vsftpd state=started enabled=yes’

支持管道的命令:raw模块,类似于shell模块

ansible test -m raw -a 'ifconfig | grep eth0'

查看系统信息

ansible test -u root -m setup

字段名 参考值 含义

ansible_architecture    x86_64  受控节点系统框架

ansible_distribution    CentOS  受控节点的操作系统发行版

ansible_distribution_version    6.3 受控节点发行版本的版本号

ansible_domain  kisops.org  受控节点的主域名

ansible_fqdn    site01.kisops.org   受控节点的完整机器名

ansible_interfaces  [“lo”,”eth0”]   列出受控节点所有的网卡

ansible_kernel  2.6.32-431.5.1.el6.x86_64   受控节点的内核版本号

ansible_memtotal_mb 30099   受控节点总内存大小(兆)

ansible_processor_count 24  受控节点的CPU核心

ansible_virualization_role  guest   受控节点的身份:host为宿主机,guest为虚拟机

ansible_virtualization_type kvm 受控节点的虚拟化类型

Ansible还有一个基础模块叫file,顾名思义是与文件相关的。

它可以用于查看文件的属性、修改文件属性、查询文件是否被修改等等

 ansible test -u root -m file -a 'path=/etc/fstab'

 192.168.32.202 | success >> {

    "changed": false, 

    "gid": 0, 

    "group": "root", 

    "mode": "0644", 

    "owner": "root", 

    "path": "/etc/fstab", 

    "size": 779, 

    "state": "file", 

    "uid": 0

}

在/tmp目录以nobody用户的身份创建一个test的文件夹

ansible test -u root -m file -a 'path=/tmp/test state=directory mode=755 owner=nobody'

192.168.32.202 | success >> {

    "changed": true, 

    "gid": 0, 

    "group": "root", 

    "mode": "0755", 

    "owner": "nobody", 

    "path": "/tmp/test", 

    "size": 4096, 

    "state": "directory", 

    "uid": 99

}

如果目录不存在或属性和预设的不一致,Changed的值就为True。

如果相同(比如重复执行指令),Changed的值将变为False。

copy模块。Copy模块的作用就是从“控制节点”上拷贝文件到“受控节点”上。

ansible test -m copy -a 'src=/etc/fstab dest=/tmp/fstab mode=644 owner=root'

192.168.32.202 | success >> {

    "changed": true, 

    "checksum": "0eafb3ce197c848fca254e3a1356934a96f310bf", 

    "dest": "/tmp/fstab", 

    "gid": 0, 

    "group": "root", 

    "md5sum": "99f84827ef399f896305ca09ce1c668a", 

    "mode": "0644", 

    "owner": "root", 

    "size": 805, 

    "src": "/root/.ansible/tmp/ansible-tmp-1420871736.8-93337290722652/source", 

    "state": "file", 

    "uid": 0

}

查看当前登录的用户

ansible -i hosts all -a 'whoami'

Enter passphrase for key '/root/.ssh/id_rsa': 

192.168.32.202 | success | rc=0 >>

root

这是一条ad-hoc命令——临时执行命令,ad-hoc是ansible里的一个概念, 在上面命令中就是 -a ,

默认ansible执行时会从该配置中加载hosts配置,因此可以通过修改.ansible.cfg来指定默认的hosts文件地址:

# .ansible.cfg

[defaults]

hostfile=/etc/ansible/hosts

查看ansible的模块

ansible-doc -l

ansible-doc file查看制定模块的帮忙信息,以file模块为例


ansible命令参数介绍

-m:要执行的模块,默认为command

-a:模块的参数

-u:ssh连接的用户名,默认用root,ansible.cfg中可以配置

-k:提示输入ssh登录密码。当使用密码验证的时候用

-s:sudo运行

-U:sudo到那个用户,默认为root

-K:提示输入sudo密码,当不是NOPASSWD模式时使用

-C:只是测试一下会改变什么内容,不会真正去执行

-c:连接类型(default=smart)

-f:fork多少个进程并发处理,默认为5个

-i:指定hosts文件路径,默认default=/etc/ansible/hosts

-I 指定pattern,对<host_pattern>已匹配的主机中再过滤一次

--list-hosts:只打印有哪些主机会执行这个playbook文件,不是实际执行

-M:要执行的模块路径,默认为/usr/share/ansible

-o:压缩输出,摘要输出

--private-key 私钥路径

-T: ssh连接超时时间,默认10秒

-t:日志输出到该目录,日志文件名以主机名命名

-v:verbost

playbook(剧本),顾名思义,就是需要定义一个脚本或者说配置文件,然后定义好做什么。

一个简单的playbook是这样的,把当前用户名输出到whoami.rst文件中:

# playbook.yml

---

- hosts: webhosts  # hosts中指定

  remote_user: root  # 如果和当前用户一样,则无需指定

  tasks:

    - name: whoami

      shell: 'whoami > whoami.rst'

hosts后面根据webhosts是从hosts中读取的,tasks是是关键词,指明了要执行哪些任务;

下面的name是任务的名称,shell是前面提到的module(模块),单引号中是命令。


使用playbook批量安装软件

vim ftp.yml

---

- hosts: webhosts  # hosts中指定

  tasks:

    - name: yum -y install ftp

      shell: yum -y install ftp

ansible-playbook ftp.yml

PLAY [webhosts] *************************************************************** 


GATHERING FACTS *************************************************************** 

Enter passphrase for key '/root/.ssh/id_rsa': 

ok: [192.168.32.202]


TASK: [yum -y install ftp] **************************************************** 

changed: [192.168.32.202]


PLAY RECAP ******************************************************************** 

192.168.32.202             : ok=2    changed=1    unreachable=0    failed=0   


ansible实时批量执行脚本

ansible all -m script -a “/root/123.sh”


解决在运行ansible的时候会挑出一些warnning

vim /etc/ansible/ansible.cfg

system_warnings = False



如果客户端的ssh端口不是22的话,需要修改hosts

[server]

172.16.21.102:16861

172.16.21.103:16861

ansible_ssh_port=16861


ansible 使用yml文件时如何取消回执信息:

在yml文件里添加gather_facts: no



本文转自 shouhou2581314 51CTO博客,原文链接:http://blog.51cto.com/thedream/1655570,如需转载请自行联系原作者

相关文章
|
16天前
|
运维 应用服务中间件 Linux
自动化运维的利器:Ansible在配置管理中的应用
【10月更文挑战第39天】本文旨在通过深入浅出的方式,向读者展示如何利用Ansible这一强大的自动化工具来优化日常的运维工作。我们将从基础概念讲起,逐步深入到实战操作,不仅涵盖Ansible的核心功能,还会分享一些高级技巧和最佳实践。无论你是初学者还是有经验的运维人员,这篇文章都会为你提供有价值的信息,帮助你提升工作效率。
|
11天前
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。
|
18天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
19天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
42 4
|
17天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
18天前
|
运维 安全 应用服务中间件
自动化运维的利剑:Ansible在配置管理中的应用
【10月更文挑战第37天】本文将深入探讨如何利用Ansible简化和自动化复杂的IT基础设施管理任务。我们将通过实际案例,展示如何用Ansible编写可重用的配置代码,以及这些代码如何帮助运维团队提高效率和减少人为错误。文章还将讨论如何构建Ansible playbook来自动部署应用、管理系统更新和执行常规维护任务。准备好深入了解这个强大的工具,让你的运维工作更加轻松吧!
33 2
|
19天前
|
运维 Devops 应用服务中间件
自动化运维的利器:Ansible实战指南
【10月更文挑战第36天】在快速迭代的数字时代,自动化运维成为提升效率、减少错误的关键。Ansible以其简洁性、易用性和强大的功能脱颖而出。本文将带你了解Ansible的核心组件,通过实际案例深入其应用,并探讨如何结合最佳实践优化你的自动化工作流程。无论你是新手还是有经验的运维人员,本指南都将为你提供宝贵的知识和技能。
|
19天前
|
运维 应用服务中间件 Linux
自动化运维:使用Ansible进行批量配置管理
【10月更文挑战第36天】在现代的IT基础设施中,高效和可靠的系统管理变得至关重要。本文将介绍如何使用Ansible这一强大的自动化工具来简化运维任务,包括安装、配置、部署应用程序以及管理系统更新。我们将探讨Ansible的核心概念,并通过实际代码示例展示其应用。通过阅读本文,读者将获得使用Ansible改善日常运维工作流程的实用知识。
|
2月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
68 4
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
59 4