gpt4 book ai didi

amazon-web-services - 使用 Cloudformation 和 Pystache 派生 IP 范围和网络掩码

转载 作者:行者123 更新时间:2023-12-03 07:23:32 26 4
gpt4 key购买 nike

所以,我有一个有趣的 - Cloudformation 允许使用 Mustache 模板(通过 Pystache)通过 AWS::CloudFormation::Init 构建配置文件(他们将其隐藏了几段,但它就在那里)。

这对我很有用,因为我需要写出一些网络详细信息来为 OpenVPN 服务器创建配置文件。到目前为止,一切顺利。

但这就是棘手的地方 - AWS 喜欢 CIDR 表示法(并且我需要对 AWS 资源和此使用相同的参数)。但 OpenVPN 喜欢使用较旧的 IP 范围和网络掩码格式。我目前正在尝试找到一种转换此内容的好方法。我可以使用 CloudFormation 函数,也可以尝试找到一种在 Mustache 中进行转换的方法。

我可以使用 Fn::Select 和 Fn::Split 的组合来提取 CIDR 的前半部分来获取 IP 范围,但目前导出网络掩码让我感到困惑。

到目前为止的示例

          "/etc/openvpn/server/configname.conf" : {
"source" : {"Fn::Sub" :
[ "https://${ConfigBucket}.s3.amazonaws.com/Path/To/configname.conf.mustache"
, { "ConfigBucket" : { "Fn::ImportValue" : "ConfigBucket-Export-Name" }} ]
},
"context" : {
"VpnCIDR" : { "Ref" : "VpnCIDRRange"},
"VpnIPRange" : { "Fn::Select" : [ "0", {"Fn::Split" : ["/", { "Ref" : "VpnCIDRRange"}]}]},
"AwsCIDR" : { "Fn::ImportValue" : { "Fn::Sub" : "${VPCName}-VPC-CIDR" } },
"AwsIPRange" : { "Fn::Select" : [ "0", {"Fn::Split" : ["/", { "Fn::ImportValue" : { "Fn::Sub" : "${VPCName}-VPC-CIDR" }}]}]}
}
}

最佳答案

好的,所以我最终使用一个简单的 CloudFormation 宏来解决这个问题,该宏采用 CIDR 范围并返回包含 CIDR、子网和网络掩码的 JSON 对象 - 例如,给定 192.168.1.0/24,它将返回以下 JSON用于包含在 CloudFormation 模板中的片段

{
'CIDR' : '192.168.1.0/24',
'subnet' : '192.168.1.0',
'netmask' : '255.255.255.0'
}

有问题的代码已发布到此要点:https://gist.github.com/AdamLuchjenbroers/3165ab18bb0ee9da95ad6bf514f415e0

它还可以采用堆栈导出的名称(这是必需的,因为显然 Fn::ImportValue 在 Fn::Transform 之后进行评估)以启用堆栈之间的串扰。

然后可以通过 CloudFormation::Init 中的上下文键传递该值文件部分如下所示:

"/etc/openvpn/server/openvpn.conf" : {
"source": {
"Fn::Sub": [
"https://${BucketName}.s3.${Region}.amazonaws.com/Path/To/openvpn.conf.mustache",
{
"BucketName": "BucketNameGoesHere",
"Region": { "Ref": "AWS::Region" }
}
]
},
"context": {
"Vpn": {
"Fn::Transform": {
"Name": "NetworkInfo",
"Parameters": {
"CIDR": { "Ref": "VpnCIDRRange" }
}
}
},
"Aws": {
"Fn::Transform": {
"Name": "NetworkInfo",
"Parameters": {
"CIDR-export": { "Fn::Sub": "${VPCName}-VPC-CIDR" }
}
}
}
}
},

然后在实际的 mustache 模板中引用,如下所示:

push "route {{Aws.subnet}} {{Aws.netmask}}"

关于amazon-web-services - 使用 Cloudformation 和 Pystache 派生 IP 范围和网络掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67138269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com