自动化运维工具Ansible基础认识

来源:互联网 发布:java jdbc查询数据库 编辑:程序博客网 时间:2024/05/20 16:43

参考网络文章链接

一、基础介绍

1.简介

ansible 自动化运维工具,基于Python开发,主要为批量配置、部署等。ansible基于模块工作,本身没有批量部署的能力。真正批量部署的是ansible所运行的模块,ansible只是提供了一种框架。主要包括

(1)、连接插件connection plugins:负责和被监控端实现通信;

(2)host inventory:指定操作的主机,是一个配置文件里面定义的主机;

(3)、各种模块核心模块、command模块、自定义模块;

(4)、借助于插件完成记录日志邮件等功能;

(5)playbook:剧本执行多个任务,非必需可以让节点一次性运行多个任务。


2、总体架构

wKiom1Rsxz3ToUCAAAGROYAM3EI989.jpg


3、特性

(1)no agents:不需要在被管控主机上安装任何客户端;

(2)no server:无服务器端,使用时直接运行命令即可;

(3)modules in any languages:基于模块工作,可使用任意语言开发模块;

(4)yamlnot code:使用yaml语言定制剧本playbook

(5)ssh by default:基于SSH工作;

(6)strong multi-tier solution:可实现多级指挥。


4、优点
(1)
、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
(2)
、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
(3)
、使用python编写,维护更简单,ruby语法过于复杂;
(4)
、支持sudo


5、任务执行流程

wKiom1Rsx2uQYJZ5AAJplY08vOQ976.jpg



2.ansible安装

# pip install ansible

3.ansible 常用模块使用

(1).set

## 用来查看远程主机的一些基本信息

#ansibleall -m setup

(1).ping

## 测试远程主机运行状态

#ansibleall -mping

 

(2).file

##设置文件的属性

相关选项如下:

force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

group:定义文件/目录的属组

mode:定义文件/目录的权限

owner:定义文件/目录的属主

path:必选项,定义文件/目录的路径

recurse:递归设置文件的属性,只对目录有效

src:被链接的源文件路径,只应用于state=link的情况

dest:被链接到的路径,只应用于state=link的情况

state

       directory:如果目录不存在,就创建目录

       file:即使文件不存在,也不会被创建

       link:创建软链接

       hard:创建硬链接

       touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

       absent:删除目录、文件或者取消链接文件

#ansible all -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"

 

#ansible all -m file -a "path=/tmp/resolv.conf state=absent"

 

(3) .copy

##复制文件到远程主机

相关选项如下:

backup:再覆盖之前,将源文件备份,备份文件包含时间信息,有两个选项:yes|no

content: 用以替代“src,可以直接设定文件的值

dest:必选项。要将源文件复制到远程主机的绝对路径,如果原文件是一个目录,那么该路径也必须是一个目录。

directory_mode: 递归设定目录的权限,默认系统默认权限。

force:如果目录主机包含该文件,但是内容不同,如果设为yes,则强制覆盖;如果设置为no,则只有目标主机定位该文件不存在时,才会复制。默认为yes

others: 所有的file模块里的选项都可以在这里使用

src: 被复制到远程主机的本地文件,可以使绝对路径,也可以是相对路径。如果路径是一个目录,她将递归复制。在这种情况下,如果路径使用“/”结果,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录里的全部内容,类似于rsync

#ansible all  -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"

 

 

初始常见报错:

# "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"

 

非控制端错误,而是客户端缺少 libselinux-python软件。

安装该程序即可 yum -y install libselinux-python

(4).command

##在远程主机上执行命令

相关选项如下:

creates: 一个文件名,当该文件存在时,则该命令不执行

free_form: 要执行的Linux命令

chdir:在执行指令之前,先切换到该目录

removes: 一个文件名,当该文件不存在,则该选项不执行

executable: 切换shell来执行指令, 该执行路径必须是一个绝对路径

例:

#ansibleall -m command -a "ls –al /tmp/resolv.conf"

 

(6)shell

## 切换到某个shell执行指定的指令,参数与command相同。

command不同的是,此模块可以支持命令管道,同时还有另一个模块也具备此功能:raw

示例:

## 先在本地创建一个SHELL脚本

# vim /tmp/rocketzhang_test.sh

#!/bin/sh

date +%F_%H:%M:%S

#chmod +x /tmp/rocketzhang_test.sh

## 将创建的脚本文件分发到远程

# ansible storm_cluster -m copy -a "src=/tmp/rocketzhang_test.sh dest=/tmp/rocketzhang_test.sh owner=root group=root mode=0755"

## 远程执行

# ansible storm_cluster -m shell -a "/tmp/rocketzhang_test.sh"

 

(7)、更多模块

其他常用模块,比如:servicecronyumsynchronize就不一一例举,可以结合自身的系统环境进行测试。

service:系统服务管理

cron:计划任务管理

yumyum软件包安装管理

synchronize:使用rsync同步文件

user:系统用户管理

group:系统用户组管理

 

更多模块可以参考:

#ansible-doc –l

 三、ansible其他参数

ansible命令参数:

Usage: ansible <host-pattern> [option]

Options:

    -m MODULE_NAME, --module-name=MODULE_NAME 要执行的模块,默认为command

    -a MODULE_AGES, --args=MODULE_ARGS   模块的参数

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

-k, --ask-pass 提示输入ssh登录密码,当使用密码验证登陆的时候用

-s, --sudo  sudo运行

-U SUDO_USER--sudo-user=SUDO_USER  sudo到哪个用户,默认为root

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

-B SECONDS, --background=SECONDS  run asynchronously,failing after X seconds(default=N/A)

-P POLL_INTERVAL, --poll=POLL_INTERVAL  set the poll interval if using -B(default=15)

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

-c CONNECTION   连接类型(default=smart

-f FORKS, --forks=FORKS  fork多少个进程并发处理,默认5

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

-I SUBSET, --limit=SUBSET  指定一个pattern,对<host_pattern>已经匹配的主机再次过滤

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

-M MODULE_PATH, --module-path=MODULE_PATH 要执行模块的路径,默认为/usr/share/ansible/

-o, --one-line  压缩输出,摘要输出

--private-key=PRIVATE_KEY_FILE  私钥路径

-T TIMEOUT--timeout=TIMEOUT  ssh连接超时时间,默认10秒。

-t TREE, --tree=TREE 日志输出到该目录,日志文件会以主机名命名

-v, --verbose  verbose mode(-vvv for more, -vvvv to enable connection debugging)








原创粉丝点击