ansible关键字解释:
Ansible: 自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
HostInventory:Ansible 主机管理模块,包含针对主机的各类配置,可针对host及host group进行配置。
Playbooks:ansible 任务执行模式,ad-hoc模式(点对点模式),类似于shell的命令行,另外一种就是playbook,playbook通过组织一系列的task完成自动化部署、自动化运维的工作。
Jinja2 :基于ptyhon的一种模板,通常用于动态生成html、config文件等。
Tag:ansible 任务的标识,可通过playbook执行不同的标识的tag。
Ansible的安装方法:
yum install -y ansible
Ansible 基础环境配置:
ANSIBLE_CONFIG: 环境变量指定的配置文件(export ANSIBLE_CONFIG=xxx/ansible/ansible.cfg,将ANSIBLE_CONFIG环境变量指向当前需要部署的ansible.cfg)
ansible.cfg: 当前目录下的ansible.cfg
~/.ansible.cfg: 家目录下的ansible.cfg
/etc/ansible/ansible.cfg:默认的全局配置文件"
该文件是ansible基础不配置文件,一般不要我们在做相关修改
比如指定ansible的host文件、ssh的端口、加载的自定库、扩展库啥的
Host文件:
ansible --list igw 指定主机的名字查看主机
ansible-playbook --list-hosts ./playbooks/dpos.yml 查看playbook目标主机列表
ansible-inventory --graph all 查看主机变量组
主机变量:
在host 文件中直接定义
在host_vars文件夹中直接定义:
ansible igw -m debug -a 'var=ansible_ssh_user'
主机组变量:
在host 文件中直接定义
在host_vars文件夹中直接定义:
ansible igw -m debug -a 'var=igw_test'
ansible igw -m debug -a 'var=igw_test1'
Ansible的执行模式:
- ad-hoc模式(点对点模式):
ansible-doc -l 用于查询asnible支持的模块命令,有ansible官方自己维护的也有其他公司提供的命令
ansible-doc 模块名 ansible-doc shell 查看shell的模块的说明
Ansible 命令演示:
ansible 192.168.23.135 -m copy -a 'src=/etc/passwd dest=/tmp'
ansible 192.168.23.135 -m shell -a 'ls -l /home/ctyos'
ansible igw -m shell -a 'ls -l /home/ctyos'
ansible igw -m shell -a 'ls -l /home/ctyos' --limit 192.168.23.133
ansible 192.168.23.135 -m yum -a "name=acme state=present"
ansible -i host.file.ini -m yum -a "name=acme state=present"
Copy路径:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/copy_module.html
- Ansible的执行模式:playbook:
这是一个playbook文件,该文件中有两个play、每个play中有两个task任务
Playbook的基本写法:
playbook中,每个play都需要放在数组中,所以在playbook的顶层使用列表的方式- xxx:来表示这是一个play(此处是- hosts:)。
每个play都必须包含hosts和tasks指令。
hosts指令用来指定要执行该play的目标主机,可以是主机名,也可以是主机组,还支持其它方式来更灵活的指定目标主机。具体的规则后文再做介绍。
tasks指令用来指定这个play中包含的任务,可以是一个或多个任务,任务也需要放在play的数组中,所以tasks指令内使用- xxx:的方式来表示每一个任务(此处是- copy:)。
gather_facts是一个play级别的指令设置,它是一个负责收集目标主机信息的任务,由setup模块提供。默认情况下,每个play都会先执行这个特殊的任务,收集完信息之后才开始执行其它任务。但是,收集目标主机信息的效率很低,如果能够确保playbook中不会使用到所收集的信息,可以显式指定gather_facts: no来禁止这个默认执行的收集任务,这对效率的提升是非常可观的。
此外每个play和每个task都可以使用name指令来命名,也建议尽量为每个play和每个task都命名,且名称具有唯一性。
Role角色:
Role可以组织任务、变量、handler以及其它一些内容,所以一个完整的Role里包含的目录和文件可能较多,手动去创建所有这些目录和文件是一件比较烦人的事,好在可以使用ansible-galaxy init ROLE_NAME命令来快速创建一个符合Role文件组织规范的框架
Jinja2模板:
Jinja2模板引擎提供了三种特殊符号来包围模板表达式:
(1).{{xxx}}:双大括号包围变量或表达式(Ansible中的变量就是它包围的)
(2).{#xxx#}:Jinja2的注释符号
(3).{%xxx%}`:Jinja2的一些特殊关键字标签,比如if语句、for循环语句等等
相关参考资料:
https://www.cnblogs.com/keerya/p/7987886.html#_label0
- 一步到位玩透ansible
https://www.junmajinlong.com/ansible/index/
- Ansible 官方文档
https://docs.ansible.com/ansible/latest/
- Ansible 官方文档-模板过滤器
https://docs.ansible.com/ansible/latest/plugins/filter.html#using-filter-plugins