ansible安装部署和配置、常用模块整理

1、 ansible软件介绍

1). ansible是一个基于python开发的自动化运维工具!(saltstack)

2). 其功能的实现是基础SSH远程连接服务的

3). ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能

2、 ansible软件特点

1). 不需要单独安装客户端,基于ssh服务

2). 不需要安装服务端

3). 需要依靠大量的模块实现批量部署

4). 配置文件/etc/ansible/ansible.cfg

3、 ansible软件安装部署和配置

PS:为了安全,尽量不要配置外网

首先保证:可以免秘钥登录被管理端

1). 管理端安装软件:

yum install ansible -y

2). 被管理端安装软件:

yum install libselinux-python -y

PS:如果关闭selinux,那么被管理端可以不安装(建议安装)

3). ansible软件管理配置文件

vim /etc/ansible/hosts    #定义ansible可管理的主机

[wangyun]

172.16.1.7

172.16.1.8

172.16.1.31

172.16.1.41

4). 进行ansible软件批量管理:

ansible wangyun -m command -a "/server/scripts/p1.yml"

PS: 查看的是wangyun主机组,模块为command,的主机负载信息

wangyun  #主机组

-m  #指定模块参数(command为默认模块,不写也可以)

command #模块名称

-a  #指定利用模块执行的动作参数,

-a后面的是要执行的命令

/server/scripts/p1.yml #批量执行的命令

4、 ansible软件命令常用参数

-k :以交互方式输入密码,进行远程管理

-a :指定应用模块的相应参数信息

-m  :指定应该什么模块(默认为command模块)

5、ansible执行命令后输出信息中:

绿色——表示查询,或者没有发生任何改变

红色——表示命令操作出现异常

屎黄色——对远程主机做了相应改动

粉色——对操作提出建议或忠告

6、ansible系统命令帮助文档查看方法:

ansible-doc -l    --- 列出所有可用的模块信息

ansible-doc -s cron  --- 查看指定模块的参数信息

1. command模块实践:(默认模块)

ansible wangyun -m command -a "ifconfig"

#批量显示远程主机的网卡信息

ansible wangyun -m commadn -a "chair=/tmp touch kai.txt"

#批量切换到远程主机的/tmp目录下,创建kai.txt这个文件

ansible wangyun -m command -a "creates=/tmp/kai touch /tmp/kai"

#批量判断远程主机/tmp下有没有kai这个文件,如果有就skip,没有就执行后面的命令

ansible wangyun -m command -a "removes=/tmp/kai.txt touch /tmp/123.txt"

#批量判断远程主机/tmp下有没有kai这个文件,如果有就执行后面的命令, 没有就skip

ansible wangyun -m command -a "ls -l"

#free_from(默认参数)可以输入任何系统命令信息,但是不包含一些特殊环境变量和特殊符号信息,如:<>,|;&

2.ping模块实践:(测试连通性)

[root@m01 ~]# ansible wangyun -m ping

172.16.1.8 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

172.16.1.31 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

172.16.1.41 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

172.16.1.7 | SUCCESS => {

    "changed": false,

    "ping": "pong"

}

#返回pong,说明可以登录SSH连接,这里ping但不是测试网络连通性的,用于验证能否登录SSH连接,在查  看是否满足python的支持, 属于system模块

3.copy模块实践:(把本地文件发送到远端)     

1)copy参数src             

例: ansible wangyun -m copy -a "src=/etc/hosts dest=/tmp/"

src ----本机的路径

dest----要远端的路径

#将本机/etc/hosts文件复制到远程主机的/tmp目录下(如果/tmp下已有同名hosts,那么会被覆盖)

例: ansible wangyun -m copy -a "src=/etc/hosts dest=/tmp/dir/"

#如果远程主机没有dir目录,那么会创建dir目录

例: ansible wangyun -m copy -a "src=/etc/hosts dest=/tmp/1/2/3/4/"     

#但传输文件时,如果上级目录不存在,则不会创  建,传输就无法成功

例: ansible wangyun -m copy -a "src=/tmp dest=/tmp/1/2/3/4"

#传输目录时,如果远程主机目录不存在,传输时可以创建多层目录,

#如果传输的是目录本身及下面内容,后面不要加/

例: ansible wangyun -m copy -a "src=/tmp dest=/tmp/1/2/3/4"

#如果传输的是目录下面的内容,后面必须加/

例: ansible wangyun -m copy -a "remote_src=true src=/etc/hosts dest=/tmp/1/2/"

#批量操作远程主机,对他们本机上的文件进行本地操作

    #设置为true时(默认为flase),不支持递归复制

2)copy参数backup=yes 

ansible wangyun -m copy -a "src=/etc/hosts dest=/etc/ backup=yes"

backup----备份

# 分发文件时,如果与远程主机下hosts文件内容不一致,那么会备份源文件为"hosts.5714...以时间戳命名  ",  在修改hosts源文件的内容

    #不输入默认backup=no,就是不备份,会覆盖源文件

3)copy参数mode、owner、group

ansible wangyun -m copy -a "src=/etc/hosts dest=/tmp/ mode=0600 owner=wangyun group=wangyun"

#改变文件的权限为0600,所有者和属组为wangyun

owner=属主

mode=属性权限

group=属组

4) copy参数force

ansible wangyun -m copy -a "src=/etc/hosts dest=/tmp/ force=yes"

#默认为forec=yes,如果和远程主机信息不一致,会覆盖

#如果force=no,那么远程主机同名文件不会做改变

5)copy参数content 

ansible wangyun -m copy -a "content=123123 dest=/tmp/hosts"

#写入信息到/tmp/ hosts中会把源内容覆盖掉,谨慎操作,只能添加少量的信息

#添加多量的,可以用template模块

4.shell模块实践:(万能模块)

ansible wangyun -m shell -a "hostname;hostname -i"

# 支持特殊符号,-a里面可接多个名,用分号分割

说明: shell 模块在远程执行脚本时,远程主机上一定要有相应的脚本

测试:

用shell执行一个脚本很麻烦的,用script执行

1)推送脚本过去,并授权

ansible wangyun -m copy -a "src=/tmp/test.sh dest=/tmp mode=+x"

2)运行脚本

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

5.script模块实践:(执行脚本模块)

ansible wangyun -m script -a "/server/scritps/keepalived.sh"

#将本地脚本中的信息,在远程主机上执行

6. yum模块实践

ansible wangyun -m yum -a "name=iotop state=installed"

#批量使用yum安装软件iotop

7.service模块实践

ansible wangyun -m service -a "name=crond state=stopped enable=no" #stopped是2个p

#临时停止crond服务,取消开机自启动(相反:state=started enable=yes)

8.file模块实践:(设置文件属性)                    #修改文件或目录属性信息,用于创建文件或目录,也可以用mode、owner、group定义文件或目录的权限信息

1)path参数       

ansible wangyun -m file "path=/tmp/ state=directory mode=0644"

#指定路径,是dest,name的别名,作用一样

–force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;

另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

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

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

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

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

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

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

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

2)state参数 

directory 创建目录

file 创建文件

link 创建软连接

hard 创建出硬链接

absent 目录将被递归删除及文件,而连接将被取消连接

touch 创建文件;如果路径不存在将创建一个空文件

注意:重命名和创建多级目录不能同时实现

ansible wangyun -m file -a "dest=/opt/dir_01/ state=directory"

#创建目录为dir_01

ansible wangyun -m f

ile -a "dest=/opt/file_01 state=touch"

#创建文件为file_01

ansible wangyun -m file -a "dest=/opt/file_01 state=absent"

#删除文件file_01

ansible wangyun -m file -a "src=/opt/hosts dest=/opt/hosts_link state=link"

#创建符号链接,基于本机有源文件

9.cron模块实践:(定时任务模块)

* * * * *  /bin/sh /server/scripts/test.sh &>/dev/null

    minute                # Minute when the job should run ( 0-59, *, */2, etc )

hour                  # Hour when the job should run ( 0-23, *, */2, etc )

day                    # Day of the month the job should run ( 1-31, *, */2, etc )

month                  # Month of the year the job should run ( 1-12, *, */2, etc )

weekday                # Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc )

job                    # 定义定时任务与要做什么事

name      # 给定时任务加一个备注,避免创建出多个重复的定时任务(根据定时任务备份判断        是否生成一个新的定时任务)

stat      #若设置为present,表示创建定时任务,若设置为absent,表示删除指定定时任务

只能管理自己创建的定时任务,本来有的管理不了

disabled      #disable=yes注释掉定时任务(不生效),disable=no解除注释定时任务(生效)

ansible wangyun -m cron -a "name='backup servcie' minute=*/5 job='/usr/sbin/ntpdate  time.nist.gov >/dev/null 2>&1'"     

#创建定时任务

ansible wangyun -m cron -a "name=`backup service` state=absent"

#删除定时任务

ansible wangyun -m cron -a "name=dancy01 minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' disabled=yes"             

#注释掉定时任务,反之取消注释

minute 分

hour  时

day    日

month  月

weekday周

job    工作;要做的事

name  定义定时任务的描述信息

disabled 注释定时任务

            absent 删除定时任务

state状态参数 present 创建定时任务 

            默认为present

10.mount模块实践:(配置挂载点模块)

ansible wangyun -m mount -a "state=mounted src=172.16.1.31:/data path=/data fstype=nfs"

src  #要被挂载的目录或文件

path  #指定挂载点的路径

fstype  #指定挂载时的文件系统类型

opts  #在挂载时,指定挂载参数信息

state  #state=mounted,在fstab文件中的备份将被激活挂载或适当配置,如果指定mounted的挂载挂载点不存在,会创建     

  #state=unmounted,设备将被卸载不会改变fstab文件中的信息

  #state=absent和state=present,只处理fatab,但不影响目录的挂载


挂载:

ansible 172.16.1.8 -m mount -a "fstype=nfs opts=rw path=/mnt/  src=172.16.1.31:/data/ state=mounted"

卸载:

ansible 172.16.1.8 -m mount -a "fstype=nfs opts=rw path=/mnt/  src=172.16.1.31:/data/ state=unmounted"

11.user 模块与group模块

user模块是请求的是useradd, userdel, usermod三个指令,

goup模块请求的是groupadd, groupdel, groupmod 三个指令。

1).user模块:

– home:指定用户的家目录,需要与createhome配合使用。

– groups:指定用户的属组。

– uid:指定用的uid。

– password:指定用户的密码。

注意:指定password参数时,不能使用明文密码,因为后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可。

– name:指定用户名。

– createhome:是否创建家目录 yes|no。

– system:是否为系统用户。

–remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r。

– state:是创建还是删除。(present,absent)

– shell:指定用户的shell环境。

– generate_ssh_key:是否为相关用户生成SSH密钥。

这不会覆盖现有的SSH密钥。

– ssh_key_bits:可选择指定要创建的SSH密钥中的位数。

– ssh_key_passphrase:设置SSH密钥的密码。

如果没有提供密码,SSH密钥将默认没有密码。

– ssh_key_file:指定SSH密钥文件名(可选)。

如果这是一个相对的文件名,那么它将是相对于用户的主目录。

– ssh_key_type:指定要生成的SSH密钥的类型(可选)。

可用的SSH密钥类型将取决于目标主机上的实现。

2).group模块

– gid:指定用的gid。

– name:指定用户名。

– state:是创建还是删除。(present,absent)

– system:如果是,则表示创建的组是系统组。

12. fetch 模块:拉取文件  (从远程拉取出来文件)

ansible wangyun -m fetch -a "dest=/tmp/backup src=/etc/hosts"

13.flat 参数,拉取的时候不创建目录(同名文件会覆盖)

ansible wangyun -m fetch -a "dest=/tmp/backup/ src=/etc/hosts flat=yes"

14.service模块:服务管理

参数:

name=service name  服务的名字

state=参数  停止服务 服务状态为过去式stared/stoped/restartde/reloaded

enable=yes 设置开机自启动

说明 :service 管理的服务必须存在在/etc/init.d/下有的服务脚本

重启定时任务:

[root@m01 ~]# ansible wangyun -m service -a "name=crond state=restarted"

你可能感兴趣的:(ansible安装部署和配置、常用模块整理)