- 我尝试建立管道来安装我的产品。
- 我的产品安装在至少有 8 台机器的实验室中(本地实验室)。
- 我有几个本地实验室,几个云端实验室
- 每台机器都有一个角色,例如:Center-DB机器,Center-Queue机器或Center-App机器,Middle机器和Client机器等......所以,一些实验室是:1 Center - 1 Middle - 1 位客户。或 3 个中心(应用程序、数据库、队列) - 2 个中间件 - 3 个客户端
- 有些机器有一种服务,如 DB,有些机器有几种:DB、IIS 和消息代理
- 该实验室位于一个安全的 VLAN 中,这意味着为了从远程运行脚本,我需要使用它们的 IP 而不是它们的 FQDN 连接到机器并提供凭据。
- 所有机器的凭据都相同。
- 此外,安装文件中还有一个选项来安装产品安全(使用证书和端口 443)或不安全。
- 在安装过程中,我需要先将其特定的安装文件复制到每台机器上,然后使用特定的参数进行安装。
除了清单 ansible yaml 文件中的主机和 IP 地址列表之外,是否可以添加变量或键,例如:
- “证书”
- “协议”,
- “文件”,
- “机器类型”等......?
或者他们应该放在不同的文件中,比如角色(任务)。请帮我决定哪些信息去哪里。我的示例 yaml 文件如下:
---
cred:
user: a
pass: 1
center:
dbs:
- db:
fqdn: center-db.foo.com
cn: center-db
files:
- C:\folder\Server.msi
ip: 1.1.1.1
queues:
- queue:
fqdn: center-queue.foo.com
cn: center-queue
files:
- C:\folder\Server.msi
ip: 2.2.2.2
apps:
- app:
fqdn: center-app.foo.com
cn: center-app
files:
- C:\folder\Server.msi
- C:\folder\Center-Client.msi
- C:\folder\files
ip: 3.3.3.3
clients:
- client:
db:
cn: Client-DB
app:
fqdn: Client-APP.foo.com
cn: Client-APP
files:
- C:\folder\Server.msi
- C:\folder\Client-Client.msi
ip: 4.4.4.4
Ansible 允许以多种方式构建库存变量和任务。根据各种 Ansible 插件的期望,以合乎逻辑的方式制定您自己的意见。
错误的。DNS 适用于每个环境。也许将一个区域委派
hiddai.lab.example.net
给一个测试实验室 DNS 服务器,并且主机在该区域中使用 FQDN。也就是说,
ansible_host
可以提供变量覆盖主机名或 IP 地址以供连接插件使用。不要使用分配给其他用户的 IP 地址。1.1.1.1 不是你的,它是 Cloudflare DNS。使用您的真实 IP 地址或文档测试网,如 192.0.2.0/24 198.51.100.0/24 203.0.113.0/24。
始终安全,所以 HTTPS。实验室设置在 PKI、个人简单 CA、自签名证书上可以更轻松。
不,将主机列表与角色级应用程序配置数据分开。这允许多个库存。多个实验室、暂存和生产库存之间的数据重复最少。
将清单限制为连接到主机所需的内容:主机名、用户、可能是凭据、连接插件。将应用程序详细信息放在其他地方,例如 group_vars。
说到凭据,我认为一个字符的密码太短了。甚至不要把它作为一个假的例子。理想情况下,将密码身份验证替换为更好的东西,例如基于密钥或证书的身份验证。或者至少是基于单词的长密码,例如
unluckily-pretense-occupy-quartered
.您的文件路径似乎是 Windows。阅读Ansible 的 winrm 文档并考虑您的身份验证选项。
在库存中存储凭据意味着拥有库存文件的任何人都可以运行命令。适当地保护文件。考虑将凭据存储在单独的密钥文件中,或者存储在您可以通过 Ansible 查找访问的某个秘密系统中。
您的 vars 文件是 YAML,但不在Ansible 的静态 YAML 库存插件所期望的结构中。也许像这样,因为
inventory/lab.yml
我已经将一些值更改为每个 Internet RFC 的实际示例。我不清楚这个例子中的“中心”是什么,软件产品、部署名称、客户端名称?由于 Ansible 库存在内部实际上是持平的,因此我已经将其分解。如果需要,将其作为变量或组添加回来。
关于主机特定的应用程序配置数据,请考虑 group_vars。这些可以与您的库存文件相关,文件名与组名匹配。
库存/group_vars/windows.yml
库存/group_vars/app.yml
库存/group_vars/client.yml
注意我为文件发明了几个变量。由于名称不同,您可以稍后将它们组合成一个列表,所以
{{ files_common + files_additional }}
理想情况下,编写和使用 Ansible 角色,这些角色有自己的变量和任务。考虑适用于大多数用例的角色默认值。例如,win_package 任务安装这些 msi 包,并默认从 https 服务器下载它们。但是让源包文件成为一个变量,所以它可以被覆盖。
戏剧是将这些主持人模式映射到角色的原因。我不确定仅给定通用名称来调用您的应用程序,因此我在角色前面加上了“事物”。播放.yml:
运行这样的剧本
ansible-playbook play.yml -i inventory/lab.yml
不包括:角色。我不知道你想完成什么,这个答案有点长。