ansible基本使用教程
转载请注明出处http://www.cnblogs.com/chenxianpao/p/7360349.html
一、 介绍
项目 | Puppet | Saltstack | Ansible |
开发语言 | Ruby | Python | Python |
是否有客户端 | 是 | 是 | 否 |
是否支持二次开发 | 不支持 | 支持 | 支持 |
服务器与远程机器是否相互验证 | 是 | 是 | 是 |
服务器与远程机器通信是否加密 | 是,标准SSL协议 | 是,使用AES加密 | 是,使用OpenSSH |
是否提供WEB UI | 提供 | 提供 | 提供,但是商业版本 |
配置文件格式 | Ruby语法 | YAML | YAML |
命令行执行 | 不支持,但可以通过配置模块实现 | 支持 | 支持 |
二、ansible组件介绍
参考 | 解释 | 例子 |
ansible_ssh_host | 将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置. | ansible_ssh_host=192.169.1.123 |
ansible_ssh_port | ssh端口号.如果不是默认的端口号,通过此变量设置. | ansible_ssh_port=5000 |
ansible_ssh_user | 默认的 ssh 用户名 | ansible_ssh_user=cxpadmin |
ansible_ssh_pass | ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥) | ansible_ssh_pass=’123456’ |
ansible_sudo_pass | sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass) | ansible_sudo_pass=’123456’ |
ansible_sudo_exe | sudo 命令路径(适用于1.8及以上版本) | ansible_sudo_exe=/usr/bin/sudo |
ansible_connection | 与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行. | ansible_connection=local |
ansible_ssh_private_key_file | ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况. | ansible_ssh_private_key_file=/root/key |
ansible_shell_type | 目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'. | ansible_shell_type=zsh |
ansible_python_interpreter | 目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 \*BSD, 或者 /usr/bin/python 不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26). |
ansible_python_interpreter=/usr/bin/python2.6 |
ansible_*_interpreter | 定义其他语言解释器 | ansible_*_interpreter=/usr/bin/ruby |
ansible_sudo | 定义sudo用户 | ansible_sudo=cxpadmin |
常用模块介绍
参数名 | 是否必须 | 默认值 | 选项 | 说明 |
src | no | 用于定位ansible执行的机器上的文件,需要绝对路径。如果拷贝的是文件夹,那么文件夹会整体拷贝,如果结尾是”/”,那么只有文件夹内的东西被考过去。一切的感觉很像rsync | ||
content | no | 用来替代src,用于将指定文件的内容,拷贝到远程文件内 | ||
dest | yes | 用于定位远程节点上的文件,需要绝对路径。如果src指向的是文件夹,这个参数也必须是指向文件夹 | ||
backup | no | no | yes/no | 备份远程节点上的原始文件,在拷贝之前。如果发生什么意外,原始文件还能使用。 |
directory_mode | no | 这个参数只能用于拷贝文件夹时候,这个设定后,文件夹内新建的文件会被拷贝。而老旧的不会被拷贝 | ||
follow | no | no | yes/no | 当拷贝的文件夹内有link存在的时候,那么拷贝过去的也会有link |
force | no | yes | yes/no | 默认为yes,会覆盖远程的内容不一样的文件(可能文件名一样)。如果是no,就不会拷贝文件,如果远程有这个文件 |
group | no | 设定一个群组拥有拷贝到远程节点的文件权限 | ||
mode | no | 等同于chmod,参数可以为“u+rwx or u=rw,g=r,o=r” | ||
owner | no | 设定一个用户拥有拷贝到远程节点的文件权限 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
[root@node1 ansible]# ansible testservers -m copy -a 'src=/root/install.log dest=/tmp/install.log owner=testuser group=testgroup' 192.168.100.131 | success >> { "changed": true, "checksum": "7b3626c84bb02d12472c03d2ece878fdc4756c94", "dest": "/tmp/install.log", "gid": 1100, "group": "testgroup", "md5sum": "c7d8a01a077940859e773b7770d2e07e", "mode": "0644", "owner": "testuser", "size": 9458, "src": "/root/.ansible/tmp/ansible-tmp-1456387213.94-229503410500766/source", "state": "file", "uid": 1000 } 192.168.100.132 | success >> { |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
[root@node1 ansible]# echo "test " >> /root/install.log [root@node1 ansible]# ansible testservers -m copy -a 'src=/root/install.log dest=/tmp/install.log owner=testuser group=testgroup backup=yes' 192.168.100.132 | success >> { "backup_file": "/tmp/install.log.2016-02-25@16:01:26~", "changed": true, "checksum": "b5da7af32ad02eb98f77395b28f281a965b4c1f5", "dest": "/tmp/install.log", "gid": 1100, "group": "testgroup", "md5sum": "d39956add30a18019cb5ad2381a0cd43", "mode": "0644", "owner": "testuser", "size": 9464, "src": "/root/.ansible/tmp/ansible-tmp-1456387285.87-128685659798967/source", "state": "file", "uid": 1000 } 192.168.100.131 | success >> { [root@node1 ansible]# ansible testservers -m raw -a 'ls -lrth /tmp/install*' 192.168.100.132 | success | rc=0 >> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
[root@node1 ansible]# tree testdir testdir ├── a │ ├── e │ │ └── ansible.cfg │ ├── f │ └── g ├── b │ ├── e │ ├── f │ └── g └── c ├── ansible.cfg ├── e ├── f └── g [root@node1 ansible]# ansible testservers -m copy -a 'src=/etc/ansible/testdir dest=/tmp/ owner=testuser group=testgroup backup=yes' 192.168.100.132 | success >> { [root@node1 ansible]# ansible testservers -m command -a 'tree /tmp/testdir' 5 directories, 3 files 192.168.100.132 | success | rc=0 >> 5 directories, 3 files |
参数名 | 参数说明 | 返回值 | 返回值类型 | 样例 |
src | 位于ansible执行机上的位置 | changed | string | /home/httpd/.ansible/tmp/ansible-tmp-1423796390.97-147729857856000/source |
backup_file | 将原文件备份 | changed and if backup=yes | string | /path/to/file.txt.2015-02-12@22:09~ |
uid | 在执行后,拥有者的ID | success | int | 100 |
dest | 远程节点的目标目录或文件 | success | string | /path/to/file.txt |
checksum | 拷贝文件后的checksum值 | success | string | 6e642bb8dd5c2e027bf21dd923337cbb4214f827 |
md5sum | 拷贝文件后的md5 checksum值 | when supported | string | 2a5aeecc61dc98c4d780b14b330e3282 |
state | 执行后的状态 | success | string | file |
gid | 执行后拥有文件夹、文件的群组ID | success | int | 100 |
mode | 执行后文件的权限 | success | string | 0644 |
owner | 执行后文件所有者的名字 | success | string | httpd |
group | 执行后文件所有群组的名字 | success | string | httpd |
size | 执行后文件大小 | success | int | 1220 |
参数 | 是否必须 | 默认值 | 选项 | 说明 |
chdir | no | 跟command一样的,运行shell之前cd到某个目录 | ||
creates | no | 跟command一样的,如果某个文件存在则不运行shell | ||
removes | no | 跟command一样的,如果某个文件不存在则不运行shell |
参数 | 是否必须 | 默认值 | 选项 | 说明 |
chdir | no | 运行command命令前先cd到这个目录 | ||
creates | no | 如果这个参数对应的文件存在,就不运行command | ||
executable | no | 将shell切换为command执行,这里的所有命令需要使用绝对路径 | ||
removes | no | 如果这个参数对应的文件不存在,就不运行command |
ansible -i hosts all -m command -a "/sbin/shutdown -t now"
ansible -i hosts all -m command -a "/usr/bin/make_database.sh arg1 arg2 creates=/path/to/database"
参数 | 必填 | 默认值 | 选项 | 说明 |
Dest | Yes | 用来存放文件的目录,例如存放目录为backup,源文件名称为/etc/profile在主机pythonserver中,那么保存为/backup/pythonserver/etc/profile | ||
Fail_on_missing | No | No | Yes/no | 当源文件不存在的时候,标识为失败 |
Flat | No | 允许覆盖默认行为从hostname/path到/file的,如果dest以/结尾,它将使用源文件的基础名称 | ||
Src | Yes | 在远程拉取的文件,并且必须是一个file,不能是目录 | ||
Validate_checksum | No | Yes | Yes/no | 当文件fetch之后进行md5检查 |
参数 | 必填 | 默认 | 选项 | 说明 |
Follow | No | No | Yes/no | 这个标识说明这是系统链接文件,如果存在,应该遵循 |
Force | No | No | Yes/no | 强制创建链接在两种情况下:源文件不存在(过会会存在);目标存在但是是文件(创建链接文件替代) |
Group | No | 文件所属用户组 | ||
Mode | No | 文件所属权限 | ||
Owner | No | 文件所属用户 | ||
Path | Yes | 要控制文件的路径 | ||
Recurse | No | No | Yes/no | 当文件为目录时,是否进行递归设置权限 |
Src | No | 文件链接路径,只有状态为link的时候,才会设置,可以是绝对相对不存在的路径 | ||
State | No | File | File/link Directory Hard/touch Absent |
如果是目录不存在,那么会创建目录;如果是文件不存在,那么不会创建文件;如果是link,那么软链接会被创建或者修改;如果是absent,那么目录下的所有文件都会被删除,如果是touch,会创建不存在的目录和文件 |
参数名 | 是否必须 | 默认值 | 选项值 | 参数说明 |
conf_file | no | 设定远程yum执行时所依赖的yum配置文件 | ||
disable_gpg_check | no | No | Yes/No | 在安装包前检查包,只会影响state参数为present或者latest的时候 |
list | No | 只能由ansible调用,不支持playbook,这个干啥的大家都懂 | ||
name | Yes | 你需要安装的包的名字,也能如此使用name=python=2.7安装python2.7 | ||
state | no | present | present/latest/absent | 用于描述安装包最终状态,present/latest用于安装包,absent用于remove安装包 |
update_cache | no | no | yes/no | 用于安装包前执行更新list,只会影响state参数为present/latest的时候 |
host31 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [ xxxx ]
参数名 | 是否必须 | 默认值 | 选项 | 说明 |
enabled | no | yes/no | 启动os后启动对应service的选项。使用service模块的时候,enabled和state至少要有一个被定义 | |
name | yes | 需要进行操作的service名字 | ||
state | no | stared/stoped/restarted/reloaded | service最终操作后的状态。 |
host31 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "started"
}
host31 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "stopped"
}
host31 | SUCCESS => {
"changed": true,
"enabled": true,
"name": "httpd",
"state": "started"
}
参数名 | 是否必须 | 默认值 | 选项 | 说明 |
backup | 对远程主机上的原任务计划内容修改之前做备份 | |||
cron_file | 如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划 | |||
day | 日(1-31,*,*/2,……) | |||
hour | 小时(0-23,*,*/2,……) | |||
minute | 分钟(0-59,*,*/2,……) | |||
month | 月(1-12,*,*/2,……) | |||
weekday | 周(0-7,*,……) | |||
job | 要执行的任务,依赖于state=present | |||
name | 该任务的描述 | |||
special_time | 指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly | |||
state | 确认该任务计划是创建还是删除 | |||
user | 以哪个用户的身份执行 |
参数名 | 是否必须 | 默认值 | 选项 | 说明 |
home | 指定用户的家目录,需要与createhome配合使 | |||
groups | 指定用户的属组 | |||
uid | 指定用的uid | |||
password | 指定用户的密码 | |||
name | 指定用户名 | |||
createhome | 是否创建家目录 yes|no | |||
system | 是否为系统用户 | |||
remove | 当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r | |||
state | 是创建还是删除 | |||
shell | 指定用户的shell环境 |
host32 | SUCCESS => {
"changed": true,
"rc": 0,
"stderr": "",
"stdout": "this is test from host32\r\n",
"stdout_lines": [
"this is test from host32" ->执行结果
]
}
参数名 | 是否必须 | 默认值 | 选项 | 说明 |
sha256sum | 下载完成后进行sha256 check; | |||
timeout | 下载超时时间,默认10s | |||
url | 下载的URL | |||
url_password、url_username | 主要用于需要用户名密码进行验证的情况 | |||
use_proxy | 是事使用代理,代理需事先在环境变更中定义 |
参数名 | 是否必须 | 默认值 | 选项 | 说明 |
archive | 归档,相当于同时开启recursive(递归)、links、perms、times、owner、group、-D选项都为yes ,默认该项为开启 | |||
checksum | 跳过检测sum值,默认关闭 | |||
compress | 是否开启压缩 | |||
copy_links | 复制链接文件,默认为no ,注意后面还有一个links参数 | |||
delete | 删除不存在的文件,默认no | |||
dest | 目录路径 | |||
dest_port | dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议 | |||
dirs | 传速目录不进行递归,默认为no,即进行目录递归 | |||
rsync_opts | rsync参数部分 | |||
set_remote_user | 主要用于/etc/ansible/hosts中定义或默认使用的用户与rsync使用的用户不同的情况 | |||
mode | push或pull 模块,push模的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件 |
三、核心模块playbook介绍
ansible基本使用教程的更多相关文章
- Ansible安装 入门教程
learn一门新技术咯: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置 ...
- 自动化运维工具Ansible介绍
一个由 Python 编写的强大的配置管理解决方案.尽管市面上已经有很多可供选择的配置管理解决方案,但他们各有优劣,而 ansible 的特点就在于它的简洁. 让 ansible 在主流的配置管理系统 ...
- ansible教程
相关教程: 权威指南:http://www.ansible.com.cn/ 博客教程:https://www.w3cschool.cn/automate_with_ansible/ 视频教程: htt ...
- 马俊龙ansible教程分享
ansible详细介绍和教程链接:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#ansible
- Ansible 教程
[注]本文译自:https://www.edureka.co/blog/ansible-tutorial/ 在阅读本文之前,你应该已经知道,Ansible 构成了 DevOps 认证的关键部分,它 ...
- ansible自动化运维详细教程及playbook详解
前言 当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务的开 ...
- 【Ansible 文档】【译文】入门教程
http://docs.ansible.com/ansible/latest/intro_getting_started.html Foreword 前言 到这里,你应该已经安装了Ansible,是时 ...
- Jenkins 集成Ansible教程
前提条件: 1. 部署Jenkins Server 2. 部署 Ansible Server 一.在Jenkins安装SSH插件 系统管理 -> 插件管理 二.在Jenkins 凭证中添加Ans ...
- ANSIBLE安装和常用模块模块使用详细教程
目录 ANSIBLE安装和各种模块应用功能 安装配置ANSIBLE ANSIBLE使用 ansible-galaxy工具 ansible-pull工具 ansible-playbook ansible ...
随机推荐
- cookie sessionStorage localStorage 之间的关系
先说一个cookie 因为HTTP是无状态的 所以cookie诞生 用于保存会话信息 大小 4096b 一般在4095b以内 数量限制 20 -50 根据浏览器不同 操作的是一个字符串 可以设置参数 ...
- Python初识-day1
1.第一个python程序(在pycharm中运行的,感觉还不错) 注释: 当行注释:#被注释内容 多行注释:''' 被注释内容 ''' 2.变量 (1) 自己理解的定义(仅供参考): 为了存储数据 ...
- 关于flying框架
开发10多年了,开发过程中遇到的最大的问题: ①项目的代码越来越多了,越来越复杂了,而客户的需求,你还不得不往里面加入新代码. ②开发了很多项目,每次复用时却只能把代码copy来copy去,然后调试. ...
- Zabbix-3.2.4实现微信(WeChat)告警
摘自abcdocker网站 原文地址:https://www.abcdocker.com/abcdocker/2472 Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式, ...
- How to get started with GIT and work with GIT Remote Repo
https://www.ntu.edu.sg/home/ehchua/programming/howto/Git_HowTo.html#zz-7. 1. Introduction GIT is a ...
- 客户端putty xshell连接linux中vim不能正常使用小键盘的问题
在putty或xshell上用vi/vim的时候,开NumLock时按小键盘上的数字键并不能输入数字,而是出现一个字母然后换行(实际上是命令模式上对应上下左右的键). 解决方法: putty:选项Te ...
- 《.NET 设计规范》第 4 章:类型设计规范
第 4 章:类型设计规范 4.1 类型和命名空间 要用命名空间把类型组织成一个由相关的功能区所构成的层次结构中. 避免非常深的命名空间层次.因为用户需要经常回找,所以这样的层次浏览起来很困难. 避免有 ...
- PHP使用file_get_contents或curl请求https的域名内容为空或Http 505错误的问题排查方法
前段日子,突然接到用户的反馈,说系统中原来的QQ登录.微博登录通通都不能用,跟踪代码进去后发现,是在 file_get_contents这个函数请求QQ登录的地方报错,在用该函数file_get_co ...
- rapid framework开发系列(一)
定义:web项目脚手架 rapid-framework是一个以spring为核心的项目脚手架(或者称为胶水框架),框架将各个零散的框架(struts,strust2,springmvc,hiberna ...
- Struts2的配置和一个简单的例子
Struts2的配置和一个简单的例子 笔记仓库:https://github.com/nnngu/LearningNotes 简介 这篇文章主要讲如何在 IntelliJ IDEA 中使用 Strut ...