ansible

半城伤御伤魂 提交于 2019-12-05 02:54:58

简介

ansible是基于ssh协议实现的,通过连接插件进行管理;在ansible的管理机上执行的ansible命令会在临时目录中生成对应的python文件,并且把管理机上的python文件所在的临时目录拷贝到被管理的机器上去执行,执行完成后删除临时目录。

ansible基本命令:

[root@centos7 ~]# ansible -h                       #查看帮助
[root@centos7 ~]# ansible --version                #查看版本  
[root@centos7 ~]# ansible all --list               #列出主机清单中所管理的所有主机  
[root@centos7 ~]# ansible websrvs --list           #列出websrvs分组中的所有主机  
[root@centos7 ~]# ansible-doc -l                   #列出ansible所有模块  
[root@centos7 ~]# ansible-doc file                 #查看ansible关于file模块的详细帮助  
[root@centos7 ~]# ansible-doc -s file              #查看ansible关于file模块的简单帮助
[root@centos7 ansible]# ansible-galaxy list        #查看写好的角色列表
[root@centos7 ansible]# ansible-galaxy remove dong.users        #删除角色

使用ansible前需要做的准备:

ansible是基于ssh协议进行连接管理的,为了方便进行管理,需要基于key验证  
[root@centos7 ~]# ssh-keygen     #生成公钥私钥对儿  
[root@centos7 ~]# ssh-copy-id 192.168.38.47        #把公钥发送给远程主机

ansible的配置文件

[root@centos7 ~]# rpm -ql ansible|grep /etc/  
/etc/ansible  
/etc/ansible/ansible.cfg   #ansible配置文件  
/etc/ansible/hosts         #ansible主机清单  
/etc/ansible/roles         #角色

ansible配置文件所需要的修改:

[root@centos7 ~]# vim /etc/ansible/ansible.cfg
host_key_checking = False     #省略了key检查,相当于系统默认回复了yes,不需要第一次ssh连接回复yes/no  
log_path = /var/log/ansible.log   #开启ansible日志  
module_name = shell           #设置ansible的默认模块为shell模块

ansible中常用的模块:

ping模块
[root@centos7 ~]# ansible websrvs -m ping     #测试所管理的websrvs分组中的主机的连接状态
shell模块
chdir: 切换目录
[root@centos7 ~]# ansible websrvs -a '想要执行的linux命令'        #指定分组,后面指定想要执行的linux命令
script模块
[root@centos7 ansible]# ansible websrvs -m script -a '/data/ansible/test.sh'     #script模块是专门用于执行脚本的模块,脚本需要提前加好执行权限,指定脚本路径
copy模块
src: copy模块可以拷贝目录和文件;如果源是一个目录,以 "/" 结束,则拷贝的是目录里面的所有文件;不以 "/" 结束,则拷贝的是整个目录  
mode: 指定权限  
owner: 指定所有者  
group: 指定所属组  
backup: 做备份  
content: 以内容方式生成一个新的文件(例:'content="[test]\nbaseurl=111" dest=/data/test1' )
[root@centos7 ansible]# ansible websrvs -m copy -a 'src=/etc/issue dest=/data mode=700 owner=dong group=bin backup=yes'
fetch模块
把远程主机的文件拷贝到ansible服务器上;只支持拷贝文件 
src: 远程主机的源地址  
dest: ansible服务器地址
[root@centos7 ansible]# ansible websrvs -m fetch -a 'src=/var/log/messages dest=/data'
file模块
state: absent(删除;如果是目录,则递归删除)、directory(如果目录不存在,就创建文件夹)、link(创建软链接)、hard(创建硬链接)、touch(如果文件不存在,就创建文件)
path:必须指定目标路径
src: 创建软、硬链接才可以指定的源文件路径
[root@centos7 ansible]# ansible websrvs -m file -a 'path=/data/test.txt state=touch'
[root@centos7 ansible]# ansible websrvs -m file -a 'src=/data/test.txt path=/data/test.link state=link'     #path后面指定软链接文件名
unarchive
解包
copy: yes(将ansible主机上的压缩包传到远程主机后解压缩至特定目录;默认是yes);no(将远程主机上的某个压缩包解压缩到指定路径下)
src: 源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
[root@centos7 ansible]# ansible websrvs -m unarchive -a 'src=boot.tar.gz dest=/data'    #ansible机器上的打包文件解压缩到远程主机上  
[root@centos7 ansible]# ansible websrvs -m unarchive -a 'src=/tmp/boot.tar.gz dest=/opt/ copy=no'       #把远程主机上的包解压缩到远程主机的指定目录下
archive模块
打包
path: 指定针对远程主机的目录
dest: 打包到哪里
format: 压缩格式
[root@centos7 ansible]# ansible websrvs -m archive -a 'path=/etc/sysconfig dest=/data/sysconfig.tar.gz format=gz'
cron模块
minute: 设置分钟
job: 所执行的任务;命令需要加路径
name: 任务名称
disabled: 禁用计划任务
state: absent(删除)
[root@centos7 ansible]# ansible websrvs -m cron -a 'minute=*/10 job="/usr/sbin/ntpdate 192.168.38.7" name=synctime disabled=yes'
yum模块
state: installed(安装;默认不加state就是installed)、absent(卸载)
name: 需要安装的软件名称
[root@centos7 ansible]# ansible websrvs -m yum -a 'name=httpd,mariadb-server state=absent'
service模块
name: 服务名称
state: started(开启)、stopped(停止)、restarted(重启服务)
enabled: 开机启动
[root@centos7 ansible]# ansible websrvs -m service -a 'name=httpd enabled=yes state=started'
user模块
name: 用户名
uid: 指定uid
group: 指定所属组
groups: 指定附加组
system: yes(指定为系统用户)
home: 指定家目录
shell: 指定shell类型
state: absent(删除用户)
remove: yes(配合state=absent使用,删除与用户相关的家目录)
password: 设置密码(密码必须是加密的,可以使用openssl passwd -1生成md5的加密密码)
remove: yes(把用户账号和家目录都删除)
create_home: no(不创建家目录)
[root@centos7 ansible]# ansible websrvs -m user -a 'name=test uid=88 system=yes home=/data/app group=root groups=bin,dong shell=/sbin/nologin'
group模块
name: 指定组名
gid: 指定gid
state: absent(删除)
[root@centos7 ansible]# ansible websrvs -m group -a 'name=test gid=1234'

角色参考网站

https://galaxy.ansible.com              #下载安装网站上写好的角色文件
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!