AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1067425
Accepted
Hiddai
Hiddai
Asked: 2021-06-23 02:55:48 +0800 CST2021-06-23 02:55:48 +0800 CST 2021-06-23 02:55:48 +0800 CST

在清单 ansible yaml 文件中要提及哪些常见变量?

  • 772
  • 我尝试建立管道来安装我的产品。
  • 我的产品安装在至少有 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 devops azure-devops
  • 1 1 个回答
  • 293 Views

1 个回答

  • Voted
  1. Best Answer
    John Mahowald
    2021-06-23T06:38:56+08:002021-06-23T06:38:56+08:00

    Ansible 允许以多种方式构建库存变量和任务。根据各种 Ansible 插件的期望,以合乎逻辑的方式制定您自己的意见。

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

    错误的。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 或 HTTP?)

    始终安全,所以 HTTPS。实验室设置在 PKI、个人简单 CA、自签名证书上可以更轻松。

    除了清单 ansible yaml 文件中的主机和 IP 地址列表之外,是否可以添加变量或键,例如:“凭据”、“协议”、“文件”、“机器类型”等...

    不,将主机列表与角色级应用程序配置数据分开。这允许多个库存。多个实验室、暂存和生产库存之间的数据重复最少。

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

        cred:
            user: a
            pass: 1
    

    说到凭据,我认为一个字符的密码太短了。甚至不要把它作为一个假的例子。理想情况下,将密码身份验证替换为更好的东西,例如基于密钥或证书的身份验证。或者至少是基于单词的长密码,例如unluckily-pretense-occupy-quartered.

    您的文件路径似乎是 Windows。阅读Ansible 的 winrm 文档并考虑您的身份验证选项。

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

    您的 vars 文件是 YAML,但不在Ansible 的静态 YAML 库存插件所期望的结构中。也许像这样,因为 inventory/lab.yml 我已经将一些值更改为每个 Internet RFC 的实际示例。

    ---
    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。这些可以与您的库存文件相关,文件名与组名匹配。

    库存/group_vars/windows.yml

    ---
    base_dir: 'C:\folder\'
    files_common: 
      - Server.msi
    

    库存/group_vars/app.yml

    ---
    files_additional:
      - files
      - Center-Client.msi
    

    库存/group_vars/client.yml

    ---
    files_additional:
      - Client-Client.msi
    

    注意我为文件发明了几个变量。由于名称不同,您可以稍后将它们组合成一个列表,所以{{ files_common + files_additional }}

    理想情况下,编写和使用 Ansible 角色,这些角色有自己的变量和任务。考虑适用于大多数用例的角色默认值。例如,win_package 任务安装这些 msi 包,并默认从 https 服务器下载它们。但是让源包文件成为一个变量,所以它可以被覆盖。

    戏剧是将这些主持人模式映射到角色的原因。我不确定仅给定通用名称来调用您的应用程序,因此我在角色前面加上了“事物”。播放.yml:

    ---
    
    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

相关问题

  • 重复的 Ansible 任务

  • 无法形成站点中的文件的链接,该链接可用于使用 ansible 在远程服务器中启用的目录站点?

  • 如何执行 ansible 的特定角色?

  • Ansible 和 rbash

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve