自动化运维工具ansible 1基础

介绍

简介

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

核心组件

1.Ansible:核心程序
2.Modules:包括Ansible自带的核心模块及自定义模块
3.Plugins:完成模块功能的补充,包括连接插件、邮箱插件、
4.Playbooks:剧本;定义Ansible多任务配置文件,由Ansible自动执行
5.Inventory:定义Ansible管理主机的清单、host被管控的节点。
6.Connection Plugins:负责和被监控端实现通信在这里插入图片描述

特性

1.与传统的sc结构不同,不需要安装客户端和服务端,在主控主机上直接运行命令。
2.基于模块工作,可以使用任意语言开发模块,高度自定义。
3.基于SSH工作,好像在主控主机上ssh登陆了所有的控制的主机上。
4.使用yaml语言定制剧本playbook。
5.可以实现多级指挥。
6.幂等性,一种操作重复多次结果相同。

安装与配置

安装

可以使用pip,yum或者二进制源码安装
我们这里使用最简单的yum安装

[root@localhost ~]# yum install ansible

查看

常用命令

ansible:临时命令执行工具,常用于临时命令的执行
ansible-doc:Ansible模块功能查看工具
ansible-playbook:Ansible定制自动化的任务集编排工具

查看版本,查看可用命令集
[root@node1 ~]# rpm -ql ansible | grep bin
/usr/bin/ansible
/usr/bin/ansible-config
/usr/bin/ansible-connection
/usr/bin/ansible-console
/usr/bin/ansible-doc
/usr/bin/ansible-galaxy
/usr/bin/ansible-inventory
/usr/bin/ansible-playbook
/usr/bin/ansible-pull
/usr/bin/ansible-vault
查看配置文件
 [root@node1 ~]# rpm -ql ansible | grep etc
    /etc/ansible
    /etc/ansible/ansible.cfg#主配置文件
    /etc/ansible/hosts#主机清单
    /etc/ansible/roles

配置文件

主配置文件,用来指定ansible的全局配置。

一般不需要改编/etc/ansible/ansible.cfg

[root@localhost ~]# cat /etc/ansible/ansible.cfg 
主机配置文件,用来指定哪些主机要被我操控,并且免密钥登陆。

我的主机(node1)192.168.225.101
被控制的机器(node2)192.168.225.102
被控制的机器(node3)192.168.225.103为被操控的主机分组。可以指定ip地址和主机名。
一个组可以有多个主机,一个主机可以属于多个组
所有出现的主机都至少属于all组(隐藏的组)和本身属于的那个组。

[root@localhost ~]# vim /etc/ansible/hosts
[node2]
192.168.225.102

[node3]
192.168.225.103

2.node1生成密钥对,把其中公钥放到node2,3。使得node1可以远程ssh这主机node2,3.

[root@localhost ~]# 
[root@localhost ~]# ssh-copy-id -i ./.ssh/id_rsa.pub [email protected]

ansible命令

命令的基本格式

ansible [options]

1.ansible基本命令
2.host-pattern,指定host文件里的全部主机:all。指定一个主机组如:node2。
3.选项

命令的选项

参数 作用
-a MODULE_ARGS, --args=MODULE_ARGS指定命令
-C , --check 预演一下,并不是真正调用
–list-hosts 所匹配出的所有可用主机
-m MODULE_NAME 选择模块的名称
-M MODULE_PATH, --module-path=MODULE_PATH指定自定义的模块的路径,常用于指定自定义的模块
–syntax-check 检查给出的命令是否有语法错误
-f 指定进程数量(默认为5)

简单命令

为node2节点设置主机名

[root@localhost ~]# ansible node2 -a "hostnamectl set-hostname node2"
192.168.225.102 | SUCCESS | rc=0 >>

ansible的返回状态

绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败

ansible-doc命令

命令的基本格式

1.ansible-doc -s 模块名。查看使用这些模块的时候可以指定哪些参数。
2.ansible-doc -l 查看所有可用的模块。

简单实例

(下面的例子看似没有实际意义,但是帮助我们使用模块时查看和指定参数,下一章节常用模块学习就是这样做的)
1.默认情况下,测试是否能够ping通,直接调用ping模块就能够检测

[root@localhost ~]# ansible node2 -m ping
192.168.225.102 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

2.但是我们发现如果是成功的话返回pong。这个单词我看的不爽,我们想要换个单词。利用ansible-doc查看ping模块可以怎么设置。

[root@localhost ~]# ansible-doc -s ping
- name: Try to connect to host, verify a usable python and return `pong' on success
  ping:
      data:                  # Data to return for the `ping' return value. If this parameter is set to `crash',
                               the module will cause an exception.

3.原来使用ping模块时只要指定data就可以的到想要的返回值

[root@localhost ~]# ansible node2 -m ping -a data=hell0
192.168.225.102 | SUCCESS => {
    "changed": false, 
    "ping": "hell0"
}

ansible执行步骤

1 .加载自己的配置文件 默认/etc/ansible/ansible.cfg
2.加载自己对应的模块文件,如command
3.通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的
4.对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件。
5.给文件+x执行
6.执行并返回结果 删除临时py文件,sleep 0 退出

猜你喜欢

转载自blog.csdn.net/weixin_44055272/article/details/88759579