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. Corn Fields(模板)

    题目链接 #include <stdio.h> #include <algorithm> #include <string.h> #include <iost ...

  2. LVM逻辑卷基本概念以及相关操作

    一.LVM概念 LVM(Logical Vloume Manager):它是linux环境下对磁盘进行管理的一种机制,正常挂载的磁盘在磁盘资源快要耗尽时,无法动态拉伸增加资源,或由于特殊情况需要动态缩 ...

  3. leecode-39. Combination Sum

    1.问题描述: Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all ...

  4. 故障案例:主从同步报错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

  5. .md文件插图片,不建议使用绝对地址。

    一 主要有两种方法,一种绝对地址,一种相对地址. 而百度的话,全都是说绝对地址的. 但是,有很大的弊端啊 orz 二 先说绝对地址 ![image](https://github.com/AngelS ...

  6. JDBC和分包

    JDBC(Java Data Base Connectivity,java数据库连接) JDBC是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写 ...

  7. vue2.0:(六)、移动端像素border的实现和整合引入less文件

    知识点一.如何在手机上看我们制作的移动端页面. 正常我们在电脑上都是按如下图来制作手机页面的: 如果要在手机上面看就不能用localhost了.所以,进入命令行,输入ipconfig查看本地ip地址: ...

  8. [整理]Magento2 开发中遇到的错误以及解决方案

    下面记录了一些我在二次开发Magento2是所遇到的错误.错误原因以及解决方案: 1. Object DOMDocument should be created type: report 日志摘要: ...

  9. rest_framework组件之认证,权限,访问频率

    共用的models from django.db import models # Create your models here. class User(models.Model): username ...

  10. 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 ...