Loading
close

云产品配置及依赖

time 更新时间:2023-03-29 11:00:25

云产品 charts 包中 _config_helpers.yaml.tpl 文件用于定义云产品配置及其依赖。

定义云产品配置

ECP 6.0.2:replicas_by_modality 支持通过 License 传参修改副本数
ECP 6.1.1:新增 safe_render 和safe_render_multi模板函数

说明

_config_helpers.yaml.tpl文件中data_template属性用于定义云产品的配置模板,该配置会在渲染后生成云产品配置传递给 helm 用于部署云产品,该模板使用mako template语法,并包含了如下的模板函数:

  • ${cloud_product_label}:渲染为云产品节点label。
  • ${label_enabled}:渲染为云产品节点label的value,默认为enabled。
  • ${random_password('password_tag', 8)}:生成一个随机密码,,同一个password标识生成的随机密码在首次生成后,再次升级将不会改变。
    • param1:password标识
    • param2:password的位数
  • ${replicas_by_modality}:平台设置的副本数,参考:通过 License 传参修改副本数
  • ${safe_render('product', '/path', 'default_value')}:获取某个云产品的配置。
    • param1:云产品标识
    • param2:配置路径
    • param3:获取配置失败时的默认配置
  • ${safe_render_multi(['product1','product2'], '/path', 'default_value')}:获取某个云产品的配置。匹配规则为第一个配置存在且为已安装状态的云产品,优先级以param1的列表顺序为准。
    • param1:云产品标识列表
    • param2:配置路径
    • param3:获取配置失败时的默认配置

      引用其他云产品配置

      当云产品配置中需要用到其他云产品的配置时,可以通过 ${云产品名[配置项]} 的方式进行引用。

例如,集群中已安装的了一个 mariaDB 的云产品,定义的配置如下:

data_template:
  endpoints:
		admin:
			password: 12sfeij113

mycloud-product 云产品需要使用 mariaDB 云产品的配置,获取 password 数据时,可通过如下方式进行获取:

data_template:
  endpoints:
		maria_db:
			password:
        ${mariadb['endpoints']['admin']['password']}

若无法确定是否存在 mariaDB 的配置中,是否存在 password 配置,可以通过如下方式设置一个默认值:

data_template:
  endpoints:
		maria_db:
			password:
				${mariadb['endpoints'].get('admin', {}).get('password', "12345")}

若 mariaDB 可能还没安装,在获取不到时需要使用一个默认值代替,可以使用safe_render模板函数

data_template:
  endpoints:
		maria_db:
			password:
				${safe_render('mariadb', '/endpoints/admin/password', 'default')

引用平行依赖的云产品(依赖的云产品存在互斥云产品)时,可以使用safe_render_multi模板函数:

data_template:
  endpoints:
		maria_db:
			password:
				${safe_render_multi(['neutron','proton'], '/endpoints/admin/password', 'default')

使用mako语法实现条件判断

mako语法同时兼容平台6.0.2和6.1.1版本,可以使用条件判断,实现按照自定义优先级获取依赖的云产品配置。
如果云产品需要同时兼容6.0.2版本和6.1.1版本,推荐使用mako语法:
password: |-
% if neutron:
${neutron.get(‘endpoints’,{}).get(‘oslo_db’,{}).get(‘auth’,{}).get(‘user’,{}).get(‘password’,’default’)}
% elif proton:
${proton.get(‘endpoints’,{}).get(‘oslo_db’,{}).get(‘auth’,{}).get(‘user’,{}).get(‘password’,’default’)}
% else:
${random_password(‘va_oslo_db_user’, 8)}
% endif
使用时注意缩进,避免格式错误导致配置渲染失败。

示例

data_template:
  endpoints:
  	maria_db:
      auth:
       admin:
        password:
          ${mariadb['endpoints']['oslo_db']['auth']['admin']['password']}
        user:
          password:
            ${random_password('user_mariadb', 8)}
 		neutron:
    	password:
      	${safe_render('neutron', '/endpoints/admin/password', 'default')
      password1:
      	${safe_render_multi(['neutron','proton'], '/endpoints/admin/password', 'default')
      password2: |-
        % if neutron:
        ${neutron.get('endpoints',{}).get('oslo_db',{}).get('auth',{}).get('user',{}).get('password','default')}
        % elif proton:
        ${proton.get('endpoints',{}).get('oslo_db',{}).get('auth',{}).get('user',{}).get('password','default')}
        % else:
        default
        % endif
      password3: |-
        % if neutron:
        ${neutron.get('endpoints',{}).get('oslo_db',{}).get('auth',{}).get('user',{}).get('password','default')}
        % else:
        ${random_password('va_oslo_db_user', 8)}
        % endif
  labels:
    node_selector_key:
      ${cloud_product_label}
    node_selector_value:
      ${label_enabled}

通过 License 传参修改副本数

说明

通过 ${replicas_by_modality} 来获取由平台设置的副本数,ECP 602 版本会从云产品 license 的 values 数据中获取指定的副本数。对应的 key 为default_product_replicas,获取不到时,默认值为3。

示例

license 定义为如下值时:

cloud_product:
- alcubierre:
    ttl: '2200-01-01'
    values:
        default_product_replicas: 3
company: EasyStack-certified-OS-in-OS-3bonds-v6
lic_type: cloud_product
project: EasyStack
serial: d93d10ad-2075-4327-a059-ebde38345a3b

_config_helpers.yaml.tpl 定义:

data_template:
  pod:
    replicas:
      devops_dashboard_api:
        ${replicas_by_modality}
      devops_dashboard_server:
        ${replicas_by_modality}

渲染后:

data_template:
  pod:
    replicas:
      devops_dashboard_api: 3
      devops_dashboard_server: 3

通过License主动更新云产品及平台软件配置

之前云产品license中的自定义值,需要云产品在 _config_helpers.yaml.tpl 的 data_template 字段下通过模板的方式显式的引用相关的值,才可通过更新 license 的方式动态更新,数据更新方式较为被动,现在增加通过 license 主动更新云产品配置的方案,云产品无需再通过模板声明的方式获取 license 数据,后续 license 中的数据将逐步禁止云产品直接读取。

说明

license详细配置方案如下:

  1. 每个云产品 License 新增 config 字段,保存主动更新配置
  2. License CRD 中新增 platform_software 字段,保存平台软件主动更新配置
  3. License CRD 中 data 下新增 topology字段,保存平台软件和云产品的拓扑数据
  4. 安装阶段将云产品或平台软件对应的 config 及拓扑数据 topology和 data_template 渲染后的数据进行 merge,使用此数据进行安装
  5. 安装完成后,动态监控 license config,当出现变化时,将 license 中各云产品或平台软件 config 字段及拓扑数据和云产品的 cpconfig 的 data 数据进行 merge,merge 完成后计算 data hash,若 hash 不一致则触发配置更新操作。 渲染配置模板时,会跳过license数据的读取,并置为空对象,以达到禁止读取 license 数据的能力。

配置优先级

目前云产品的配置数据源来自于 _config_helpers.yaml.tpl 的 data_template 字段、config crd,cpconfig 自定义配置 custom_config 字段,加入了 license 数据后,字段相同时预计的配置优先级从低到高如下:

  1. data_template
  2. config crd
  3. 拓扑数据
  4. license config 数据
  5. custom_config 自定义配置

    示例

    values.yaml
    # cloud_product_1 values.yaml
    pod:
      replicas:
        api: 1
        dashboard: 1
        db: 1
    
    # platform_software_1 values.yaml
    pod:
      replicas:
        api: 1
        dashboard: 1
        db: 1
    _config_helpers.yaml.tpl
    data_template:
      pod:
        replicas:
          api: 2
          dashboard: 2
    license config
    apiVersion: servicecatalog.ecp.com/v1
    data:
      cloud_product:
        cloud_product_1:
          ttl: -1
          values:
            api: 2
            dashboard: 2
          config:
            pod:
              replicas:
                dashboard: 3
    
      platform_software:
        platform_software_1:
          config:
            pod:
              replicas:
                dashboard: 3
    
      topology:
        cloud_product_1:
          pod:
            replicas:
              dashboard: 4
        platform_software_1:
          pod:
            replicas:
              dashboard: 4
    最终渲染后的 values:
    # cloud_product_1
    pod:
      replicas:
        api: 2
        dashboard: 3
        db: 1
    
    # platform_software_1
    pod:
      replicas:
        api: 2
        dashboard: 3
        db: 1

云产品依赖

说明

_config_helpers.yaml.tpl文件中涉及参数如下:

  • dependencies 属性用于定义云产品的依赖
    • arch:定义云产品依赖的系统架构,支持 x86 和 arm
    • services:定义云产品依赖的服务
    • parallel_services:定义云产品平行依赖的服务,其中声明的云产品只要有一个满足即达到依赖条件
    • exclusion:定义云产品互斥依赖的服务,声明的云产品不可和此云产品同时安装
    • platform_version:定义云产品依赖的最低平台版本
  • base_version:定义依赖的必升版本
  • trial_days:定义可试用天数(-1为免费,默认需要定义为180)
  • license_expired:定义license过期时需要upgrade的属性(例如应用中心在license过期时可能不会删除所有已安装应用,只会禁用应用商店功能),由云产品自行定义。

    示例

    dependencies:
      platform_version: 6.0.1
      arch:
        - x86
        - arm
      services:
      	horizon: 6.0.1-alpha.0
        nova: 6.0.1-alpha.0
      exclusion:
        - nova
        - cinder
    	parallel_services:
        - iam: 6.0.1
          schedule: 6.0.1
        - neturn: 6.0.1
          proton: 6.0.1
    
    base_version: 6.2.1
    
    trial_days: 180
    
    license_expired:
      feature:
        disable: true

    云产品必升版本

    说明

    _config_helpers.yaml.tpl文件中base_version属性用于定义云产品升级到此版本时,依赖的必升版本,云产品必须先升级到 base_version版本后,才能升级到此版本。

    示例

    _config_helpers.yaml.tpl文件中存在如下定义时,必须先升级到6.0.3版本,才可继续升级到当前版本。
    base_version: 6.0.3
此篇文章对你是否有帮助?
没帮助
locked-file

您暂无权限访问该产品