v4

package
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 1, 2026 License: MIT Imports: 11 Imported by: 0

README

V4 版本架构说明

概述

V4 版本对 MakePolicyV3 和 MakeNatPolicyV3 进行了重构,使用 struct 来组织代码,提高了代码的可维护性和可扩展性。

架构设计

核心组件
  1. AddressObjectGenerator - 地址对象生成器

    • 负责生成源地址对象和目标地址对象
    • 支持单个对象和地址组两种模式
    • 支持对象复用
  2. ServiceObjectGenerator - 服务对象生成器

    • 负责生成服务对象
    • 支持单个对象和服务组两种模式
    • 支持对象复用
  3. NatObjectGenerator - NAT对象生成器

    • 负责生成VIP/MIP对象(DNAT)
    • 负责生成SNAT_POOL对象(SNAT)
    • 支持多种对象类型:VIP、MIP、NETWORK_OBJECT、SNAT_POOL、INTERFACE、INLINE
  4. PolicyGenerator - 策略生成器

    • 使用 AddressObjectGenerator 和 ServiceObjectGenerator
    • 负责生成安全策略CLI
    • 支持策略复用
  5. NatPolicyGenerator - NAT策略生成器

    • 使用 AddressObjectGenerator、ServiceObjectGenerator 和 NatObjectGenerator
    • 负责生成NAT策略CLI
    • 支持Twice NAT和Object NAT两种模式
数据结构
配置结构
  • AddressObjectGeneratorConfig - 地址对象生成器配置
  • ServiceObjectGeneratorConfig - 服务对象生成器配置
  • NatObjectGeneratorConfig - NAT对象生成器配置
  • PolicyGeneratorConfig - 策略生成器配置
  • NatPolicyGeneratorConfig - NAT策略生成器配置
结果结构
  • AddressObjectResult - 地址对象生成结果
  • ServiceObjectResult - 服务对象生成结果
  • VipMipResult - VIP/MIP生成结果
  • SnatPoolResult - SNAT_POOL生成结果
  • PolicyResult - 策略生成结果
  • NatPolicyResult - NAT策略生成结果
上下文结构
  • GeneratorContext - 生成器上下文,包含共享资源
  • GeneratorInput - 生成器输入参数

使用方式

基本使用
// 创建上下文
ctx := &v4.GeneratorContext{
    Node:      node,
    Templates: templates,
    MetaData:  metaData,
}

// 创建策略生成器
policyConfig := v4.PolicyGeneratorConfig{
    PolicyNameTemplate: "{VAR:ticket_number}_policy_{SEQ:id:5:10000:1:MAIN}",
    AddressObjectConfig: v4.AddressObjectGeneratorConfig{
        UseSourceObject:      true,
        UseDestinationObject: true,
        ReuseAddressObject:   true,
    },
    ServiceObjectConfig: v4.ServiceObjectGeneratorConfig{
        UseServiceObject:   true,
        ReuseServiceObject: true,
    },
    ReusePolicy: true,
    Enable:      "true",
    Action:      "permit",
}

generator := v4.NewPolicyGenerator(ctx, policyConfig)

// 创建输入参数
input := &v4.GeneratorInput{
    Intent:  intent,
    FromPort: fromPort,
    ToPort:   toPort,
    FromZone: fromZone,
    ToZone:   toZone,
    Context:  policyContext,
}

// 生成策略
result, err := generator.Generate(input)
使用 CommonTemplatesV4
// 创建V4模板实例
templatesV4 := v4.NewCommonTemplatesV4(node, templates, metaData)

// 生成策略
policyResult, err := templatesV4.MakePolicyV4(from, to, intent, ctx, metaData)

// 生成NAT策略
natResult, err := templatesV4.MakeNatPolicyV4(from, to, intent, ctx, metaData)

优势

  1. 模块化设计 - 每个生成器独立负责特定功能,职责清晰
  2. 易于测试 - 每个生成器可以独立测试
  3. 易于扩展 - 新增功能只需添加新的生成器或扩展现有生成器
  4. 配置集中 - 所有配置通过结构体管理,便于维护
  5. 类型安全 - 使用强类型结构体,减少运行时错误

与V3版本的对比

特性 V3版本 V4版本
代码组织 函数式 Struct式
配置管理 分散在函数参数中 集中在Config结构体中
可测试性 中等
可扩展性 中等
代码复用 中等

文件结构

v4/
├── types.go                    # 类型定义
├── helpers.go                  # 辅助函数
├── address_object_generator.go # 地址对象生成器
├── service_object_generator.go # 服务对象生成器
├── nat_object_generator.go     # NAT对象生成器
├── policy_generator.go         # 策略生成器
├── nat_policy_generator.go     # NAT策略生成器
├── templates_v4.go             # 主入口文件
└── README.md                   # 本文档

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ExtractStarlarkTemplateName

func ExtractStarlarkTemplateName(layout string) string

ExtractStarlarkTemplateName 从 Starlark 标记中提取模板名称

func IsStarlarkLayout

func IsStarlarkLayout(layout string) bool

IsStarlarkLayout 检查 layout 是否是 Starlark 模板标记

Types

type AddressObjectGenerator

type AddressObjectGenerator struct {
	// contains filtered or unexported fields
}

AddressObjectGenerator 地址对象生成器

func NewAddressObjectGenerator

func NewAddressObjectGenerator(ctx *GeneratorContext, config AddressObjectGeneratorConfig) *AddressObjectGenerator

NewAddressObjectGenerator 创建地址对象生成器

func (*AddressObjectGenerator) Generate

func (g *AddressObjectGenerator) Generate(intent *policy.Intent, isSource bool, ctx *firewall.PolicyContext) (*AddressObjectResult, error)

Generate 生成地址对象 isSource: true 表示源地址对象,false 表示目标地址对象

type AddressObjectGeneratorConfig

type AddressObjectGeneratorConfig struct {
	UseSourceObject                     bool
	UseDestinationObject                bool
	ReuseAddressObject                  bool
	PreferMultiSourceAddressObject      bool   // 如果为true,优先使用多地址object而不是地址组
	PreferMultiDestinationAddressObject bool   // 如果为true,优先使用多地址object而不是地址组
	SourceAddressGroupStyle             string // 源地址组样式:object 或 inline
	DestinationAddressGroupStyle        string // 目标地址组样式:object 或 inline
}

AddressObjectGeneratorConfig 地址对象生成器配置

type AddressObjectResult

type AddressObjectResult struct {
	ObjectNames []string // 对象名称列表
	IsGroup     bool     // 是否是地址组
	CLIString   string   // 生成的CLI
	Keys        []string // 对象键列表
}

AddressObjectResult 地址对象生成结果

type CommonTemplatesV4

type CommonTemplatesV4 struct {
	// contains filtered or unexported fields
}

CommonTemplatesV4 V4版本的通用模板实现

func NewCommonTemplatesV4

func NewCommonTemplatesV4(node firewall.FirewallNode, templateDir string, metaData map[string]interface{}) (*CommonTemplatesV4, error)

NewCommonTemplatesV4 创建新的V4通用模板实例(使用 Starlark 模板) node: 防火墙节点 templateDir: Starlark 模板文件所在目录(如 "pkg/nodemap/node/device/firewall/common/v4/templates") metaData: 元数据

func (*CommonTemplatesV4) MakeNatPolicyV4

func (ct *CommonTemplatesV4) MakeNatPolicyV4(from, to api.Port, intent *policy.Intent, ctx *firewall.PolicyContext, metaData map[string]interface{}) (*NatPolicyResult, error)

MakeNatPolicyV4 生成NAT策略(V4版本,使用struct组织)

func (*CommonTemplatesV4) MakePolicyV4

func (ct *CommonTemplatesV4) MakePolicyV4(from, to api.Port, intent *policy.Intent, ctx *firewall.PolicyContext, metaData map[string]interface{}) (*PolicyResult, error)

MakePolicyV4 生成安全策略(V4版本,使用struct组织)

type GeneratorContext

type GeneratorContext struct {
	Node      firewall.FirewallNode
	Templates TemplatesV4
	MetaData  map[string]interface{}
}

GeneratorContext 生成器上下文,包含所有生成器需要的共享资源

type GeneratorInput

type GeneratorInput struct {
	Intent                *policy.Intent
	FromPort              api.Port
	ToPort                api.Port
	FromZone              string
	ToZone                string
	FromInterface         string
	ToInterface           string
	FromArea              string
	ToArea                string
	IsSourceStubArea      bool
	IsDestinationStubArea bool
	Context               *firewall.PolicyContext
}

GeneratorInput 生成器输入参数

type NatNameGenerator

type NatNameGenerator struct {
	// contains filtered or unexported fields
}

NatNameGenerator NAT策略名称生成器

func NewNatNameGenerator

func NewNatNameGenerator(ctx *GeneratorContext) *NatNameGenerator

NewNatNameGenerator 创建NAT策略名称生成器

func (*NatNameGenerator) Generate

func (g *NatNameGenerator) Generate(intent *policy.Intent, ctx *firewall.PolicyContext, metaData map[string]interface{}) (mainID int, name string, id string, err error)

Generate 生成NAT策略名称和ID

type NatObjectGenerator

type NatObjectGenerator struct {
	// contains filtered or unexported fields
}

NatObjectGenerator NAT对象生成器(VIP/MIP/SNAT_POOL)

func NewNatObjectGenerator

func NewNatObjectGenerator(ctx *GeneratorContext, config NatObjectGeneratorConfig) *NatObjectGenerator

NewNatObjectGenerator 创建NAT对象生成器

func (*NatObjectGenerator) Generate

func (g *NatObjectGenerator) Generate(intent *policy.Intent, fromZone, toZone string, from, to api.Port, ctx *firewall.PolicyContext) (*VipMipResult, *SnatPoolResult, error)

Generate 生成NAT对象

type NatObjectGeneratorConfig

type NatObjectGeneratorConfig struct {
	NatType        string // "DNAT" 或 "SNAT"
	DnatObjectType string // "VIP", "MIP", "NETWORK_OBJECT", "INLINE"
	SnatPoolType   string // "SNAT_POOL", "INTERFACE", "NETWORK_OBJECT", "INLINE"
}

NatObjectGeneratorConfig NAT对象生成器配置

type NatPolicyGenerator

type NatPolicyGenerator struct {
	// contains filtered or unexported fields
}

NatPolicyGenerator NAT策略生成器

func NewNatPolicyGenerator

func NewNatPolicyGenerator(ctx *GeneratorContext, config NatPolicyGeneratorConfig) *NatPolicyGenerator

NewNatPolicyGenerator 创建NAT策略生成器

func (*NatPolicyGenerator) Generate

func (g *NatPolicyGenerator) Generate(input *GeneratorInput) (*NatPolicyResult, error)

Generate 生成NAT策略

type NatPolicyGeneratorConfig

type NatPolicyGeneratorConfig struct {
	NatName               string
	NatNameTemplate       string
	NatId                 string
	PolicyId              string
	NatType               string
	Enable                bool
	Description           string
	NatStyle              string // "twice" 或 "object" (仅ASA)
	AddressObjectConfig   AddressObjectGeneratorConfig
	ServiceObjectConfig   ServiceObjectGeneratorConfig
	NatObjectConfig       NatObjectGeneratorConfig
	RealPortServiceObject bool
	IsSourcePort          bool
}

NatPolicyGeneratorConfig NAT策略生成器配置

type NatPolicyResult

type NatPolicyResult struct {
	NatName            string            // NAT策略名称
	NatType            string            // NAT类型:DNAT 或 SNAT
	CLIString          string            // 生成的CLI(包含所有CLI,用于向后兼容)
	VipMipName         string            // VIP/MIP对象名称(DNAT)
	SnatPoolName       string            // SNAT_POOL名称(SNAT)
	SnatPoolId         string            // SNAT_POOL ID(SNAT,用于某些防火墙如USG,可能与SnatPoolName不同)
	SourceObjects      []string          // 源地址对象名称列表(如果生成)
	DestinationObjects []string          // 目标地址对象名称列表(如果生成)
	ServiceObjects     []string          // 服务对象名称列表(如果生成)
	Keys               []string          // 对象键列表(包含所有生成的对象)
	IsReused           bool              // 是否复用了现有VIP/MIP/POOL
	IsIPProtocol       bool              // 是否是IP协议(所有协议)
	FlyObject          map[string]string // 分离后的CLI对象(NETWORK, SERVICE, NAT, VIP, POOL等)
}

NatPolicyResult NAT策略生成结果

func (*NatPolicyResult) AppendCLIString

func (r *NatPolicyResult) AppendCLIString(cli string)

func (*NatPolicyResult) AppendKeys

func (r *NatPolicyResult) AppendKeys(keys []string)

func (*NatPolicyResult) GetCLIString

func (r *NatPolicyResult) GetCLIString() string

func (*NatPolicyResult) GetDestinationObjects

func (r *NatPolicyResult) GetDestinationObjects() []string

func (*NatPolicyResult) GetFlyObject

func (r *NatPolicyResult) GetFlyObject() map[string]string

实现 ObjectResultMerger 接口 - NatPolicyResult

func (*NatPolicyResult) GetKeys

func (r *NatPolicyResult) GetKeys() []string

func (*NatPolicyResult) GetServiceObjects

func (r *NatPolicyResult) GetServiceObjects() []string

func (*NatPolicyResult) GetSourceObjects

func (r *NatPolicyResult) GetSourceObjects() []string

func (*NatPolicyResult) SetDestinationObjects

func (r *NatPolicyResult) SetDestinationObjects(objs []string)

func (*NatPolicyResult) SetFlyObject

func (r *NatPolicyResult) SetFlyObject(category, value string)

func (*NatPolicyResult) SetServiceObjects

func (r *NatPolicyResult) SetServiceObjects(objs []string)

func (*NatPolicyResult) SetSourceObjects

func (r *NatPolicyResult) SetSourceObjects(objs []string)

type ObjectResultMerger

type ObjectResultMerger interface {
	// GetFlyObject 获取 FlyObject map
	GetFlyObject() map[string]string
	// GetCLIString 获取 CLIString
	GetCLIString() string
	// SetFlyObject 设置 FlyObject 中的某个类别
	SetFlyObject(category, value string)
	// AppendCLIString 追加 CLI 字符串
	AppendCLIString(cli string)
	// GetSourceObjects 获取源地址对象列表
	GetSourceObjects() []string
	// GetDestinationObjects 获取目标地址对象列表
	GetDestinationObjects() []string
	// GetServiceObjects 获取服务对象列表
	GetServiceObjects() []string
	// GetKeys 获取对象键列表
	GetKeys() []string
	// SetSourceObjects 设置源地址对象列表
	SetSourceObjects([]string)
	// SetDestinationObjects 设置目标地址对象列表
	SetDestinationObjects([]string)
	// SetServiceObjects 设置服务对象列表
	SetServiceObjects([]string)
	// AppendKeys 追加对象键
	AppendKeys([]string)
}

ObjectResultMerger 接口,用于统一 PolicyResult 和 NatPolicyResult 的 CLI 合并操作

type PolicyGenerator

type PolicyGenerator struct {
	// contains filtered or unexported fields
}

PolicyGenerator 策略生成器

func NewPolicyGenerator

func NewPolicyGenerator(ctx *GeneratorContext, config PolicyGeneratorConfig) *PolicyGenerator

NewPolicyGenerator 创建策略生成器

func (*PolicyGenerator) Generate

func (g *PolicyGenerator) Generate(input *GeneratorInput) (*PolicyResult, error)

Generate 生成策略

type PolicyGeneratorConfig

type PolicyGeneratorConfig struct {
	PolicyName          string
	PolicyNameTemplate  string
	PolicyId            string
	Action              string
	Enable              bool
	Description         string
	ReusePolicy         bool
	ReusePolicyMode     PolicyReuseMode // 复用模式:standard 或 enhanced
	EmptyZoneMatchesAny bool
	AddressObjectConfig AddressObjectGeneratorConfig
	ServiceObjectConfig ServiceObjectGeneratorConfig
}

PolicyGeneratorConfig 策略生成器配置

type PolicyNameGenerator

type PolicyNameGenerator struct {
	// contains filtered or unexported fields
}

PolicyNameGenerator 策略名称生成器 支持完整的 IDTemplate 语法: - {VAR:name} - 变量替换 - {DATE:name:format} - 日期字段(支持 YYYYMMDD, YYYY-MM-DD 等) - {SEQ:name:width:start:step:MAIN:NORENDER} - 序列号字段

func NewPolicyNameGenerator

func NewPolicyNameGenerator(ctx *GeneratorContext) *PolicyNameGenerator

NewPolicyNameGenerator 创建策略名称生成器

func (*PolicyNameGenerator) Generate

func (g *PolicyNameGenerator) Generate(ctx *firewall.PolicyContext, metaData map[string]interface{}) (mainID int, name string, id string, err error)

Generate 生成策略名称和ID 优先级: 1. metaData 中直接指定的 policy_name 2. 节点实现的 GetPolicyName 方法 3. 使用命名模板生成(支持 IDTemplate 和 DSL)

type PolicyResult

type PolicyResult struct {
	PolicyName         string            // 策略名称
	PolicyId           string            // 策略ID
	CLIString          string            // 生成的CLI(包含所有CLI,用于向后兼容)
	SourceObjects      []string          // 源地址对象名称列表
	DestinationObjects []string          // 目标地址对象名称列表
	ServiceObjects     []string          // 服务对象名称列表
	Keys               []string          // 对象键列表(包含所有生成的对象)
	IsReused           bool              // 是否复用了现有策略
	ReusedPolicyName   string            // 复用的策略名称(如果复用)
	IsIPProtocol       bool              // 是否是IP协议(所有协议)
	FlyObject          map[string]string // 分离后的CLI对象(NETWORK, SERVICE, SECURITY_POLICY等)
}

PolicyResult 策略生成结果

func (*PolicyResult) AppendCLIString

func (r *PolicyResult) AppendCLIString(cli string)

func (*PolicyResult) AppendKeys

func (r *PolicyResult) AppendKeys(keys []string)

func (*PolicyResult) GetCLIString

func (r *PolicyResult) GetCLIString() string

func (*PolicyResult) GetDestinationObjects

func (r *PolicyResult) GetDestinationObjects() []string

func (*PolicyResult) GetFlyObject

func (r *PolicyResult) GetFlyObject() map[string]string

实现 ObjectResultMerger 接口 - PolicyResult

func (*PolicyResult) GetKeys

func (r *PolicyResult) GetKeys() []string

func (*PolicyResult) GetServiceObjects

func (r *PolicyResult) GetServiceObjects() []string

func (*PolicyResult) GetSourceObjects

func (r *PolicyResult) GetSourceObjects() []string

func (*PolicyResult) SetDestinationObjects

func (r *PolicyResult) SetDestinationObjects(objs []string)

func (*PolicyResult) SetFlyObject

func (r *PolicyResult) SetFlyObject(category, value string)

func (*PolicyResult) SetServiceObjects

func (r *PolicyResult) SetServiceObjects(objs []string)

func (*PolicyResult) SetSourceObjects

func (r *PolicyResult) SetSourceObjects(objs []string)

type PolicyReuseMode

type PolicyReuseMode string

PolicyReuseMode 策略复用模式

const (
	ReuseModeStandard PolicyReuseMode = "standard" // 标准复用(当前实现)
	ReuseModeEnhanced PolicyReuseMode = "enhanced" // 增强复用(新实现)
)

type ReuseResult

type ReuseResult struct {
	IsReused                bool
	ReusedPolicyName        string
	MatchedPolicy           firewall.FirewallPolicy
	UpdatedIntent           *policy.Intent
	SourceGroupUpdated      bool   // 源地址组是否更新
	DestinationGroupUpdated bool   // 目标地址组是否更新
	ServiceGroupUpdated     bool   // 服务组是否更新
	AddressGroupUpdateCLI   string // 地址组更新CLI(如果有)
	ServiceGroupUpdateCLI   string // 服务组更新CLI(如果有)
	GroupUpdateCLI          string // 组更新CLI(兼容性字段,包含所有组更新)
	ShouldGeneratePolicy    bool   // 是否需要生成策略CLI
}

ReuseResult 策略复用结果

type ServiceNameGenerator

type ServiceNameGenerator struct {
	// contains filtered or unexported fields
}

ServiceNameGenerator 服务对象名称生成器

func NewServiceNameGenerator

func NewServiceNameGenerator(ctx *GeneratorContext) *ServiceNameGenerator

NewServiceNameGenerator 创建服务对象名称生成器

func (*ServiceNameGenerator) Generate

func (g *ServiceNameGenerator) Generate(svc *service.Service, template string, metaData map[string]interface{}) (keys.Keys, bool, error)

Generate 生成服务对象名称(唯一) 返回:生成的名称、是否为新对象、错误

func (*ServiceNameGenerator) GenerateFromEntry

func (g *ServiceNameGenerator) GenerateFromEntry(svcEntry service.ServiceEntry, template string, metaData map[string]interface{}) (keys.Keys, bool, error)

GenerateFromEntry 从服务条目生成名称

func (*ServiceNameGenerator) GenerateGroupName

func (g *ServiceNameGenerator) GenerateGroupName(template string, metaData map[string]interface{}) (keys.Keys, bool, error)

GenerateGroupName 生成服务组名称(唯一)

type ServiceObjectGenerator

type ServiceObjectGenerator struct {
	// contains filtered or unexported fields
}

ServiceObjectGenerator 服务对象生成器

func NewServiceObjectGenerator

func NewServiceObjectGenerator(ctx *GeneratorContext, config ServiceObjectGeneratorConfig) *ServiceObjectGenerator

NewServiceObjectGenerator 创建服务对象生成器

func (*ServiceObjectGenerator) Generate

Generate 生成服务对象

type ServiceObjectGeneratorConfig

type ServiceObjectGeneratorConfig struct {
	UseServiceObject         bool
	ReuseServiceObject       bool
	PreferMultiServiceObject bool   // 如果为true,优先使用多服务object而不是服务组
	ServiceGroupStyle        string // 服务组样式:object 或 inline
}

ServiceObjectGeneratorConfig 服务对象生成器配置

type ServiceObjectResult

type ServiceObjectResult struct {
	ObjectNames  []string // 对象名称列表
	IsGroup      bool     // 是否是服务组
	CLIString    string   // 生成的CLI
	Keys         []string // 对象键列表
	IsIPProtocol bool     // 是否是IP协议(所有协议)
}

ServiceObjectResult 服务对象生成结果

type SnatPoolResult

type SnatPoolResult struct {
	PoolName  string   // 地址池名称
	PoolId    string   // 地址池ID(可选)
	CLIString string   // 生成的CLI
	Keys      []string // 对象键列表
	Type      string   // 实现类型:POOL, ADDRESS_OBJECT, INTERFACE, INLINE
}

SnatPoolResult SNAT_POOL生成结果

type StarlarkTemplatesAdapter

type StarlarkTemplatesAdapter struct {
	// contains filtered or unexported fields
}

StarlarkTemplatesAdapter Starlark 模板适配器,实现 TemplatesV4 接口

func NewStarlarkTemplatesAdapter

func NewStarlarkTemplatesAdapter(vendorName, templateDir string) (*StarlarkTemplatesAdapter, error)

NewStarlarkTemplatesAdapter 创建 Starlark 模板适配器 vendorName: 厂商名称,如 "secpath", "usg", "dptech" 等 templateDir: Starlark 模板文件所在目录(可以是相对路径或绝对路径)

func NewStarlarkTemplatesAdapterFromNode

func NewStarlarkTemplatesAdapterFromNode(node firewall.FirewallNode, templateDir string) (*StarlarkTemplatesAdapter, error)

NewStarlarkTemplatesAdapterFromNode 从 FirewallNode 创建 Starlark 模板适配器 自动检测厂商名称并加载对应的模板

func (*StarlarkTemplatesAdapter) ExecuteStarlarkCode

func (a *StarlarkTemplatesAdapter) ExecuteStarlarkCode(code string, intent *policy.Intent, meta map[string]interface{}) (string, error)

ExecuteStarlarkCode 直接执行 Starlark 代码字符串 code: Starlark 代码字符串,应该是一个表达式或语句序列,最后需要返回结果 intent: 策略意图 meta: 元数据

支持的代码格式:

  1. 顶层语句序列,最后需要有 result 变量: result = meta.get("policy_name", "") + "_" result += items[0].protocol.lower if len(items) > 0 else "" result

  2. 函数定义+调用形式: def generate_name(intent, meta): result = meta.get("policy_name", "") return result result = generate_name(intent, meta)

3. 可以使用以下全局变量:

  • src, dst, service (直接访问,如 src.EachIPNet())
  • intent.src, intent.dst, intent.service (通过 intent 访问)
  • meta (元数据字典)
  • intent (完整的 Intent 对象)

参考:github.com/netxops/utils/dsl 中的 StarlarkIntentFormat 函数 参考:starlark_intent_cartesian_example.md 中的示例

func (*StarlarkTemplatesAdapter) GetLayout

func (a *StarlarkTemplatesAdapter) GetLayout(key keys.Keys) string

GetLayout 实现 TemplatesV4 接口 返回特殊标记,表示使用 Starlark 模板 key 的格式通常是 "TemplateType" 或 "TemplateType.SubType" 例如: "Policy", "Policy.OneLoop", "AddressObject", "ServiceGroup" 等

func (*StarlarkTemplatesAdapter) GetVendorName

func (a *StarlarkTemplatesAdapter) GetVendorName() string

GetVendorName 获取厂商名称

func (*StarlarkTemplatesAdapter) RenderStarlarkTemplate

func (a *StarlarkTemplatesAdapter) RenderStarlarkTemplate(templateName string, intent *policy.Intent, meta map[string]interface{}) (string, error)

RenderStarlarkTemplate 渲染 Starlark 模板 templateName: 模板名称,如 "Policy", "AddressObject" 等 intent: 策略意图 meta: 元数据

type TemplatesV4

type TemplatesV4 interface {
	GetLayout(key keys.Keys) string
}

TemplatesV4 模板接口,提供V4版本的layouts

type VipMipNameGenerator

type VipMipNameGenerator struct {
	// contains filtered or unexported fields
}

VipMipNameGenerator VIP/MIP对象名称生成器

func NewVipMipNameGenerator

func NewVipMipNameGenerator(ctx *GeneratorContext) *VipMipNameGenerator

NewVipMipNameGenerator 创建VIP/MIP对象名称生成器

func (*VipMipNameGenerator) Generate

func (g *VipMipNameGenerator) Generate(intent *policy.Intent, objType string, metaData map[string]interface{}) (keys.Keys, bool, error)

Generate 生成VIP/MIP对象名称(唯一) 返回:生成的名称、是否为新对象、错误

type VipMipResult

type VipMipResult struct {
	ObjectName string   // 对象名称
	Type       string   // 类型:VIP 或 MIP
	CLIString  string   // 生成的CLI
	Keys       []string // 对象键列表
}

VipMipResult VIP/MIP生成结果

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL