ansible随记
先来看一下ansible架构图:
一、官网的语法简单介绍
#选择的主机组
- hosts: webservers
#这个是变量
vars:
http_port: 80
max_clients: 200
tasks:
#利用yum模块来操作
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config
file
template: src=
/srv/httpd
.j2 dest=
/etc/httpd
.conf
#触发重启服务器(只要上面的httpd.conf文件变化了,就触发handlers中的restart apache)
notify:
- restart apache
- name: ensure apache is running
service: name=httpd state=started
#这里的restart apache 和上面的触发是配对的。这就是handlers的作用。相当于tag
handlers:
- name: restart apache
service: name=httpd state=restarted
二、常用模块介绍
1、
copy:复制本地文件到远程主机
template:复制本地文件到远程主机但是他可以在本地文件中调用变量,使用template模块可以传递变量,copy模块则不能
示例如下:
2、vars_files参数
变量设置和when示例:
参考文档:http://tshare365.com/archives/1033.html
------------------------------------------------------------------------------------------------
copy:复制本地文件到远程主机 template:复制本地文件到远程主机但是他可以在本地文件中调用变量
----------------------
raw这东西,咋用的呢,其实前面说的command,shell能干的活,raw都能干 raw最拿手的好活,就是,如果你有的机器是没有装python,或者说你的是python2.4以下,木有装python-simplejson的,用它可以装python,装python-simplejson raw还有一个拿手好戏,就是你的有些机器压根就装不了python,OK,不用装了,直接用raw吧,也可以玩ansible
ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ansible db35 -m copy -a 'src=/root/.ssh/id_rsa.pub dest=/root' --ask-pass -c paramiko
ansible db35 -m shell -a 'cat /root/id_rsa.pub >> /root/.ssh/authorized_keys && rm -f /root/id_rsa.pub' --ask-pass -c paramiko 可同时执行多个命令
ansible db35:db36 -m file -a 'dest=/root/id_rsa.pub state=absent' 用ansible删除一个文件
使用ansible内置的密钥管理模块进行设置(一条命令搞定)
ssh-keygen -t rsa ansible all -m authorized_key -a "user=root key='{{ lookup('file', '/root/.ssh/id_rsa.pub') }}' path=/root/.ssh/authorized_keys manage_dir=no" --ask-pass -c paramiko
ansible基于ssh连接inventory中指定的远程主机时还可以通过参数指定其交互方式常用的参数如下所示:(修改/etc/ansible/hosts )
ansible_ssh_host # 要连接的主机名
ansible_ssh_port # 端口号默认是22
ansible_ssh_user # ssh连接时默认使用的用户名
ansible_ssh_pass # ssh连接时的密码
ansible_sudo_pass # 使用sudo连接用户是的密码
ansible_ssh_private_key_file # 秘钥文件如果不想使用ssh-agent管理时可以使用此选项
ansible_shell_type # shell的类型默认sh
Ansible 命令参数介绍
Usage: ansible <host-pattern> [options]
Options:
-m MODULE_NAME, --module-name=MODULE_NAME 要执行的模块,默认为command
-a MODULE_ARGS, --args=MODULE_ARGS 模块的参数
-u REMOTE_USER, --user=REMOTE_USER ssh 连接的用户名,默认用root,ansible.cfg 中可以配置
-k, --ask-pass 提示输入ssh 登录密码,当使用密码验证登录的时候用
-s, --sudo sudo 运行
-U SUDO_USER, --sudo-user=SUDO_USER sudo 到哪个用户,默认为root
-K, --ask-sudo-pass 提示输入sudo 密码,当不是NOPASSWD 模式时使用
-B SECONDS, --background=SECONDS run asynchronously, failing after X seconds(default=N/A)
-P POLL_INTERVAL, --poll=POLL_INTERVAL set the poll interval if using -B (default=15)
-C, --check 只是测试一下会改变什么内容,不会真正去执行
-c CONNECTION 连接类型(default=smart)
-f FORKS, --forks=FORKS fork 多少个进程并发处理,默认5
-i INVENTORY, --inventory-file=INVENTORY 指定hosts 文件路径,默认default=/etc/ansible/hosts
-l SUBSET, --limit=SUBSET 指定一个pattern,对<host_pattern>已经匹配的主机中再过滤一次 --list-hosts 只打印有哪些主机会执行这个playbook 文件,不是实际执行该playboo
-M MODULE_PATH, --module-path=MODULE_PATH 要执行的模块的路径,默认为/usr/share/ansible/
-o, --one-line 压缩输出,摘要输出 --private-key=PRIVATE_KEY_FILE 私钥路径
-T TIMEOUT, --timeout=TIMEOUT ssh 连接超时时间,默认10 秒
-t TREE, --tree=TREE 日志输出到该目录,日志文件名会以主机名命名
-v, --verbose verbose mode (-vvv for more, -vvvv to enable connection debugging)
command模块:ansible 默认使用的module,这个模块可以运行远程权限范围所有的shell命令,但并不支持shell 变量和管道等。
script模块:功能是在远程主机执行主控端存储的shell脚本文件,相当于scp+shell组合
shell模块:功能是执行远程主机的shell脚本文件。
使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的各种命令方式,都可以使用;
但是我们自己定义在.bashrc/.bash_profile中的环境变量shell模块由于没有加载,所以无法识别;如果需要使用自定义的环境变量,就需要在最开始,执行加载自定义脚本的语句;
1) 如果待执行的语句少,可以直接写在一句话中:
ansible myservers -a ". .bash_profile;ps -fe |grep sa_q" -m shell
2) 如果在远程待执行的语句比较多,可写成一个脚本,通过copy模块传到远端,然后再执行;但这样就又涉及到两次ansible调用;对于这种需求,ansible已经为我们考虑到了,script模块就是干这事的;
command 和shell 模块关注命令或者脚本执行后返回值,如果命令成功执行返回值不是0 的情况 下,可以使用以下方法 tasks: - name: run this command and ignore the result shell: /usr/bin/somecommand || /bin/true 或者 tasks: - name: run this command and ignore the result shell: /usr/bin/somecommand ignore_errors: True
file ## 设置文件的属性
相关选项如下:
force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组 mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归设置文件的属性,只对目录有效
src:被链接的源文件路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,就创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
################################
自定义变量 在 yaml 中可以使用vars关键字来定义变量 vars: var_name: value
#############################
变量的引用 {{ var_name }}
-------------------
在命令行使用变量。使用-e参数,就OK了,'uservar=lixc'就是楼主在web.yml里面定义的romote_user
ansible-playbook item.yml -e 'user=jia' --tags stopi
--------------------------
- name: test to see if selinux is running
command: getenforce
register: sestatus
changed_when: false
运行getenforce来检测selinux是否在运行状态,"changed_when:false"作用为ansible-playbook时最后一行不记录命令运行结果的changed状态,即changed为False (不加1)
...ok=2 changed=0 unreachable=0 failed=0
来自:https://github.com/ansible/ansible-examples/blob/master/lamp_haproxy/roles/common/tasks/main.yml
ansible随记的更多相关文章
- 【Ansible】记一次技术博客害死人的经历——ansible模板变量注入探究
风和日丽,夏天的北京湿热并举,睁不开的眼睛里,横竖都看着是“吃人”. 带薪学习的日子不好过,要在几天内迅速掌握导师下发要求学习的技能,看着以前一起蹲IT坑的同事人来人往,用隔壁同性黄同学的话来说,就是 ...
- 001_记一次ansible api二次开发遇到的小问题
在某次关于发布系统的项目中,需要调用ansible来发布任务,其中一段代码是初始化ansible的连接,并传入一个source(目标机器)的值,代码段如下: from .ansible_api imp ...
- 记一次容器内执行ansible命令卡住
1.由来 最近在使用kylin_v10系统,发现当在此系统下运行的容器内执行#ansible localhost -m setup 命令会卡住不动,于是和同事一起经过如下排查最终找到解决问题的办法. ...
- 记一次优化ansible inventory的小例子
起因: 阿里云新扩容一批机器,要对上面的flume配置做修改 之前的inventory是这样子的 [user@vip10-ali-tj-console host_vars]$ sdiff vip10- ...
- Ansible安装及配置
ansible分为以下几个部份: Ansible:核心引擎 Modules:包括 Ansible 自带的核心模块(core modules)及自定义模块 (custom modules): 核心模块: ...
- 3、Ansible playbooks(Hosts、Users、tasks、handlers、变量、条件测试(when、迭代)、templates)
Ansible playbooks playbook是由一个或多个“play”组成的列表.play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色.从根本上来讲 ...
- Ansible 小手册系列 十七(特性模块)
异步操作和轮询 --- # Requires ansible 1.8+ - name: 'YUM - fire and forget task' yum: name=docker-io state=i ...
- Ansible 小手册系列 十三(Jinja2)
用于playbook中的jinja 2过滤器 更改数据格式,其结果是字符串 {{ some_variable | to_json }} {{ some_variable | to_yaml }} 对于 ...
- 通过ansible自动化部署zabbix应用
zabbix在实际的应用中,可能需要监控的主机非常多,而每个主机的操作系统类型.版本也都不尽相同,在这种环境下,通过手动安装zabbix的agent端已经不现实了,此时就需要借助自动化工具完成zabb ...
随机推荐
- 一份11gR2 rac awr报告的简单分析
昨晚网友发来一份awr报告,希望帮忙分析一下.由于其他信息都没有,仅仅只有一份awr,鉴于目前有大多的朋友还不太熟悉或者说不知道如何去进行awr的分析.我这里就拿这个awr来进行分析,当抛砖引玉了.首 ...
- 【python】split 和 join函数
一.关于split 和 join 方法 1只针对字符串进行处理.split:拆分字符串.join连接字符串2.string.join(sep): 以string作为分割符,将sep中所有的元素(字符串 ...
- mssql存储过程 事务
USE [EtownDB]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOcreate PROCEDURE InsWxqunfaChildtb @logi ...
- 利用springMVC包装类上传多个文件
前端JSP页面代码片段: <!-- springMVC包装类上传文件 --><form name="uploadFiles" id="uploadFil ...
- mysql联表查询
2.1 内连接 select a.*,b.* FROM a INNER join b ON a.id = b.id; 查出所有 或者 select a.*,b.* FROM a join b ...
- Android 对话框(Dialog)大全
转自: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html Activities提供了一种方便管理的创建.保存.回复的对话框机制, ...
- 为MyEclipse配置Spring的约束
1.Spring框架概述 Spring是一个Service层的框架,可以整合许多其它框架进行工作 Spring的主要技术是 IOC(DI) AOP IOC - 控制反转(依赖注入) AOP - 免息那 ...
- iframe引入百度地图显示企业位置
步骤一:打开下面这个地址:http://api.map.baidu.com/lbsapi/creatmap/index.html 步骤二:定位中心点 在打开的页面左侧,输入企业的详细地 ...
- Web 下载图片为空
问题描述: 文件下载功能是web开发中经常使用到的功能,使用HttpServletResponse对象就可以实现文件的下载.但是下载任务正常进行,下载下来的图片却是空 问题代码: //从服务器下载一张 ...
- cecium 笔记
1.Build文件夹 整个拷贝到public文件下,便可使用 2.BingMap(必应地图) Key申请之后,到Build/Cecium/Cecium.js更改默认Key, i.defaultKey ...