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 [email protected] //将公钥文件传输到各节点上

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

时间: 2024-10-12 02:42:13

ansible自动化运维工具的相关文章

Ansible自动化运维工具-上

[Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要安装客户端,ansible基于SSH远程管理,不需要为配置工作添加额外的支持: PS:很多认为Ansible工具执行效率慢,其原因是SSH服务慢,我们可以选择优化SSH连接速度以及Ansible加速模块 [Ansible自动化管理工具特点] #轻量级,更新时,需要在操作机上进行一次更新即可 #采用S

Ansible自动化运维工具部署及使用

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

ansible自动化运维工具使用详解

一.ansible简介 1.ansible ansible是新出现的自动化运维工具,基于Python研发.糅合了众多老牌运维工具的优点实现了批量操作系统配置.批量程序的部署.批量运行命令等功能.仅需在管理工作站上安装ansible程序配置被管控主机的IP信息,被管控的主机无客户端.ansible应用程序存在于epel(第三方社区)源,依赖于很多python组件 参考站点:http://www.ansible.com.cn 2.ansible特性 模块化设计,调用特定的模块来完成特定任务,本身是核

Puppet Saltstatck Ansible 自动化运维工具对比

最近尝试安装了一下salt statck就对自动化工具感兴趣了点所以找了一些资料入门下面总结一下希望和看到这篇文章一起探索自动化运维的世界.                              --- 小 Q ------------------------------------------------------------------------------------------------------ 自动化运维就是为减少重复又枯燥的工作而建立起来的流程更能减少失误及时报警并恢复

Linux中ansible自动化运维工具

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

Ansible自动化运维工具阐述及配置实现

什么是ansible ansible是一个轻量级的运维管理工具 , 基于Python研发 .可实现对系统的批量管理配置.程序的批量部署.批量的运行命令等功能. 仅需在任意管理主机安装 ansible 程序即可实现批量管理被管控主机且被管控的主机无需客户端. 我们在安装ansible时一定要依托epel源来安装(推荐阿里云),并且在线用yum安装.它基于python开发所以得解决ansible对python编程的各种依赖. ansible 特性 1.模块化:调用特定的模块,完成特定的任务: 2.基

Ansible 自动化运维工具之when条件语句

1.When语句 有时候用户有可能需要某一个主机越过某一个特定的步骤.这个过程就可以简单的像在某一个特定版本的系统上少装了一个包一样或者像在一个满了的文件系统上执行清理操作一样. 这些操作在Ansible上,若使用`when`语句都异常简单.When语句也含Jinja2表达式, 第一个例子: tasks:   - name: "shutdown Debian flavored systems"     command: /sbin/shutdown -t now     when: a

Ansible 自动化运维工具之inventory和常用模块介绍

一.inventory介绍 前面我们介绍过ansible的hosts文件是存放被管理主机的,被管理主机比较少的情况下,直接在hosts中定义即可,但是以后很定会管理多台主机,而ansible可管理的主机集合就叫做inventory.在ansible中,描述你主机的默认方法是将它们列在一个文本文件中,这个文件叫inventory文件. 一个简单的inventory文件可能只包含一组主机名的列表,如下: ftp.testansible.com samba.testansible.com mail.t

Ansible 自动化运维工具简单入门(二)

三.Ansible的使用 1.Ansible命令执行过程及状态 过程: 加载自己的配置文件,默认/etc/ansible/ansible.cfg 加载自己对应的模块文件,如command ping 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器 给文件+x权限 执行并返回结果 删除临时py文件,sleep 10 退出 状态: 绿色:执行成功并且不需要做改变的动作 黄色:执行成功并且对目标主机做变更 红色:执行失败 2.Ansible系列命令 ansible an