ANSIBLE自动化管理工具

ansible 基础

自动化运维工具

1. 模块化:调用特定的模块,完成特定任务 Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块


2. 支持自定义模块,可使用任何编程语言写模块基于Python语言实现 


3. 部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖PKI(无需ssl)


4. 安全,基于OpenSSH

5. 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况


6. 支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构较强大的多层解决方案role
  • 安装 : yum install ansible

ansible 相关文件

  • /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性


[defaults]
inventory = /etc/ansible/hosts # 主机列表配置文件
library = /usr/share/my_modules/ # 库文件存放目录
remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
forks = 5 # 默认并发数
sudo_user = root # 默认sudo 用户
ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
ask_pass = True
remote_port = 22
host_key_checking = False # 检查对应服务器的host_key,建议取消注释
log_path=/var/log/ansible.log #日志文件,建议启用
module_name = command #默认模块,可以修改为shell模块




  • /etc/ansible/hosts 主机清单
ansible 的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory file中将其分组命名 默认的inventory file为/etc/ansible/hosts inventory file可以有多个,且也可以通过DynamicInventory来动态生成

inventory文件遵循INI文件风格,中括号中的字符为组名。可以将同一个主机同时归并到多个不同的组中此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机

...

[web]
192.168.47.10[1:10]

[mysql]
192.168.47.20[1..2]
...


/etc/ansible/roles/ 存放角色的目录

Roles各目录作用 
/roles/project/ : # 项目名称,有以下子目录

files/ :#存放由copy或script模块等调用的文件 

templates/:#template模块查找所需要模板文件的目录

tasks/:#定义task,role的基本元素,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含 

handlers/:#至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含 

vars/:#定义变量,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含

meta/:#定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,其它文件需在此文件中通过include进行包含 

default/:#设定默认变量时使用此目录中的main.yml文件

ansible相关工具

/usr/bin/ansible #主程序,临时命令执行工具
/usr/bin/ansible-doc #查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy #下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook #定制自动化任务,编排剧本工具
/usr/bin/ansible-pull #远程执行命令的工具
/usr/bin/ansible-vault #文件加密工具
/usr/bin/ansible-console  #基于Console界面与用户交互的执行工具

  • ansible-doc
ansible-doc [options] [module...]
-l, --list #列出可用模块
-s, --snippet #显示指定模块的playbook片段

语法

  • ansible host-pattern [-m module_name] [-a args]
  • ansible 主机清单列表 【-m 模块 】 【 -a 参数 】
  • 详细选项
--version #显示版本
-m module #指定模块,默认为command
-v #详细过程 –vv -vvv更详细
--list-hosts #显示主机列表,可简写 --list
-k, --ask-pass #提示输入ssh连接密码,默认Key验证
-C, --check #检查,并不执行
-T, --timeout=TIMEOUT #执行命令的超时时间,默认10s
-u, --user=REMOTE_USER #执行远程执行的用户
-b, --become #代替旧版的sudo 切换
--become-user=USERNAME #指定sudo的runas用户,默认为root
-K, --ask-become-pass #提示输入sudo时的口令


  • 主机清单匹配法
#  所有主机
ansible all –m ping 

#  通配符
ansible “*” -m ping
ansible 192.168.1.* -m ping
ansible “srvs” -m ping

#  或

ansible “websrvs:appsrvs” -m ping
ansible “192.168.1.10:192.168.1.20” -m ping

#与
#在websrvs组并且在dbsrvs组中的主机
ansible “websrvs:&dbsrvs” –m ping

# 非
# 在websrvs组,但不在dbsrvs组中的主机 注意:此处为单引号
ansible ‘websrvs:!dbsrvs’ –m ping

  • 加载执行过程

1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg

2. 加载自己对应的模块文件,如:command

3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户'$HOME'/.ansible/tmp/ansible-tmp-数字/XXX.PY文件 

4. 给文件+x执行

5. 执行并返回结果

6. 删除临时py文件,退出


### 执行状态

绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败


  • 模块
https://docs.ansible.com/ansible/latest/modules/modules_by_category.html
**模块索引**
所有模块
云模块
集群模块
命令模块
加密模块
数据库模块
文件模块
身份模块
库存模块
讯息模块
监控模块
网络工具模块
网络模块
通知模块
包装模块
远程管理模块
源代码控制模块
存储模块
系统模块
实用程序模块
Web基础架构模块
Windows模块

原文地址:https://www.cnblogs.com/Justin0717/p/11990208.html