首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是常见的变量要提到库存ansible yaml文件?

什么是常见的变量要提到库存ansible yaml文件?
EN

Server Fault用户
提问于 2021-06-22 10:55:48
回答 1查看 500关注 0票数 0
  • 我试着建造一条管道来安装我的产品.
  • 我的产品安装在一个至少有8台机器的实验室里(预置实验室).
  • 我在prem上有几个实验室,在云上有几个实验室
  • 每台机器都有一个角色,例如:一台Center-DB机器、一台中心队列机器或一台Center-App机器、一台中间机器和一台客户机,等等.所以,一些实验室是:1中心-1中间-1客户端。或3个中心(App、DB、Queue) -2个中间包-3个客户端
  • 有些机器有一个类似DB的服务,还有一些类似于DB、IIS和message。
  • 实验室处于一个安全的VLAN中,这意味着为了从远程运行脚本,我需要用他们的IP连接到机器,而不是用他们的FQDN和提供凭证。
  • 所有机器的凭证都是一样的。
  • 此外,安装文件中还有一个选项可以安装受保护的产品(带有证书和端口443)或不安全。
  • 在安装过程中,我需要首先将特定的安装文件复制到每台机器上,然后用特定的参数安装它们。

除了清单中的主机和IP地址列表( ansible yaml文件)外,是否需要添加变量或键,例如:

  • “全权证书”
  • “议定书”,
  • “档案”
  • “机器型”等等?

或者应该将它们放在不同的文件中,比如角色(任务)。拜托,帮我决定哪条信息到哪里去了。我的示例yaml文件如下:

代码语言:javascript
复制
---
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
EN

回答 1

Server Fault用户

回答已采纳

发布于 2021-06-22 14:38:56

Ansible允许以多种方式构造库存、vars和任务。根据不同的所期望的,发展你自己的观点,把事情放在一个逻辑的方式。

实验室处于一个安全的VLAN中,这意味着为了从远程运行脚本,我需要用他们的IP连接到机器,而不是用他们的FQDN和提供凭证。

假。DNS对于每个环境都是可能的。也许将一个区域hiddai.lab.example.net委托给一个测试实验室DNS服务器,并且主机在这个区域中使用FQDN。

也就是说,可以为连接插件提供覆盖主机名或IP地址的ansible_host变量。

不要使用分配给其他用户的IP地址。1.1.1.1不是你的,而是Cloudflare DNS。使用您的真实IP地址或文档测试网,如192.0.2.0/24 198.51.100.0/24 203.0.113.0/24。

此外,我需要决定我的产品是否安全地安装在我的实验室(哪种协议- HTTPS还是HTTP?)

总是安全的所以HTTPS。实验室设置可以更轻松的PKI,个人简单CA,自我签名证书。

除了清单中的主机和IP地址列表( ansible yaml文件)外,是否需要添加变量或键,例如:“凭据”、“协议”、“文件”、“计算机类型”等。

否,请将主机列表与角色级应用程序配置数据分开。这就允许多个库存。在多个实验室、阶段和生产库存之间尽量减少数据重复。

将库存限制在连接到主机所需的范围内:主机名、用户、可能是凭据、连接插件。将应用程序详细信息放在其他地方,例如group_vars。

代码语言:javascript
复制
    cred:
        user: a
        pass: 1

说到凭据,我认为一个字符密码短得令人无法接受。甚至不要把它当作假的例子。理想情况下,用更好的方法替换密码auth,比如密钥或基于证书的auth。或者至少有长的基于单词的密码,如unluckily-pretense-occupy-quartered

您的文件路径似乎是Windows。阅读抗的winrm文档,并考虑您对auth的选择。

在库存中存储creds意味着任何拥有库存文件的人都可以运行命令。适当地保护文件。考虑将creds存储在单独的密钥文件中,或者存储在某些您可以通过不可访问查找访问的秘密系统中。

您的vars文件是YAML,但不是Ansible's静态YAML库存插件所期望的结构。也许像inventory/lab.yml这样的东西,我已经把一些值转换成每个互联网RFCs的实际例子。

代码语言:javascript
复制
---
all:
    children: 
        windows:
            # Group containing only Windows hosts allow for 
            # Windows-specific auth and connection variables
            vars:
                ansible_user: a
                ansible_password: unluckily-pretense-occupy-quartered
                ansible_connection: winrm
                ansible_winrm_transport: credssp
            children:
                db:
                    # FQDN as inventory_hostname should resolve if in DNS
                    # Ansible pieces out the top label for you as special var inventory_hostname_short
                    hosts: 
                        center-db.hiddai.lab.example.net:
                            # ansible_host overrides what to connect to
                            # Such as when there is no DNS
                            ansible_host: 203.0.113.23
            children:
                queue:
                    hosts:
                        center-queue.hiddai.lab.example.net:
                            ansible_host: 203.0.113.83

            children:
                app:
                    hosts:
                        center-app.hiddai.lab.example.net:
                            ansible_host: 203.0.113.62
                            
            children:
                client:
                    hosts:
                        client-app.hiddai.lab.example.net:
                            ansible_host: 203.0.113.28
                            db: center-db

我不清楚什么是“中心”在这个例子中,软件产品,部署名称,客户名称?由于Ansible库存实际上在内部是持平的,所以我已经崩溃了。如果需要,将其作为变量或组添加回。

关于主机特定的应用程序配置数据,请考虑group_vars。这些可以是相对于您的库存文件,与文件名匹配的组名。

库存/组vars/windows.yml

代码语言:javascript
复制
---
base_dir: 'C:\folder\'
files_common: 
  - Server.msi

库存/组vars/app.yml

代码语言:javascript
复制
---
files_additional:
  - files
  - Center-Client.msi

库存/组vars/client.yml

代码语言:javascript
复制
---
files_additional:
  - Client-Client.msi

注意,我为这些文件发明了两个变量。由于名称不同,以后可以将它们合并到一个列表中,因此{{ files_common + files_additional }}

理想情况下,编写和使用Ansible角色,这些角色有自己的变量和任务。考虑适合大多数用例的角色默认值。例如,安装这些msi包的win_package任务,以及默认情况下从https服务器下载它们。但是,将源包文件设置为一个变量,以便可以重写它。

剧本就是把这些主持人的模式映射到角色上的。我不知道该怎么称呼你的应用程序,只给出通用的名字,所以我用“东西”作为角色的前缀。play.yml:

代码语言:javascript
复制
---

hosts: db
roles:
- thingdb

hosts: queue
roles:
- thingqueue

hosts: app
roles:
- thingapp

hosts: client
roles:
- thingclient

ansible-playbook play.yml -i inventory/lab.yml运行这样一个剧本

不包括角色。我不知道你想做什么,这个答案有点长。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1067425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档