| 认识

是一款开源自动化运维工具。它有如下特点:

目前已经被公司收购,它在上是一个非常受欢迎的开源软件

| 安装

1)机器准备

主机名

机器IP

作用

192.168.222.101

控制端,安装

192.168.222.102

被控端,不需要安装

2)安装(上)

yum install -y epel-releaseyum install -y ansible

3)设置主机名和/etc/hosts,关闭(所有都设置)

hostnamectl set-hostname  aminglinux01  #222.101上hostnamectl set-hostname  aminglinux02 #222.102上setenforce 0 #所有机器都执行

4)设置密钥认证

ls  ~/.ssh/id_rsa || ssh-keygen -t rsa   ##如果机器上之前没有生成过密钥,需要重新生成ssh-copy-id  root@aminglinux01 #设置密钥认证,到aminglinux01ssh-copy-id  root@aminglinux02 #设置密钥认证,到aminglinux02

5)编辑hosts配置

vi /etc/ansible/hosts #最后面增加[testhost]192.168.222.101192.168.222.102

说明:为主机组名字,自定义的。下面两个ip为组内的机器ip,也可以写成主机名的形式。

| 远程执行命令

1)针对整个主机组

ansible  testhost -m command -a 'hostname'

说明:这里的 为主机组名,-m后边是模块名字,-a后面是命令。

2)针对一个ip

ansible 192.168.222.102 -m  command -a 'hostname'

| 拷贝文件或者目录

1)拷贝目录

ansible 192.168.222.102 -m copy -a "src=/etc/ansible  dest=/tmp/ansibletest owner=root group=root mode=0755"

注意:源目录会放到目标目录下面去,如果目标指定的目录不存在,它会自动创建。

2)拷贝文件

ansible testhost -m copy -a "src=/etc/passwd dest=/tmp/123"

说明:这里的/tmp/123和源机器上的/etc/是一致的,但如果目标机器上已经有/tmp/123目录,则会再/tmp/123目录下面建立文件

注意:如果拷贝的是文件,dest指定的名字和源如果不同,并且它不是已经存在的目录,相当于拷贝过去后又重命名。但相反,如果desc是目标机器上已经存在的目录,则会直接把文件拷贝到该目录下面。

|远程执行脚本

1)首先创建一个shell脚本

cat  > /tmp/test.sh <<EOF#!/bin/bashecho `date` > /tmp/ansible_test.txtEOF

2)然后把该脚本分发到各个机器上

ansible testhost -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"

3)最后是批量执行该shell脚本

ansible testhost -m shell -a "/tmp/test.sh"

说明:-m shell,调用shell模块,

这个shell模块,还支持远程执行命令并且带管道

ansible testhost -m shell -a "cat /etc/passwd|wc -l "

|管理任务计划

1)添加任务计划

ansible testhost -m cron -a "name='test cron' job='/bin/touch /tmp/1212.txt'  weekday=6"

注意:用创建好任务计划后ansible自动化运维ansible自动化运维,就不要再手动更改了,否则就无法更新或者删除了

2)删除任务计划

若要删除该cron 只需要加一个字段 state=

ansible testhost -m cron -a "name='test cron' state=absent"

其他的时间表示:

|安装rpm包/管理服务

1)安装redis

ansible testhost -m yum -a "name=redis"

在name后面还可以加上state=,表示直接启动,=yes表示开机自启动

ansible testhost -m service -a "name=redis state=started enabled=yes"

2)卸载

ansible testhost -m yum -a "name=redis state=removed"

|常用模块总结

1)使用文档

列出所有模块

ansible-doc -l

查看指定模块文档

ansible-doc cron

2)ping模块

主要用来检测连通性

ansible testhost -m ping

3)用户和组模块

创建用户

ansible testhost -m user -a 'name=aming001'

设置密码前,先给明文密码加密

openssl passwd -1 aming-123 #明文密码为aming-123$1$RLj1L/6B$wBzcDG2wWL9.uVDLhsxrr0  #这个字符串为获取到的加密密码

用给用户设置密码

ansible testhost -m user -a 'name=aming001 password=$1$RLj1L/6B$wBzcDG2wWL9.uVDLhsxrr0'

创建用户时,指定uid和扩展组

ansible testhost -m user -a 'name=aming002 uid=1003 groups=wheel'

删除用户

ansible testhost -m user -a 'name=aming001 state=absent remove=yes' #remove=yes表示删除用户家目录

创建组

ansible testhost -m group -a 'name=grp1 gid=1010'

删除组

ansible testhost -m group -a 'name=grp1 state=absent'

4)模块

可以将控制端上脚本,在远程被控端执行,也就是说被控端可以没有那个脚本存在

首先创建一个脚本

cat  > /usr/local/sbin/test.sh <<EOFhostnamewdateEOF

给执行权限

chmod a+x /usr/local/sbin/test.sh

然后执行

ansible testhost -m script -a '/usr/local/sbin/test.sh'

模块常用参数:

5)setup模块

获取主机信息

ansible testhost -m setup

还可以加上过滤参数

ansible testhost -m setup -a 'filter=nodename'

6)file模块

用来创建文件或目录,修改已经存在的目录的权限,创建软硬连接

创建目录,设置属主和属组和权限

ansible 'testhost' -m file -a 'path=/backup state=directory owner=root group=root mode=0000'

级联创建目录

ansible 192.168.222.101 -m file -a 'path=/1/2/3  state=directory mode=000 recurse=yes'

如果将state设置为touch,则最后面的3就是文件了

ansible 192.168.222.101 -m file -a 'path=/1/2/3  state=absent'  ##state=absent为删除,它只会删除3目录,而前面的/1/2并不会删除ansible 192.168.222.101 -m file -a 'path=/1/2/3 state=touch mode=000' #touch表示3为文件,而不是目录了

当state设置为touch时,那么务必要保证文件上一级目录存在

ansible  testhost -m file -a 'path=/backup/1/2.txt state=touch mode=0700' #会报错,因为/backup/1目录并不存在

创建软链接

ansible testhost -m file -a 'src=/etc/fstab dest=/tmp/1.txt state=link  mode=600'

说明:这里的mode为src文件的权限,并不是软链接dest的权限,软链接文件权限为777

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注