ansible
简介
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 #下载安装网站上写好的角色文件