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(持续交付.无宕机更新等).主版 ...
随机推荐
- C 语言实例 - 判断正数/负数
C 语言实例 - 判断正数/负数 用户输入一个数字,判断该数字是正数还是负数或是零. 实例 #include <stdio.h> int main() { double number; p ...
- CCPC吉林站
A.The Fool #include <bits/stdc++.h> using namespace std; inline int read() { ,f=;char ch=getch ...
- Django -- 权限初识
待 需求分析-场景 假设需要为公司设计一个人员管理系统,并为各级领导及全体员工分配系统登录账号.有如下几个要求: 1.权限等级不同 公司领导登录后可查看所有员工的信息,部门领导登陆后之可查看本部门员工 ...
- proxy_pass http://127.0.0.1:5000; 502 bad getway
(13: Permission denied) while connecting to upstream:[nginx] I am working with configuring django pr ...
- 我的grunt配置
module.exports = function(grunt) { // 配置. grunt.initConfig({ pkg: grunt.file.readJSON('package.json' ...
- 《深入理解java虚拟机》笔记(3)实战:OutOfMemoryError异常
一.Java堆溢出 测试代码: /** * <p>Java堆异常测试</p> * <code>VM Args: -Xms20m -Xmx20m -XX:+HeapD ...
- CQRS之旅——旅程4(扩展和增强订单和注册限界上下文)
旅程4:扩展和增强订单和注册限界上下文 进一步探索订单和注册的有界上下文. "我明白,如果一个人想看些新鲜的东西,旅行并不是没有意义的."儒勒·凡尔纳,环游世界80天 对限界上下文 ...
- Lodop套打
记录一下Lodop套打模板 实现打印功能需电脑已经连接打印机(打印什么类型的东西就连接相应的打印机 (普通大打印机 打印标签 打印发票各种打印机))和已经安装好lodop控件 控件可到官网进行下载 h ...
- 一步步实现自己的ORM(二)
在第一篇<一步步实现自己的ORM(一)>里,我们用反射获取类名.属性和值,我们用这些信息开发了简单的INSERT方法,在上一篇文章里我们提到主键为什么没有设置成自增长类型,单单从属性里我们 ...
- Mind must be master of the body, strong mind can separate the body from its suffering.
Mind must be master of the body, strong mind can separate the body from its suffering.意志是身体的主人,有顽强的意 ...