关于ansible

在ansible官网上是这样介绍ansible的:Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates.

ansible是一块自动化IT工具,主要实现以下几个功能:

  • 自动化部署
  • 自动化管理配置
  • 不停机更新
  • 自动化持续交互

安装ansible

ansible默认使用SSH协议管理计算机,因为ansiible只需要安装在一台管控机上就可以以此为中心点管控多台服务器,不需要在其他机器上安装和运行软件,所以官网建议跟随ansible版本进行使用,现在ansible的最新版本是2.7版本,ansible能够在安装了python2.7x和3.x版本的计算机上运行,但是被管控的机器不包括windows,只支持一些类unix系统,如macOS,redhat,Debian,CentOS.本文就以CentOS来进行演示。

  • 下载epel源

    在https://opsx.alibaba.com/mirror 上直接复制就可以,不同的操作系统不一样,选择与自己系统相匹配的。
  • 安装ansible
  1. yum install -y ansible

这样ansible就安装好了,十分的方便不需要源码编译安装的步骤,

ansible都安装哪些东西?可以通过rpm -ql ansible来查看。

补充一下yum源的配置。

  1. [epel]
  2. name=Extra Packages for Enterprise Linux 7 - $basearch #名字
  3. baseurl=http://mirrors.aliyun.com/epel/7/$basearch #rpm源的地址,可以写http,https,ftp,Samba,file:
  4. failovermethod=priority
  5. enabled=1 # 是否开启,1代表开启,0表示关闭
  6. gpgcheck=0 #是否校验签名,1代表校验,0表示校验
  7. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

yum的包组安装

  1. yum grouplist #查看包组信息
  2. yum groupinstall #安装包组

机器之间怎么进行连接

上文说过,ansible默认通过SSH协议连接并控制被控节点,SSH有两种认证方式,密码和密钥,密钥的安全性更高故选择密钥。

  1. ssh-keygen #生成SSH密钥对
  2. ssh-copy-id 192.168.245.130 #复制密钥到远程主机

ansible的命令格式

  1. ansible <host-parttern> [options]
  2. -a MODULE_ARGS,--args=MOULE_ARGS #模块的参数
  3. -C,--check #检查
  4. -f FORKS,--forks=FORKS #用于做高并发
  5. --list-hosts #列出主机列表
  6. -m MODULE_NAME #模块名称
  7. -k #输入密码

ansible的hosts文件

  1. # This is the default ansible 'hosts' file.
  2. #
  3. # It should live in /etc/ansible/hosts
  4. #
  5. # - Comments begin with the '#' character # 用#来表示注释
  6. # - Blank lines are ignored # 空白行被忽略
  7. # - Groups of hosts are delimited by [header] elements # 主机组 需要在【】下面
  8. # - You can enter hostnames or ip addresses #可以写主机名或者ip地址
  9. # - A hostname/ip can be a member of multiple groups # 一台主机可以在多个组里面
  10. # www[001:006].example.com 表示从www001到www006的机器

配置举例,可以根据功能将机器进行分组。

  1. [web]
  2. 192.168.13.25
  3. 192.168.22.231
  4. [db]
  5. 192.168.23.33
  6. 192.168.13.25

host-pattern的格式

  • 多个主机

    全部主机 all
  • 多个的主机,中间用","隔开
  • 单个组
  • 多个组
    • 交集 'web:&db'
    • 并集'web,db' , 'web:db'
    • 差集 'web:!db'

查看模块帮助信息

  1. ansible-doc 参数 模块名
  2. 参数包括 -j, -l ,-s
  3. -j #以json的方式返回ansible的所有模块
  4. -l #列出所有的ansible模块
  5. -s #片段式的显示

举例:

  1. ansible-doc -s ping
  2. ansible-doc -s command

ansible的模块

ping

Try to connect to host, verify a usable python and return `pong' on success.

  1. ansible web -m ping #返回json pong

command

Executes a command on a remote node.

执行远程命令的模块,command不需要-m参数,因为-m参数是默认,不支持特殊字符,如管道符|等。

  1. ansible web -a 'ls /'
  2. ansible web -a 'chdir=/tmp pwd' #切换目录后执行命令
  3. ansible web -a 'creates=/tmp pwd' #若/tmp目录存在,则不执行任何操作
  4. ansible web -a 'removes=/tmp pwd' #若/tmp目录存在则执行操作

shell

Execute commands in nodes.

在远程主机执行远程主机的shell或python脚本及命令。

  1. ansible web -m shell -a 'echo "123"|passwd --stdin cui' #鼻梁创建密码
  2. ansible web -m shell -a'/tmp/a.sh' #执行a.sh文件

script

Runs a local script on a remote node after transferring it.

在远程主机执行本地的文件或脚本。

  1. ansible web -m script -a '/root/a.sh' #在远程主机执行本地的文件
  2. ansible web -m script -a 'removes=/root/m.sh /root/m.sh' # 如果存在,存在就执行
  3. ansible web -m script -a 'creates=/root/a.sh /root/m.sh' #如果存在,就不执行

copy

Copies files to remote locations

参数:

  • backup 备份,以时间戳结尾
  • dest 目标地址
  • src 文件源地址
  • owner 文件的属主
  • group 文件的属组
  • mode 文件的权限 rwx
  1. ansible web -m copy -a 'src=/tmp/a.sh dest=/tmp/a.sh' #复制本地文件到远程主机
  2. ansible web -m copy -a 'src=/tmp/a.sh dest=/tmp/a.sh mode=755 owner=cui' #修改文件权限和属主
  3. ansible web -m copy -a 'src=/tmp/a.sh dest=/tmp/' #复制文件,剥到远程主机,如果改变文件属性,文件夹内文件属性也会改变
  4. ansible web -m copy -a 'src=/tmp/ dest=/tmp/' #复制目录内的所有文件到主机
  5. ansible web -m copy -a 'content="我有点小帅" dest=/tmp/a.txt' #注入文本内容到远程文件

file

Sets attributes of files.

一些知识 点准备:

  • inode获取的是硬盘的地址
  • id获取的是内存地址
  • ln -s a.txt b.txt 创建软连接
  • ln a.txt b.txt 创建硬链接
  • 若源文件发生改变,软连接和硬链接生成的文件都会随着变化

    参数:
  • path 目标地址
  • src 源地址
  • state
    • link 建立软连接
    • file 建立文件
    • directory 建立文件夹
    • hard 建立硬链接
    • touch 建立空文件
    • absent 删除
  1. ansible web -m file -a 'path=/tmp state=directory' #建立文件夹
  2. ansible db -m file -a 'path=/tmp/a src=/etc/f' #建立软连接

fetch

Fetches a file from remote nodes

参数:

  • src 源地址
  • dest 目的地址
  1. ansible web -m fetch -a 'src=/var/log/cron dest=/tmp' #下载被控节点的文件,每台远程主机都会创建一个文件夹,保留原来的目录结构

yum

Manages packages with the `yum' package manager.

参数:

  • disablerepo 禁用源
  • enablerepo 启用源
  • name 包名
  • state
    • install 安装
    • remove 卸载
  1. ansible web -m yum -a 'name=wget' # 安装wget
  2. ansible web -m yum -a 'name=python2-pip' # 安装python2-pip
  3. ansible web -m yum -a 'name=wget state=absent' # 卸载软件包
  4. ansible web -m yum -a 'name="@Development Tools"' # 安装包组

pip

Manages Python library dependencies.

参数:

  • chdir 切换目录后安装
  • name 包名
  1. ansible web -m pip -a 'name=flask' #安装flask

service

Manage services.

ss -tnlp 查看端口信息

参数:

  • name 服务名
  • enable 自启动
  • state
    • started 开始
    • stoped 结束
    • restarted 重启
    • reload 平滑加载
  1. ansible web -m service -a 'name=nginx state=started' # 启动nginx
  2. ansible web -m service -a 'name=nginx state=stopped' # 关闭nginx

cron

Manage cron.d and crontab entries.

参数:

  • day 天
  • disable 禁用
  • hour 小时
  • job 任务
  • minute 分钟
  • month 月
  • name 任务名字
  • weekday 周
  1. ansible db -m cron -a 'minute=26 job="touch /tmp/a.txt" name=touchfile' # 新建一个计划任务
  2. ansible db -m cron -a 'name=touchfile state=absent' # 删除一个计划任务
  3. ansible db -m cron -a 'minute=26 job="touch /tmp/ay.txt" name=touchfile disabled=yes' # 禁用计划任务,以#表示禁用

user

Manage user accounts.

参数:

  • group 组
  • groups 附加组
  • home 家目录
  • name 用户名
  • password 密码
  • remove 删除
  • system 创建系统用户
  • uid 指定用户的uid
  • state
    • absent
  • shell 用户登陆后的shell
  1. absible web -m user -a 'name=cyz uid=6666 home=/opt/cyz groups=root shell=/sbin/nologin' #创建用户cyz uid为666
  2. absible web -m user -a 'name=cyz state=absent' #删除用户但不删除家目录
  3. absible web -m user -a 'name=cyz state=absent remove=yes' #删除用户并删除家目录

group

Add or remove groups.

参数:

  • gid 组id
  • name 组名
  • system 系统组
  1. ansible -m group -a 'name=cui system=yes' #创建cui系统组
  2. ansible -m group -a 'name=cui state=absent' #删除cui用户组

关于user和group的一些补充

用户:

  • 管理员 root uid为0
  • 普通用户
    • 系统用户 不能登陆 uid为1-999(centos7)
    • 登陆用户 可以登录 uid为1000-65535(centos7)

      用户组:
  • 管理员组 root 0
  • 系统用户组 1-999
  • 登陆用户组 1000-65535
  1. useradd
  2. - -r 创建系统用户
  3. - -s 创建普通用户
  4. - -d 创建用户时指定家目录
  5. - -g 创建用户时指定用户组
  6. - -G 创建用户时指定用户的执行组
  7. - -u 创建用户时指定用户uid
  8. userdel
  9. - -r 删除用户并删除用户的家目录(默认只删除用户)
  10. groupadd 创建用户组
  11. - r 创建系统用户组
  12. groupdel 删除用户组

关于计划任务的一些补充

crontab命令

  • -e 编辑计划任务
  • -l 查看计划任务
  • -r 删除计划任务

    计划任务的书写
  1. * * * * * job
  2. 任务
  3. 0 */2 * * * job #每隔两个小时执行任务
  4. 0 12,13 * * * job # 12点和13点执行任务
  5. 0 12-17 * * * job #12-17点执行任务
  6. 0 12-17/2 * * * job #12-17点每隔两小时执行任务

关于pip的一些补充

  1. pip install package #安装包
  2. pip freeze >a.txt #导出环境
  3. pip install -r a.txt #根据环境文件安装包
  4. pip list #查看已经安装成功的包

ansible剧本(playbook)

剧本是ansible的配置和部署语言,它是由yaml编写的,用来描述对远程机器执行的策略或步骤。

yaml的语法

yaml是一种编写配置文件的编程语言,常见的配置文件后缀有.ini、.xml等,

由yaml编写的配置文件的后缀是.yaml 或.yml。

  • 书写规范

    • 不要使用tab,两个空格代表一个缩进
    • ':'后要加一个空格
    • '-' 后要加一个空格
    • 变量使用{{}}表示
  • 列表的所有元素均以'-'+空格开头
  • 字典key和value以:分开
  • 条件判断使用when
  • 循环使用with_items,变量用{{item}}
  1. - hosts: web
  2. tasks:
  3. - name: creategroup
  4. group: name=cyz
  5. - name: createuser
  6. user: name=cui

变量的传参方式

  • 通过命令行传递变量
  1. ansible-playbook -e 'user=cui' a.yml
  • 在hosts文件中声明,有两种方法。
  1. [web]
  2. 192.168.13.25 user=cui
  3. 192.168.22.231 user=cyz
  1. [web:vars]
  2. user=cui
  • 在剧本中声明
  1. - hosts: db
  2. vars:
  3. - user: cui
  4. tasks:
  5. - name: create{{ user }}
  6. user: name={{ user}}
  • 使用register
  1. - hosts: web
  2. tasks:
  3. - name: reg
  4. shell: echo 'cui'
  5. register: user
  6. - name: createuser
  7. user: name={{user.stdout}}

传参的优先级为:命令行>剧本>hosts文件

ansible工具的更多相关文章

  1. 安全运维中基线检查的自动化之ansible工具巧用

    i春秋作家:yanzm 原文来自:安全运维中基线检查的自动化之ansible工具巧用 前几周斗哥分享了基线检查获取数据的脚本,但是在面对上百台的服务器,每台服务器上都跑一遍脚本那工作量可想而知,而且都 ...

  2. Ansible工具原理一

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命 ...

  3. 自动化运维工具Ansible工具

    目录 一.初识Ansible 二.Ansible的架构 三.Ansible基础使用 安装 主机清单 管理主机 四.Ansible用脚本管理主机 五.Ansible模块Module 六.Ansible常 ...

  4. 自动化部署与统一安装升级 - 类ansible工具 udeploy0.3版本发布 (更新时间2014-12-24)

    下载地址:  unifyDeploy0.1版本  unifyDeploy0.2版本     unifyDeploy0.3版本 (更新时间2014-07-25)   自动化部署与统一安装升级,适用于多资 ...

  5. 比Ansible更吊的自动化运维工具,自动化统一安装部署_自动化部署udeploy 1.0

    新增功能: 2015-03-11 除pass(备份与更新)与start(启动服务)外,实现一切自动化. 注:pass与start设为业务类,由于各类业务不同,所以无法实现自动化.同类业务除外,如更新的 ...

  6. 比Ansible更吊的自动化运维工具,自动化统一安装部署自动化部署udeploy 1.0 版本发布

    新增功能: 逻辑与业务分离,完美实现逻辑与业务分离,业务实现统一shell脚本开发,由框架统一调用. 并发多线程部署,不管多少台服务器,多少个服务,同时发起线程进行更新.部署.启动. 提高list规则 ...

  7. Ansible :一个配置管理和IT自动化工具

    编译文章:LCTT  https://linux.cn/article-4215-1.html 译者: felixonmars 文章地址:https://linux.cn/article-4215-1 ...

  8. 【Ansible】 基于SSH的远程管理工具

    [Ansible] 参考文档:[http://www.ansible.com.cn/docs/intro.html] 和ansible类似的工具还有saltstack,puppet,sshpass等, ...

  9. Ansible自动化运维工具-上

    [Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...

随机推荐

  1. 第二章 ArrayList源码解析

    一.对于ArrayList需要掌握的七点内容 ArrayList的创建:即构造器 往ArrayList中添加对象:即add(E)方法 获取ArrayList中的单个对象:即get(int index) ...

  2. JSON Patch

    1.前言 可以这么说的是,任何一种非强制性约束同时也没有"标杆"工具支持的开发风格或协议(仅靠文档是远远不够的),最终的实现上都会被程序员冠上"务实"的名头,而 ...

  3. JS 数据类型、赋值、深拷贝和浅拷贝

    js 数据类型 六种 基本数据类型: Boolean. 布尔值,true 和 false. null. 一个表明 null 值的特殊关键字. JavaScript 是大小写敏感的,因此 null 与 ...

  4. IDEA设置生成带注释的getter和setter解决方案 (图文教程)

    近日在研究重构代码的时候有用到idea的不少插件,比如CheckStyle,同时下载了阿里的开发规约,收到不少启发. 规约中会要求所有的方法都有Javadoc,但是通常我们用idea默认生成的gett ...

  5. linux定时任务cron配置

    实现linux定时任务有:cron.anacron.at,使用最多的是cron任务 名词解释 cron--服务名:crond--linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与 ...

  6. Mac命令行

    参考:http://www.cnblogs.com/-ios/p/4949923.html 必读 涵盖范围: 这篇文章对刚接触命令行的新手以及具有命令行使用经验的人都有用处.本文致力于做到覆盖面广(尽 ...

  7. SSM-Spring-20:Spring中事务基础

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 事务 事务是什么? 我记得当初的百度百科上讲,事务是执行的最小逻辑单元,它们要么都执行,要么都不执行 (同生共 ...

  8. Windows上设置Mozilla Thunderbird邮件客户端后台运行

    作者:荒原之梦 操作系统: Windows 10 Thunderbird版本: 52.6.0(32-bit) Thunderbird官网页面:https://www.mozilla.org/zh-CN ...

  9. HTTPS加密原理

    http(超文本传输协议) 一种属于应用层的协议 缺点: 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能已遭篡改 优点: 传输速度快 ...

  10. yii2.0 app上集成支付宝支付

    1.首先从支付宝官网下载支付宝app支付sdk 地址 : https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.hLEa5O&a ...