安装sdk
import os
import zipfile
import commands
cmd='cd {};cd ksc-sdk-python-master;{} setup.py install'.format(dst_dir,python_path)
print cmd
res=commands.getstatusoutput(cmd)
if res[0]:
print res
else:
print '安装成功!'
创建虚拟机
#coding=utf8
from kscore.session import get_session
import re
import sys
def make_conn(service_name, region):
try:
s = get_session()
url = 'http://kec.{}.XXX.XXXX'.format(region)
if url.startswith('http://'):
is_ssl = False
else:
is_ssl = True
client = s.create_client(service_name, region_name=region, endpoint_url=url,
use_ssl=is_ssl, ks_access_key_id=ACCESS_KEY_ID,
ks_secret_access_key=SECRET_ACCESS_KEY, api_version='2016-03-04',
verify=False)
return client
except Exception as e:
print e
def create_vm(client,instance_type='I1.1A',password=None,image_id=None,subnet_id=None,
security_group_id=None,vm_name=None,charge_type="Daily",data_volumn=None,
project_id=0,max_count=1,suffix=''):
if password and (len(password)<8 or len(password)>32 or
re.match(r'[0-9]+', password) or
re.match(r'[a-z]+', password)):
return False, '密码输入错误:密码规则为最短8字符,最长32字符,必须包含大小写英文字符和数字,支持其他可见字符'
if not data_volumn:
data_disk_gb=0
else:
data_disk_gb=int(data_volumn.strip())
#print image_id,subnet_id,password,security_group_id,charge_type,instance_type,vm_name,data_disk_gb
res = client.run_instances(
MaxCount=max_count, MinCount=1, ImageId=image_id,
SubnetId=subnet_id, InstancePassword=str(password),
SecurityGroupId=security_group_id, ChargeType=charge_type,
InstanceType=instance_type, PurchaseTime=0, InstanceName=vm_name,
DataDiskGb=data_disk_gb,ProjectId=project_id,InstanceNameSuffix=suffix)
vm_id=None
if res.get('InstancesSet',None) not in ([],None):
vm_id=[i['InstanceId'] for i in res['InstancesSet']]
if vm_id:
return True,vm_id
else:
return False,res
def get_vm(client, instances=None,ids=[]):
if instances:
instances = dict(("InstanceId.{}".format(index), instance) for index, instance in
enumerate(instances, 1))
res = client.describe_instances(**instances)
elif ids:
i=0
for id in ids:
instances = {"InstanceId.{}".format(i):id}
i+=1
res = client.describe_instances(**instances)
else:
res = client.describe_instances()
return res
if __name__ == '__main__':
project_id=0
count=2
batch=True
if batch==True:
suffix='1'
else:
suffix=''
if count<1:
print '要输入的机器数目错误,必须输入1以上的整数'
sys.exit(1)
client = make_conn('kec', region)
code,vm_id=create_vm(client,password=password,image_id=image_id,subnet_id=subnet_id,
security_group_id=security_group_id,vm_name=vm_name,instance_type=instance_type,
project_id=project_id,max_count=count,suffix=suffix)
if not code:
print vm_id
sys.exit(1)
res=get_vm(client,instances=vm_id)
print res
instances=res['InstancesSet']
success=[]
fail=[]
while instances!=[]:
wait=[]
for instance in instances:
if instance.get('InstanceState',None) and instance['InstanceState'].get('Name')=='active':
success.append(instance['InstanceId'])
elif instance.get('InstanceState',None) and instance['InstanceState'].get('Name')=='error':
fail.append(instance['InstanceId'])
else:
wait.append(instance['InstanceId'])
if wait==[]:
break
else:
instances = get_vm(client, instances=wait)['InstancesSet']
if fail and success:
print '创建完成!创建成功的机器:{}\n创建失败的机器:{}'.format(','.join(success),','.join(fail))
sys.exit(1)
elif fail and not success:
print '创建失败!创建失败的机器:{}'.format(','.join(fail))
sys.exit(1)
elif not fail and success:
print '创建成功!创建成功的机器:{}'.format(','.join(success))
删除虚拟机
#coding=utf8
from kscore.session import get_session
import re
def make_conn(service_name, region):
try:
s = get_session()
url = 'http://kec.{}.XXx.XXX'.format(region)
if url.startswith('http://'):
is_ssl = False
else:
is_ssl = True
client = s.create_client(service_name, region_name=region, endpoint_url=url,
use_ssl=is_ssl, ks_access_key_id=ACCESS_KEY_ID,
ks_secret_access_key=SECRET_ACCESS_KEY, api_version='2016-03-04',
verify=False)
return client
except Exception as e:
print e
def get_vm(client, instances=None):
if instances:
instances = dict(("InstanceId.{}".format(index), instance) for index, instance in
enumerate(instances, 1))
res = client.describe_instances(**instances)
else:
res = client.describe_instances()
return res
def del_vms(client,instances=None):
res=get_vm(client, instances=instances)
temp=[]
fail = []
print res
if res['InstanceCount']!=len(instances):
for i in res['InstancesSet']:
temp.append(i['InstanceId'])
for i in temp:
if i not in instances:
fail.append(i)
instances=temp
# print fail
# print instances
if instances:
instances = dict(
("InstanceId.{}".format(index), instance) for index, instance in enumerate(instances, 1))
res=client.terminate_instances(**instances)
if res.get('InstancesSet',None) :
for i in res['InstancesSet']:
if i.get('Return',None)!=True:
fail.append(i['InstanceId'])
if fail:
return '删除失败,失败的id为:{}'.format(','.join(fail))
else:
return '删除成功'
def get_vm_by_name(client,names=[],project=0):
result=[]
for i in names:
instances={"InstanceName":i}#$,"MaxResults":1000}
res = client.describe_instances(**instances)
if res.get('InstancesSet',None):
for i in res['InstancesSet']:
if i['ProjectId']==project:
result.append(i['InstanceId'])
return result
if __name__ == '__main__':
client = make_conn('kec', region)
# print client
names=['test-1','test-2']
project_id=0
instances=''
if vm_name:
for name in vm_name.split(','):
names.append(name)
instances=get_vm_by_name(client,names=names,project=project_id)
#print instances
elif instances:
instances=instances.split(',')
res = del_vms(client, instances=instances)
print res