Ansible 详细用法说明(二)
setup:获取指定主机的facts。
===================================
facts就是变量,内建变量 。每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件。
例:获取某台主机的变量
ansible 10.1.6.68 -m setup
=====================================
script:发送脚本到各被管理节点,并执行。不需要参数
=====================================
ansible all -m script -a 'test.sh'直接在-a 后面指定脚本即可。
===============================
selinux: 管理selinux。
===============================
conf #指定应用selinux的配置文件。
state=enforcing|permissive|disabled #对应于selinux配置文件的SELINUX。
policy=targeted|minimum|mls #对应于selinux配置文件的SELINUXTYPE
关闭selinux:
ansible all -m selinux -a 'state=disabled'
===============================
template:使用了Jinjia2格式作为文件模版,进行文档内变量的替换的模块。
===============================
五、playbook:“跑剧本”
playbook就是一个用yaml语法
把多个模块堆起来的一个文件而已。
1.简介
YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001年在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。
2、特点
YAML的可读性好
YAML和脚本语言的交互性好
YAML使用实现语言的数据类型
YAML有一个一致的信息模型
YAML易于实现
YAML可以基于流来处理
YAML表达能力强,扩展性好
YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构。其结构(Structure)通过空格来展示,序列(Sequence)里的项用"-"来代表,Map里的键值对用":"分隔。下面是一个示例。
- hosts: 10.1.0.1 #定义主机
vars: #定义变量
var1: value
var2: value
tasks: #定义任务
- name: #任务名称。
#这里就可以开始用模块来执行具体的任务了。 handlers: #定义触发通知所作的操作。里面也是跟tasks一样,用模块定义任务。
- name: remote_user: #远程主机执行任务时的用户。一般都是root,一般也不用指定。 - hosts: web
vars:
tasks:
handlers:
remote_user:
YAML文件扩展名通常为.yaml,如example.yaml
Playbooks
1.核心元素:
Tasks:任务,由模块定义的操作的列表;
Variables:变量
Templates:模板,即使用了模板语法的文本文件;
Handlers:由特定条件触发的Tasks;
Roles:角色;
2.playbook的基础组件:
Hosts:运行指定任务的目标主机;
remote_user:在远程主机以哪个用户身份执行;
sudo_user:非管理员需要拥有sudo权限;
tasks:任务列表
模块,模块参数:
格式:
(1) action: module arguments
(2) module: arguments
示例1:
vim test.yaml 也可以是 .yml
- hosts: all
remote_user: root
tasks:
- name: install a group
group: name=mygrp system=true
- name: install a user
user: name=user1 group=mygrp system=true - hosts: websrvs
remote_user: root
tasks:
- name: install httpd package
yum: name=httpd
- name: start httpd service
service: name=httpd state=started
3.运行playbook,使用ansible-playbook命令
(1) 检测语法
ansible-playbook –syntax-check /path/to/playbook.yaml
(2) 测试运行
ansible-playbook -C /path/to/playbook.yaml
--list-hosts
--list-tasks
--list-tags
ansible-playbook –check /path/to/playbook.yaml
(3) 运行
ansible-playbook /path/to/playbook.yaml
-t TAGS, --tags=TAGS
--skip-tags=SKIP_TAGS 跳过指定的标签
--start-at-task=START_AT 从哪个任务后执行
tags:给指定的任务定义一个调用标识;
- name: NAME
module: arguments
tags: TAG_ID
可以一次调用多个名称相同的标签。也可以调用不同的标签用 “,” 分割。
改变监听端口
写剧本把此文件传过去
指明标签的检查
查看标签
playbook执行过程
跳过标签的事件
handlers:由特定条件触发的Tasks;
- name: TASK_NAME
module: arguments
notify: HANDLER_NAME
handlers:
- name: HANDLER_NAME
module: arguments
第一次的话都会运行,后边如果文件内容发生改变就会触发notify
,然后会直接执行handlers
的内容(这里notify后边的事件就都不会执行了)。估计是md5那种的校验。删了个#号竟然也会通知。
六、 Variables:变量
内建:
(1) facts
自定义:
(1) 命令行传递;这个优先级最高
-e VAR=VALUE
(2) 在hosts Inventory(/etc/ansible/hosts)中为每个主机定义专用变量值;
(a) 向不同的主机传递不同的变量; IP/HOSTNAME variable_name=value
[web]
10.1.6.72 qzx=httpd
10.1.6.73 qzx=nginx (b) 向组内的所有主机传递相同的变量 ; [groupname:vars]
variable_name=value [web:qzx]
qzx=httpd [web]
10.1.6.72
10.1.6.73
(3) 在playbook中定义,建议使用这个!
vars:
- var_name: value
- var_name: value
(4) Inventory还可以使用参数:
用于定义ansible远程连接目标主机时使用的属性,而非传递给playbook的变量;
ansible_ssh_host
ansible_ssh_port
ansible_ssh_user
ansible_ssh_pass
ansible_sudo_pass
...
(5) 在角色调用时传递
roles:
- { role: ROLE_NAME, var: value, ...}
变量调用:有空格
{{ var_name }}
七、Templates:模板
文本文件,内部嵌套有模板语言脚本(使用模板语言编写)
Jinja2 是由python编写的。 在我们打算使用基于文本的模板语言时,jinja2是很好的解决方案。yeml
是写playbook
,jinja2
是写配置文件模板
的
功用
将模板的文件的变量值转换成对应的本地主机的确定值。例如:ansible端写一个内建变量{{ ansible_processor_vcpus }}
,当这个文件被复制到对应主机时会自动生成对应主机 cpu的颗数的结果替换之。
Jinja2语法:
字面量:
字符串:使用单引号或双引号;
数字:整数、浮点数;
列表:[item1, item2, ...]
元组:(item1, item2, ...)
字典:{key1:value1, key2:value2, ...}
布尔型:true/false 算术运算:
+, -, *, /, //, %, ** 比较操作:
==, !=, >, <, >=, <= 逻辑运算:and, or, not
执行模板文件中的脚本,并生成结果数据流,需要使用template模块
;
===============================
template:使用了Jinjia2格式作为文件模版,进行文档内变量的替换的模块。相当于copy
===============================
将jinja2的文件模板理解并执行,转化为各个主机间的对应值
backup 建立个包括timestamp在内的文件备份,以备不时之需.
dest 远程节点上的绝对路径,用于放置template文件。
group 设置远程节点上的的template文件的所属用户组
mode 设置远程节点上的template文件权限。类似Linux中chmod的用法
owner 设置远程节点上的template文件所属用户
src 本地Jinjia2模版的template文件位置。
注意:此模板不能在命令行使用,而只能用于playbook;用法同copy
1、普通示例:
这里/root/nginx.conf内容发生了改变。
- hosts: ngxsrvs
remote_user: root
tasks:
- name: install nginx package
yum: name=nginx state=latest
- name: install conf file
template: src=/root/nginx.conf.j2 dest=/etc/nginx/nginx.conf
tags: ngxconf
notify: reload nginx service
- name: start nginx service
service: name=nginx state=started enabled=true
handlers:
- name: reload nginx service
shell: /usr/sbin/nginx -s reload
2、条件测试:
when语句:在tasks中使用,Jinja2的语法格式;
- hosts: all
remote_user: root
tasks:
- name: install nginx package
yum: name=nginx state=latest
- name: start nginx service on CentOS6
shell: service nginx start
when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "6"
- name: start nginx service
shell: systemctl start nginx.service
when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "7"
3、循环:迭代,需要重复执行的任务;
对迭代项的引用,固定变量名为"item”,使用with_item属性给定要迭代的元素; 这个是以任务为中心,围绕每个任务来跑主机,如果中间某个任务中断,那么所有主机以后的任务就无法安装。
元素:
列表
字符串
字典
基于字符串列表给出元素示例:
- hosts: websrvs
remote_user: root
tasks:
- name: install packages
yum: name={{ item }} state=latest
with_items:
- httpd
- php
- php-mysql
- php-mbstring
- php-gd
基于字典列表给元素示例:item.name .
后边的表示键
- hosts: all
remote_user: root
tasks:
- name: create groups
group: name={{ item }} state=present
with_items:
- groupx1
- groupx2
- groupx3
- name: create users
user: name={{ item.name }} group={{ item.group }} state=present
with_items:
- {name: 'userx1', group: 'groupx1'}
- {name: 'userx2', group: 'groupx2'}
- {name: 'userx3', group: 'groupx3'}
八、 角色:roles
以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;相当于函数的调用把各个事件切割成片段来执行。
mkdir ./{nginx,memcached,httpd,mysql}/{file,templates,vars,handlers,meta,default,tasks} -pv
role_name/
files/:存储由copy或script等模块调用的文件; tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用; handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由main.yml进行“包含”调用; vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用; templates/:存储由template模块调用的模板文本; meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用; default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;
在playbook中调用角色的方法:
- hosts: HOSTS
remote_user: USERNAME
roles:
- ROLE1
- ROLE2
- { role: ROLE3, VARIABLE: VALUE, ...}
- { role: ROLE4, when: CONDITION }
事例: 基于角色的方式安装 nginx
1、创建需要的文件
mkdir ./{nginx,memcached,httpd,mysql}/{files,templates,vars,handlers,meta,default,tasks} -pv
3、写tasks/下的主main.yml
- name: copy nginx package
copy: src=nginx-1.10.0-1.el7.ngx.x86_64.rpm dest=/tmp/nginx-1.10.0-1.el7.ngx.x86_64.rpm - name: install nginx package
yum: name=/tmp/nginx-1.10.0-1.el7.ngx.x86_64.rpm state=present - name: install nginx.conf file
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
tags: ngxconf
notify: reload nginx service - name: install default.conf file
template: src=default.conf.j2 dest=/etc/nginx/conf.d/default.conf
tags: ngxconf
notify: reload nginx service - name: start nginx service
service: name=nginx enabled=true state=started
2.复制相应的安装包和模板到对应目录下
3、根据需要修改nginx的配置文件模板。(这里改的是work进程生成数和监听的端口)
4、写handlers目录和vars/下的main.yml 文件
5、写需要运行的主yml文件
7、测试
8、运行
成功
9、该端口测试、传递参数方式
微信扫一扫
关注该公众号
Ansible 详细用法说明(二)的更多相关文章
- Ansible 详细用法说明(一)
一.概述 运维工具按需不需要有代理程序来划分的话分两类: agent(需要有代理工具):基于专用的agent程序完成管理功能,puppet, func, zabbix agentless(无须代理工具 ...
- AI (Adobe Illustrator)详细用法(二)
本文主要是介绍形状的创建与编辑. 一.系列形状工具 1.矩形工具 矩形的作用很大,比如输入框,按钮,图片的大小,比如相片应用中每一个照片占的比例是多大. 初步的UI图的话,会画矩形和圆角矩形就够了. ...
- Tomcat详细用法学习(二)
本篇接上一篇<Tomcat详细用法学习(一)>,主要讲解服务器的虚拟目录映射的几种方式. 先来看几个概念: web应用的概念:一个web应用包含了许多我们做好的web资源,里面或许包括了多 ...
- 自动化运维工具Ansible详细部署 (转载)
自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...
- CString.Format的详细用法(转)
CString.Format的详细用法(转) 在MFC程序中,使用CString来处理字符串是一个很不错的选择.CString既可以处理Unicode标准的字符串,也可以处理ANSI标准的字符串.CS ...
- IFRAM的详细用法
IFRAM的详细用法: IFRAM的详细用法: <IFRAME>用于设置文本或图形的浮动图文框或容器. BORDER <IFRAME BORDER="3"& ...
- css基础之 font的简写规则 以及 自定义 CSS3 @font-face详细用法
Part 1 font简写 CSS的命名规则是用英文字母 数字 和下划线(一般用小写)来命名.简写css font的好处有三:一是写起来方便(就像键盘快捷键):二是简化代码:三是帮助你熟悉和深刻理解c ...
- Tomcat详细用法学习(三)
本篇接上一篇<Tomcat详细用法学习(二)>,主要讲解服务器所要求的web应用的组织结构. 上一篇说到了如何使用服务器将自己的web应用映射成虚拟目录,以便于在浏览器中可以对自己开发的w ...
- Tomcat详细用法学习(四)
本篇接上一篇<Tomcat详细用法学习(三)>,主要讲解配置虚拟主机.打包web应用成war包和Tomcat的体系结构 对于Tomcat服务器,可以放置多个网站(多个web应用),这就是讲 ...
随机推荐
- dig - 发送域名查询信息包到域名服务器
SYNOPSIS(总览) dig [@ server ] domain [Aq query-type ] [Aq query-class ] [+ Aq query-option ] [-Aq dig ...
- IIR数字滤波器
对于N阶IIR的计算方程式为: 一阶 Y(n)=a∗X(n)+(1−a)∗Y(n−1) 二阶 y[n]=b0⋅x[n]+b1⋅x[n−1]+b2⋅x[n−2]−a1⋅y[n−1]−a2⋅y[n−2]
- unix网络编程-配置unp.h头文件
第一步进入:www.unpbook.com,下载unp的随书代码.新建一个目录,将压缩包拷贝到这一目录下面,然后将压缩包直接解压:tar -zxvf 压缩包名.tar.gz 完成上一步后,进入到un ...
- 这就是那个feature map256 256向量
http://blog.csdn.net/XZZPPP/article/details/51582810 在这个特征图上使用3*3的卷积核(滑动窗口)与特征图进行卷积,那么这个3*3的区域卷积后可以获 ...
- 【原创翻译】链接DLL至可执行文件---翻译自MSDN
可执行文件.exe链接(或加载)DLL有以下两种形式: 隐式链接 显式链接 隐式链接是指静态加载或在程序加载时动态链接. 通过隐式链接,在使用DLL时,可执行文件链接到一个由生成DLL的人提供的导入函 ...
- PHP21 MVC
学习目标 MVC设计模式 单一入口机制 MVC的实现 MVC设计模式 Model(模型) 是应用程序中用于处理应用程序数据逻辑的部分.通常模型对象负责在数据库中存取数据. View(视图) 是应用程序 ...
- Spring Data Redis入门示例:程序配置(五)
单机配置 redis.properties配置 #redis的服务器地址 redis.host=127.0.0.1 #redis的服务端口 redis.port=6379 #客户端超时时间单位是毫秒 ...
- Druid配置
spring-mybatis.xml <!-- 定义数据源Bean --> <!-- Druid --> <bean id="dataSource" ...
- Activiti流程定义部署方式
1 bpmn png方式部署 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /**部署流程定义(从cl ...
- 如何根据实体动态生成sql语句
该文章同时解决了,如何向数据库中添加Null值,以及如何处理“参数化查询未提供参数”的错误.解决方案请看第二段折叠的代码. 背景: 在项目开发的过程中,往往需要根据实体的值来修改sql语句,比如说,有 ...