Ansible的使用和模块化深入
Ansible配置
配置文件:/etc/ansible/ansible.cfg
[default]
默认配置
inventory = /etc/ansible/hosts
主机清单
library = /usr/share/my_modules
库
module_utils = /usr/share/my_module_utils
模块路径
remote_tmp = ~/.ansible/tmp
远程临时路径
local_tmp = ~/.ansible/tmp
本地临时路径
ansible执行一个命令会生成python脚本,存放于local_tmp
,并复制到remote_tmp
,目标主机执行此脚本,执行结束后即删除。
plugin_filters_cfg = /etc/ansible/plugin_filters.yml
插件配置文件
forks = 5
并行执行操作数
poll_interval = 15
间隔:多长时间拉一次数据
sudo_user = root
默认用户名
连接到对方切换到sudo执行
ask_sudo_pass = True
是否询问口令
ask__pass = True
是否支持用户口令
transport = smart
传输
remote_port = 22
远程主机端口号
module_lang = C
默认语音
module_set_locale = False
log_path = /var/log/ansible.log
日志文件(建议启用,默认不记录日志)
host_key_checking = False
连接到远程时是否需要验证公钥
第一次连接,需要单独用命令连接,并确定连接,否则没有.ssh/known_hosts
,导致连接失败,解决方法:rm -f .ssh/known_hosts
。因此需要把此项设为False
,即不会有这个问题。
Ansible系列命令
ansible-doc
显示模块帮助(类似man命令)
-a 列出所有
-l 列出可用模块列表
-s --snippet 显示指定模块的playbook片段(短格式,简洁)
命令格式
/etc/ansible/ansible.cfg
[default]
默认配置inventory = /etc/ansible/hosts
主机清单library = /usr/share/my_modules
库module_utils = /usr/share/my_module_utils
模块路径remote_tmp = ~/.ansible/tmp
远程临时路径local_tmp = ~/.ansible/tmp
本地临时路径ansible执行一个命令会生成python脚本,存放于local_tmp
,并复制到remote_tmp
,目标主机执行此脚本,执行结束后即删除。
plugin_filters_cfg = /etc/ansible/plugin_filters.yml
插件配置文件forks = 5
并行执行操作数poll_interval = 15
间隔:多长时间拉一次数据sudo_user = root
默认用户名连接到对方切换到sudo执行
ask_sudo_pass = True
是否询问口令ask__pass = True
是否支持用户口令transport = smart
传输remote_port = 22
远程主机端口号module_lang = C
默认语音module_set_locale = False
log_path = /var/log/ansible.log
日志文件(建议启用,默认不记录日志)host_key_checking = False
连接到远程时是否需要验证公钥第一次连接,需要单独用命令连接,并确定连接,否则没有.ssh/known_hosts
,导致连接失败,解决方法:rm -f .ssh/known_hosts
。因此需要把此项设为False
,即不会有这个问题。
ansible-doc
显示模块帮助(类似man命令)
-a 列出所有
-l 列出可用模块列表
-s --snippet 显示指定模块的playbook片段(短格式,简洁)
命令格式
ansible <HOST-PATTERN> [-m MODULE_NAME] [-a ARGS]
-v 详细 -vv -vvv 更详细
--list-hosts 显示主机列表 ,可简写 --list
-k 提示输入ssh密码,默认Key验证
-K 输入sudo的口令
-c 检查,并不执行
-T 默认超时时间
-u 远程执行的用户
-b 代替旧版本sudo切换
-m 指定模块
--version 版本号
ansible servers -m command -u boxker -k -a 'ls /root'
用boxker身份查看root目录。若boxker权限不够,则失败。-m command
是默认模块,可省略。解决方法1:以root身份连接ansible servers -m command -u root -k -a 'ls /root'
2.ansible servers -m command -u boxker -k -a 'ls /root' -b -K
以boxker身份连接,用root身份(默认)执行,需要sudo口令。用visudo
管理sudo的配置文档/etc/sudoers。当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限visudo精确用户赋权(sudo)查看彩色文字:
echo export EDITOR=vim >> /etc/profile.d/env.sh
ssh-keygen
设置完即可无需 -k 输密钥
ssh-keygen
回车ssh-copy-id IP
回车
ssh-keygen的使用方法以及ssh-keygen参数说明
HOST-PATTERN
all 所有
* 通配符
: 或
:& 与
:! 非
正则
用到
&
,需要用引号引起来(在linux里表示后台运行)
ansible-galaxy
连接galaxy.ansible.com 下载对应的roles
ansible-galaxy list geerlingguy.nginx
查看本机geerlingguy.nginx
ansible-galaxy install geerlingguy.nginx
安装geerlingguy.nginx,默认下载在家目录的隐藏目录.ansible/roles/
中。
ansible-galaxy remove geerlingguy.nginx
删除role,亦可把目录直接删除。
ansible-pull
推送命令至远程,效率无限提升,对运维要求高。(使用不多)
ansible-playbook
下一章。
ansible执行过程
ansible命令执行过程
- 加载配置文件
- 加载对应模块
- 将模块或命令生成临时py文件并传输
- 给文件 +x 权限执行
- 执行并返回结果
- 删除临时文件,并 sleep 0 退出
ansible执行状态
- 绿色:执行成功并且不需要做改变的操作
- 黄色:执行成功且对目标主机做变更
- 红色:执行失败
- 蓝色:显示详细过程
ansible常见模块
1. Command模块
默认模块,可忽略 -m选项
次命令不支持$VARNAME < > & | ;
等,用shell实现
参数:
-chdir 执行命令前先进入目录
-creates 指定的文件若存在则不继续操作
-remove 指定的文件若不存在则不继续操作
ansible all -a 'removes=/etc/fs cat /etc/fstab'
getent 用来察看系统的数据库中的相关记录getent [选项...] 数据库 [键 ...]
2. Shell 模块
语法实验与Command差不多
支持特殊符号
3. Script 模块
运行脚本,可指定参数
例 :ansible all -m script -a 'test.sh'
/etc/sysconfig/selinux/selinux
:selinux=permissive,disable,enable
4. Copy 模块
参数 | 说明 |
---|---|
attributes | 属性 |
backup | 备份,避免覆盖 |
content | 编辑文件内容,直接生成文件进行复制 |
dest | 文件放在目标主机哪 |
mode | 复制过去权限 |
owner | 所有者 |
src | 本机文件 |
例:ansible -m copy -a 'src=/bendiwenjian dest=/mubiaowenjian backup=yes mode=000 owner=boxker'
默认情况下复制的文件属性会变。
ansible -m copy -a 'content="hello\n" dest=/data/hello'
相当于cat。
5. Fetch 模块
从客户端取一个文件至服务器端,抓取远程文件,与copy相反,目录可先tar
src:源文件
dest:存放位置
ansible all -m fetch -a 'src=/var/log/messages dest=/data'
存放方式为dest目录下,为每个主机创建一个目录,然后是src路径
6. File 模块
设置文件属性
name,path,dest
效果一样
ansible all -m file -a 'name=/data/f3 state=touch'
创建一个新文件。
ansible all -m file -a 'name=/data/f3 state=absent'
删除文件。
ansible all -m file -a 'name=/data/dir1 state=directory'
创建一个文件夹。
ansible all -m file -a 'src=/etc/fstab dest=/data/fstab.link state=link'
创建一个软链接。
7. Hostname 模块
管理主机名
ansible IP -m hostname -a 'name=node1'
改主机名,会顺带把/etc/hostname
修改,但是在centos7 :/etc/hosts
未做修改,centos6 : /etc/sysconfig/network
则会修改。
8. Cron 模块
计划任务
广播路径:/usr/bin/wall
ansible all -m cron -a 'minute=* weekday=1,3,5 job="/usr/bin/wall FBI warning" name=warningcron'
周一、三、五,每分钟发出警告。
ansible all -m cron -a 'disabled=true job="/usr/bin/wall FBI warning"'
关闭定时任务,即在crontab -e
中注释。但是无法关闭上条任务,因为需要带上name,否则会注释新的name为none的新定时任务。
ansible all -m cron -a 'disabled=true job="/usr/bin/wall FBI warning" name=warningcron'
关闭第一条设置的定时任务。
ansible all -m cron -a 'disabled=false job="/usr/bin/wall FBI warning" name=warningcron'
启用第一条设置的定时任务。disable中用yes、no亦可。
ansible all -m cron -a 'job="/usr/bin/wall FBI warning" name=warningcron state=absent'
删除第一条设置的定时任务。
9. Yum 模块
管理包
installed,latest,present安装(默认)
absent,removed删除
list查看
ansible all -m yum -a 'name=vsftpd'
安装vsftp。依赖于自身yum仓库配置/etc/yum.repos.d/base.repo
,禁用enabled=0
。
ansible all -m yum -a 'list=installed'
查看已安装的。
ansible all -m shell -a 'rpm -q vsftpd'
查看。
ansible all -m yum -a 'name=vsftpd,httpd,memcached'
安装多个包,用逗号隔开。
安装本地包
- 将本地包发到客户机
- 执行安装命令
忽略gpg_check: 添加disable_gpg_check=yes
ansible all -m yum -a 'name=dstat update_chche=yes'
更新缓存。(dstat,监控工具)。
10. Service 模块
服务管理
name名字
enabled:是否开机启动(类似:systemctl enable 服务名)
state: started,reloaded,stoped,restarted
ansible all -m service -a 'name=vsftpd state=started enabled=yes'
开启vsftpd服务,并开机自启。(systemctl is-enbale 服务名,查看是否开启自启)。
11. User 模块
管理用户
comment注释
create_home是否创建家目录
expires过期时间
group主组
groups附加组
home家目录
name用户名
password加密口令
remove当删除用户时删除家目录
state
system指定系统帐号
shell指定shell类型
ansible all -m user -a 'name=nginx shell=/sbin/nologin system=yes home=/var/nginx groups=root,bin uid=80 comment="nginx service"'
创建nginx用户。
ansible all -a 'getent passwd nginx'
查看创建的nginx用户信息。通常源码编译需要手动创建帐号,yum则自动创建好。
ansible all -m user -a 'name=nginx state=absent remove=yes'
删除用户并删除家目录。
12. Group 模块
组管理
name
gid
state
system
ansible all -m group -a 'name=nginx system=true gid=80'
创建nginx组。
Ansible的使用和模块化深入的更多相关文章
- 分享4个运维平台工具OSSIM、Ansible的学习思路
对于当今企业安全来说,真正价值不在于亡羊补牢,也不在于一个或多个高危漏洞.企业在乎的是如何防患于未然,如何快速定位攻击,如何快速解决安全问题.OSSIM作为开源的安全信息管理平台,对于企业的需求来说毋 ...
- 1、Ansible简介及简单安装、使用
参考Ansible权威指南:https://ansible-tran.readthedocs.io/en/latest/index.html 以下内容学习自马哥教育 Ansible: 运维工作:系统安 ...
- 学习ansible笔记1
ansible的特点: -- 模块化设计 -- 仅需要ssh和Python即可以使用 -- 无客户端 -- 功能强大,模块丰富 -- 上手容易门槛低 -- 基于python开发,做二次开发更容易 -- ...
- 批量搞机(一):ansible简介、ansible安装
一.ansible简介 Ansible是2013年推出的一款IT自动化和DevOps软件,目前由Redhat已签署Ansible收购协议.其是基于Python研发,糅合了很多老运维工具的优点实现了批量 ...
- 集群工具ansible使用方法
ansible简介 ansible是与puppet.saltstack类似的集群管理工具,其优点是仅需要ssh和Python即可使用,而不像puppet.saltstack那样都需要客户端.与pupp ...
- Ansible学习笔记
一.Ansible简介 Ansible是一种agentless(基于ssh),可实现批量配置.命令执行和控制,基于Python实现的自动化运维工具. 其特性有: ①模块化:通过调用相关模块,完成指定任 ...
- 翻译-Salt与Ansible全方位比较
原文链接:http://jensrantil.github.io/salt-vs-ansible.html 作者: Jens Rantil 之前某些时候我需要评估配置管理系统.结合从他人得到的意见,我 ...
- 自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机
目录: 一.ansible简介 1.1.ansible是什么 1.2.ansible如何工作 1.3.ansible优缺点 1.4.ansible安装方式 1.5.ansible文件简单介绍 1.6. ...
- Ansible详解(一)
简介 Ansible是一个简单的自动化运维管理工具,基于Python语言实现,由Paramiko和PyYAML两个关键模块构建,可用于自动化部署应用.配置.编排task(持续交付.无宕机更新等).主版 ...
随机推荐
- Java基础笔记(四)——命名规则、数据类型
标识符即Java程序中需要自定义的名称,如变量名.方法名.类名.包名.工程名等. 标识符的命名规则: 1.可由字母.数字.下划线(_)和美元符($)组成,不能以数字开头. 2.严格区分大小写. 3.不 ...
- jquery获取文档高度和窗口高度汇总
jquery获取窗口高度和窗口高度,$(document).height().$(window).height() $(document).height():整个网页的文档高度 $(window).h ...
- Python内建函数一
内建函数 1. abs(number) 用法:返回数字的绝对值 2. all(iterable) 用法:如果iterable的所有元素都是真值,就返回True,否则返回False 3. any(ite ...
- php:一个题目,关于优先级,及$a++和$a=$a+1,
这几天常看到微博上转发的一条微博:就做了下,竟做错了,所以就试着分析了下~~ 这是微博: 这是代码: <?php $c = 3; $b = 6; if ($c = 4 || $b = 4) { ...
- Spark Mllib里的向量标签概念、构成(图文详解)
不多说,直接上干货! Labeled point: 向量标签 向量标签用于对Spark Mllib中机器学习算法的不同值做标记. 例如分类问题中,可以将不同的数据集分成若干份,以整数0.1.2,... ...
- 爱上MVC~Web.Config的Debug和Release版本介绍
回到目录 对于web.config来说,我们不会陌生,主要对站点进行相关参数的配置,当它被修改后,IIS里对应的应用程序池会被重启,而对于config里的一些配置我们一般使用比较多的是数据连接串con ...
- 关于UITableView的性能优化(历上最全面的优化分析)
(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath ...
- JAVA基础之转换流和缓冲流
个人理解: 在理解的字符流和字节流的区别后.要是想读取指定的编码格式的文件时,特别是不是默认的格式时,就需要转换流了,需要注意的是字符流是需要清除缓冲区的:当需要快速的进行读取时,则需要缓冲流.存在即 ...
- Eclipse Debug模式和断点调试
1行号上双击,打断点:再双击,取消断点.一般想调试哪一句代码,就在哪一句和下一句打上断点. 2在要执行的class文件上(有main方法的),右键--Debug As 然后程序正常走,当走到断点时,会 ...
- 小米OJ刷题日志
虽然这OJ上的题比较水,但还是挺有意思的.关键是能赚钱 特别是提交方式 居然不支持C++,垃圾OJ 4. 最长连续数列 排序后dp 5. 找出旋转有序数列的中间值 写个排序就做完了. 6. 交叉队列 ...