Ansible 文档

第一部分:基础

一、安装方法

1、使用centosepel源安装

yum –y install ansible

 

主配置文件:/etc/ansible/ansible.cfg

Inventory文件:/etc/ansible/hosts

 

2、认证方式:

2.1 基于密钥

①生成密钥  ssh-keygen -t rsa

②将公钥复制到每台主机上  

 ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

 ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

2.2 inventory中制定(不推荐)

 

3、资产配置(首先把/etc/ansible/hosts文件中内容清空)

Inventory文件配置ansible的客户端

方法:

使用ssh端口

例:192.168.88.134:5309

②主机别名

例:

目标主机为192.168.88.136,端口号 5555,主机别名orcalserver

orcalserver ansible_ssh_port=5555 ansible_ssh_host=192.168.88.136

③通配符配置

例:

目标主机从linux-node2.example.com linux-node50.example.com

linux-node[2:50].example.com

 

例子:[root@linux-node1 ~]# cat /etc/ansible/hosts

[webservers]

192.168.88.134

[dbservers]

192.168.88.136

 

4测试是否安装成功:ansible all –m ping

192.168.88.134 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

192.168.88.136 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

 

备注:

在安装完成后,运行ansible all –m setup  以后会显示许多主机信息,这些主机信息存放在/etc/ansible/hosts文件中

/etc/ansible/hosts 是一个资产配置文件,里面得到webserversdbservers属于主机的哪个组。

 

5执行一条命令

[root@linux-node1 ~]# ansible all -a 'echo Hello World'

192.168.88.134 | SUCCESS | rc=0 >>

Hello World

 

192.168.88.136 | SUCCESS | rc=0 >>

Hello World

 

 

二、资产配置中的常用变量


变量名

参数含义

ansible_ssh_host

指定远程主机

ansible_ssh_port

指定ssh连接端口

ansible_ssh_user

指定ssh连接用户

ansible_ssh_pass

指定ssh连接密码

ansible_python_interpreter

目标主机python进程

 

三、指定目标主机

格式:ansible  -m -a

备注信息:

pattern 声明需要操作的目标主机

module_name 声明需要的模板是哪一个

arguments 用于传递参数给模板

例子:

1、指定所有的主机

 ansible all -m shell -a 'uptime'

2、指定特定的主机组

ansible webservers:dbservers -m shell -a 'uptime'

3、制定一个主机组

ansible webservers -m shell -a 'uptime'

 

四、常用的命令示例

1、命令执行

Ø 重启主机   ansible all –a “/sbin/reboot” –f 10

Ø shell模块   ansible all -m shell -a "echo $TERM"

Ø 底层ssh 模块  ansible all -m raw -a "hostname --fqdn"

 

2、文件操作

Ø 下发文件

ansible all –m copy –a "src=/etc/hosts dest=/tmp/hosts"

Ø 为文件赋予权限

ansible all -m file -a "dest=a.txt mode=600 owner=demo group=demo"

Ø 创建文件夹

ansible all –m file –a “dest=/path/to/c mode=644 owner=demo group=demo state=directory”

Ø 删除文件

ansible all –m file –a “dest=/path/to/c state=absent”

 

3、包管理操作(yum

Ø 安装

ansible webservers –m yum –a “name=httpd state=installed”

Ø 安装指定版本的包

ansible webservers –m yum –a “name=httpd-2.6 state=installed”

Ø 安装最新版本的包

ansible webservers –m yum –a “name=httpd state=latest”

Ø 卸载安装包

ansible webservers –m yum –a “name=httpd state=removed”

 

4、用户管理(user

Ø 增加用户

ansible all –m user –a “name=tom password=123456”

Ø 删除用户

ansible all –m user –a “name=tom state=absent”

5、版本管理(git

Ø 使用git拉取文件

ansible all –m git –a “repo=git://demo/repo.git dest=/srv/myapp version=HEAD”

6、服务管理(service

Ø 启动服务

ansible all –m service –a “name=httpd state=started”

Ø 重启服务

ansible all –m service –a “name=httpd state=restarted”

Ø 停止服务

ansible all –m service –a “name=httpd state=stopped”

7、后台管理

Ø 运行一个执行360秒的后台操作

ansible all –B 360 –a “/usr/bin/long_running_operation –to-stuff”

Ø 检查作业状态

ansible all –m async_status –a “jid=1311”

Ø 后台运行1800秒,每60秒检查一下作业状态

ansible all –B 1800 –P 360 –a “/usr/bin/long_running_operation –to-stuff”

 

8、设备信息检查

ansible all –m setup

 

 

第二部分:Asible 常用模块

ansible-doc -l             #可以直接查看内置模块
ansible-doc -s file     #file为模块名

 

一、文件管理模块

1、文件组装模块——assemble(主要用于把多份配置文件片段组装成一个配置文件)

Ø /root/demo下的片段组装后放到/root/target目录下

ansible all –m assemble –a “dest=/root/demo src=/root/target”

 

                        assemble模块参数及说明

参数

必填

默认值

选项

说明

backup

no

yes/no

是否创建一份备份文件

delimiter

-

-

配置文件片段之间的分割符

dest

-

-

生成路径

others

-

-

文件模块参数

src

-

-

片段文件夹路径

 

2、文件复制模块——copy

文件复制模块常用于集中下发的动作,假如远端主机装有selinux,那么还需在目标主机上安装libselinux-python模块才能使用copy模块。

Ø /tmp/test 复制到所有机器的/root/目录下

ansible all –m copy –a “dest=/root src=/tmp/test”

 

                                                       copy模块参数及说明

参数

必填

默认值

选项

说明

backup

no

yes/no

是否备份原始文件

content

-

-

当用content代替src参数时,可以把文档的内容设置为特定的值

dest

-

-

文件复制的目的地

force

no

yes/no

是否覆盖

others

-

-

文件模块参数

src

-

-

复制的源文件

validate

-

-

复制前是否检验需要复制目的地的路径

 

3、文件拉取模块——fetch

Ø 将远端主机的/etc/salt/minion文件收集回服务器/root/demo目录下

ansible all –m fetch –a “dest=/root/demo src=/etc/salt/minion “

                                                                                                                       fetch模块参数及说明

参数

必填

默认值

选项

说明

dest

-

-

文件存放路径,假如存放路径是/backup,复制的源文件为/etc/profile,目标主机名是host,那么会被存为下/backup /host/etc/profile

fail_on_running

no

yes/no

假如找不到目标文件则被标记为失败

flate

-

-

用于覆盖原有的dest存放规则

validate_md5

no

yes/no

是否用md5进行文件的校验

src

-

-

目标文件路径

 

4、文件管理模块——file

Ø 删除所有服务器下的/root/copydemo.txt 文件

ansible all –m file –a “path=/root/copydemo.txt state=absent “

                                               file模块参数及说明

参数

必填

默认值

选项

说明

force

no

yes/no

是否覆盖原有文件

group

-

-

文件属于的用户组

mode

-

-

文件的读/写权限

owner

-

-

文件的属于的用户

path

-

-

文件路径

recurse

no

yes/no

是否递归设置属性

selevel

s0

-

selinux的级别

serole

-

-

selinux角色

setype

-

-

selinux类型

secuser

-

-

selinux用户

src

-

-

文件链接路径

state

file

file

link

directory

hard

touch

absent

如果是directory,那么则会创建文件夹

如果是file,则会创建文件

如果是link,则会创建链接

如果是hard,则会创建硬链接

如果是touch,则会创建文件

如果是absent,则会删除文件

 

5ini文件管理模块

ini文件是十分常见的一种配置文件,ansible内置了ini配置文件的管理模块,用于对文件进行配置项的管理。

Ø 修改配置文件/root/demo.iniselectioncron的选项组的crontime选项,把cron的值修改为10

ansible all –m ini_file –a “dest=/root/demo.ini section=cron option=crontime value=10”

                           ini模块参数及说明

参数

必填

默认值

选项

说明

backup

no

yes/no

是否创建备份文件

dest

-

-

ini文件路径

option

-

-

ini文件的键选项

others

-

-

文件模块的其他参数

section

-

-

选中ini的变量名

value

-

-

ini变量的值

 

二、命令执行模块

1、命令执行模块——command

command模块用于在给定的主机上执行命令。值得留意的时,command模块执行的命令是获取不到$HOME这样的环境变量的,一些运算符,例如”<“ ”>“ command模块上也是不能使用的。

                                                command模块参数及说明

参数

必填

默认值

选项

说明

chdir

-

-

执行命令前先进入到某个目录

creates

-

-

一个文件名,假如文件名已经存在,则不会运行此步骤

executable

-

-

改变执行命令所有的shell

free_form

-

-

需要执行的指令

removes

-

-

一个文件名,假如不存在该文件,则此步骤不会被执行

 

2command模块的增强版——shell

command模块是不支持运算符的,同时也不支持管道这样的操作。我们使用command模块可以尝试执行一下检查mysql进程是否存在。

ansible all –m command –a “ps –ef | grep mysql”

执行完后,ansible会发出不支持操作符的提示,而shell模块是专门解决这种问题的,它支持管道操作符,可以看做command模块的增强版,可以使用如下方式对mysql进程进行检查就可以得到正确的结果。

ansible all –m shell –a “ps –ef | grep mysql”

                                                      shell模块参数及说明

参数

必填

默认值

选项

说明

chdir

-

-

执行命令前先进入到某个目录

creates

-

-

一个文件名,假如文件名已经存在,则不会运行此步骤

free_form

-

-

需要执行的指令

removes

-

-

一个文件名,假如不存在该文件,则此步骤不会被执行

 

3、脚本执行模块——script

很多时候执行单条命令并不能满足我们的要求,我们需要在目标主机上执行一系列的命令,这种情况下可以考虑把多条命令写成脚本,然后通过ansible的文件管理模块把脚本下发到目标机器上;接着再用script模块运行脚本的执行,得到所期望的结果。需要注意的是执行的脚本是管理主机上存在的脚本。

    例如我们有一个巡检脚本,已经通过copy模块把脚本下发到主机上,并且用file模块完成了脚本文件的授权,脚本test.sh内容如下:

$system_uptime >> $path

echo –e 1分钟/5分钟/15分钟平均负载/在采样的时刻,运行任务的数目/系统活跃任务的个数/最大的pid值线程/“/t” $system_uptime >> $path

 

可以看到整份甲苯的命令数量是比较多的,采用shell模块或command命令都无法很好地完成这个巡检任务。这时可以用script模块完成主机的批量巡检。

ansible all –m script –a ‘/root/demo/test.sh’

                                 script模块参数及说明

参数

必填

默认值

选项

说明

free_form

-

-

需要执行的脚本

 

4ssh命令执行模块——raw

ansible虽然不需要安装客户端,但是内置的模块大多需要客户机上有python环境或者具备某些python扩展才能够执行。假设我们管理的设备上没有python环境,ansible的很多模块都用不了,但是又想执行一些简单的命令,怎么办呢?这时候可以时候raw模块,这个模块是直接通过ssh方式而不是通过python的方式去对主机进行操作的

例子:   ansible all –m ssh –a ‘ip a’

                                 raw模块参数及说明

参数

必填

默认值

选项

说明

executable

-

-

改变执行命令所用的shell

free_form

-

-

需要执行的指令

 

三、网络相关模块

1、下载模块——get_url

get_url模块用于下载网络上的文件

Ø 例:下载百度的首页

ansible all –m get_url –a ‘dest=/root url=http://www.baidu.com’

                            get_url模块参数及说明

参数

必填

默认值

选项

说明

dest

-

-

文件下载路径

force

no

yes/no

是否覆盖

others

-

-

文件模块的其他参数

sha256sum

-

-

是否采用SHA-256校验

url

-

-

下载文件的目标路径

use_proxy

no

yes/no

是否使用代理

 

2Web请求模块——uri

uri模块主要用于发送HTTP协议,通过使用uri模块,可以让目标主机向指定的网站发送如GetPost这样的HTTP请求,并且能得到返回的状态码。

                                                       uri模块参数及说明

参数

必填

默认值

选项

说明

HEADER_

-

-

HTTP

Body

-

-

HTTP消息体

Creates

-

-

文件名称

Dest

-

-

文件下载路径

follow_redirects

no

yes/no

URI模块是够应该遵循所有的重定向

force_basic_auth

no

yes/no

强制在发送请求前发出身份验证

method

GET

GET

POST

PUT

HEAD

DELETE

OPTIONS

HTTP方法

others

-

-

文件模块参数

password

-

-

密码

removes

-

-

需要删除的文件名称

return_content

no

yes/no

返回内容

status_code

200

-

状态码

timeout

30

-

超时时间

url

-

-

url地址

use

-

-

用户名

 


四、包管理模块


1、包管理模块--YUM

例:使用yum模块安装最新的httpd

yum:name=httpd state=latest

                                          YUM模块参数及说明

参数

必填

默认值

选项

说明

conf_file

-

-

YUM配置文件

disable_gpg_check

no

yes/no

是否开启GPG仓库

disablerepo

-

-

禁用的仓库

enablerepo

-

-

启用的仓库

name

-

-

包名

state

present

present

latest

absent

安装、更新、卸载软件

 

六、系统管理模块

1、作业管理模块——cron

Liunx服务器中,定时任务一般由cron来承担。

在用户建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,分时日月周[指令]

minute hour day month week command

例:每天8点钟进行MYSQL数据库备份

ansible all –m cron –a ‘name=demo hour=8 job=mysqldump –uroot –pxxx  demo> demo.sql’

                                                                       cron模块参数及说明

参数

必填

默认值

选项

说明

backup

-

-

修改前是否备份

cron_file

-

-

cron定义文件,指定了则读这份,不会读用户的cron.d文件

day

*

-

hour

*

-

小时

minute

*

-

分钟

month

 

 

 

weekday

*

-

星期几

job

-

-

执行的命令

name

-

-

作业的描述

reboot

no

yes/no

重启后是否需要执行

special_time

-

reboot

yearly

annually

monthly

weekly

daily

hourly

特定的执行时间

state

present

present

absent

启用或停止作业

user

root

-

执行作业的用户

 

2、用户管理模块——group

使用group可以对主机进行批量的用户组添加或删除

例:为主机批量添加zabbix用户组

ansible all –m group –a ‘name=zabbix state=present’

                     group模块参数及说明

参数

必填

默认值

选项

说明

gid

-

-

用户的GID

name

-

-

用户组的名字

state

present

present

absent

新增/删除

system

no

yes/no

是否是系统组

 

3、服务管理模块——service

例:批量重启httpd服务

ansible all –m service –a ‘name=httpd state=restarted’

                                                                   service模块参数及说明

参数

必填

默认值

选项

说明

arguments

-

-

参数

enable

-

yes/no

开机自启动

name

-

-

服务名称

pattern

-

-

如果服务没响应,则ps查看是否有指定参数的进程,有则认为服务已经启动

runlevel

default

-

OpenRC init脚本

sleep

-

-

如果服务被重新启动,则睡眠很多次后再执行停止和启动命令

state

-

started

stopped

restarted

reloaded

服务的状态

 

4、用户管理模块——user

Ø 例:移除所有主机上的zabbix用户

ansible all –m user –a ‘name=zabbix state=absent remove=yes’

                                                                                   user模块参数及说明

参数

必填

默认值

选项

说明

append

-

-

增加到组

comment

no

yes/no

可选设置用户账号的描述

createhome

no

yes/no

是否创建home目录

force

no

yes/no

是否强制操作

generate_ssh_key

-

-

是否生成ssh秘钥

group

-

-

用户组

groups

-

-

以逗号分隔的用户组

home

-

-

home目录

login_class

-

-

可以设置用户的登录类FreeBSDOpenBSDNetBSD

name

-

-

用户名

non_unique

no

yes/no

相当于useradd –u

password

-

-

密码

remove

no

yes/no

相当于userdel -remove

shell

-

-

该用户的shell

ssh_key_bits

2048

-

密钥的位数

ssh_key_comment

ansible_generated

-

密钥的说明

ssh_key_file

$HOME/.ssh/id_rsa

-

密钥的文件名

ssh_key_passphrase

-

-

ssh密钥的密码

ssh_key_type

rsa

-

ssh密钥的类型

state

present

present

absent

新增/删除

system

no

yes/no

设置为系统账号

uid

-

-

用户的UID

update_password

always

always

on_create

是否需要更新密码

 

5、系统信息模块——setup

Ø 例:获取所有的信息

ansible all –m setup

                      setup模块参数及说明

参数

必填

默认值

选项

说明

fact_path

/etc/ansible/facts.d

-

fact的路径

filter

*

-

过滤窜

 

 

你可能感兴趣的:(自动化)