每次创建服务器都需要一步一步点,比较麻烦,本文介绍如何使用API接口配合Jenkins来创建服务器,提升开发运维效率。
作者:张** 电商行业运维
使用python脚本创建服务器
一共调用两个API,一个创建服务器,然后根据创建好的服务器的ID,去启动服务器
前提准备
1.交换机,安全组需要提前创好,并记录ID。注意交换机的可用区是什么,脚本要写交换机所在的可用区
2.使用镜像创建,镜像ID需要记下来
3.需要在选择的可用区下,提前查看有没有相关规格服务器,没有会报错
脚本内容
# !/usr/bin/env python
# coding=utf-8
'''
为了能新增服务器方便,进行API创建服务器
注意 使用前需要先安装sdk
pip install aliyun-python-sdk-ecs==4.24.17(ecsc)
(如果是python3 就用pip3)
1.使用镜像创建ecs
2.根据前面创建好生成的id来启动服务器(刚创建好默认是关机状态)
'''
import json
import sys
from time import sleep
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.auth.credentials import AccessKeyCredential
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdkecs.request.v20140526.CreateInstanceRequest import CreateInstanceRequest
from aliyunsdkecs.request.v20140526.StartInstanceRequest import StartInstanceRequest
#1.使用镜像创建ecs
def createcs():
credentials = AccessKeyCredential(access_key_id, access_key_secret)
# credentials = StsTokenCredential('<your-access-key-id>', '<your-access-key-secret>', '<your-sts-token>')
client = AcsClient(region_id='cn-hangzhou', credential=credentials)
request = CreateInstanceRequest()
request.set_accept_format('json')
#是否自动续费
request.set_AutoRenew(True)
#是否使用镜像预设密码
request.set_PasswordInherit(True)
#实例资源规格
request.set_InstanceType(InstanceType)
#镜像id
request.set_ImageId(ImageId)
#安全组
request.set_SecurityGroupId(SecurityGroupId)
#服务器名字和实例名
request.set_InstanceName(Name)
request.set_HostName(Name)
#可用区
request.set_ZoneId(ZoneId)
#交换机id
request.set_VSwitchId(VSwitchId)
#内网ip
request.set_PrivateIpAddress(ip)
#实例付费方式
request.set_InstanceChargeType(InstanceChargeType)
#如果包年包月,选择购买时间,默认为月,如果按量请注释掉
#request.set_Period(Period)
response = client.do_action_with_exception(request)
# python2: print(response)
#转成json格式
response = json.loads(response)
instanceId = response["InstanceId"]
return instanceId
#2.启动(刚创建好默认是关机状态)
def run():
credentials = AccessKeyCredential(access_key_id, access_key_secret)
# use STS Token
# credentials = StsTokenCredential('<your-access-key-id>', '<your-access-key-secret>', '<your-sts-token>')
client = AcsClient(region_id='cn-hangzhou', credential=credentials)
request = StartInstanceRequest()
request.set_accept_format('json')
request.set_InstanceId(instanceId)
response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8'))
if __name__ == '__main__':
# 定义阿里云key(创建ecs使用key)
access_key_id = "aaa"
access_key_secret = "bbb"
#地域
region_id = "ch-hangzhou"
#镜像id,准备好的初始镜像id,可以在控制台镜像处看到文中使用的是公共镜像centos7.5
ImageId = "centos_7_5_x64_20G_alibase_20211130.vhd"
#可用区id,默认为g区(看交换机可用区),一般不动,先固定值吧
ZoneId = "cn-hangzhou-g"
#付费方式 PrePaid包年包月 PostPaid按量
#测试的话可以按量使用
InstanceChargeType = "PostPaid"
#默认付费方式是按月付费,所以这个地方只选1,就是购买一个月,注意按量的话就注释掉这个参数
#Period = 1
#实例名称,读取输入,由于有5个必填参数,所以这边设置获取的长度少于6就相当于有参数没有输入,直接退出
#sys.argv[0]是当前所执行的脚本,并且输入什么就是什么,输入test.py就是test.py,输入./test.py就是./test.py
if len(sys.argv) < 6:
print('信息不足,退出')
sys.exit()
else:
#实例名称和服务器name使用同一个输入
Name = sys.argv[1]
#指定内网ip,要不冲突
ip = sys.argv[2]
#实例规格,选项,可以自己找常用的
'''
4核16g ecs.g5.xlarge
8核16g ecs.c5.2xlarge
4核8g ecs.c5.xlarge
2核4g ecs.c5.large
'''
InstanceType = sys.argv[3]
#安全组,选项,根据自己不同的安全组去设定,如果只有一个安全组也可以写成默认的
'''
默认安全组id sg-bp16uggk8lf3xmxacfu8
其他安全组id sg-bp17cxmmtvxo1hv5vgm0
'''
SecurityGroupId = sys.argv[4]
#交换机id 选项
'''
交换机id
192.168.2.0/24 vsw-bp1ugmfg1zny1arrzzm7v
192.168.1.0/24 vsw-bp189xghw2j2aiwzqx3q3
192.168.3.0/24 vsw-bp12d27654xu002fzn5aq
先写常用的,待补充
'''
VSwitchId = sys.argv[5]
instanceId = createcs()
#创建完等待几秒在启动,防止启动时资源还未找到
sleep(5)
run()
其实挺简单的,将一些参数填进去,剩下的用默认的
不过参数有5个,每次自己输入很麻烦,结合Jenkins去弄
Jenkins配置参数选项
使用了2个文本参数,和三个选项参数
都是必填
命令行配置
#执行构建脚本,$1:服务器名字,$2:ip ,$3:实例规格,$4:安全组,$5:局域网id
python3 /root/jenkins_script/ecs/createcs.py ${Name} ${ip} ${InstanceType} ${SecurityGroupId} ${VSwitchId}
在启动服务器后也可以自己执行一些命令和自定义设置,可以自己定义
最后效果
填写相关信息就可以构建了
如果信息少了,会直接退出
# python3 /root/jenkins_script/ecs/test.py test 192.168.3.122 ecs.c5.xlarge sg-bp16uggk8lf3xmxacfu8
信息不足,退出
信息对的情况下,正常创建并启动
在控制台上就可以看到,服务器创建成功了
里面的信息和上面传输的一致
创建成功