• [大咖交流] 在模板中玩转conditions和mappings语法,看完你是否get到了
    最近在和解决方案部的兄弟交流时,有个兄弟提出来一个非常合理有趣的问题:解决方案部署的第一个阶段要创建ECS主机,但创建ECS主机各用户的实际情况不一样,有些用户的VPC和Subnet已经规划好了,他需要选择现有的VPC和Subnet来部署;但另外一些用户还一穷二白,需要再申请ECS主机时,一并把VPC和Subnet给建了,请问AOS能否处理这种场景。 一看到这问题,心里没底,本着负责的态度,我就写个模板自己验证验证看。1,首先拿来一一个 ecs-cloudserver 的示例模板,直接基于其来修改,比较方便,先增加要回一个input和相应的conditions条件:inputs:....  vpc-deploy:    description: '是否新建VPC和Subnet##Is new VPC and subnet'    type: booleanconditions:  cond-vpc-deploy:    cond_eq:      - get_input: vpc-deploy      - true2,接下来就是使用conditions来判断某些node是否需要执行的地方了:my-vpc:    condition: cond-vpc-deploy    type: HuaweiCloud.VPC.VPC    properties:      cidr: 192.168.0.0/16    metadata:      Designer:        id: 64e23915-16f7-4b4b-8dd1-d6bf1ba60b9a  my-subnet:    condition: cond-vpc-deploy    type: HuaweiCloud.VPC.Subnet    properties:      availabilityZone:        get_input: az      cidr: 192.168.1.0/24      dnsList:        - 114.114.114.115        - 114.114.114.114....3, 最后关键的地方是:在创建ECS时,当新建VPC和Subnet时要使该新创建的VPC和Subnet,否则要选择使用已有的VPC和Subnet:mycloudserver:    metadata:      Designer:        id: 5bf8fe92-fd43-4377-9efd-d12169db751b    properties:      availabilityZone:        get_input: az....      name:        get_input: ecs-name      nics:        - subnetId:            cond_if:              - cond-vpc-deploy              - get_reference: my-subnet              - get_input: subnet-id....      vpcId:        cond_if:          - cond-vpc-deploy          - get_reference: my-vpc          - get_input: vpc-id....学习使用了conditions语法,顺便看了下 mappings 函数的用法,mapping函数的用户较为简单,首先是定义一个mappings对象:mappings:  regionMap:    cn-north-1:      image_id: 42f34d95-a538-4d17-be48-e690b48c1643      flavor: c1.medium    cn-south-1:      image_id: a3934478-bfeb-4a02-b257-9089779f0380      flavor: c1.medium    cn-east-2:      image_id: f2003c7b-99c4-4616-be19-334beaca81b1      flavor: c1.medium    ap-southeast-1:      image_id: 04b5d02a-127b-423f-ac77-b4ddbafe1ddb      flavor: c3.2xlarge.2接下来就是使用 get_in_map 提取mapping对象的值了:mycloudserver:    metadata:      Designer:        id: 5bf8fe92-fd43-4377-9efd-d12169db751b    properties:      availabilityZone:        get_input: az      flavor:        get_in_map:          - regionMap          - get_input: HuaweiCloud.Region          - flavor      imageId:        get_in_map:          - regionMap          - get_input: HuaweiCloud.Region          - image_id一路使用下来,还是非常顺畅的,看来这半年来,AOS从编排语法和设计器确实进度巨大啊。当然,使用过程中也发现了几个问题:设计器对conditions相关函数支持的还不友好,导致在设计器中编辑还是有些小问题的;创建堆栈时,当inputs输入参数用于构造conditions条件时,有一部分inputs参数的填写情况应该是要随该条件来切换的,但目前Portal尚不支持:
  • [大咖交流] 【示例模板】【vpc-subnet】部署展示及详解
    使用示例模板网络和子网设计 (vpc-subnet)创建堆栈,可以快速创建部署云服务器所需的网络,包括了VPC和子网络的设计与创建。【部署结果展示】【部署流程详解】1.使用vpc-subnet示例模板创建堆栈。2.填写堆栈名称与描述。3.填写输入参数    (1).子网参数配置:子网的CIDR,子网的网关地址,子网的名称   (2).虚拟私有云的参数配置:所组建网络的CIDR,所组建网络的名称4.点击下一步,审核配置信息,查看计费信息,点击创建堆栈。5.等待创建成功。6.创建成功后,点击资源名称中的"vpc-123"可以跳转到vpc页面,查看刚刚创建的虚拟私有云情况。
  • [教程] 【设计器使用技巧】资源复制
    不知道有没有细心的童鞋注意到,右键点击设计器画布上的元素,弹出菜单里面有一个复制(Duplicate)按钮。那么这个按钮有什么作用呢? 举个例子: 我要创建一个全新的集群,并使用新的虚拟网络。那么我需要创建一个虚拟专有网络(VPC),并创建子网(Subnet)。然后定义集群(Cluster)以及节点信息(NodePool),并关联到新建的VPC和Subnet上。 问题来了,如果现在想同时创建多个集群怎么办,集群配置又大同小异。 逐个添加新的Cluster定义,这样肯定没问题,就是麻烦了一些。另一种方式就是通过复制功能来快速创建:19576复制功能会把当前元素以及子元素的属性和出口关系同步带到新的元素中,大大提高了模板的编写效率。 喜欢的话,记得为设计器打call哦~
  • 华为云API介绍(五)华为云Java SDK -VPC操作示例
    本帖最后由 Mercy 于 2018-3-27 10:33 编辑[code]import java.util.List; import java.util.stream.Collectors; import sun.misc.BASE64Encoder; import sun.misc.BASE64Decoder; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; import com.huawei.openstack4j.api.Builders; import com.huawei.openstack4j.api.OSClient.OSClientV3; import com.huawei.openstack4j.api.types.ServiceType; import com.huawei.openstack4j.core.transport.Config; import com.huawei.openstack4j.model.common.ActionResponse; import com.huawei.openstack4j.model.common.Identifier; import com.huawei.openstack4j.openstack.OSFactory; import com.huawei.openstack4j.openstack.identity.internal.OverridableEndpointURLResolver; import com.huawei.openstack4j.model.compute.Action; import com.huawei.openstack4j.model.compute.RebootType; import com.huawei.openstack4j.model.compute.Server; import com.huawei.openstack4j.model.compute.Server.Status; import com.huawei.openstack4j.model.compute.ServerCreate; import com.huawei.openstack4j.model.network.AttachInte**ceType; import com.huawei.openstack4j.model.network.Network; import com.huawei.openstack4j.model.network.Subnet; import com.huawei.openstack4j.model.network.Router; import com.huawei.openstack4j.model.network.RouterInte**ce; public class Demo_for_VPC { private static final String LANGUAGE = "zh-cn"; public static void main(String[] args) { // 第一步:填入华为云区域的endpoint,如下,对接华北区1就需要填入华北区服务的endpoint OverridableEndpointURLResolver endpointResolver = new OverridableEndpointURLResolver(); endpointResolver.addOverrideEndpoint(ServiceType.VOLUME_BACKUP, "https://vbs.cn-north-1.myhuaweicloud.com/v2/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.DNS, "https://dns.myhuaweicloud.com/v2"); endpointResolver.addOverrideEndpoint(ServiceType.AUTO_SCALING, "https://as.cn-north-1.myhuaweicloud.com/autoscaling-api/v1/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.CLOUD_EYE, "https://ces.cn-north-1.myhuaweicloud.com/V1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.LOAD_BALANCER, "https://elb.cn-north-1.myhuaweicloud.com/v1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.MAP_REDUCE, "https://mrs.cn-north-1.myhuaweicloud.com/v1.1/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.KEY_MANAGEMENT, "https://kms.cn-north-1.myhuaweicloud.com/v1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.CLOUD_TRACE, "https://cts.cn-north-1.myhuaweicloud.com/v1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.ANTI_DDOS, "https://antiddos.cn-north-1.myhuaweicloud.com/v1/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.Notification, "https://smn.cn-north-1.myhuaweicloud.com/v2/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.MessageQueue, "https://dms.cn-north-1.myhuaweicloud.com/v1.0/%(project_id)s"); endpointResolver.addOverrideEndpoint(ServiceType.MAAS, "https://maas.cn-north-1.myhuaweicloud.com/v1/%(project_id)s/objectstorage"); endpointResolver.addOverrideEndpoint(ServiceType.DATABASE, "https://rds.cn-north-1.myhuaweicloud.com"); /* 第二步: 配置鉴权信息(以对接华北区为例) * user为用户名 * projectId为华为云控制台-账户中心-基本信息-管理我的凭证-项目列表中华北区的项目ID * userDomainId为华为云控制台-账户中心-基本信息-管理我的凭证的账户ID * authURL为IAM服务华北区的域名 */ String user = "wanglianmin-guest"; String password = "XXXXXX"; String projectId = "74610f3a5ad941998e91f076297ecf27"; String userDomainId = "2aa29cbca17a4822abd096610e378ffa"; String authUrl = "https://iam.cn-north-1.myhuaweicloud.com/v3"; // 第三步: 初始化一个连接 OSFactory.enableHttpLoggingFilter(true); //调试用,可以显示request body和response body Config config = Config.newConfig().withEndpointURLResolver(endpointResolver).withLanguage(LANGUAGE) .withSSLVerificationDisabled(); OSClientV3 osclient = OSFactory.builderV3().withConfig(config).endpoint(authUrl) .credentials(user, password, Identifier.byId(userDomainId)).scopeToDomain(Identifier.byId(userDomainId)) .scopeToProject(Identifier.byId(projectId)).authenticate(); //创建router Router router = osclient.networking().router().create(Builders.router() .name("javaSDK-router-test") .build()); // 创建network,DNSNameServer参数请在官网页面创建subnet后获取默认值,各个region(比如华北区、华东区)不一样 Network network = osclient.networking().network() .create(Builders.network().name("javaSDK-net-test") .adminStateUp(true).build()) ; Subnet subnet = osclient.networking().subnet() .create(Builders.subnet().name("javaSDK-subnet-test") .networkId(network.getId()).cidr("192.168.45.0/24") .gateway("192.168.45.1").addDNSNameServer("100.125.1.250") .addDNSNameServer("114.114.114.114").enableDHCP(true).build()) ; System.out.println(subnet); // 将子网添加到router上 RouterInte**ce routerinf = osclient.networking().router() .attachInte**ce(router.getId(), AttachInte**ceType.SUBNET, subnet.getId()); // 删除上面所有资源 osclient.networking().router().detachInte**ce(router.getId(), subnet.getId(),routerinf.getPortId()); osclient.networking().subnet().delete(subnet.getId()); osclient.networking().network().delete(network.getId()); osclient.networking().router().delete(router.getId()); } } [/code]
总条数:161 到第 页
上滑加载中