handler响应事件
什么是handler?每个主流的编程语言都会有event机制,那么handler就是playbook的event。Handlers里面的每一个handler,也是对module的一次调用。而handlers与tasks不同,tasks会默认的按定义顺序执行每一个task,handlers则不会,它需要在tasks中被调用,才有可能被执行。Tasks中的任务都是有状态的,changed或者ok。 在Ansible中,只在task的执行状态为changed的时候,才会执行该task调用的handler,这也是handler与普通的event机制不同的地方。
一个handler最多只执行一次在所有的任务里表执行之后执行,如果有多个task notify同一个handler,那么只执行一次。
action是Changed ,才会执行handler只有当TASKS种的action的执行状态是changed时,才会触发notify handler的执行。下面的脚本执行两次,执行结果是不同的:
第一次执行是,tasks的状态都是changed,会触发两个handler
第二次执行是,
第一个t ...
Playbook基本语法
ansible-playbook命令行(more)1usage: ansible-playbook [-h] [--version] [-v] [-k]
常用命令行关键字123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107--ask-vault-password, --ask-vault-pass要求提供保管库密码--become-method <BECOME_METHOD>要使用的特权升级方法(默认= sudo),请使用ansible-doc -t成为-l列出有效的选择。--become-user <BECOME_USER>以该用户身份运行操作(默认= root)--flu ...
playbook常见的变量分类与变量优先级
playbook常见的变量分类在Playbook中常用的几种变量包含一下几种情况:
在Playbook中用户自定义的变量。—var*|other
用户无需自定义,Ansible会在执行Playbook之前去全程主机上搜集的关于远程节点系统信息的变量。—ansible setup模块
在文件模版中,可以直接使用上述两种变量
把task的运行结果作为一个变量来使用,这个变量叫做注册变量。—register
为了使Playbook更灵活、通用性更强,允许用户在执行的时候传入变量的值,这个时候就需要用到额外变量。
Ansible变量优先级(由高到低)extra vars (在命令行中使用 -e)优先级最高:ansible-playbook -e var=valuetask变量block变量role中定义的变量和include变量set_factregistered变量vars_filesvar_promptplay变量host factsplaybook中设置的host_varsplaybook中设置的group_varsinventory中设置的host_varsinventory中设置 ...
ansible中的幂等性
幂等性(Idempotency)
幂等性是数学和计算机科学上一个常见的概念,多次执行产生的结果不会发生改变,这样的特性就被成为幂等性。幂等性是Idempotency的中文翻译,幂在数学上表示乘方结果,乘方的结果相等可以简洁地描述多次执行后得到相同结果这一概念的意思。
ansible中的幂等性ansible中绝大多数的模块都具有幂等特性,意味着执行一次或多次不会产生副作用。但是shell、command、script、raw这四个模块时不满足幂等性,所有操作会重复执行,但是有些操作不允许重复执行,比如MySQL的初始化命令mysql_install_db,逻辑上它只在第一次配置的过程中初始化一次,其他任何时候都不应该再执行。所有,每当使用这四个模块的时候,都要想一想,重复执行这个命令会不会产生负面影响。
当然,在上面的四个模块中,除了raw模块外,都提供了实现幂等特性的参数,就是creates和removes:
creates参数:当指定的文件或目录存在时,则不执行命令;
removes参数:定的文件或目录不存在时,则不执行命令;
示例如下:
1234567891011121 ...
Ansible playbook keywords
Playbook Keywordsplaybook对象上可用的关键字是配置可执行行为的几个来源之一。有关每个源的相对优先级:
Precedence categories(more)Ansible offers four sources for controlling its behavior. In order of precedence from lowest (most easily overridden) to highest (overrides all others), the categories are:
Configuration settings
Command-line options
Playbook keywords
Variables
通用关键字以下为角色 - Play/Role/Block/Task 通用的关键字整理:
**any_errors_fatal**
强制任何主机上的任何未处理任务错误传播到所有主机并结束播放
**become**
布尔值,切换成其它用户身份执行,值为yes或者no
**become_exe**
UNDOCUMENTE ...
Ansible关闭ssh首次连接(公钥认证)提示
Ansible1.2.1及其之后的版本都会默认启用公钥认证.
公钥认证就是如果之后的某一台客户端和之前登录过的某一台主机IP相同,那么在“known_hosts”中有了不同的key,这时会提示一个错误信息直到被纠正为止。
在使用Ansible时,可能不想遇到那样的情况,如果有个主机没有在“known_hosts”中被初始化将会导致在交互使用Ansible或定时执行Ansible时对key信息的确认提示。如果想要禁用这个行为的话,可以关闭公钥认证,而且公钥认证会比较慢,也是提高效率的一个方法
12# 认证提示:"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
关闭s ...
Ansible免密登录和账号登录
Ansible默认是通过SSH key和远程被控制主机进行通信,当然我们可以SSH password来和远程主机进行通信。 如果使用SSH KEY,则要将控制主机上的公钥放到被监控主机的/root/.ssh/authorized_keys文件中,这种方式也是官方提倡的。毕竟直接使用密码存在一定的风险。
密钥认证原理
一、通过ssh密钥免密登录创建密钥对 ssh-keygen(more)12# 解决创建秘钥对需要进行交互的问题ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" -q
分发公钥文件ssh-copy-id 手动分发公钥文件1234567891011121314151617[root@sltkp3cbpch ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub -p 22 root@10.122.60.68/bin/ssh-copy-id: INFO: Source of key(s) to be installed: &qu ...
Ad-Hoc命令——简单任务的执行
知识文档:
Introduction To Ad-Hoc Commands
Working with Command Line Tools
使用Ad-Hoc命令执行任务所谓 ad-hoc 命令是什么呢?(这其实是一个概念性的名字,是相对于写 Ansible playbook 来说的.类似于在命令行敲入shell命令和 写shell scripts两者之间的关系)…
如果我们敲入一些命令去比较快的完成一些事情,而不需要将这些执行的命令特别保存下来, 这样的命令就叫做 ad-hoc 命令.Ansible提供两种方式去完成任务,一是 ad-hoc 命令,一是写 Ansible playbook.前者可以解决一些简单的任务, 后者解决较复杂的任务.
Ad-Hoc的执行依赖于模块,ansible官方提供了大量的模块。 如:command、raw、shell、file、cron等,具体可以通过ansible-doc -l 进行查看 。可以使用ansible-doc -s module来查看某个模块的参数,也可以使用ansible-doc help module来查看该模块更详细的信息。 ...
Ansible的配置文件
Ansible的配置文件(more)Ansible的一些的设置可以通过配置文件完成.在大多数场景下默认的配置就能满足大多数用户的需求,在一些特殊场景下,用户还是需要自行修改这些配置文件
读取配置文件的优先级ansible的默认配置文件是/etc/ansible/ansible.cfg。其实ansible会按照下面的顺序查找配置文件,并使用第一个发现的配置文件。
ANSIBLE_CONFIG (an environment variable)
ansible.cfg (in the current directory)
.ansible.cfg (in the home directory)
/etc/ansible/ansible.cfg
V1.5以前的版本顺序为:
ansible.cfg (in the current directory)
ANSIBLE_CONFIG (an environment variable)
.ansible.cfg (in the home directory)
/etc/ansible/ansible.cfg
配置选项详解到目前为止,我还没有 ...
Inventory和Patterns
知识文档:
Ansible入门
Ansible实践
Host InventoryHost Inventory 配置文件:默认文件/etc/ansible/hosts,用来告诉Ansible需要管理哪些主机。并且把这些主机根据按需分类。
可以根据用途分类:数据库节点,服务节点等;根据地点分类:中部,西部机房。
Ansible可以同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置。
远程主机和组简单分组:方括号[]中是组名,用于对组进行系统分类,便于对不同系统进行分开的管理
123456789mail.example.com[webservers]foo.example.combar.example.com[dbservers]one.example.comtwo.example.comthree.example.com
一组相似的 hostname简写方法:
1234[webservers]www[01:50].example.com[databases]db-[a:f].example.com
SSH端口不是22的表示方法:
1badwolf. ...