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片段(短格式,简洁)

命令格式

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 输密钥

  1. ssh-keygen回车
  2. ssh-copy-id IP回车

Linux使用ssh-keygen实现SSH无密码登录

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命令执行过程

  1. 加载配置文件
  2. 加载对应模块
  3. 将模块或命令生成临时py文件并传输
  4. 给文件 +x 权限执行
  5. 执行并返回结果
  6. 删除临时文件,并 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'

linux下的stdin,stdout和stderr理解

SELinux 与强制访问控制系统

/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'安装多个包,用逗号隔开。

安装本地包

  1. 将本地包发到客户机
  2. 执行安装命令

忽略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的使用和模块化深入的更多相关文章

  1. 分享4个运维平台工具OSSIM、Ansible的学习思路

    对于当今企业安全来说,真正价值不在于亡羊补牢,也不在于一个或多个高危漏洞.企业在乎的是如何防患于未然,如何快速定位攻击,如何快速解决安全问题.OSSIM作为开源的安全信息管理平台,对于企业的需求来说毋 ...

  2. 1、Ansible简介及简单安装、使用

    参考Ansible权威指南:https://ansible-tran.readthedocs.io/en/latest/index.html 以下内容学习自马哥教育 Ansible: 运维工作:系统安 ...

  3. 学习ansible笔记1

    ansible的特点: -- 模块化设计 -- 仅需要ssh和Python即可以使用 -- 无客户端 -- 功能强大,模块丰富 -- 上手容易门槛低 -- 基于python开发,做二次开发更容易 -- ...

  4. 批量搞机(一):ansible简介、ansible安装

    一.ansible简介 Ansible是2013年推出的一款IT自动化和DevOps软件,目前由Redhat已签署Ansible收购协议.其是基于Python研发,糅合了很多老运维工具的优点实现了批量 ...

  5. 集群工具ansible使用方法

    ansible简介 ansible是与puppet.saltstack类似的集群管理工具,其优点是仅需要ssh和Python即可使用,而不像puppet.saltstack那样都需要客户端.与pupp ...

  6. Ansible学习笔记

    一.Ansible简介 Ansible是一种agentless(基于ssh),可实现批量配置.命令执行和控制,基于Python实现的自动化运维工具. 其特性有: ①模块化:通过调用相关模块,完成指定任 ...

  7. 翻译-Salt与Ansible全方位比较

    原文链接:http://jensrantil.github.io/salt-vs-ansible.html 作者: Jens Rantil 之前某些时候我需要评估配置管理系统.结合从他人得到的意见,我 ...

  8. 自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机

    目录: 一.ansible简介 1.1.ansible是什么 1.2.ansible如何工作 1.3.ansible优缺点 1.4.ansible安装方式 1.5.ansible文件简单介绍 1.6. ...

  9. Ansible详解(一)

    简介 Ansible是一个简单的自动化运维管理工具,基于Python语言实现,由Paramiko和PyYAML两个关键模块构建,可用于自动化部署应用.配置.编排task(持续交付.无宕机更新等).主版 ...

随机推荐

  1. ubuntu 设置字符集 locale(解决乱码问题)

    1.locale 查看现在的locale配置环境 2.localepurge 配置需要的locale(如果没有这个命令,用apt-get install localepurge安装) 3.locale ...

  2. ES6新特性使用小结(五)

    十二.class 与 extends ①.类的基本定义和生成实例 { class Parent{ constructor(name='Lain'){ //定义构造函数 this.name = name ...

  3. HDU-1281-棋盘游戏(最大匹配,枚举)

    链接:https://vjudge.net/problem/HDU-1281 题目: 小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互 ...

  4. input文本框默认提示

    今天闲暇时间把自己以前写的一个文本框默认提示函数改成了一个小插件.下面是代码 1.引入jQuery库 <script src="http://code.jquery.com/jquer ...

  5. 使用OAuth保护REST API并使用简单的Angular客户端

    1.概述 在本教程中,我们将使用OAuth保护REST API并从简单的Angular客户端使用它. 我们要构建的应用程序将包含四个独立的模块: 授权服务器 资源服务器 UI implicit - 使 ...

  6. linux basename命令的使用

    用途 返回一个字符串参数的基本文件名称. 语法 basename String [ Suffix ] 描述 basename 命令读取 String 参数,删除以 /(斜杠) 结尾的前缀以及任何指定的 ...

  7. kie-api 组件介绍

    KieServices:kie整体的入口,可以用来创建Container,resource,fileSystem等 KieContainer: KieContainer就是一个KieBase的容器,可 ...

  8. ef 操作 mysql 中文乱码问题

    1.保证mysql数据的编码为utf8 启动mysql mysql -hlocalhost -uroot -p 输入密码 show VARIABLES like 'character_%'; SET  ...

  9. 2、HTTP状态码

    HTTP状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应 ...

  10. css hack 浏览器携带自身特有的属性 (二)

    css hack 浏览器携带自身特有的属性,才是我们真正要解决的css 兼容问题. 这里只是分享思路. 举例子: 1 outline,尤其是一些 自带继承特性的属性.这里指的是 隐性的inherite ...