From 283ba01689d3956c364dab5abe61b36f6a57311f Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 5 Sep 2022 05:27:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 44 +++++++++++++++++++++++++++++++++++ control/VMHost.sh | 3 ++- template/register_instance.py | 16 +++++++------ 3 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..401501c --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# kvm 教学练习 +> 仅供学习测试使用 +> 更新时间: 2022/9/4 22:21:00 +> editor: newrain + +### 目录结构介绍 +``` +[root@kvm-server kvm]# tree -L 2 +. +├── control # 控制脚本目录 +│ ├── KVMInstall.sh # kvm服务安装脚本 +│ ├── VMHost.sh # kvm虚拟机克隆脚本 +│ └── VMTemplate.sh # kvm模板机安装脚本 +├── mount # 此目录保持为空,为克隆时临时挂载使用 +├── README.md +├── template # 模板文件存放位置 +│ ├── register_instance.py # jumpserver 注册资产脚本 +│ ├── template.conf # 克隆机网卡配置文件脚本 +│ ├── template.qcow2 # 模板机磁盘镜像 +│ └── template.xml # 配置文件 +└── vdisks + ├── README.txt + ├── vmtest1.qcow2 # 克隆机磁盘镜像 + └── vmtest2.qcow2 +``` + +### 使用脚本 +``` +宿主机: cd kvm +宿主机: sh KVMInstall.sh # 安装KVM服务 +宿主机: sh VMTemplate.sh # 安装模板机 +宿主机: virsh console template # 进入模板机,安装python3 +template: yum install -y python3 python3-devel +template: pip3 install requests httpsig -i https://mirrors.aliyun.com/pypi/simple +宿主机: sh VMHost.sh -a 192.168.96.223 -p 6667 -n vmtest1 -c 2 -m 4096 +[root@kvm-server control]# sh VMHost.sh +"Usage: $0 [OPTION]..." + -h, --help 查看帮助" + -a, --address 虚拟机的IP地址" + -p, --port 虚拟机的VNC端口" + -n, --name 虚拟机的名称" + -c, --cpus 选填,虚拟机的CPU数量,默认为1" + -m, --memory 选填,虚拟机的内存大小,单位M,默认为512M" +``` \ No newline at end of file diff --git a/control/VMHost.sh b/control/VMHost.sh index 8709783..b9a2301 100644 --- a/control/VMHost.sh +++ b/control/VMHost.sh @@ -117,8 +117,9 @@ sed -ri "s/^IPADDR.*/IPADDR=${KVM_ADDRESS}/" ${MOUNT_PATH}/etc/sysconfig/network sed -ri "s/^GATEWAY.*/GATEWAY=${KVM_ADDRESS%.*}.2/" ${MOUNT_PATH}/etc/sysconfig/network-scripts/ifcfg-eth0 sed -ri "s/.*/${VM_HOSTNAME}/" ${MOUNT_PATH}/etc/hostname cp ${TEMPLATE_PATH}/${TEMPLATE_REGISTER_NAME} ${MOUNT_PATH}/opt && \ -echo "python3 /opt/${TEMPLATE_REGISTER_NAME}" >> ${MOUNT_PATH}/etc/rc.d/rc.local && \ +echo "python3 /opt/${TEMPLATE_REGISTER_NAME}" ${VM_HOSTNAME} >> ${MOUNT_PATH}/etc/rc.d/rc.local && \ chmod a+x ${MOUNT_PATH}/etc/rc.d/rc.local +rm -rf ${MOUNT_PATH}/* guestunmount ${MOUNT_PATH} cp ${TEMPLATE_PATH}/${TEMPLATE_CONFIG_NAME} ${CONFIG_PATH}/${VM_HOSTNAME}.xml diff --git a/template/register_instance.py b/template/register_instance.py index 19d8971..5b09dd0 100644 --- a/template/register_instance.py +++ b/template/register_instance.py @@ -1,10 +1,15 @@ import subprocess -import os +import os,sys import json import requests import datetime from httpsig.requests_auth import HTTPSignatureAuth +jms_url = 'http://192.168.96.239' +nodes_id="ad851ca4-45cb-4d8a-9e0a-6e4e4fb6b6e1" +admin_user_id="739037a2-0850-4b95-845d-c2e023e47f33" +KeyID = '445b20ee-fcb5-4ad2-965e-3b6f2d6d658a' +SecretID = 'd303d92d-5691-49db-a7fc-67b24cf09770' def get_auth(KeyID, SecretID): signature_headers = ['(request-target)', 'accept', 'date'] @@ -41,8 +46,8 @@ def register_host(jms_url, auth, host_name, host_ip): "platform": "Linux", "protocol": "ssh", "port": 0, - "nodes": "870cd163-d6d6-4fa7-b69c-729ecf81df4c", - "admin_user": "650feac8-df82-41f3-b398-b106e12dad1b", + "nodes": nodes_id, + "admin_user": admin_user_id, "is_active": True } result = requests.post(url, data=data, auth=auth, headers=headers) @@ -53,10 +58,7 @@ def register_host(jms_url, auth, host_name, host_ip): if __name__ == '__main__': if os.path.isfile('/tmp/.jms_host_registered.json'): exit(0) - jms_url = 'http://192.168.96.253' - KeyID = 'e3a9f622-868f-4707-a3f6-a2e5cba500a4' - SecretID = '87485901-44ab-4359-a07e-2764f8556834' auth = get_auth(KeyID, SecretID) hostip = subprocess.getoutput('hostname -I') - hostname = os.environ.get('HOSTNAME', hostip) + hostname = sys.argv[1] register_host(jms_url, auth, hostname, hostip)