关于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
yum install -y ansible

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

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

补充一下yum源的配置。

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

yum的包组安装

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

机器之间怎么进行连接

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

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

ansible的命令格式

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

ansible的hosts文件

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

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

[web]
192.168.13.25
192.168.22.231
[db]
192.168.23.33
192.168.13.25

host-pattern的格式

  • 多个主机

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

查看模块帮助信息

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

举例:

ansible-doc -s ping
ansible-doc -s command

ansible的模块

ping

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

ansible web -m ping	#返回json pong

command

Executes a command on a remote node.

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

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

shell

Execute commands in nodes.

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

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

script

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

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

ansible web -m script -a '/root/a.sh'	#在远程主机执行本地的文件
ansible web -m script -a 'removes=/root/m.sh /root/m.sh' # 如果存在,存在就执行
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
ansible web -m copy -a 'src=/tmp/a.sh dest=/tmp/a.sh' #复制本地文件到远程主机
ansible web -m copy -a 'src=/tmp/a.sh dest=/tmp/a.sh mode=755 owner=cui' #修改文件权限和属主
ansible web -m copy -a 'src=/tmp/a.sh dest=/tmp/' #复制文件,剥到远程主机,如果改变文件属性,文件夹内文件属性也会改变
ansible web -m copy -a 'src=/tmp/ dest=/tmp/' #复制目录内的所有文件到主机
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 删除
ansible web -m file -a 'path=/tmp state=directory'	#建立文件夹
ansible db -m file -a 'path=/tmp/a src=/etc/f' #建立软连接

fetch

Fetches a file from remote nodes

参数:

  • src 源地址
  • dest 目的地址
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 卸载
ansible web -m yum -a 'name=wget' # 安装wget
ansible web -m yum -a 'name=python2-pip' # 安装python2-pip
ansible web -m yum -a 'name=wget state=absent' # 卸载软件包
ansible web -m yum -a 'name="@Development Tools"' # 安装包组

pip

Manages Python library dependencies.

参数:

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

service

Manage services.

ss -tnlp 查看端口信息

参数:

  • name 服务名
  • enable 自启动
  • state
    • started 开始
    • stoped 结束
    • restarted 重启
    • reload 平滑加载
ansible web -m service -a 'name=nginx state=started' # 启动nginx
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 周
ansible db -m cron -a 'minute=26 job="touch /tmp/a.txt" name=touchfile' # 新建一个计划任务
ansible db -m cron -a 'name=touchfile state=absent' # 删除一个计划任务
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
absible web -m user -a 'name=cyz uid=6666 home=/opt/cyz groups=root shell=/sbin/nologin'	#创建用户cyz uid为666
absible web -m user -a 'name=cyz state=absent' #删除用户但不删除家目录
absible web -m user -a 'name=cyz state=absent remove=yes' #删除用户并删除家目录

group

Add or remove groups.

参数:

  • gid 组id
  • name 组名
  • system 系统组
ansible -m group -a 'name=cui system=yes'	#创建cui系统组
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
useradd
- -r 创建系统用户
- -s 创建普通用户
- -d 创建用户时指定家目录
- -g 创建用户时指定用户组
- -G 创建用户时指定用户的执行组
- -u 创建用户时指定用户uid userdel
- -r 删除用户并删除用户的家目录(默认只删除用户)
groupadd 创建用户组
- r 创建系统用户组
groupdel 删除用户组

关于计划任务的一些补充

crontab命令

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

    计划任务的书写
* * * * * job
分 时 日 月 周 任务
0 */2 * * * job #每隔两个小时执行任务
0 12,13 * * * job # 12点和13点执行任务
0 12-17 * * * job #12-17点执行任务
0 12-17/2 * * * job #12-17点每隔两小时执行任务

关于pip的一些补充

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

ansible剧本(playbook)

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

yaml的语法

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

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

  • 书写规范

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

变量的传参方式

  • 通过命令行传递变量
ansible-playbook -e 'user=cui' a.yml
  • 在hosts文件中声明,有两种方法。
[web]
192.168.13.25 user=cui
192.168.22.231 user=cyz
[web:vars]
user=cui
  • 在剧本中声明
- hosts: db
vars:
- user: cui
tasks:
- name: create{{ user }}
user: name={{ user}}
  • 使用register
- hosts: web
tasks:
- name: reg
shell: echo 'cui'
register: user
- name: createuser
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. 【热身】github的使用

    GitHub 可以托管各种Git版本库,并提供一个web界面,但与其它像 SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性.为一个 ...

  2. JavaScript 字符串反转

    第一种方法:使用内置方法 split()方法将一个字符串对象的每个字符拆出来,并且将每个字符串当成数组的每个元素 reverse()方法用来改变数组,将数组中的元素倒个序排列,第一个数组元素成为最后一 ...

  3. Http协议、Tomcat、servlet

    HTTP协议 Http,超文本传输协议是互联网上最广泛的一种网络协议,所有的www文件都必须遵守这个标准. Http协议由http请求和http响应组成 http请求: 1.请求行 请求方式 POST ...

  4. ASCII、 Unicode 和 UTF8

    ASCII: 英文字母与数字编号的一一对应.每个英文字母对应一个编号.范围0~127 Unicode: 全世界所有语言中字符与数字编号的一一对应.也即为存在的每个字符指定一个唯一的编号.范围为0~0x ...

  5. Eclipse插件:mybatis generator的使用步骤

    一.首先,安装eclipse插件 Help--Eclipser Marketplace中查找:Mybatis Generator 1.3.5安装 二.新建project New--other--查找如 ...

  6. Java基础之抽象类

    /* 1.抽象类的概述: 动物不应该定义为具体的东西,而且动物中的吃,睡等也不应该是具体的. 我们把一个不是具体的功能称为抽象的功能,而一个类中如果有抽象的功能,该类必须是抽象类. 抽象类的特点: A ...

  7. python之six用法

    six.PY2 返回一个表示当前运行环境是否为python2的boolean值 six.PY3 返回一个表示当前运行环境是否为python3的boolean值 import six,sys print ...

  8. Linux.安装phantomjs

    PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...

  9. Tensorflow学习-数据读取

    Tensorflow数据读取方式主要包括以下三种 Preloaded data:预加载数据 Feeding: 通过Python代码读取或者产生数据,然后给后端 Reading from file: 通 ...

  10. 【BZOJ 2844】: albus就是要第一个出场

    题目大意: 给一个长度为n的序列,将其子集的异或值排序得到B数组,给定一个数字Q,保证Q在B中出现过,询问Q在B中第一次出现的下标. 题解: 感觉和hdu3949第K小异或值有一像,然而发现要求出现次 ...