From fbc0bb81cf6b104b326c35171dcd21edeab019ff Mon Sep 17 00:00:00 2001 From: root Date: Sun, 21 Aug 2022 23:46:37 +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 --- .gitignore | 1 + control/VMHost.sh | 4 +++ template/register_instance.py | 62 +++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 .gitignore create mode 100644 template/register_instance.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b511ae1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.qcow2 diff --git a/control/VMHost.sh b/control/VMHost.sh index b7e71b6..8709783 100644 --- a/control/VMHost.sh +++ b/control/VMHost.sh @@ -14,6 +14,7 @@ VDISKS_PATH=$MAIN_PATH/vdisks TEMPLATE_IMAGE_NAME="template.qcow2" TEMPLATE_CONFIG_NAME="template.xml" TEMPLATE_NETWORK_NAME="template.conf" +TEMPLATE_REGISTER_NAME="register_instance.py" TEMPLATE_PATH=$MAIN_PATH/template CONFIG_PATH=/etc/libvirt/qemu KVM_CPUS=1 @@ -115,6 +116,9 @@ guestmount -a ${VDISKS_PATH}/${VM_HOSTNAME}.qcow2 -m /dev/centos/root ${MOUNT_PA sed -ri "s/^IPADDR.*/IPADDR=${KVM_ADDRESS}/" ${MOUNT_PATH}/etc/sysconfig/network-scripts/ifcfg-eth0 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 && \ +chmod a+x ${MOUNT_PATH}/etc/rc.d/rc.local 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 new file mode 100644 index 0000000..19d8971 --- /dev/null +++ b/template/register_instance.py @@ -0,0 +1,62 @@ +import subprocess +import os +import json +import requests +import datetime +from httpsig.requests_auth import HTTPSignatureAuth + + +def get_auth(KeyID, SecretID): + signature_headers = ['(request-target)', 'accept', 'date'] + auth = HTTPSignatureAuth(key_id=KeyID, secret=SecretID, + algorithm='hmac-sha256', headers=signature_headers) + return auth + + +def check_host(jms_url, auth, host_ip): + url = jms_url + "/api/v1/assets/assets/" + gmt_form = '%a, %d %b %Y %H:%M:%S GMT' + headers = { + 'Accept': 'application/json', + 'X-JMS-ORG': '00000000-0000-0000-0000-000000000002', + 'Date': datetime.datetime.utcnow().strftime(gmt_form) + } + result = requests.get( + url, params={"ip": host_ip}, auth=auth, headers=headers) + return bool(result.json()) + + +def register_host(jms_url, auth, host_name, host_ip): + if not check_host(jms_url, auth, host_ip): + url = jms_url + "/api/v1/assets/assets/" + gmt_form = '%a, %d %b %Y %H:%M:%S GMT' + headers = { + 'Accept': 'application/json', + 'X-JMS-ORG': '00000000-0000-0000-0000-000000000002', + 'Date': datetime.datetime.utcnow().strftime(gmt_form) + } + data = { + "hostname": host_name, + "ip": host_ip, + "platform": "Linux", + "protocol": "ssh", + "port": 0, + "nodes": "870cd163-d6d6-4fa7-b69c-729ecf81df4c", + "admin_user": "650feac8-df82-41f3-b398-b106e12dad1b", + "is_active": True + } + result = requests.post(url, data=data, auth=auth, headers=headers) + with open("/tmp/.jms_host_registered.json", "w") as f: + json.dump(result.json(), f, indent=4, ensure_ascii=False) + + +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) + register_host(jms_url, auth, hostname, hostip)