黑猫小白的python
公有云python
【题目 1】Python 运维开发:华为云 Python 运行环境准备[1 分]
通过华为云控制台,选择北京四区域,创建一台 x86 架构,“按需计费”的 2 核,4G,系统盘 50G 的云实例,实例名为 chinaskill2022,选择镜像为 CentOS 7.9 64bit(40GB),分配独立的公网 IP,带宽选择按使用流量计费 5M。登录此云服务器,安装 Python3.68 运行环境,并安装华为云旧版 SDK、新版(v3.0) Python SDK 中弹性云服务、虚拟私有云、镜像服务、容器云引擎的 python 库。
完成后提交“chinaskill2022 开发运行环境云主机”的用户名、密码和 IP 地址到答题框。
[root@chinaskill2022 ~]# pip3 install https://mirrors.huaweicloud.com/repository/pypi/simple
[root@chinaskill2022 ~]# pip3 install huaweicloud-sdk-python
[root@chinaskill2022 ~]# pip3 install huaweicloudsdkecs
[root@chinaskill2022 ~]# pip3 install huaweicloudsdkims
[root@chinaskill2022 ~]# pip3 install huaweicloudsdkcore
[root@chinaskill2022 ~]# pip3 install huaweicloudsdkvpc
[root@chinaskill2022 ~]# pip3 install huaweicloudsdkcce
【题目 2】Python 运维开发:实现容器集群创建[1 分]
基于在 Huawei Cloud API 的云容器引擎 CCE Python 模块,使用以下信息,在/root 目录下手动编写 cce_cluser.yaml 文件。
云 服 务 器 的 /root/ 目 录 下 编 写 cce_cluster_manager.py 文 件 , 编 码 实 现 读 取cce_cluser.yaml,创建“按需计费”的 CCE 容器引擎集群(Cluster),创建后根据名称查询该集群(Cluster)的详细信息,通过控制台以 json 格式输出该集群的信息。
创建 CCE 集群的信息如下:
CCE 名称 chinaskillscce2022;
按需计费;集群版本:v1.21;
集群规模:节点数 50;
网络模式:VPC 网络;
其他必要信息不限。
完成后提交“chinaskill2022 开发运行环境云主机”的用户名、密码和 IP 地址到答题框。
[root@chinaskill2022 ~]# vim cce_cluster_manager.py
print("""
kind: Cluster
apiVersion: v3
metadata:
name: asda
annotations:
cluster.install.addons.external/install: '[{"addonTemplateName":"icagent","extendParam":{"logSwitch":"false","tDSEnable":"true"}}]'
cluster.install.addons/install: '[{"addonTemplateName":"coredns","values":{"flavor":{"name":5000,"replicas":2,"resources":[{"limitsCpu":"1000m","limitsMem":"1024Mi","name":"coredns","requestsCpu":"1000m","requestsMem":"1024Mi"}]}}},{"addonTemplateName":"everest"}]'
spec:
category: CCE
flavor: cce.s2.small
version: v1.21
hostNetWork:
vpc: ccce15d7-613a-4ed9-a034-e023a416492a
subnet: 7f5ff669-8d02-4de5-ab07-a89012d04c93
containerNetWork:
mode: vpc-router
cidrs:
- cidr: 10.30.0.0/16
kubernetesSvcIpRange: 10.123.0.0/16
description: ''
billingMode: 0
extendParam:
kubeProxyMode: iptables
alpha.cce/fixPoolMask: '25'
authentication:
mode: rbac
ipv6enable: false
kind || Cluster || metadata || hwccecloud || category ||CCE ||creationTimestamp ||platformVersion || hostNetwork || containerNetwork
CceClient || create_cluster || with_region || yaml.safe_load
""")
【题目 3】Python 运维开发:ECS 云主机管理的命令行工具开发[4 分]
使用已建好的运维开发环境,在/root/目录下创建 ecs_manager.py 脚本,完成 ECS 云主机管理,ecs_manager.py 程序支持命令行参数执行。
提示说明:华为云主机支持安装所需 Python 库。提交前答案前,需安装所开发程序所依赖的 Python 库。
(1)程序支持根据命令行参数,创建 1 个云主机。
位置参数“create”,表示创建;
参数“-i 或–input”,格式为 json 格式文本的云主机的名称、镜像名称 2 个信息。其他参数同上述开发环境云主机一致。创建待成功,再返回查询该云主机的信息,结果以 json 格式输出到控制台。
参考执行实例如下:
python3 ecs_manager.py create --input '{ “name”: " chinaskill001", “imagename”: “CentOS 7.9 64bit”} ’
(2)支持查询给定具体名称的 ECS 云主机查询。
位置参数“get”,表示查询 ECS;
参数“-n 或 --name”支持指定名称 ECS 查询,类型为 string。
参数“-o 或 --output”支持查询该 ECS 信息输出到文件,格式为 json 格式。
参考执行实例如下:
python3 ecs_manager.py get --name chinaskill001-o chinaskill001.json
(3)程序支持查询目前区域账号下所有的 ECS 云主机。
位置参数“getall”,表示查询所有 ECS 云主机;
参数“-o 或–output”支持输出到文件,格式为 yaml 格式。
参考执行实例如下:
python3 ecs_manager.py getall -o huawei_all_ecs.yaml
(4)支持删除指定的名称的云主机。
位置参数“delete”,表示删除一个 ECS 云主机;返回 response,通过控制台输出。
参数“-n 或–name”支持指定名称查询,类型为 string。
参考执行实例如下:
python3 ecs_manager.py delete --name chinaskill001
完成后提交“chinaskill2022 开发运行环境云主机”的用户名、密码和 IP 地址到答题框。
【题目 4】Python 运维开发:ECS 云主机管理与监控的 Restful APIs HTTP 服务封装[4 分]
云服务器的/root/目录下编写 huawei_ecs_server.py 文件编写 Python 程序实现华为 ECS云主机管理与云主机操作系统性能远程监控。所有的资源申请区域为“华北-北京四”,所有服务封装成 Restful APIs 方式,host 为 127.0.0.1,端口 8888,供外部检测。
提示说明:华为云主机支持安装所需 Python 库。提交前答案前,需安装程序所依赖的Python 库。
具体要求:
(1)POST /ecs/server 创建云主机,需要等待成功该云主机后,返回查询该云主机信息。
Request 传输的数据为 application/json,json 包含 2 个必备信息,名称、镜像名称。
json 数据格式案例如下:{ “name”: " cloud001", “imagename”: “CentOS 7.9 64bit”}
其他必备参数与开发环境云主机一致。
Response 的 Body 以 json 格式,返回所创建成功的主机详细信息。
(2)GET /ecs/server/{name}查询云主机;Response 的 Body 以 yaml 格式。
(3)GET /ecs/server/{name}/os 查询所指定 ID 云主机的操作系统信息;Response 的 json
格式返回。返回格式要求如下:
os_release:操作系统的版本系统;
cpu_util:CPU 使用率%;
mem_util:内存使用率%;
disk_util:磁盘使用率%。
(4)DELETE /ecs/server/{name}删除云主机;Response 的 Body 以 json 格式。编码完成后,自己手动执行提供 Web HTTP 服务的 huawei_ecs_server.py 程序。完成后提交“chinaskill2022 开发运行环境云主机”的用户名、密码和 IP 地址到答题框。
调用获取token值
import requests, json, time
project_id = '0c22e0c418000f342f64c0156e9081c6'
def get_token():
global headers
headers = {'Content-Type':'application/json;charset=utf8'}
data = {'auth': {'identity': {'methods': ['password'], 'password':{'user':{'domain':{'name':'hangyu007'}, 'name':'test1', 'password':'LIU77521liu'}}},
'scope': {'project':{'domain':{'name':'hangyu007'},'id':project_id}}}}
rsp = requests.post("https://iam.myhuaweicloud.com/v3/auth/tokens", headers=headers, data=json.dumps(data))
if rsp.status_code == 201:
headers['X-Auth-Token'] = rsp.headers['X-Subject-Token']
else:
print(rsp.text)
return headers
调用api创建云服务器组
def create_server_group():
headers = get_token()
# 获取云服务器组列表如果已含有该项则进行删除操作
rsp = requests.get(f"https://ecs.cn-north-4.myhuaweicloud.com/v1/{project_id}/cloudservers/os-server-groups", headers=headers)
for i in rsp.json()['server_groups']:
if 'chinaskills_server_group' == i['name']:
server_group_id = i['id']
rsp = requests.delete(f"https://ecs.cn-north-4.myhuaweicloud.com/v1/{project_id}/cloudservers/os-server-groups/{server_group_id}", headers=headers)
else:
pass
# 创建云服务器组
data = {
"server_group": {
"name": "chinaskills_server_group",
"policies": [
"anti-affinity"
]
}
}
rsp = requests.post(f"https://ecs.cn-north-4.myhuaweicloud.com/v1/{project_id}/cloudservers/os-server-groups", headers=headers, data=json.dumps(data))
# 检验并输出详细信息
if rsp.status_code == 201:
server_group_id = rsp.json()['server_group']['id']
rsp = requests.get(f"https://ecs.cn-north-4.myhuaweicloud.com/v1/{project_id}/cloudservers/os-server-groups/{server_group_id}", headers=headers)
print(rsp.json())
else:
print(rsp.text)
if __name__ == '__main__':
create_server_group()
调用api创建安全组
def create_security_group():
headers = get_token()
# 获取安全组列表,查看是否含有相同的项,如果优则进行删除操作
rsp = requests.get(f"https://vpc.cn-north-4.myhuaweicloud.com/v1/{project_id}/security-groups", headers=headers)
for i in rsp.json()['security_groups']:
if 'chinaskills_security_group' == i['name']:
security_group_id = i['id']
rsp = requests.delete(f"https://vpc.cn-north-4.myhuaweicloud.com/v1/{project_id}/security-groups/{security_group_id}", headers=headers)
else:
pass
# 创建安全组
data ={
"security_group": {
"name": "chinaskills_security_group"
}
}
rsp = requests.post(f"https://vpc.cn-north-4.myhuaweicloud.com/v1/{project_id}/security-groups", headers=headers, data=json.dumps(data))
# 格式化输出
if rsp.status_code == 201:
security_group_id = rsp.json()['security_group']['id']
rsp = requests.get(f"https://vpc.cn-north-4.myhuaweicloud.com/v1/{project_id}/security-groups/{security_group_id}", headers=headers)
print(rsp.json())
else:
print(rsp.text)
if __name__ == '__main__':
create_security_group()
调用api创建安全组规则
def create_security_group_rule():
headers = get_token()
# 获取安全组列表。抓取到该安全组的ID
rsp = requests.get(f"https://vpc.cn-north-4.myhuaweicloud.com/v1/{project_id}/security-groups", headers=headers)
global security_group_id
for i in rsp.json()['security_groups']:
if 'chinaskills_security_group' == i['name']:
global security_group_id
security_group_id = i['id']
# 获取该安全组全部的规则,且删除该安全组的全部规则
rsp = requests.get(f"https://vpc.cn-north-4.myhuaweicloud.com/v1/{project_id}/security-group-rules?security_group_id={security_group_id}", headers=headers)
for i in rsp.json()['security_group_rules']:
security_group_rule_id = i['id']
rsp = requests.delete(f"https://vpc.cn-north-4.myhuaweicloud.com/v1/{project_id}/security-group-rules/{security_group_rule_id}", headers=headers)
# 配置安全组规则
data = [
{
"security_group_rule": {
"security_group_id": "f12f129c-89b4-4efa-bbd5-b4486ee51e3e",
"direction": "egress",
"ethertype": "IPv4"
}
},
{
"security_group_rule": {
"security_group_id": "f12f129c-89b4-4efa-bbd5-b4486ee51e3e",
"direction": "ingress",
"ethertype": "IPv4",
"protocol": "tcp",
"port_range_min": 22,
"port_range_max": 22
}
},
{
"security_group_rule": {
"security_group_id": "f12f129c-89b4-4efa-bbd5-b4486ee51e3e",
"direction": "ingress",
"ethertype": "IPv4",
"protocol": "icmp"
}
},
]
for i in data:
rsp = requests.post(f"https://vpc.cn-north-4.myhuaweicloud.com/v1/{project_id}/security-group-rules", headers=headers, data=json.dumps(i))
rsp = requests.get(f"https://vpc.cn-north-4.myhuaweicloud.com/v1/{project_id}/security-groups/{security_group_id}", headers=headers)
print(rsp.json())
if __name__ == '__main__':
create_security_group_rule()
- 点赞
- 收藏
- 关注作者
评论(0)