哪里找需要网站建设的,做网站的目标客户,南宁网站制作网络公司,免费网络空间搜索引擎目录 一、playbook简介
1.什么是playbook
2.playbook组成
二、应用实例
1.使用playbook安装启用httpd服务
2.使用playbook安装启用nginx服务
三、ansible-playbook其他用法
1.检查yaml文件的语法是否正确
2.检查tasks任务
3.检查指定的主机
4.指定从某个task开始运行…目录 一、playbook简介
1.什么是playbook
2.playbook组成
二、应用实例
1.使用playbook安装启用httpd服务
2.使用playbook安装启用nginx服务
三、ansible-playbook其他用法
1.检查yaml文件的语法是否正确
2.检查tasks任务
3.检查指定的主机
4.指定从某个task开始运行
四、playbook进阶语法
1.引用变量
1自定义变量
2引用setup模块信息中的变量
2.遍历值
1遍历变量中的值
2遍历指定的多个值
3遍历参数列表
3.条件判断
4.指定远程主机sudo切换用户
5.tags 模块
五、Template模板
六、Roles 模块 一、playbook简介
1.什么是playbook Ansible Playbook 是设定自动化任务的一种蓝图可在无需人工干预或有限干预的前提下执行复杂的 IT 操作。Ansible Playbook 对一组或一类共同构成 Ansible 清单的主机执行。 Ansible Playbook 本质上是一些框架是一些预先编写的代码开发人员可以用作临时模板或起始模板。Ansible Playbook 常被用于自动化 IT 基础架构例如操作系统和 Kubernetes 平台、网络、安全系统以及开发人员角色例如 Git。 Ansible Playbook 可以帮助 IT 人员进行应用、服务、服务器节点或其他设备的编程无需花费人力去从头创建所有事物。Ansible Playbook 及其中的条件、变量和任务都可以无限期保存、分享或重复使用。
2.playbook组成
1Tasks任务即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行2Variables变量3Templates模板4Handlers处理器当changed状态条件满足时notify触发执行的操作5Roles角色
二、应用实例
1.使用playbook安装启用httpd服务
首先编写xxx.yaml文件
--- #多个yaml文件以---开头以表明这是一个yaml文件可省略
- name: apache play #定义一个play的名称可省略gather_facts: false #设置不进行facts信息收集即setup模块收集信息这可以加快执行速度如果不使用其中的信息可省略hosts: webservers #指定要执行任务的被管理主机组如多个主机组用冒号:分隔remote_user: root #指定被管理主机上执行任务的用户tasks: #定义任务列表任务列表中的各任务按次序逐个在hosts中指定的主机上执行- name: disable selinux #自定义任务名称command: /usr/sbin/setenforce 0 键值对键是ansible模块值是 -a 中的内容ignore_errors: true #如执行命令的返回值不为0就会报错tasks停止可使用ignore_errors忽略失败的任务- name: disable firewalldservice: namefirewalld statestopped enabledno- name: prepare local repocopy: src/etc/yum.repos.d/local.repo dest/etc/yum.repos.d/local.repo- name: mount cdrommount: src/dev/sr0 path/mnt fstypeiso9660 statemounted- name: install apacheyum: namehttpd statelatest- name: prepare httpd configuration filecopy: src/opt/httpd.conf dest/etc/httpd/conf/httpd.conf mode644 ownerapache groupapachenotify: restart httpd #如以上操作后为changed的状态时会通过notify指定的名称触发对应名称的handlers操作- name: start httpdservice: namehttpd statestarted enabledyeshandlers: #handlers中定义的就是任务此处handlers中的任务使用的是service模块- name: restart httpd #notify和handlers中任务的名称必须一致service: namehttpd staterestarted运行playbook ansible-playbook xxx.yaml 补充参数 -k–ask-pass用来交互输入ssh密码 -K-ask-become-pass用来交互输入sudo密码 -u指定用户 Ansible在执行完某个任务之后并不会立即去执行对应的handler而是在当前play中所有普通任务都执行完后再去执行handler这样的好处是可以多次触发notify但最后只执行一次对应的handler从而避免多次重启。 2.使用playbook安装启用nginx服务
首先编写xxx.yaml文件
---
- name: nginx playgather_facts: falsehosts: webserversremote_user: roottasks:- name: test connectionping:- name: disable selinuxcommand: /usr/sbin/setenforce 0ignore_errors: true- name: disable firewalldservice: namefirewalld statestopped enabledno- name: prepare nginx repocopy: src/etc/yum.repos.d/nginx.repo dest/etc/yum.repos.d/nginx.repo- name: add dnscopy: contentnameserver 8.8.8.8 dest/etc/resolv.conf- name: install nginxyum: namenginx statelatest- name: prepare nginx configuration filecopy: src/opt/nginx.conf dest/etc/nginx/nginx.conf mode644 ownernginx groupnginx- name: prepare nginx configuration.d filecopy: src/opt/default.conf dest/etc/nginx/conf.d/default.conf mode644 ownernginx groupnginxnotify: restart nginx- name: start nginxservice: namenginx statestarted enabledyeshandlers:- name: restart nginxservice: namenginx staterestarted运行playbook 三、ansible-playbook其他用法
1.检查yaml文件的语法是否正确 ansible-playbook xxx.yaml --syntax-check 如果语法格式有问题会报错 2.检查tasks任务 ansible-playbook xxx.yaml --list-task 如果任务列表中的语法格式有问题会报错 3.检查指定的主机 ansible-playbook test1.yaml --list-hosts 4.指定从某个task开始运行 ansible-playbook xxx.yaml --start-at-task任务名 四、playbook进阶语法
1.引用变量
1自定义变量
编写文件 运行playbook 查看结果 2引用setup模块信息中的变量
编写文件 运行playbook 查看结果 2.遍历值 Ansible提供了很多种循环结构一般都命名为with_items作用等同于 loop 循环。 with_items将每个列表中所有值遍历输出。 with_list将每个列表作为一个整体输出。 with_together将每个列表中对应的值混合输出如果个数不一致将无法混合输出的值用null值填补组合的空缺。 with_nested将每个列表中的每个值组合输出类似多重循环。 1遍历变量中的值 2遍历指定的多个值 指定方式也可以是列表的格式 3遍历参数列表 格式也可以是 - {username: zhangsan, filename: 1.txt} 3.条件判断 在Ansible中提供的唯一一个通用的条件判断是when指令当when指令的值为true时则该任务执行否则不执行该任务。 when一个比较常见的应用场景是实现跳过某个主机不执行任务或者只有满足条件的主机执行任务。 when: ansible_default_ipv4.address 条件表达式 ip地址 when: inventory_hostname 条件表达式 主机名 4.指定远程主机sudo切换用户
当ssh不允许root用户登录时打开普通用户sudo提权 5.tags 模块 可以在一个playbook中为某个或某些任务定义“标签”在执行此playbook时通过ansible-playbook命令使用--tags选项能实现仅运行指定的tasks。 playbook还提供了一个特殊的tags为always。作用就是当使用always作为tags的task时无论执行哪一个tags时定义有always的tags都会执行。 五、Template模板 Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件可以看作是一个编译过的模板文件用来产生目标文本传递Python的变量给模板去替换模板中的标记。
以nginx为例在服务配置文件添加变量然后改名为后缀为.j2的模板文件 之后在ansible主机清单文件hosts中对主机指定变量值这样就能实现执行文件实现不同的配置 编写playbook 执行playbook 验证结果发现两台nginx分别监听81和82各自网页根目录也被创建了 六、Roles 模块 Ansible为了层次化、结构化地组织Playbook使用了角色rolesroles可以根据层次型结构自动装载变量文件、task以及handlers等。简单来讲roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中并可以便捷地include它们。roles一般用于基于主机构建服务的场景中但也可以用于构建守护进程等场景中。
1.在/etc/ansible/roles下创建角色服务名以LNMP为例有三个角色 2.在每个角色的目录下创建模块目录 roles 内各目录含义解释 ● files用来存放由 copy 模块或 script 模块调用的文件。 ● templates用来存放 jinjia2 模板template 模块会自动在此目录中寻找 jinjia2 模板文件。 ● tasks此目录应当包含一个 main.yml 文件用于定义此角色的任务列表此文件可以使用 include 包含其它的位于此目录的 task 文件。 ● handlers此目录应当包含一个 main.yml 文件用于定义此角色中触发条件时执行的动作。 ● vars此目录应当包含一个 main.yml 文件用于定义此角色用到的变量。 ● defaults此目录应当包含一个 main.yml 文件用于为当前角色设定默认变量。 ● meta此目录应当包含一个 main.yml 文件用于定义此角色的特殊设定及其依赖关系。 3.在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件文件名固定内容可以为空 4.编辑yml文件去引用这些roles执行剧本