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 = Falselog_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(持续交付.无宕机更新等).主版 ...
随机推荐
- Corn Fields(模板)
题目链接 #include <stdio.h> #include <algorithm> #include <string.h> #include <iost ...
- LVM逻辑卷基本概念以及相关操作
一.LVM概念 LVM(Logical Vloume Manager):它是linux环境下对磁盘进行管理的一种机制,正常挂载的磁盘在磁盘资源快要耗尽时,无法动态拉伸增加资源,或由于特殊情况需要动态缩 ...
- leecode-39. Combination Sum
1.问题描述: Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all ...
- 故障案例:主从同步报错Fatal error: The slave I/O thread stops because master and slave have equal MySQL server
https://blog.csdn.net/cug_jiang126com/article/details/46846031
- .md文件插图片,不建议使用绝对地址。
一 主要有两种方法,一种绝对地址,一种相对地址. 而百度的话,全都是说绝对地址的. 但是,有很大的弊端啊 orz 二 先说绝对地址  JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写 ...
- vue2.0:(六)、移动端像素border的实现和整合引入less文件
知识点一.如何在手机上看我们制作的移动端页面. 正常我们在电脑上都是按如下图来制作手机页面的: 如果要在手机上面看就不能用localhost了.所以,进入命令行,输入ipconfig查看本地ip地址: ...
- [整理]Magento2 开发中遇到的错误以及解决方案
下面记录了一些我在二次开发Magento2是所遇到的错误.错误原因以及解决方案: 1. Object DOMDocument should be created type: report 日志摘要: ...
- rest_framework组件之认证,权限,访问频率
共用的models from django.db import models # Create your models here. class User(models.Model): username ...
- If people in the communications only think about gains and losses of interest, then the pleasure of knowing each other will cease to exist.
If people in the communications only think about gains and losses of interest, then the pleasure of ...