2025年.yml文件(yml文件应该用什么打开)

.yml文件(yml文件应该用什么打开)nbsp nbsp nbsp nbsp 公司计划在年底做一次大型市场促销活动 全面冲刺下交易额 为明年的上市做准备 公司要求各业务组对年底大促做准备 运维部要求所有业务容量进行三倍的扩容 并搭建出多套环境可以共开发和测试人员做测试 运维老大为了在年底有所表现 要求运维部门同学尽快实现 当你接到这个任务时 有没有更快的解决方案

大家好,我是讯享网,很高兴认识大家。



        公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备。公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试,运维老大为了在年底有所表现,要求运维部门同学尽快实现,当你接到这个任务时,有没有更快的解决方案?

  ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

  ansible是基于 paramiko(框架) 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。


讯享网

1)部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作,没有agent;

2) 默认使用SSH协议对设备进行管理;

3) 有大量常规运维操作模块,可实现日常绝大部分操作。

4) 配置简单、功能强大、扩展性强;

5) 支持API及自定义模块,可通过Python轻松扩展;

6) 通过Playbooks(剧本)来定制强大的配置、状态管理;

7) 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;

8) 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。

9)模块化:调用特定的模块,完成特定任务。

10)无需代理不依赖PKI(无需ssl)

11)幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况

12)可使用任何编程语言写模块

13)安全,基于OpenSSH

14)有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块

上图为ansible的基本架构,从上图可以了解到其由以下部分组成:

  • 核心:ansible
  • 核心模块(Core Modules):这些都是ansible自带的模块
  • 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
  • 插件(Plugins):完成模块功能的补充
  • 剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
  • 连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件
  • 主机群(Host Inventory):定义ansible管理的主机

Ansible主要组成部分

  1. ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
  2. INVENTORY:Ansible管理主机的清单/etc/anaible/hosts
  3. MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
  4. PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
  5. API:供第三方程序调用的应用程序编程接口
  6. ANSIBLE:组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具
  7. Ansible命令执行来源:

8. 利用ansible实现管理的方式:

9. Ansible主要操作对象:

注意事项

Ansible系统由控制主机对被管节点的操作方式可分为两类,即ad-hoc和playbook:

  ·ad-hoc(点对点)模式:使用单个模块,支持批量执行单条命令。 ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell。

  ·playbook(剧本)模式:是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作作的配置文件。

ansible安装常用两种方式,yum安装和pip程序安装

这里提供二种安装方式,任选一种即可

(1)使用yum 安装

  

(2)使用pip :pip是安装Python包的管理器,类似yum

确认安装: ansible --version 查询版本

Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默认)

① sudo_user:

这是设置默认执行命令的用户,也可以在playbook中重新设置这个参数。配置实例如下:

  sudo_user = root

② remote_port:

这是指定连接被管节点的管理端口,默认是22。除非设置了特殊的SSH端口,不然这个参数一般是 不需要修改的。配置实例如下:

  remote_port = 22

③ host_key_checking:

这是设置是否检查SSH主机的密钥。可以设置为True或False,关闭后第一次连接没有提示配置实例

  host_key_checking = False

④ timeout:

这是设置SSH连接的超时间隔,单位是秒。配置实例如下:

  timeout = 60

log_path:Ansible系统默认是不记录日志的,如果想把Ansible系统的输出记录到日志文件中,需要设置log_path 来指定一个存储Ansible日志的文件。配置实例如下:

  log_path = /var/log/ansible.log

  另外需要注意,执行Ansible的用户需要有写入日志的权限,模块将会调用被管节点的syslog来记录

配置文件

程序

ansible系列命令

ansible

ansible-doc

ansible-playbook 定制任务,编排剧本

ansible-galaxy  

ansible-vault

ansible-console: 2.0+新增,可交互执行命令,支持tab

ansible-pull   推送命令至远程,效率无限提升,对运维要求较高
ansible-doc: 显示模块帮助
ansible-doc [options] [module...]

示例:

ansible通过ssh实现配置管理、应用部署、任务执行等功能,建议配置ansible端能基于密钥认证的方式联系各被管理节点

ansible <host-pattern> [-m module_name] [-a args]

匹配主机的列表

All :表示所有Inventory中的所有主机

  • ansible all -m ping

* :通配符

  • ansible “*” -m ping # 其中*代表的意思就是all,所有的IP地址
  • ansible 192.168.1.* -m ping # 匹配1.*的IP地址
  • ansible “*srvs” -m ping

或关系

  • ansible “websrvs:appsrvs” -m ping # 或关系,取IP地址的并集
  • ansible “192.168.1.10:192.168.1.20” -m ping
  • ansible的Host-pattern

逻辑与

  • ansible “websrvs:&dbsrvs” -m ping # 与关系,取IP地址的交集
  • 在websrvs组并且在dbsrvs组中的主机

逻辑非

  • ansible ‘websrvs:!dbsrvs’ -m ping # 在websrvs中,取dbsrvs的反
  • 在websrvs组,但不在dbsrvs组中的主机
  • 注意:此处为单引号

综合逻辑

  • ansible ‘websrvs:dbsrvs:&appsrvs:!ftpsrvs’ -m ping

正则表达式

  • ansible “websrvs:&dbsrvs” -m ping
  • ansible “~(web|db).*.magedu.com” -m ping
  • shell:可以使用shell命令,支持特殊字符和管道等,需要在/etc/ansible/ansible.cfg配置文件中开启功能:module_name = shell
  • command:使用普通命令,不支持特殊字符和管道
  • script:可以批量执行脚本
  • copy:可以将本地文件批量复制到远端主机上
  • fetch:可以将远端主机的文件批量复制到本地
  • file:创建文件或者目录
  • hostname:批量修改主机名
  • cron:批量创建定时任务
  • yum:批量安装软件
  • service:批量启动服务
  • user:批量创建用户
  • group:批量创建组
  • setup:查机器的所有facts信息

(1)Ansible配置公私钥

配置ansible 使用公钥验证

虽然ansible支持其他主机认证方式,但是我们最常用的的还是基于秘钥的认证:

① 首先生成秘钥

ssh-keygen -t rsa -P " " -f /root/.ssh/id_rsa

② 然后向主机分发秘钥:

ssh-copy-id root@   #@后面跟主机名或者IP地址3、如果出现以下情况:

# ssh-copy-id -i root/.ssh/id_rsa.pub 10.1.6.72

-bash: ssh-copy-id: command not found

请尝试: yum -y install openssh-clientsansible

(2)直接执行脚本批量将本地公钥传递到对方主机:

定义hosts 有3类:

① Ex 1:未分组的主机,在任何组头之前指定

② Ex 2:有组的主机,一组属于"webservers"组的主机

③ Ex 3:和数据库有关的,"dbservers"组中的数据库服务器集合

在最底部写入远程主机的IP地址:

(1)介绍

命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行,(此时command模块是默认模块,可忽略-m选项)。

不会通过shell进行处理,比如$HOME和操作如"小于"<",">", "|", ";","&"' 工作(需要使用(shell)模块实现这些功能)。

(2)选项

(3)实例

ansible webs -m command -a 'chdir=/data ls'

ansible webs -m command -a 'creates=/data/f1 touch /data/f2'

ansible webs -m command -a 'removes=/data/f1 touch /data/f2' data下有f1文件就会创建f2文件

shell模块在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道、echo等

在配置文件中将模块进行修改,就不需要输入-m shell选项,修改位置:

(1)实例:

ansible webs -m shell -a 'cat /etc/passwd |grep root'

在指定节点运行服务端的脚本

(1)示例,书写脚本:

测试效果

 

执行脚本: 

copy:复制文件到远程主机,可以改权限等

(1)用法:

① 复制文件

-a "src= dest= "

② 给定内容生成文件

-a "content= dest= "

(2)相关选项如下:

示例:

copy复制目录: 

content用法:

(1)介绍

从远程某主机获取文件到本地

dest:用来存放文件的目录,例如存放目录为backup,源文件名称为/etc/profile

  在主机pythonserver中,那么保存为/backup/pythonserver/etc/profile

Src:在远程拉取的文件,并且必须是一个file,不能是目录

注意:从远程获取到本地的文件,会保存到以远程主机的IP 为名的目录中,且保存目录结构

示例:

设置文件属性

创建目录:-a "path= state=directory"

创建链接文件:-a "path= src=https://www.cnblogs.com/struggle-1216/p/ state=link"

删除文件:-a "path= state=absent"

(1)选项

(2)实例:

① ansible webs -m file -a "path=/data/f4 state=directory" 在被控制端,创建f4 目录

ansible webs -m command -a "chdir=/data ls" 查看/data 目录

(3)示例:

删除目录下的文件

ansible webs -m file -a "path=/data/f4 state=absent" 删除data目录下的f4

ansible webs -m file -a "path=/data/ state=absent" 删除data目录下的文件

(4)示例;

创建软链接和硬链接

ansible webs -m file -a "src=/data/fstab path=/data/fstab.link state=link" 将/data/fstab 创建软链接为/data/fstab.link

ansible webs -m file -a "src=/data/fstab path=/data/fstab1.link state=hard" 将/data/fstab创建硬链接为/data/fstab1.link

1、创建软链接:

2、创建硬链接: 

示例:

ansible 192.168.34.102 -m hostname -a "name=centos102" 修改为centos102

ansible 192.168.34.102 -a "hostname" 查看当前修改后的主机名

管理cron计划任务;-a "": 设置管理节点生成定时任务

(1)选项:

(1)示例:

开启计划任务:

禁用计划任务:

(2)示例:

在远程主机上,定义每5分钟,清空一次防火墙

① ansible web -m cron -a "name='Clear the iptable' minute=*/5 job='/sbin/iptables -F'"

ansible web -m shell -a "crontab -l" 查看

(3)启动当前的计划任务 

(4)删除计划任务:

(1)选项

(2)示例

①i安装dstat 包,忽略gpg_check

ansible webs -m yum -a "name=dstat "

卸载dstat 包

ansible webs -m yum -a "name=dstat state=absent"

安装多个包:

ansible webs -m yum -a "name=httpd,vsftpd,memacahe"

卸载多个包;

ansible webs -m yum -a "name=httpd,vsftpd,memacahe,state=absent"

(3)示例:

ansible webs -m yum -a "name=dstat update_cache=yes" 更新缓存

服务程序管理

(1)选项

(2)实例

1、远程安装httpd服务

ansible all -m yum -a "name=httpd"

2、远程开启httpd服务:

ansible all -m service -a "name=httpd state=started" 远程操作开启服务

ansible all -m service -a "name=httpd state=enabled" 开机设置启动服务

(3)远程关闭服务:

ansible all -m service -a "name=httpd state=stopped"

用户模块,管理用户帐号

(1)选项

示例:

  • ansible all -m user -a 'name=test comment="test user" uid=200 home=/data/testhome group=root groups=bin,nobody shell=/sbin/nologin' 创建一个test用户的详细信息
  • ansible all -m user -a "name=test state=absent" 删除用户信息,但是不会删除用户家目录的文件信息
  • ansible all -a "getent passwd test" 查看当前创建的用户信息
  • ansiable all -a "name=test state=absent remove=yes" 跟上后面的remove=yes就会删除家目录信息

测试效果

 

 (2)示例:

  • ansible webs -m group -a "name=testgroup system=yes“ 创建系统组
  • ansible webs -m group -a "name=testgroup state=absent" 删除组

查机器的所有facts信息

(1)介绍

① facts 组件是Ansible 用于采集被管机器设备信息的一个功能,我们可以使用setup 模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。

② facts就是变量,内建变量 每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件。

③ setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。

④ setup模块下经常使用的一个参数是filter 参数,查询的是全部信息,很多,filter 相当于匹配筛选。

示例:

(1)查询当前机器的全部信息:

ansible 192.168.34.103 -m setup

(2) 查看当前主机的总内存大小:

ansible all -m setup -a "filter=ansible_memtotal_mb" 其中filter是过滤的含义。

(3)查看每个主机的centos版本号

ansible all -m setup -a "filter=ansible_distribution_major_version"

(1)理解

① playbook是ansible用于配置,部署,和管理被控节点的剧本。

② 通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成。

③ 也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情

(2)Ansible playbook 使用场景

① 执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook。

② 就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。

③ 使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。在你使用Ansible的过程中,你也会发现,你所处理的大部分操作都是编写playbook。可以把常见的应用都编写成playbook,之后管理服务器会变得十分简单。(2)

(2)特性

(1)介绍

① playbook由YMAL语言编写。YAML( /ˈjæməl/ )参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822,Clark Evans在2001年5月在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。

② YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。首先学习了解一下YMAL的格式,对我们后面书写playbook很有帮助。以下为playbook常用到的YMAL格式。

(2)语法介绍

(3)Playbooks 配置文件的基础组件

① hosts:运行指定任务的目标主机;使用hosts指示使用哪个主机或主机组来运行下面的tasks,每个playbook都必须指定hosts,hosts也可以使用通配符格式。主机或主机组在inventory清单中指定,可以使用系统默认的/etc/ansible/hosts,也可以自己编辑,在运行的时候加上-i选项,指定清单的位置即可。在运行清单文件的时候,-list-hosts选项会显示那些主机将会参与执行task的过程中。

② remoute_user: 在远程主机上执行任务的用户;指定远端主机中的哪个用户来登录远端系统,在远端系统执行task的用户,可以任意指定,也可以使用sudo,但是用户必须要有执行相应task的权限。

③ sudo_user:

④ tasks:任务列表;指定远端主机将要执行的一系列动作。tasks的核心为ansible的模块,前面已经提到模块的用法。

  tasks:包含name和要执行的模块name是可选的,只是为了便于用户阅读,不过还是建议加上去,模块是必须的,同时也要给予模块相应的参数

templates:包含了模板语法的文本文件;

⑥ variables 变量

handlers:由特定条件触发的任务

(4)注意:shell和command模块后面直接跟命令,而非key=value类的参数列表;

① 某任务的状态在运行后为changed时,可通过"notify"通知给相应的handlers,两个文件名称要一致

② 任务可以通过"tags"打标签,而后可在ansible-playbook命令上使用-t 标签名,指定进行调用;

(5)variables 变量的定义:

① facts:可直接调用;

注意:可使用setup模块直接获取目标主机的facters;

② 用户自定义变量:

(a) ansible-playbook命令的命令行中的

  -e VARS, --extra-vars=VARS

(b) 在playbook中定义变量的方法:

vars:

   - var1: value1

   var2: value2

(6)执行playbook剧本

使用ansible-playbook运行playbook文件,得到如下输出信息,输出内容为JSON格式。并且由不同颜色组成,便于识别。一般而言

绿色代表执行成功,系统保持原样

黄色代表系统代表系统状态发生改变

红色代表执行失败,显示错误输出。

ansible-playbook <filename.yml> ... [options]
常见选项

示例

ansible-playbook示例:

注意:复制的httpd.conf配置文件只能适用于同一版本的httpd配置文件,centos6和centos7不能共用

执行结果:

(2)在剧本中加入handlers 触发任务

前提背景:如playbook 中有一系列tasks,但有时只需改动少个tasks 就要触发另一个操作;若再把剧本执行一遍,浪费资源和时间;此时可以设置handlers 触发任务

注意:如果执行killall 命令,需要其他机器有该命令才能执行。

vim /data/install_httpd.yml

 修改要复制的/data/http.conf配置文件的端口号为81,执行playbook后,就会重启httpd服务,查看当前的端口号就是81

查看当前检测的信号里放置的临时文件没有任何内容,说明执行成功,如果有错误,就会在里边显示错误内容。

(2)tags 标签在playbook中使用:

一个动作可以执行多个标签,也可以多个动作执行多个标签,执行标签动作需要加上-t选项:

ansible-playbook -t config insall.yml 触发一个标签

ansible-playbook -t "config,service" install.yml 触发两个标签

我们将要复制的httpd.conf配置文件的端口号改为82,用copy标签执行下面的内容,只会执行下面一个动作,也会执行触发器里边的动作,即nodity和handlers动作

可以看到当前httpd服务启动后的端口号变为82端口。

我们也可以执行多个标签的动作,具体如下操作:

ansible-playbook -t ""config,service" install.yml

vars变量使用:

(1)变量可以不定义在playbook 中,直接在命令行给出

给变量servername赋值,就可以执行相应的动作:其中-e servername=vsftpd 指定当前变量的为vsftpd

ansible-playbook -e servername=vsftpd install_httpd.yml 将servername赋值为vsftpd,就可以安装此服务,此服务端口为21,已经打开.

执行结果如下:

(2)赋予两个不同的变量名,servername1为包名,servername2为服务名

将servername1赋予包名,servername2赋予服务名

ansible-playbook -e "servername1=samba servername2=smb' install_httpd.yml

执行结果如下:

(3)也可以直接定义在playbook 中:

执行成功结果:

 

(4)在独立的变量YAML文件中定义(推荐使用此方法)

新建一个vars.yml文件,指定存放要执行的变量,servername: httpd

将写好的变量文件赋予到此playbook内容中

执行结果:

ansible webs -a "ss -nlt" 可以查看到当前的80端口已经安装好

 (5)  在 在/etc/ansible/hosts中定义变量

1)普通变量:此时在webs组的IP后面追加命名nodename=centos7_1,可以将远程的机器的名称改为centos7_1.

定义yml内容,将hosts的文件名定义到变量中:

此时执行ansible-playbook test.yml ,就会将远程的主机名称修改,具体如下:

 2)定义组变量:将主机名之前的内容统一追加一个相同的内容:

将后缀的变量名称放到后面:

 执行结果如下:

ansible-playbook test.yml

(1)介绍

模板为我们提供了动态配置服务,使用语言,里面支持多种条件判断、循环、逻辑运算、比较操作等。其实说白了也就是一个文件,和之前配置文件使用一样,只是使用,不能根据服务器配置不一样进行不同动态的配置。这样就不利于管理。
说明:
1、多数情况下都将文件放在和文件同级的目录下(手动创建),这样文件中可以直接引用,会自动去找这个文件。如果放在别的地方,也可以通过绝对路径去指定。

支持:

  字符串:使用单引号或双引号;

  数字:整数,浮点数;

  列表:[item1, item2, ...]

  元组:(item1, item2, ...)

  字典:{key1:value1, key2:value2, ...}

  布尔型:true/false

  算术运算:+, -, *, /, //, %,

  比较操作:==, !=, >, >=, <, <=

  逻辑运算:and, or, not

(2)先创建一个模板文件,以.j2 结尾

cp /etc/nginx/nginx.conf /playbook/nginx.conf.j2

vim /playbook/nginx.conf.j2

worker_processes {{ ansible_processor_count*2 }}; #该变量是setup 模块查看CPU核数的变量,此时将CPU核数乘以2

listen {{ nginx_port}}; #自定义在playbook 中的变量

yum install nginx #安装nginx

"ansible_processor_count": 1 查看当前的CPU核数有几个

(1)书写当前的模板,将本机的源文件复制到目标地址,将CPU个数成倍增涨,并将端口号改为82:

(2)修改templates目录下的nginx.confj2配置文件,将当前的CPU核数乘以四,并将端口号定义变量{{nginx_port}}:

(3)修改/etc/ansible/hosts配置文件的端口号,定义变量,可以修改当前的nginx的端口号:

执行nginx.yml的剧本:

(4)查询执行结果,此时已有四个CPU运行。

(5)查看82端口号运行情况:

when语句参考

条件测试:如果需要根据变量、或此前任务的执行结果来做为某执行与否的前提时要用到条件测试,通过语句执行,在中使用的语法格式、
when语句:
在后添加子句即可使用条件测试;语句支持表达式语法。

"ansible_distribution_major_version": "7"查看当前的系统版本号

1) 将/etc/ansible/hosts配置文件的端口号改为http_port

2) 将centos6的httpd的配置文件复制到centos7的templates目录下,起名为httpd6.conf.j2 ,准备的是centos6的配置文件

3) 将centos7的httpd的配置文件复制到templates目录下,起名叫httpd7.conf.j2,准备的是centos7的配置文件

4) 修改复制后的httpd6.conf.j2和httpd7.conf.j2配置文件的端口:

5)书写template模板内的when可以将centos6和centos7的httpd版本不同问题解决,针对不同的系统版本,安装不同版本的系统:

6) 查看httpd安装后的结果,此时的86和87端口都已经打开

迭代,当有需要重复性执行的任务时,可以使用迭代机制。
对迭代项的引用,固定变量名为,要在task中使用with_items给定要迭代的元素列表。
列表格式:
  字符串
  字典

 示例一:

在本机新建十个文件,然后将本机的文件复制到其他文件中

将本地的三个文件复制到对方主机的data目录下,编写playbook:

执行playbook命令,查看执行结果:

示例二通过嵌套子变量创建用户并加入不同的组

编写playbook:

执行剧本并查看执行结果,此时可以看到对方主机已经创建了三个用户:

示例三:

同时安装多个包:

执行剧本,并查看当前的已经安装好的包:

等同于上面的写法:也是同时安装多个软件

 (1)编写playbook

(2)模板文件编写 

vim templates/test_for.conf.j2

 (3)执行剧本并查看复制到对方主机的文件内容:

用字典写法将上面的内容输出同样的名称:

 修改模板内容,和上面的for语句输出内容一致:

示例:

编写playbook

 编写jianjia2(j.2)文件

  执行playbook并查看对方的目录文件

示例:在for循环中再嵌套if判断,让生成的配置文件更加灵活

编写playbook

 编写jianjia2文件(j.2) 

执行playbook并查看执行结果:

自版本引入的新特性,用于层次性、结构化地组织。能够根据层次型结构自动装载变量文件、以及等。要使用只需要在中使用指令引入即可。简单来讲,就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷的它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。主要使用场景代码复用度较高的情况下。

roles目录含义:

新建文件夹,具体文件夹如下:

复制本地的httpd.conf文件,当做实验备用:

查看具体的文件结构:

编写httpd目录下tasks目录文件内容:

创建将文件复制到对方主机上的文件:

创建用户:

创建安装配置文件:

创建服务的文件:

创建用户文件:

将所有的文件关联起来,并按顺序排列:

将httpd.conf配置文件的端口修改为9527:

编写playbook剧本,用来调用httpd整个目录下的内容:

编写一个网站文件,并在屏幕上显示,验证当前的信息:

将创建的index.html数据复制到/var/www/html目录下,相当于是给页面准备一个文件:

将创建的数据放到main.yml文件中,按顺序进行执行:

查看当前创建的目录文件结构:

执行playbook

查看httpd端口开启情况:

查看网页信息打开情况:

1、将之前httpd做实验的子目录文件都复制一份到nginx目录下:

2、将roles/nginx/tasks/main.yml文件顺序进行修改:

3、删除多余的tasks目录下的文件:

 4、修改config.yml配置文件,使用template模板形式进行修改:

 5、将本地已安装好的nginx的nginx.conf配置文件复制到template目录下,起名叫nginx.conf.j2

 6、修改nginx/templates/nginx.conf.j2配置文件的CPU内核:

 7、跨角色调用httpd服务文件内容: 

8、将data.yml放入到main.yml文件中、安装的nginx软件名称修改,以及要启动的服务名称修改:

9、最后在playbook目录下创建nginx_rolee.yml配置文件(跟roles目录平级):

10、执行playbook

10、此时用nginx服务默认的80端口已经可以打开网页,已经实现了跨角色调用文件:

为了验证重启效果,此时我们可以将nginx.conf.j2配置文件的端口修改为8080:

执行playbook

查看当前运行结果,此时的控制的机器nginx端口打开的是8080:

下来,我们添加变量格式:

 将roles/nginx/templates/nginx.conf.j2配置文件的名称修改:

 执行playbook

 查看当前的nginx的名称,此时已经修改为daemon:

将安装好的centos6和centos7的httpd配置文件复制到roles/httpd/templates/目录下,文件名后缀都是以.j2结尾:

将centos7的httpd.conf配置文件也放在roles/httpd/templates/目录下,起名以j2结尾:

修改当前的http_roles.yml配置文件,里边的apps组才有centos6和7的版本:

执行playbook剧本:

查看安装好后的httpd运行结果:

执行标签的其中一个playbook内容:

查看执行后的内容:

执行web标签的playbook,就会将定义标签的httpd和nginx两个文件都执行:

 查看执行结果的状态:

 

目的:是为了定义当前缓存服务器在内存中占比,应该设置多大?

安装memcached:

定义memcached角色:

删除之前指定的httpd相关文件:

修改配置文件:

修改main.yml配置文件:

 修改安装配置文件

配置启动服务文件:

然后在playbook目录下创建一个roles角色playbook剧本:

然后将centos6和centos7的内存大小分别调整为3G和2G,执行playbook:

查看对方的内存大小情况,可以看到,之前的内存大小默认是64,此时已经有所改变:

  

&nbsp;

  

  

&nbsp;

  

&nbsp;

  

 

  

  

  

  

&nbsp;

  

  

  

  

  

 

&nbsp;

 

&nbsp;

小讯
上一篇 2025-04-18 15:10
下一篇 2025-05-31 14:45

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/187926.html