华为云用户手册

  • 请求示例 查询主机动态网页防篡改防护动态,目标主机ID为caa958ad-a481-4d46-b51e-6861b8864515,查询起始时间为1668563099000,查询终止时间为1668563199000。 GET https://{endpoint}/v5/{project_id}/webtamper/rasp/protect-history { "host_id" : "caa958ad-a481-4d46-b51e-6861b8864515", "start_time" : 1668563099000, "end_time" : 1668563199000, "limit" : 10, "offset" : 0 }
  • URI GET /v5/{project_id}/webtamper/rasp/protect-history 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户ID 最小长度:0 最大长度:64 表2 Query参数 参数 是否必选 参数类型 描述 enterprise_project_id 否 String 企业项目 最小长度:0 最大长度:64 host_id 是 String Host Id 最小长度:0 最大长度:128 start_time 是 Long 起始时间 最小值:0 最大值:4070880000000 end_time 是 Long 终止时间 最小值:0 最大值:4070880000000 limit 是 Integer limit 最小值:0 最大值:100 offset 是 Integer offset 最小值:0 最大值:100 alarm_level 否 Integer 告警级别 最小值:0 最大值:100 severity 否 String 威胁等级 Security : 安全 Low : 低危 Medium : 中危 High : 高危 Critical : 危急 最小长度:0 最大长度:32 protect_status 否 String 防护状态 closed : 未开启 opened : 防护中 最小长度:0 最大长度:32
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 total_num Long total number 最小值:0 最大值:200000 data_list Array of HostRaspProtectHistoryResponseInfo objects data list 数组长度:0 - 200000 表5 HostRaspProtectHistoryResponseInfo 参数 参数类型 描述 host_ip String 服务器ip 最小长度:0 最大长度:64 host_name String 服务器名称 最小长度:0 最大长度:64 alarm_time Long 告警时间 最小值:0 最大值:4070880000000 threat_type String 威胁类型 最小长度:0 最大长度:64 alarm_level Integer 告警级别 最小值:0 最大值:100 source_ip String 源IP 最小长度:0 最大长度:128 attacked_url String 攻击URL 最小长度:0 最大长度:2000
  • 响应示例 状态码: 200 Asset statistic info { "account_num" : 5, "port_num" : 5, "process_num" : 5, "app_num" : 5, "auto_launch_num" : 5, "web_framework_num" : 5, "web_site_num" : 5, "jar_package_num" : 5, "kernel_module_num" : 5, "core_conf_file_num" : 1, "database_num" : 1, "environment_num" : 0, "web_app_num" : 8, "web_service_num" : 2 }
  • URI GET /v5/{project_id}/asset/statistics 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目id 最小长度:1 最大长度:256 表2 Query参数 参数 是否必选 参数类型 描述 enterprise_project_id 否 String 企业项目 最小长度:0 最大长度:128 host_id 否 String host id 最小长度:1 最大长度:128 category 否 String 类别,默认为host,包含如下: host:主机 container:容器 最小长度:1 最大长度:64
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 account_num Long 账号数量 最小值:0 最大值:2147483647 port_num Long 开放端口数量 最小值:0 最大值:2147483647 process_num Long 进程数量 最小值:0 最大值:2147483647 app_num Long 软件数量 最小值:0 最大值:2147483647 auto_launch_num Long 自启动数量 最小值:0 最大值:2147483647 web_framework_num Long web框架数量 最小值:0 最大值:2147483647 web_site_num Long Web站点数量 最小值:0 最大值:2147483647 jar_package_num Long Jar包数量 最小值:0 最大值:2147483647 kernel_module_num Long 内核模块数量 最小值:0 最大值:2147483647 web_service_num Long web服务数量 最小值:0 最大值:2147483647 web_app_num Long web应用数量 最小值:0 最大值:2147483647 database_num Long 数据库数量 最小值:0 最大值:2147483647 core_conf_file_num Long 关键配置文件数量 最小值:0 最大值:2147483647 environment_num Long 环境变量数量 最小值:0 最大值:2147483647
  • 文件上传 开发过程中,您有任何问题可以在github上提交issue,或者在华为云对象存储服务论坛中发帖求助。接口参考文档详细介绍了每个接口的参数和使用方法。 文件上传使用本地文件作为对象的数据源。以下代码展示了如何进行文件上传: // 初始化配置参数 ObsConfig config = new ObsConfig(); config.Endpoint = "https://your-endpoint"; // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量AccessKeyID和SecretAccessKey。 // 您可以登录访问管理控制台获取访问密钥AK/SK,获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html string accessKey= Environment.GetEnvironmentVariable("AccessKeyID", EnvironmentVariableTarget.Machine); string secretKey= Environment.GetEnvironmentVariable("SecretAccessKey", EnvironmentVariableTarget.Machine); // 创建ObsClient实例 ObsClient client = new ObsClient(accessKey, secretKey, config); // 上传文件 try { PutObjectRequest request = new PutObjectRequest() { BucketName = "bucketname", //待传入目标桶名 ObjectKey = "objectname", //待传入对象名(对象名是对象在桶中的完整路径,如folder/test.txt,路径中不包含桶名) FilePath = "localfile",//待上传的本地文件路径,需要指定到具体的文件名 }; PutObjectResponse response = client.PutObject(request); Console.WriteLine("put object response: {0}", response.StatusCode); } catch (ObsException ex) { Console.WriteLine("ErrorCode: {0}", ex.ErrorCode); Console.WriteLine("ErrorMessage: {0}", ex.ErrorMessage); } 上传的内容大小不能超过5GB。 父主题: 上传对象
  • OBS服务端错误码 在向OBS服务端发出请求后,如果遇到错误,会在响应中包含响应的错误码描述错误信息。详细的错误码及其对应的描述和HTTP状态码见下表: 错误码 描述 HTTP状态码 AccessDenied 拒绝访问。 403 Forbidden AccessForbidden 权限不足。 403 Forbidden AccountProblem 用户的帐户出现异常(过期、冻结等),不能成功地完成操作。 403 Forbidden AllAccessDisabled 用户无权限执行某操作。 403 Forbidden AmbiguousGrantByEmailAddress 用户提供的Email地址关联的帐户超过了1个。 400 Bad Request BadDigest 客户端指定的对象内容的MD5值与系统接收到的内容MD5值不一致。 400 Bad Request BadDomainName 域名不合法。 400 Bad Request BadRequest 请求参数不合法。 400 Bad Request BucketAlreadyExists 请求的桶名已经存在。桶的命名空间是系统中所有用户共用的,选择一个不同的桶名再重试一次。 409 Conflict BucketAlreadyOwnedByYou 发起该请求的用户已经创建过了这个名字的桶,并拥有这个桶。 409 Conflict BucketNotEmpty 用户尝试删除的桶不为空。 409 Conflict CredentialsNotSupported 该请求不支持证书验证。 400 Bad Request CustomDomainAreadyExist 配置了已存在的域。 400 Bad Request CustomDomainNotExist 操作的域不存在。 400 Bad Request DeregisterUserId 用户已经注销。 403 Forbidden EntityTooSmall 用户试图上传的对象大小小于系统允许的最小大小。 400 Bad Request EntityTooLarge 用户试图上传的对象大小超过了系统允许的最大大小。 400 Bad Request FrozenUserId 用户被冻结。 403 Forbidden IllegalVersioningConfiguration Exception 请求中的版本配置无效。 400 Bad Request IllegalLocationConstraintException 配置了与所在Region不匹配的区域限制。 400 Bad Request InArrearOrInsufficientBalance 用户欠费或余额不足而没有权限进行某种操作。 403 Forbidden IncompleteBody 请求体不完整。 400 Bad Request IncorrectNumberOfFilesInPost Request 每个POST请求都需要带一个上传的文件。 400 Bad Request InlineDataTooLarge Inline Data超过了允许的最大长度。 400 Bad Request InsufficientStorageSpace 存储空间不足。 403 Forbidden InternalError 系统遇到内部错误,请重试。 500 Internal Server Error InvalidAccessKeyId 系统记录中不存在客户提供的Access Key Id。 403 Forbidden InvalidAddressingHeader 用户必须指定匿名角色。 N/A InvalidArgument 无效的参数。 400 Bad Request InvalidBucketName 请求中指定的桶名无效。 400 Bad Request InvalidBucket 请求访问的桶已不存在。 400 Bad Request InvalidBucketState 无效的桶状态。 409 Conflict InvalidBucketStoragePolicy 修改桶策略时,提供的新策略不合法。 400 Bad Request InvalidDigest HTTP头中指定的Content-MD5值无效。 400 Bad Request InvalidEncryptionAlgorithmError 错误的加密算法。 400 Bad Request InvalidLocationConstraint 创建桶时,指定的location不合法。 400 Bad Request InvalidPart 一个或多个指定的段无法找到。这些段可能没有上传,或者指定的entity tag与段的entity tag不一致。 400 Bad Request InvalidPartOrder 段列表的顺序不是升序,段列表必须按段号升序排列。 400 Bad Request InvalidPayer 所有对这个对象的访问已经无效了。 403 Forbidden InvalidPolicyDocument 表单中的内容与策略文档中指定的条件不一致。 400 Bad Request InvalidRange 请求的range不可获得。 416 Client Requested Range Not Satisfiable InvalidRedirectLocation 无效的重定向地址。 400 Bad Request InvalidRequest 无效请求。 400 Bad Request InvalidRequestBody POST请求体无效。 400 Bad Request InvalidSecurity 提供的安全证书无效。 403 Forbidden InvalidStorageClass 用户指定的Storage Class无效。 400 Bad Request InvalidTargetBucketForLogging delivery group对目标桶无ACL权限。 400 Bad Request InvalidURI 无法解析指定的URI。 400 Bad Request KeyTooLong 提供的Key过长。 400 Bad Request MalformedACLError 提供的XML格式错误,或者不符合要求的格式。 400 Bad Request MalformedError 请求中携带的XML格式不正确。 400 Bad Request MalformedLoggingStatus Logging的XML格式不正确。 400 Bad Request MalformedPolicy Bucket policy检查不通过。 400 Bad Request MalformedPOSTRequest POST请求的请求体不是结构化良好的多段或形式化数据。 400 Bad Request MalformedQuotaError Quota的XML格式不正确。 400 Bad Request MalformedXML 当用户发送了一个配置项的错误格式的XML会出现这样的错误。错误消息是:“The XML you provided was not well-formed or did not validate against our published schema.”。 400 Bad Request MaxMessageLengthExceeded 请求消息过长。 400 Bad Request MaxPostPreDataLengthExceeded Error 在上传文件前面的POST请求域过大。 400 Bad Request MetadataTooLarge 元数据消息头超过了允许的最大元数据大小。 400 Bad Request MethodNotAllowed 指定的方法不允许操作在请求的资源上。 对应返回的Message为:Specified method is not supported. 405 Method Not Allowed MissingContentLength 必须要提供HTTP消息头中的Content-Length字段。 411 Length Required MissingRegion 请求中缺少Region信息,且系统无默认Region。 400 Bad Request MissingRequestBodyError 当用户发送一个空的XML文档作为请求时会发生。错误消息是:“Request body is empty.”。 400 Bad Request MissingRequiredHeader 请求中缺少必要的头域。 400 Bad Request MissingSecurityHeader 请求缺少一个必须的头。 400 Bad Request NoSuchBucket 指定的桶不存在。 404 Not Found NoSuchBucketPolicy 桶policy不存在。 404 Not Found NoSuchCORSConfiguration CORS配置不存在。 404 Not Found NoSuchCustomDomain 请求的用户域不存在。 404 Not Found NoSuchKey 指定的Key不存在。 404 Not Found NoSuchLifecycleConfiguration 请求的LifeCycle不存在。 404 Not Found NoSuchPolicy 给定的policy名字不存在。 404 Not Found NoSuchUpload 指定的多段上传不存在。Upload ID不存在,或者多段上传已经终止或完成。 404 Not Found NoSuchVersion 请求中指定的version ID与现存的所有版本都不匹配。 404 Not Found NoSuchWebsiteConfiguration 请求的Website不存在。 404 Not Found NotImplemented 用户提供的消息头功能上还没有实现。 501 Not Implemented NotSignedUp 帐户未在系统中注册,必须先在系统中注册了才能使用该帐户。 403 Forbidden OperationAborted 另外一个冲突的操作当前正作用在这个资源上,请重试。 409 Conflict PermanentRedirect 尝试访问的桶必须使用指定的节点,请将以后的请求发送到这个节点。 301 Moved Permanently PreconditionFailed 用户指定的先决条件中至少有一项没有包含。 412 Precondition Failed Redirect 临时重定向。 307 Moved Temporarily RequestIsNotMultiPartContent 桶POST必须是闭式的多段/表单数据。 400 Bad Request RequestTimeout 用户与Server之间的socket连接在超时时间内没有进行读写操作。 400 Bad Request RequestTimeTooSkewed 请求的时间与服务器的时间相差太大。 403 Forbidden RequestTorrentOfBucketError 不允许请求桶的torrent文件。 400 Bad Request ServiceNotImplemented 请求的方法服务端没有实现。 501 Not Implemented ServiceNotSupported 请求的方法服务端不支持。 409 Conflict ServiceUnavailable 服务器过载或者内部错误异常。 503 Service Unavailable SignatureDoesNotMatch 请求中带的签名与系统计算得到的签名不一致。检查您的访问密钥(AK和SK)和签名计算方法。 403 Forbidden SlowDown 请降低请求频率。 503 Service Unavailable System Capacity Not enough 系统空间不足异常。 403 Forbidden TooManyCustomDomains 配置了过多的用户域。 400 Bad Request TemporaryRedirect 当DNS更新时,请求将被重定向到桶。 307 Moved Temporarily TooManyBuckets 用户拥有的桶的数量达到了系统的上限,并且请求试图创建一个新桶。 400 Bad Request TooManyObjectCopied 用户单个对象被拷贝的数量超过系统上限。 400 Bad Request TooManyWrongSignature 因高频错误请求被拒绝服务。 400 Bad Request UnexpectedContent 该请求不支持带内容字段。 400 Bad Request UnresolvableGrantByEmailAddress 用户提供的Email与记录中任何帐户的都不匹配。 400 Bad Request UserKeyMustBeSpecified 请求中缺少用户的AK信息。 400 Bad Request WebsiteRedirect Website请求缺少bucketName。 301 Moved Permanently KMS.DisabledException SSE-KMS加密方式下,主密钥被禁用。 400 Bad Request KMS.NotFoundException SSE-KMS加密方式下,主密钥不存在。 400 Bad Request RestoreAlreadyInProgress 对象正在恢复,请求冲突。 409 Conflict ObjectHasAlreadyRestored 已经恢复的对象,禁止缩短恢复保存时间。 409 Conflict InvalidObjectState 恢复对象不是归档存储对象。 403 Forbidden InvalidTagError 配置桶标签时,提供了无效的Tag。 400 Bad Request NoSuchTagSet 指定的桶没有设置标签。 404 Not Found 父主题: 异常处理
  • 数据建模引擎权限 数据建模引擎是用于应用部署和运行的计算、存储、网络等基础设施资源的集合。在应用设计态完成应用的功能设计和开发,管理员或拥有运行环境管理权限的IAM用户可将其部署到数据建模引擎,生成对应的应用运行态。 iDME提供体验版和基础版的数据建模引擎,应用部署在不同的数据建模引擎,该应用运行态的权限控制能力不同,如表1所示。 表1 应用运行态权限说明 类型 说明 体验版数据建模引擎 基于统一身份认证服务(Identity and Access Management,简称IAM)能力的授权,租户下的IAM用户均可以操作当前租户下部署在体验版数据建模引擎的应用运行态。 基础版数据建模引擎 基于组织成员帐号(OrgID)能力的授权,通过OrgID的组织管理让企业部门、企业成员或企业用户拥有操作部署在基础版数据建模引擎的应用运行态的权限。 说明: 仅当基础版数据建模引擎部署在公有云上时,才能使用组织中成员账号登录部署在其上的应用运行态。 在iDME控制台,部署应用时绑定OrgID组织即可对应用授权。关于OrgID的详细介绍,请参见OrgID。 父主题: 权限管理
  • 前提条件 已注册华为帐号并开通华为云,完成实名认证。 具备用于低时延直播的域名,且域名已完成备案。低时延直播服务需要一个推流域名和播放域名,且两个域名不能相同。 若您需要购买自有域名,您可以在华为云的域名注册中购买。您也可以在其它域名服务商处购买。 若您已有域名,但还未根据国家工信部规定完成备案,您可以在华为云的备案中心完成备案。 已准备HTTPS证书。若还未有HTTPS证书,您可以在华为云SSL证书管理中购买。 HTTPS证书格式满足HTTPS证书要求,若您的证书为非PEM格式,请参照HTTPS证书要求进行格式转换。 低时延直播,使用的是视频直播控制台。所以用户直接访问视频直播控制台即可。
  • 添加域名 您需要将自有的已备案的低时延直播推流域名和播放域名分别添加到视频直播服务中。下面以添加低时延直播推流域名为例,播放域名的添加步骤与此相同。 登录视频直播控制台。 在左侧导航树中选择“域名管理”进入域名管理页面。 单击“添加域名”。在弹出的“添加域名”页面输入已申请的低时延直播推流域名。 注意:若您的域名未备案,将添加失败,并提示“添加域名失败:ICP编号不存在”。 表1 域名参数说明 参数名 描述 域名 输入二级低时延直播推流域名或播放域名,域名长度需要在42个字符以内。 注意:低时延直播推流域名与播放域名不能相同,不支持添加泛域名。 示例:“test-push.example.com”。 企业项目 将域名加入到企业项目中统一管理。 请参见创建企业项目完成企业项目的创建,默认为default企业项目。 在企业项目页面创建企业项目,然后将用户组添加到该企业项目。这时用户组内用户将获得用户组授权的该企业项目下的域名的相关操作权限。 说明: 仅企业帐号能够配置企业项目。 域名类型 若“域名”中输入的是低时延直播推流域名则选择推流域名,否则,选择播放域名。 单击“确定”。 在“域名管理”页面的列表中会新增一条“状态”为“配置中”的域名记录。大概3-5分钟时间,当“状态”为“正常”时,低时延直播域名添加成功。 执行步骤1-步骤4,完成对低时延播放域名的添加。 低时延直播播放域名添加后,需要关联添加的低时延直播推流域名才可使用低时延直播服务。关联的推流域名必须与播放域名归属同一个直播源站,具体请参见关联域名。
  • 注册华为云 在使用华为云云服务之前您需要注册华为帐号并开通华为云云服务帐号。通过此帐号,只需为使用的服务付费,即可使用所有华为云服务。进入华为云云服务官网,参考“帐号注册”指导及界面提示信息,完成帐号注册。注册成功后即可自动登录华为云云服务,您需要完成“实名认证”才可以正常使用服务。 账号注册指导:https://support.huaweicloud.com/usermanual-account/account_id_001.html 实名认证指导:https://support.huaweicloud.com/usermanual-account/account_auth_00001.html 父主题: 华为云账号环境准备
  • 二维异形件服装切割 场景描述 服装切割是指将服装裁片放置在布料上,使得使用的布料最少,以最大化布料利用率。通常情况下,布料的宽度是固定的,优化的目标是最小化使用长度。 准备工作 已注册华为云账号,且账号不能处于欠费或者冻结状态,获取项目ID 获取APPCode 获取EndPoint 步骤一:导入服装切割数据 使用第三方软件集成服务商(比如ET、BOKE)客户端软件生成服装切割数据文件,上传到华为云服装切割服务。需要至少包含以下字段:排版时间、布料宽度、裁片形状、裁片可旋转角度以及其他排版约束等。 { "input_json": { "id": "fu", "order": "fu", "name": "fu", "time": 1, "gap_mode": 0, "overlap": 0, "fabric": { "width": 38, "grid_x": 0, "grid_y": 0 }, "polygon": [ { "index": 0, "profile": [ 0.0, 0.0, 10.0, 0.0, 10.0, 10.0, 0.0, 10.0 ] }, { "index": 1, "profile": [ 0.0, 0.0, 10.0, 0.0, 10.0, 10.0, 0.0, 10.0 ] }, { "index": 2, "profile": [ 0.0, 0.0, 14.0, 0.0, 14.0, 9.0, 0.0, 9.0 ] }, { "index": 3, "profile": [ 0.0, 0.0, 14.0, 0.0, 7.0, 7.0 ] }, { "index": 4, "profile": [ 0.0, 9.0, 0.0, 0.0, 14.0, 9.0 ] }, { "index": 5, "profile": [ 0.0, 0.0, 14.0, 0.0, 14.0, 14.0, 0.0, 14.0 ] }, { "index": 6, "profile": [ 0.0, 0.0, 10.0, 4.0, 10.0, 9.0, 0.0, 9.0 ] }, { "index": 7, "profile": [ 0.0, 0.0, 5.0, 0.0, 5.0, 9.0, 0.0, 9.0 ] }, { "index": 8, "profile": [ 0.0, 0.0, 14.0, 0.0, 14.0, 14.0 ] }, { "index": 9, "profile": [ 0.0, 0.0, 10.0, 0.0, 10.0, 10.0, 0.0, 14.0 ] }, { "index": 10, "profile": [ 0.0, 8.0, 4.0, 0.0, 8.0, 8.0 ] }, { "index": 11, "profile": [ 0.0, 0.0, 14.0, 0.0, 7.0, 12.0 ] } ], "piece": [ { "id": 0, "polygon_index": 0, "gap_index": -1, "hole_index": -1, "tilted": 0, "gap": 0, "pose_group": -1, "column_group": -1, "rot": 90, "flip_x": 0, "flip_y": 0, "remark": "no Y constraints", "y": [] }, { "id": 1, "polygon_index": 1, "gap_index": -1, "hole_index": -1, "tilted": 0, "gap": 0, "pose_group": -1, "column_group": -1, "rot": 90, "flip_x": 0, "flip_y": 0, "remark": "no Y constraints", "y": [] }, { "id": 2, "polygon_index": 2, "gap_index": -1, "hole_index": -1, "tilted": 0, "gap": 0, "pose_group": -1, "column_group": -1, "rot": 90, "flip_x": 0, "flip_y": 0, "remark": "no Y constraints", "y": [] }, { "id": 3, "polygon_index": 3, "gap_index": -1, "hole_index": -1, "tilted": 0, "gap": 0, "pose_group": -1, "column_group": -1, "rot": 90, "flip_x": 0, "flip_y": 0, "remark": "no Y constraints", "y": [] }, { "id": 4, "polygon_index": 4, "gap_index": -1, "hole_index": -1, "tilted": 0, "gap": 0, "pose_group": -1, "column_group": -1, "rot": 90, "flip_x": 0, "flip_y": 0, "remark": "no Y constraints", "y": [] }, { "id": 5, "polygon_index": 5, "gap_index": -1, "hole_index": -1, "tilted": 0, "gap": 0, "pose_group": -1, "column_group": -1, "rot": 90, "flip_x": 0, "flip_y": 0, "remark": "no Y constraints", "y": [] }, { "id": 6, "polygon_index": 6, "gap_index": -1, "hole_index": -1, "tilted": 0, "gap": 0, "pose_group": -1, "column_group": -1, "rot": 90, "flip_x": 0, "flip_y": 0, "remark": "no Y constraints", "y": [] }, { "id": 7, "polygon_index": 7, "gap_index": -1, "hole_index": -1, "tilted": 0, "gap": 0, "pose_group": -1, "column_group": -1, "rot": 90, "flip_x": 0, "flip_y": 0, "remark": "no Y constraints", "y": [] }, { "id": 8, "polygon_index": 8, "gap_index": -1, "hole_index": -1, "tilted": 0, "gap": 0, "pose_group": -1, "column_group": -1, "rot": 90, "flip_x": 0, "flip_y": 0, "remark": "no Y constraints", "y": [] }, { "id": 9, "polygon_index": 9, "gap_index": -1, "hole_index": -1, "tilted": 0, "gap": 0, "pose_group": -1, "column_group": -1, "rot": 90, "flip_x": 0, "flip_y": 0, "remark": "no Y constraints", "y": [] }, { "id": 10, "polygon_index": 10, "gap_index": -1, "hole_index": -1, "tilted": 0, "gap": 0, "pose_group": -1, "column_group": -1, "rot": 90, "flip_x": 0, "flip_y": 0, "remark": "no Y constraints", "y": [] }, { "id": 11, "polygon_index": 11, "gap_index": -1, "hole_index": -1, "tilted": 0, "gap": 0, "pose_group": -1, "column_group": -1, "rot": 90, "flip_x": 0, "flip_y": 0, "remark": "no Y constraints", "y": [] } ], "hole": [], "constraints": {} } } 步骤二:查询服装切割结果 待切割排版任务完成后,查询排版结果。华为云服装排版服务将返回json格式排版结果文件,可以通过第三方软件服务商展示排版结果,生成适配切割机的切割文件。 { "task_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "status": "finished", "start_time": "", "end_time": "", "output_json": { "gap_mode": 0, "id": "fu", "length": 14.0, "name": "fu", "order": "fu", "pieces": [ { "angle": 180.0, "box": [ { "x": 1.110223024560533e-16, "y": 188.54000844217342 }, { "x": 10.0, "y": 202.54000844217342 } ], "flip_x": 0, "flip_y": 0, "id": 9 }, { "angle": 90.0, "box": [ { "x": 1.110223024560533e-16, "y": 180.54018862422214 }, { "x": 9.0, "y": 190.54018862422214 } ], "flip_x": 0, "flip_y": 0, "id": 6 }, { "angle": 90.0, "box": [ { "x": 1.1102230246251565e-16, "y": 251.65141900241923 }, { "x": 9.0, "y": 265.65141900241923 } ], "flip_x": 0, "flip_y": 0, "id": 2 }, { "angle": 0.0, "box": [ { "x": 1.110223024560533e-16, "y": 216.54000844217342 }, { "x": 5.0, "y": 225.54000844217342 } ], "flip_x": 0, "flip_y": 0, "id": 7 }, { "angle": 180.0, "box": [ { "x": 1.1101552619893762e-16, "y": 24.0 }, { "x": 8.0, "y": 32.0 } ], "flip_x": 0, "flip_y": 0, "id": 10 }, { "angle": 270.0, "box": [ { "x": 5.551115123125783e-17, "y": 0.0 }, { "x": 10.0, "y": 10.0 } ], "flip_x": 0, "flip_y": 0, "id": 1 }, { "angle": 90.0, "box": [ { "x": 0.0, "y": 10.0 }, { "x": 12.0, "y": 24.0 } ], "flip_x": 0, "flip_y": 0, "id": 11 }, { "angle": 90.0, "box": [ { "x": 1.1102230246251565e-16, "y": 237.65161696798242 }, { "x": 14.0, "y": 251.65161696798242 } ], "flip_x": 0, "flip_y": 0, "id": 5 }, { "angle": 180.0, "box": [ { "x": 1.1102230246251565e-16, "y": 49.51013170928303 }, { "x": 10.0, "y": 59.51013170928303 } ], "flip_x": 0, "flip_y": 0, "id": 0 }, { "angle": 270.0, "box": [ { "x": 1.110223024560533e-16, "y": 202.54000844217342 }, { "x": 7.0, "y": 216.54000844217342 } ], "flip_x": 0, "flip_y": 0, "id": 3 }, { "angle": 270.0, "box": [ { "x": 1.1102230163533504e-16, "y": 25.020263418566074 }, { "x": 9.0, "y": 39.020263418566074 } ], "flip_x": 0, "flip_y": 0, "id": 4 }, { "angle": 0.0, "box": [ { "x": 1.110214554295684e-16, "y": 166.54018862422214 }, { "x": 14.0, "y": 180.54018862422214 } ], "flip_x": 0, "flip_y": 0, "id": 8 } ], "ratio": 1.265e-321, "time": 1 } } 父主题: 使用场景
  • 二维异形件钣金切割 场景描述 钣金切割是指将钣金件放置在钢板上,使得使用的钢板最少,以最大化钢板利用率。 准备工作 已注册华为云账号,且账号不能处于欠费或者冻结状态,获取项目ID 获取APPCode 获取EndPoint 步骤一:导入钣金切割数据 使用第三方软件集成服务商(比如FastCAM)客户端软件生成钣金切割数据文件,上传到华为云钣金切割服务。需要至少包含以下字段:排版时间、钢板尺寸、钢板个数、钢板修边距、零件距零件间距、是否共线切割,是否容许空洞排版以及其他排版约束等。 { "task_name": "TESTTASK", "project_name": "TESTPRO", "user_id": "user_123456789", "time": 20, "item_spacing": 10, "plate_spacing": 20, "forbid_internal_nesting": 0, "common_cut_nest": 0, "leadin_before_nesting":2, "plates": [ { "plate_id": 0, "plate_name": "", "plate_length": 4000, "plate_width": 4000, "plate_count": 200 } ], "cams": [ { "item_id": 0, "item_name": "d:\rectangle.cam", "count": 2, "priority": 5, "rotation_type": 2, "flip": 0, "pair_collinear": 0, "collinear_entity_id": 0, "entities": [ { "entity_id": 1, "entity_type": 1, "start_x": 0, "start_y": 0, "end_x": 3200, "end_y": 0, "circle_center_x": 0, "circle_center_y": 0, "dxf_name": "", "entry_type": 0, "ifoutside": 1, "next_entity":4, "last_entity":0 }, { "entity_id": 2, "entity_type": 1, "start_x": 3200, "start_y": 0, "end_x": 3200, "end_y": 1600, "circle_center_x": 0, "circle_center_y": 0, "dxf_name": "", "entry_type": 0, "ifoutside": 1, "next_entity":0, "last_entity":3 }, { "entity_id": 3, "entity_type": -2, "start_x": 3200, "start_y": 1600, "end_x": 0, "end_y": 1600, "circle_center_x": 1600, "circle_center_y": 2200, "dxf_name": "", "entry_type": 0, "ifoutside": 1, "next_entity":2, "last_entity":4 }, { "entity_id": 4, "entity_type": 1, "start_x": 0, "start_y": 1600, "end_x": 0, "end_y": 0, "circle_center_x": 0, "circle_center_y": 0, "dxf_name": "", "entry_type": 0, "ifoutside": 1, "next_entity":3, "last_entity":1 } ] }, { "item_id": 1, "item_name": "d:\rectangle2.cam", "count": 3, "priority": 5, "rotation_type": 2, "flip": 0, "pair_collinear": 0, "collinear_entity_id": 0, "entities":[ { "entity_id": 1, "entity_type": 1, "start_x": 0, "start_y": 0, "end_x": 500, "end_y": 0, "circle_center_x": 0, "circle_center_y": 0, "dxf_name": "", "entry_type": 0, "ifoutside": 1, "next_entity":2, "last_entity":0 }, { "entity_id": 2, "entity_type": 1, "start_x": 500, "start_y": 0, "end_x": 500, "end_y": 500, "circle_center_x": 0, "circle_center_y": 0, "dxf_name": "", "entry_type": 0, "ifoutside": 1, "next_entity":3, "last_entity":1 }, { "entity_id": 3, "entity_type": 1, "start_x": 500, "start_y": 500, "end_x": 0, "end_y": 0, "circle_center_x": 0, "circle_center_y": 0, "dxf_name": "", "entry_type": 0, "ifoutside": 1, "next_entity":0, "last_entity":2 } ] }, { "item_id": 2, "item_name": "d:\rectangle2.cam", "count": 2, "priority": 5, "rotation_type": 2, "flip": 0, "pair_collinear": 0, "collinear_entity_id": 0, "entities":[ { "entity_id": 1, "entity_type": 2, "start_x": 500, "start_y": 0, "end_x": 500, "end_y": 0, "circle_center_x": 0, "circle_center_y": 0, "dxf_name": "", "entry_type": 0, "ifoutside": 1, "next_entity":0, "last_entity":0 } ] } ] , "total_cams":3, } 步骤二:查询钣金切割结果 待切割排版任务完成后,查询排版结果。华为云钣金排版服务将返回json格式排版结果文件,可以通过第三方软件服务商展示排版结果,生成适配切割机的切割文件。 { "task_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "task_type": "test_type", "task_name": "sss", "status": "RUNNING", "created_at": "2018-06-12T13:00:01Z", "updated_at": "2018-06-13T13:00:01Z", "result": { "average_ratio": 0.43922290579330253, "common_cut_nest": 0, "item_spacing": 10.0, "nesting": [ { "item_count": 7, "items": [ { "envelope_rect_center_x": 1605.0000000000018, "envelope_rect_center_y": 1959.4003744920346, "flip_x": 0, "flip_y": 0, "item_angle": 0.0, "item_name": "d:\rectangle.cam" }, { "envelope_rect_center_x": 1605.0000000000018, "envelope_rect_center_y": 3570.133437492032, "flip_x": 0, "flip_y": 0, "item_angle": 0.0, "item_name": "d:\rectangle.cam" }, { "envelope_rect_center_x": 505.0, "envelope_rect_center_y": 3348.425682497144, "flip_x": 0, "flip_y": 0, "item_angle": 0.0, "item_name": "d:\rectangle2.cam" }, { "envelope_rect_center_x": 1136.003821693054, "envelope_rect_center_y": 1105.7330629999974, "flip_x": 0, "flip_y": 0, "item_angle": 0.0, "item_name": "d:\rectangle2.cam" }, { "envelope_rect_center_x": 705.1606452469719, "envelope_rect_center_y": 2827.3374108695393, "flip_x": 0, "flip_y": 0, "item_angle": 0.0, "item_name": "d:\rectangle2.cam" }, { "envelope_rect_center_x": 1001.5517970744211, "envelope_rect_center_y": 2606.6574946969886, "flip_x": 0, "flip_y": 0, "item_angle": 0.0, "item_name": "d:\rectangle2.cam" }, { "envelope_rect_center_x": 269.9895399372879, "envelope_rect_center_y": 1355.7330629372852, "flip_x": 0, "flip_y": 0, "item_angle": 90.0, "item_name": "d:\rectangle2.cam" } ], "plate_id": 0, "plate_length": 3980.0, "plate_name": "", "plate_ratio": 0.43922290579330253, "plate_width": 3980.0 } ], "plate_count": 1, "plate_spacing": 20.0, "project_name": "TESTPRO", "task_name": "TESTTASK", "time": 20, "total_item_count": 7 } } 父主题: 使用场景
  • 登录华为云账号 使用Chrome浏览器访问系统环境地址:https://console.huaweicloud.com/optverse/?agencyId=053a59ad180026111f2ac011f5934368®ion=cn-north-4&locale=zh-cn#/optverse/overview,出现如下界面, 输入华为云账号用户名和密码,点击“登录”按钮, 登录成功后,进入OptVerse首页界面,如下图所示: 父主题: 华为云账号环境准备
  • 配置Cloudbase-Init工具 在Cloudbase-Init安装路径下的配置文件“C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init.conf”中执行以下操作: 在配置文件最后一行,增加配置项“netbios_host_name_compatibility=false”,使Windows系统的hostname长度支持到63个字符。 NetBIOS长度受Windows系统本身的限制还只支持小于等于15个字符。 增加配置项“metadata_services=cloudbaseinit.metadata.services.httpservice.HttpService”,配置agent访问OpenStack数据源。 添加plugins配置项,设置要加载的模块,以“,”为分隔符,加粗的部分为模块关键字。 其中必选加载模块,请参考如下配置(必选): plugins=cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin,cloudbaseinit.plugins.common.mtu.MTUPlugin,cloudbaseinit.plugins.windows.createuser.CreateUserPlugin,cloudbaseinit.plugins.common.setuserpassword.SetUserPasswordPlugin,cloudbaseinit.plugins.common.sshpublickeys.SetUserSSHPublicKeysPlugin,cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin,cloudbaseinit.plugins.windows.licensing.WindowsLicensingPlugin 各模块功能如下所述: LocalScriptsPlugin:设置脚本执行 MTUPlugin:设置MTU网络接口 CreateUserPlugin:创建用户 SetUserPasswordPlugin:设置密码 SetUserSSHPublicKeysPlugin:设置密钥 SetHostNamePlugin:设置主机名 ExtendVolumesPlugin:磁盘扩容 UserDataPlugin:用户数据注入 WindowsLicensingPlugin:激活window instance 可选加载模块,请参考如下配置(可选): plugins=cloudbaseinit.plugins.windows.winrmlistener.ConfigWinRMListenerPlugin,cloudbaseinit.plugins.windows.winrmcertificateauth.ConfigWinRMCertificateAuthPlugin 各模块功能如下所述: ConfigWinRMListenerPlugin:设置远程登录监听 ConfigWinRMCertificateAuthPlugin:设置远程登录无密码认证 加载模块对应的插件WinRM使用了弱密码算法,可能存在安全隐患,为保证系统安全,不建议您添加此插件。 (可选)增加如下配置项,配置获取metadata的重试次数和间隔。 retry_count=40 retry_count_interval=5 (可选)增加如下配置项,防止Windows添加默认路由导致metadata网络不通。 [openstack] add_metadata_private_ip_route=False (可选)当Cloudbase-Init为0.9.12及以上版本时,用户可以自定义配置密码长度。 操作方法:修改配置项“user_password_length”的值,完成密码长度的自定义配置。 (可选)选择密码注入方式首次登录时,系统默认强制用户修改登录密码,若用户根据个人意愿,不需要修改首次登录使用的密码时,可关闭此功能。 操作方法:增加配置项“first_logon_behaviour=no”。 (可选)增加Cloudbase-Init配置项,防止虚拟机无法使用BIOS时间同步。 操作方法:在“cloudbase-init.conf”中添加相应的配置项“real_time_clock_utc=true”。 BIOS时间同步功能是通过增加注册表项“RealTimeIsUniversal=1”实现。如果不添加配置项“real_time_clock_utc=true”,Cloudbase-Init会将注册表自动修改为默认值0,将导致windows虚拟机重启后无法使用BIOS时间同步。 为了防止镜像中DHCP租期过长导致创建的云服务器无法正确的获取地址,用户需要释放当前的DHCP地址。 在Windows命令行中,执行以下命令释放当前的DHCP地址。 ipconfig /release 此操作会中断网络,对云服务器的使用会产生影响。当云服务器再次开机后,网络会自动恢复。 使用Windows操作系统云服务器制作镜像时,需修改云服务器SAN策略为OnlineAll类型。否则可能导致使用镜像创建云服务器时磁盘处于脱机状态。 Windows操作系统SAN策略分为三种类型:OnlineAll、OfflineShared、OfflineInternal 表1 Windows操作系统SAN策略类型 类型 说明 OnlineAll 表示所有新发现磁盘都置于在线模式。 OfflineShared 表示所有共享总线上(比如FC、ISCSI)的新发现磁盘都置于离线模式,非共享总线上的磁盘都置于在线模式。 OfflineInternal 表示所有新发现磁盘都置于离线模式。 运行cmd.exe,执行以下命令,使用DiskPart工具来查询云服务器当前的SAN策略。 diskpart 执行以下命令查看云服务器当前的SAN策略。 san 如果SAN策略为OnlineAll,请执行exit命令退出DiskPart。 否,请执行步骤3.c。 执行以下命令修改云服务器SAN策略为OnlineAll。 san policy=onlineall
  • 检查Cloud-Init工具相关配置是否成功 执行以下命令,无错误发生,说明Cloud-Init配置成功。 cloud-init init --local 正确安装的Cloud-Init会显示Cloud-Init的版本详细信息,并且无任何错误信息。例如,正确安装的情况下,不含有缺少文件的提示信息。 执行如下命令,可将系统用户密码有效期设置为最大。此操作可选。 chage -M 99999 $user_name 其中,user_name为系统用户,例如root账户。 密码有效期建议设置为99999。
  • 示例 配置本地源中的步骤一般为通用步骤,操作系统实际的发行版略有差别,但是基本步骤都是要将源添加进去,并刷新。以下内容以Debian 10.1.0和CentOS 8.0为例,介绍添加本地源的方法。 Debian 10.1.0 执行cat /etc/apt/sources.list查看“sources.list”配置文件中有一条默认配置的cdrom源: 图1 查看源 这条源指向的源路径就是光驱设备“/dev/cdrom”,Debian 10.1.0做了一个软链接,将光驱设备链接到了“/media/cdrom”路径。 图2 查看media目录 因此将ISO挂载到“/media/cdrom”,就可以正常使用ISO源了。 CentOS 8.0 将ISO挂载到“/mnt”路径。 将“/etc/yum.repo.d”路径的源文件,除了“CentOS-Media.repo”以外,全部重命名成后缀为“.bak”的文件,或者移动到别的目录。 修改“CentOS-Media.repo”文件。 图3 修改“CentOS-Media.repo”文件 包含红框中的六处修改点: baseurl:配置为“file:///mnt/BaseOS”和“file:///mnt/AppStream”,“mnt”为ISO挂载目录,注意删除默认配置的多余的无效路径,否则会导致checksum失败。 gpgcheck改为0,即不检查。 enabled改为1,使生效。 清理yum,并重新生成缓存。 yum clean all && yum makecache
  • 配置本地源 请根据操作系统类型分别参考yum的配置流程、apt的配置流程或者zypper的配置流程。 yum的配置流程 将ISO文件上传到云服务器内部,并挂载至“/mnt”路径。 mount XXX.iso /mnt 进入yum配置文件所在路径“/etc/yum.repo.d”,将其他后缀名为“.repo”的文件进行备份,并且新建一个配置文件,例如“local.repo”。在“local.repo”中添加如下内容: [rhel-local] name=local baseurl=file:///mnt enabled=1 gpgcheck=0 配置文件中指定的“/mnt”要和ISO挂载路径一致。 清理yum。 yum clean all 重新生成缓存。 yum makecache apt的配置流程 将ISO文件上传至云服务器内部,并挂载至“/mnt”路径。 mount XXX.iso /mnt 添加apt cdrom源。 apt-cdrom -m -d /mnt/ add 在配置文件中查看添加的源。 cat /etc/apt/sources.list 更新源。 apt-get update zypper的配置流程 将ISO文件上传至云服务器内部。 ISO入源。 sudo zypper addrepo iso:/?iso=/media/SOFTWARE/openSUSE-11.4-DVD-i586.iso DVDISO 其中, “/media/SOFTWARE/openSUSE-11.4-DVD-i586.iso”为ISO文件所在位置。 “DVDISO”是这个源的别名。 查看源是否添加成功。 zypper repos 刷新源。 zypper refresh
  • 采用官方源码编译安装方法 官方源码编译安装方法的Cloud-Init工具Github开源地址:https://github.com/canonical/cloud-init/ 执行以下命令,下载Cloud-Init压缩包,并将其复制至新建的“/tmp/CLOUD-INIT”文件夹。 0.7.6版本安装包下载地址:https://github.com/canonical/cloud-init/archive/refs/tags/0.7.6.zip 0.7.9版本安装包下载地址:https://github.com/canonical/cloud-init/archive/refs/tags/0.7.9.zip Cloud-Init所有版本安装包下载地址:https://github.com/canonical/cloud-init/releases wget https://github.com/canonical/cloud-init/archive/refs/tags/0.7.6.zip mkdir /tmp/CLOUD-INIT cp cloud-init-0.7.6.zip /tmp/CLOUD-INIT cd /tmp/CLOUD-INIT 执行如下命令,解压Cloud-Init压缩包。 unzip cloud-init-0.7.6.zip 执行如下命令进入cloud-init-0.7.6文件夹。 cd cloud-init-0.7.6 若cloud-init为18.3~22.3版本,则需要进行如下适配。否则跳过本步骤,继续执行下一步。 sed -i '/VALID_DMI_ASSET_TAGS =/a\VALID_DMI_ASSET_TAGS += ["HUAWEICLOUD"]' cloudinit/sources/DataSourceOpenStack.py cat cloudinit/sources/DataSourceOpenStack.py | grep VALID_DMI_ASSET_TAGS 确认执行结果如下图,表示语句添加成功。 按照操作系统类型,执行相应的命令安装Cloud-Init安装包。 CentOS6.x/SUSE11.x: python setup.py build python setup.py install --init-system sysvinit CentOS7.x/SUSE12.x: python setup.py build python setup.py install --init-system systemd Cloud-Init安装时需要添加syslog用户到adm组。存在syslog用户时直接添加syslog用户到adm组。不存在syslog用户时(如CentOS和SUSE),执行下列命令创建syslog用户,添加到adm组: useradd syslog groupadd adm usermod -g adm syslog 设置Cloud-Init相关服务为开机自启动。 若操作系统是sysvinit自启动管理服务,则执行以下命令进行设置。 chkconfig --add cloud-init-local; chkconfig --add cloud-init; chkconfig --add cloud-config; chkconfig --add cloud-final chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final on service cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status 若操作系统是systemd自启动管理服务,则执行以下命令进行设置。 systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service 执行如下命令检查Cloud-Init是否安装成功。 cloud-init -v cloud-init init --local 回显如下类似信息所示表示安装Cloud-Init成功。 cloud-init 0.7.6
  • 检查是否已经安装Cloud-Init工具 请先执行如下步骤检查是否已安装Cloud-Init工具。在不同的操作系统下,查看是否已经安装Cloud-Init工具的方法不同。 若依赖python3 环境时,以Ubuntu22.0.4为例,执行以下命令查看是否安装Cloud-Init工具。 which cloud-init 回显类似如下,表示已经安装Cloud-Init工具,无需重复安装。 /usr/bin/cloud-init 回显类似如下,表示未安装Cloud-Init工具。 /usr/bin/which: no cloud-init in (/usr/local/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin) 若依赖python2 环境时,以CentOS 6系列为例,执行以下命令查看是否安装Cloud-Init工具。 which cloud-init 回显类似如下,表示已经安装Cloud-Init工具,无需重复安装。 cloud-init-0.7.5-10.el6.centos.2.x86_64 无回显信息表示未安装Cloud-Init工具。 由于Cloud-Init工具存在多种安装方法,如果无回显信息,请再次使用rpm -qa |grep cloud-init命令进行检查。which cloud-init和rpm -qa |grep cloud-init任何一个命令显示已安装,表示操作系统已安装Cloud-Init工具。 如果已安装Cloud-Init工具,还需要执行以下操作: 请确认当前云服务器操作系统中的证书是否继续使用。如果不再使用该证书,请删除证书。 root用户对应目录下的文件(如“/$path/$to/$root/.ssh/authorized_keys”),执行以下命令: cd /root/.ssh rm authorized_keys 非root用户对应目录下的证书文件(如“/$path/$to/$none-root/.ssh/authorized_keys”),执行以下命令: cd /home/centos/.ssh rm authorized_keys 执行以下命令,清除Cloud-Init工具产生的缓存,确保使用该私有镜像创建的云服务器可以使用证书方式登录。 sudo rm -rf /var/lib/cloud/* 设置完成后请勿重启云服务器,否则,需重新设置。
  • 采用官方提供的包源安装Cloud-Init工具(优先推荐) 在不同操作系统的云服务器上安装Cloud-Init工具的方法不同,请在root用户下执行相关安装操作。 以下将介绍SUSE、CentOS、Fedora、Debian和Ubuntu操作系统安装Cloud-Init工具的具体方法。其他操作系统类型,请安装并配置对应类型的Cloud-Init工具,例如,使用CoreOS操作系统时需安装并配置coreos-cloudinit。 SUSE操作系统 SUSE操作系统的Cloud-Init网络安装地址: https://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/ http://download.opensuse.org/repositories/Cloud:/Tools/ 在上述提供的网络安装地址下选择相应操作系统版本的repo安装包进行安装。 以SUSE Enterprise Linux Server 12为例,Cloud-Init工具的安装步骤如下。 登录到创建Linux私有镜像所使用的云服务器。 执行以下命令,安装SUSE 12的网络安装源。 zypper ar https://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/SLE_12_SP3/Cloud:Tools.repo 执行以下命令,更新网络安装源。 zypper refresh 执行以下命令,安装Cloud-Init。 zypper install cloud-init 执行以下命令,设置Cloud-Init为开机自启动服务。 SUSE 11: chkconfig cloud-init-local on; chkconfig cloud-init on; chkconfig cloud-config on; chkconfig cloud-final on service cloud-init-local status; service cloud-init status; service cloud-config status; service cloud-final status SUSE 12以及openSUSE 12/13/42: systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service 对于SUSE和openSUSE操作系统,请执行以下步骤禁止动态修改云服务器名称。 执行以下命令,使用vi编辑器打开“dhcp”文件。 vi etc/sysconfig/network/dhcp 将“dhcp”文件中的“DHCLIENT_SET_HOSTNAME”的值修改为“no”。 CentOS操作系统 CentOS操作系统的Cloud-Init网络安装地址如表1所示。请在提供的网络安装地址下选择相应的epel-release安装包进行安装。 表1 Cloud-Init网络安装地址 操作系统类型 版本 网络安装地址 CentOS 6系列32位 https://archives.fedoraproject.org/pub/archive/epel/6/i386/ 6系列64位 https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/ 7系列64位 https://archives.fedoraproject.org/pub/epel/7/x86_64/Packages/e/ 执行以下命令安装Cloud-Init: yum install 网络安装地址/epel-release-x-y.noarch.rpm yum install cloud-init “网络安装地址”表示Cloud-Init对应的epel-release安装包的地址,“x-y”表示当前操作系统对应的Cloud-Init epel-release版本号,执行命令时需参考表1以及实际使用的安装包版本进行替换。 以CentOS 6系列64位为例,当前版本号为6.8,则命令修改为: yum install https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm 以CentOS 7系列64位为例,当前版本号为7.14。则命令修改为: yum install https://archives.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm 执行以下命令,设置Cloud-Init为开机自启动服务。 systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service Fedora操作系统 安装Cloud-Init前,请确认操作系统已经配置好对应的网络安装源地址,请查看“/etc/yum.repo.d/fedora.repo”文件中是否已配置相关软件包安装源地址,如果没有配置相关地址源,请参考相关Fedora官网信息配置软件包安装源。 执行以下命令,安装Cloud-Init。 yum install cloud-init 执行以下命令,设置Cloud-Init为开机自启动服务。 systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service Debian和Ubuntu操作系统 安装Cloud-Init前,请确认操作系统已经配置好对应的网络安装源地址,请查看“/etc/apt/sources.list”文件中是否已配置相关软件包安装源地址,如果没有配置相关地址源,请参考Debian或者Ubuntu官网信息配置软件包安装源。 执行以下命令,安装Cloud-Init。 apt-get update apt-get install cloud-init 执行以下命令,设置Cloud-Init为开机自启动服务。 systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service 以cloud-init-23.2.2版本为例,介绍Centos、Fedora、Ubuntu、Debian和SUSE操作系统安装Cloud-Init工具的具体方法,安装步骤如下。 cloud-init-23.2.2.tar.gz源码包下载地址:https://launchpad.net/cloud-init/trunk/23.2.2/+download/cloud-init-23.2.2.tar.gz Centos 7/Fedora (Fedora-Server-36)操作系统 依赖python3 环境,确认已经安装python3。 查询当前系统环境是否已安装cloud-init, 执行有结果表示已经安装。 cloud-init -v 删除cloud-init缓存目录。 rm -rf /var/lib/cloud/* 安装cloud-init依赖包 yum install python3-pip -y yum install python3-devel 执行如下命令,下载cloud-init压缩包。 wget https://launchpad.net/cloud-init/trunk/23.2.2/+download/cloud-init-23.2.2.tar.gz 执行如下命令,解压cloud-init压缩包。 tar -zxvf cloud-init 23.2.2.tar.gz 执行如下命令进入cloud-init-23.2.2目录文件夹,并安装所有依赖库。 cd cloud-init23.2.2 pip3 install -r requirements.txt 执行如下命令安装cloud-init。 python3 setup.py build python3 setup.py install --init-system system 在配置文件/etc/cloud/cloud.cfg禁用cloud-init接管网络(可选)。 vi /etc/cloud/cloud.cfg 添加如下内容: network: config: disabled 重启cloud-init, 查看cloud-init 状态。 systemctl restart cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service 设置cloud-init相关服务为开机自启动。 systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service 执行如下命令检查cloud-init版本以及是否正常运行。 cloud-init -v cloud-init init --local Ubuntu22.0.4/debian11操作系统 依赖python3 环境,确认已经安装python3。 检查并清理系统自带的cloud-init可能存在冗余的配置文件。 rm -rf /var/lib/cloud/* rm -f /var/log/cloud-init* 删除/etc/cloud/cloud.cfg.d/目录下除了log相关的配置文件外的所有文件。 执行如下命令更新apt,检查是否有wget,没有则安装。 sudo apt update sudo apt install wget 执行如下命令,安装依赖包。 apt-get install cloud-guest-utils -y apt-get install python3-pip -y apt-get install python3-devel 执行以下命令,下载cloud-init压缩包。 wget https://launchpad.net/cloud-init/trunk/23.2.2/+download/cloud-init-23.2.2.tar.gz 执行如下命令,解压cloud-init压缩包。 tar -zxvf cloud-init 23.2.2.tar.gz 进入cloud-init目录。 cd cloud-init 执行如下命令安装所有依赖库。 pip3 install -r requirements.txt 执行如下命令安装cloud-init。 python3 setup.py install 在vi /etc/cloud/cloud.cfg配置禁止cloud-init接管网络(可选)。 1.当cloud-init版本等于高于0.7.9版本,且用户需要自定义网络时,在cloud-init安装完成后,请执行如下命令,在编辑器中打开/etc/cloud/cloud.cfg。 vi /etc/cloud/cloud.cfg 2.输入i, 在/etc/cloud/cloud.cfg中将network修改为disabled, 禁用Cloud-Init接管网络配置(若没有该配置项请增加): network: config: disabled 重启cloud-init, 查看cloud-init 状态 systemctl restart cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service 设置cloud-init相关服务为开机自启动。 systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service 执行如下命令检查cloud-init版本以及是否正常运行。 cloud-init -v cloud-init init --local SUSE Enterprise Linux Server 15操作系统 依赖python3 环境,确认已经安装python3。 执行如下命令查看历史已配置好的安装源。 zypper lr 执行如下命令删除历史配置的suse的cloud-init的源。 zypper rr 步骤1中执行结果显示的序号 执行如下命令配置suse源。 zypper ar https://ftp5.gwdg.de/pub/opensuse/repositories/Cloud:/Tools/SLE_15_SP4/Cloud:Tools.repo 执行如下命令刷新suse源。 zypper refresh 执行如下命令安装cloud-init。 zypper install cloud-init 安装cloud-init成功后,执行cloud-init -v,若出现类似下图报错提示,需执行如下命令安装依赖包。 pip install requests pyyaml oauthlib jsonschema jsonpatch jinja2 configobj 检查cloud-init是否安装成功,若出现下图报错提示,则需要在/etc/cloud/cloud.cfg配置datasource_list。 datasource_list: [ OpenStack ] datasource: OpenStack: metadata_urls: ['http://169.254.169.254'] max_wait: 120 timeout: 5 apply_network_config: false 修改配置文件后,重启cloud-init, 并查看cloud-init 的状态 systemctl restart cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service systemctl status cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service 设置cloud-init相关服务为开机自启动。 systemctl enable cloud-init-local.service cloud-init.service cloud-config.service cloud-final.service 执行如下命令检查cloud-init版本以及是否正常运行。 cloud-init -v cloud-init init --local
  • 操作场景 为了保证使用私有镜像创建的新云服务器可以通过“用户数据注入”功能注入初始化自定义信息(例如为云服务器设置登录密码),请在创建私有镜像前安装Cloud-Init工具。 安装Cloud-Init工具时需要从官网下载并安装,因此,需要提前为云服务器绑定弹性公网IP。 不安装Cloud-Init工具,将无法对云服务器进行自定义配置,只能使用镜像原有密码登录云服务器。 使用公共镜像创建的云服务器,默认已经安装Cloud-Init,不需要执行安装及配置操作。 用户导入镜像创建的云服务器,请按照指导安装及配置Cloud-Init。配置Cloud-Init操作请参考配置Cloud-Init工具章节。
  • 滚动升级插件 插件配置 填写升级的工作负载YAML路径。 YAML文件的代码仓和分支来源于用户在微服务中配置的代码仓和分支。 YAML路径为相对路径,当前目录为代码分支的根目录。 仅支持单个YAML文件。 YAML路径可以使用“${变量名}”引用环境变量,YAML文件中可以使用“{{变量名}}”引用环境变量。 发布单 展示升级的工作负载信息、工作负载对应的Pod信息以及关键事件信息。 工作负载信息 负载名称、类型、命名空间及创建时间。 Pod信息 实例名称: Pod的名称。 状态 :Pod的运行状态。 Pod IP :Pod的IP。 Host IP :Pod所在节点的IP。 创建时间 :实例创建的时间。 关键事件 查看Pod的关键事件信息,可用于辅助Pod问题定位,包括K8s组件名、事件类型、K8s事件、首次发生时间、最近发生时间。
  • 灰度起负载插件 插件配置 选择升级服务所在的命名空间,选择升级的服务,填写升级的工作负载YAML路径。 YAML文件的代码仓和分支来源于用户在微服务中配置的代码仓和分支。 YAML路径为相对路径,当前目录为代码分支的根目录。 仅支持单个YAML文件。 YAML路径可以使用“${变量名}”引用环境变量,YAML文件中可以使用“{{变量名}}”引用环境变量。 发布单 展示升级的工作负载信息、工作负载对应的Pod信息以及关键事件信息,单击卡片可以切换新旧负载,查看对应负载信息。 工作负载信息 旧负载名称、新负载名称、负载类型及命名空间。 Pod信息 实例名称: Pod的名称。 状态 :Pod的运行状态。 Pod IP :Pod的IP。 Host IP :Pod所在节点的IP。 创建时间 :实例创建的时间。 关键事件 查看Pod的关键事件信息,可用于辅助Pod问题定位,包括K8s组件名、事件类型、K8s事件、首次发生时间、最近发生时间。
  • 灰度引流插件 插件配置 选择引流的YAML类型,支持VirtualService和DestinationRule,填写YAML路径。 YAML文件的代码仓和分支来源于用户在微服务中配置的代码仓和分支。 YAML路径为相对路径,当前目录为代码分支的根目录。 仅支持单个YAML文件。 YAML路径可以使用“${变量名}”引用环境变量,YAML文件中可以使用“{{变量名}}”引用环境变量。 发布单 发布单展示引流YAML文件的代码仓、分支、YAML文件类型和文件路径等信息。
  • 编排模板 在模板编排页面,可以编排需要部署的微服务和中间件的完整信息。 请根据环境的依赖关系,合理编排阶段,将不同的微服务编排到不同的阶段。 请保证集群具有拉取镜像的权限,否则服务会部署失败。 尽量避免修改系统提供的开源中间件的默认配置,否则中间件可能部署失败。 配置阶段 单击,可以为模板添加新的阶段,添加完阶段后,可根据实际需要移动、删除阶段,也可以在阶段下添加微服务和中间件。 操作项 说明 排序阶段 单击不松开,可以移动阶段调整阶段顺序。 说明: 不同阶段之间在部署时按照串行方式进行部署。 同一阶段内的微服务在部署时按照并行方式进行部署。 删除阶段 单击,根据删除提示确认是否删除阶段。 添加组件/系统中间件 阶段添加后,可以为阶段添加组件/系统中间件,并根据需要配置组件/系统中间件的各项属性。 操作项 说明 添加组件/系统中间件 单击,可选择添加组件/中间件。 排序组件/系统中间件 单击不松开,可移动调整组件/中间件的顺序。 删除组件/系统中间件 单击,可删除组件/中间件。 配置组件 单击组件名称,展开组件信息配置面板,可以为当前组件配置具体信息,相关参数如表1。 表1 配置说明 参数项 说明 组件 组件的名称。 选择配置 选择组件需要使用的配置,需提前在配置中心创建,包含配置文件、环境变量、启动脚本等。 产物 选择组件部署时使用的容器镜像。 服务端口 协议 请根据业务的协议类型选择。支持HTTPS、HTTP、TCP三种协议类型的选择。 容器端口 程序启动后监听的端口。 公网访问 打开公网访问开关后,组件可以通过集群配置的外部访问方式对外暴露服务。 URL匹配规则 开启公网访问后可配置。 前缀匹配:只需前缀相同即可匹配上,如:URL映射为/health时,/healtha、/healthz都可以成功匹配。 完全匹配:只有完全匹配上才能生效,如:URL映射为/health时,则必须是此URL才可以成功匹配。 高级配置 工作负载 deployment:无状态负载。 statefulset:有状态负载。 特权模式 开启后容器中将有与内核交互的权限,可能具有安全风险,请谨慎选择。 实例规格 配置微服务实例部署所需的CPU、内存及实例副本数。 健康检查 就绪性探针,用于判断容器内的程序是否健康,支持HTTPS、HTTP、BASH三种类型。 对于HTTPS和HTTP,返回码为200认为程序健康。 对于BASH检查,执行命令返回非0认为程序健康。 存活检查 存活性探针,用于判断容器是否健康,支持HTTPS、HTTP、BASH三种类型。 对于HTTPS和HTTP,返回码为200认为容器健康。 对于BASH检查,执行命令返回非0认为容器健康。 host挂载 用于将集群节点的某个文件挂载到容器内部。 配置中间件 单击中间件,展开中间件信息配置面板,可以为当前中间件配置具体信息,相关参数请参考微服务参数配置。 系统默认提供了开源的mysql、mongo、redis三种中间件,针对不同中间件,需在配置中心创建对应的配置即可使用。 不同系统开源中间件配置创建方法如下: mysql 在“配置中心”页面,单击“新建配置”,进入“配置信息”页面,填写以下环境变量: MYSQL_ROOT_PASSWORD:root用户密码。 mongodb 在“配置中心”页面,单击“新建配置”,进入“配置信息”页面,填写以下环境变量: MONGO_INITDB_ROOT_USERNAME:用户名。 MONGO_INITDB_ROOT_PASSWORD:用户密码。 redis 在“配置中心”页面,单击“新建配置”,进入“配置信息”页面,增加如下配置文件。 文件名称:/usr/local/bin/docker-entrypoint.sh,内容如下: #!/bin/sh set -e # first arg is `-f` or `--some-option` # or first arg is `something.conf` if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then set -- redis-server "$@" fi # allow the container to be started with `--user` if [ "$1" = 'redis-server' -a "$(id -u)" = '0' ]; then find . \! -user redis -exec chown redis '{}' + exec gosu redis "$0" "$@" fi exec "$@" --requirepass ${REQUIREPASS} 增加如下环境变量。 INITIAL_PORT:redis端口号。 REQUIREPASS:redis密码。
  • LTS日志概述 云日志服务(Log Tank Service,简称LTS),用于收集来自主机和云服务的日志数据,通过海量日志数据的分析与处理,可以将云服务和应用程序的可用性和性能最大化,为您提供实时、高效、安全的日志处理能力,帮助您快速高效地进行实时决策分析、设备运维管理、用户业务趋势分析等。 ServiceStage支持通过对接LTS,查看、搜索、导出组件运行LTS日志记录,同时也支持查看容器日志,用于排查和解决组件运行中出现的问题。 父主题: 管理组件运行LTS日志
  • URI GET /v2/{project_id}/cas/applications/{application_id}/components/{component_id} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户项目ID。获取方法,请参考获取项目ID。 application_id 是 String 应用ID。获取方法,请参考获取所有应用。 component_id 是 String 组件ID。获取方法,请参考获取应用所有组件。
  • 响应示例 { "id": "1cfdda6f-84cd-4ead-8e09-628fabf662e2", "name": "test-micro", "runtime": "Java8", "category": "MicroService", "sub_category": "Java Chassis", "description": "", "project_id": "e7d2e9c589e5445e808a8ff0d1235aca", "application_id": "4d92833a-fa05-4fc0-a761-e67620022310", "source": { "kind": "artifact", "spec": { "storage": "obs", "type": "package", "url": "obs://test-soft/fusionweather-1.0.0.jar", "auth": "iam", "webUrl": "", "properties": { "bucket": "test-soft", "endpoint": "https://obs.region_id.development.com:443", "key": "fusionweather-1.0.0.jar" } } }, "build": { "id": "zpdkj42b3rnko8bmyojzt1ng828ubychw13j8flv", "parameters": { "artifact_namespace": "ns", "use_public_cluster": false, "cluster_id": "523498f1-36c4-11eb-ae36-0255ac1000c2", "cluster_name": "cce-test", "cluster_type": "VirtualMachine" } }, "status": 0, "creator": "ss-test", "create_time": 1610331760105, "update_time": 1610519881943 }
共100000条