scofield 5 жил өмнө
parent
commit
e7d9014862
1 өөрчлөгдсөн 72 нэмэгдсэн , 61 устгасан
  1. 72 61
      ppctl.py

+ 72 - 61
ppctl.py

@@ -9,18 +9,24 @@ import time
 from kubernetes.client.rest import ApiException
 from pprint import pprint
 from kubernetes import client, config
-import sys, getopt
+import sys, getopt, random
+from aliyunsdkcore.client import AcsClient
+from aliyunsdkcore.acs_exception.exceptions import ClientException
+from aliyunsdkcore.acs_exception.exceptions import ServerException
+from aliyunsdkalidns.request.v20150109.AddDomainRecordRequest import AddDomainRecordRequest
+from aliyunsdkalidns.request.v20150109.DeleteDomainRecordRequest import DeleteDomainRecordRequest
+from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
 
 
-JNLP_ENV = os.getenv('JNLP_ENV') 
+
+JNLP_ENV = os.getenv('JNLP_ENV')
 JNLP_TAG = os.getenv('JNLP_TAG')
 JNLP_CONTAINER_PORT = os.getenv('JNLP_CONTAINER_PORT')
-JNLP_WAR = os.getenv('JNLP_WAR')
+# JNLP_WAR = os.getenv('JNLP_WAR')
 JNLP_INGRESS = os.getenv('JNLP_INGRESS')
 JNLP_IMAGE = os.getenv('JNLP_IMAGE')
-JNLP_CONTROL_NAME = os.getenv('JNLP_CONTROL_NAME')
+JNLP_CONTROL_NAME = os.getenv('DRONE_REPO_NAME')
 JNLP_STORAGE_CLASS = os.getenv('JNLP_STORAGE_CLASS')
-JNLP_HUB = os.getenv('JNLP_HUB')
 JNLP_DOMAIN = os.getenv('JNLP_DOMAIN')
 JNLP_CONTROL = os.getenv('JNLP_CONTROL')
 JNLP_REPLICAS = os.getenv('JNLP_REPLICAS')
@@ -28,41 +34,26 @@ JNLP_STORAGE_CAPACITY = os.getenv('JNLP_STORAGE_CAPACITY')
 JNLP_MOUNT_PATH = os.getenv('JNLP_MOUNT_PATH')
 JNLP_SVC_MODE = os.getenv('JNLP_SVC_MODE')
 NGINX_SVC = str(JNLP_ENV) + '/' + str(JNLP_CONTROL_NAME) + '-svc:' + str(JNLP_CONTAINER_PORT)
-NGINX_PORT = JNLP_CONTAINER_PORT    
-RECORD_NAME = os.getenv('JNLP_ENV') + "-" + os.getenv('JNLP_CONTROL_NAME')
-NGINX_RECORD_IP = "10.26.30.12"
-
-
-              
-# 定义nacos配置中心地址
-def httpGet(url):
-    conn=httplib.HTTPConnection(host='10.26.32.40', port=8848, strict=False, timeout=30) 
-    conn.request(method='GET',url=url)
-    content = conn.getresponse().read() 
-    return content
-
-
-# 生成deployment-template.yaml模版文件
-def deployGenerate(filename,url):
-    f = open(filename,"w")
-    content = httpGet(url)
-    f.writelines(content)
-    f.close()
-    return 1
+NGINX_PORT = os.getenv('JNLP_CONTAINER_PORT')
+RECORD_NAME = os.getenv('JNLP_ENV') + "-" + os.getenv('DRONE_REPO_NAME')
+INGRESS_LIST_IN = ["10.26.32.137"]
+INGRESS_LIST_PUB = ["120.192.70.105"]
+NGINX_RECORD_IP = random.sample(INGRESS_LIST_PUB, 1)[0]
+DOMAINNAME = os.getenv('JNLP_DOMAIN').strip('.')
 
 
 # 生成deploy.yaml文件
 def deployYamlCreate():
     tmpctl = '''
     config=`env|grep JNLP`
-    template=`cat ./deployment.yaml`
+    template=`cat ./deploy-tmp.yaml`
     printf "$config\ncat << EOF\n$template\nEOF" | bash > ./deploy.yaml
     '''
     f1 = open("tempshell.sh","w")
     f1.writelines(tmpctl)
     f1.close()
     status,output = commands.getstatusoutput("sh tempshell.sh && rm -f tempshell.sh")
-    print("code:" + str(status) + str(output) + "; create deploy.yaml success !!!") 
+    print("code:" + str(status) + str(output) + "; create deploy.yaml success !!!")
     return status,output
 
 
@@ -77,7 +68,7 @@ def DockerfileCreate():
     f2.writelines(tmp)
     f2.close()
     status,output = commands.getstatusoutput("sh tmp.sh && rm -f tmp.sh")
-    print("code:" + str(status) + str(output) + "; create Dockerfile success !!!") 
+    print("code:" + str(status) + str(output) + "; create Dockerfile success !!!")
     return
 
 
@@ -111,53 +102,44 @@ def deployToKube():
     cmStatus = updateConfigMap("configmap.json")
     appStatus = commands.getoutput("kubectl  get sts $JNLP_CONTROL_NAME -n $JNLP_NAMESPACE|grep $JNLP_CONTROL_NAME|wc -l")
     if appStatus == "1" and cmStatus == "1":
-        #print("Warning:" + JNLP_CONTROL_NAME + " is already, i will delete it and create new one !!!")
-        #del_out = commands.getoutput("kubectl delete -f ./deploy.yaml")
+        print("Warning:" + JNLP_CONTROL_NAME + " is already, i will update it and update nginx tcp proxy !!!")
         apply_out = commands.getoutput("kubectl apply -f ./deploy.yaml && kubectl apply -f ./configmap.json")
-        #print("===>>> kubectl delete output <<<===")
-        #print(del_out)
         print("===>>> kubectl apply output <<<===")
-        print(apply_out) 
+        print(apply_out)
     elif appStatus == "1" and cmStatus == "0":
-        #print("Warning:" + JNLP_CONTROL_NAME + " is already, i will delete it and create new one !!!") 
-        #del_out = commands.getoutput("kubectl delete -f ./deploy.yaml")
+        print("Warning:" + JNLP_CONTROL_NAME + " is already, i will update it !!!")
         apply_out = commands.getoutput("kubectl apply -f ./deploy.yaml")
-        #print("===>>> kubectl delete output <<<===")
-        #print(del_out)
-        print("===>>> kubectl apply output <<<===") 
-        print(apply_out) 
+        print("===>>> kubectl apply output <<<===")
+        print(apply_out)
     elif appStatus != "1" and cmStatus == "1":
         apply_out = commands.getoutput("kubectl apply -f ./deploy.yaml && kubectl apply -f ./configmap.json")
-        print("===>>> kubectl apply output <<<===") 
-        print(apply_out) 
-        print("===>>> apply is successfull <<<===") 
+        print("===>>> kubectl apply output <<<===")
+        print(apply_out)
+        print("===>>> apply is successfull <<<===")
     else:
         apply_out = commands.getoutput("kubectl apply -f ./deploy.yaml")
-        print("===>>> kubectl apply output <<<===") 
-        print(apply_out) 
-        print("===>>> apply is successfull <<<===") 
+        print("===>>> kubectl apply output <<<===")
+        print(apply_out)
+        print("===>>> apply app successfull <<<===")
     return
 
 
 # 部署应用状态获取
 def deployStatus():
     kubeconfig = config.kube_config.load_kube_config(config_file="/root/.kube/config")
-    # create an instance of the API class
-    # corev1_api_instance = client.CoreV1Api(kubeconfig)
     appsv1_api_instance = client.AppsV1Api(kubeconfig)
     namespace = JNLP_ENV
     stsname = JNLP_CONTROL_NAME
-    # podname = "op-scofield-demo001-0"
     pretty = "true"
     for x in range(20):
-        try: 
+        try:
             sts_response = appsv1_api_instance.read_namespaced_stateful_set_status(stsname, namespace, pretty=pretty)
             if sts_response.status.replicas == sts_response.status.ready_replicas :
                 print("===>>> " +stsname + " is RUNNING <<<===")
                 chk_status = 1
                 break
             else:
-                if x < 20:
+                if x < 40:
                     time.sleep(15)
                 else:
                     chk_status = 0
@@ -172,17 +154,18 @@ def deployStatus():
 # 如果域名已存在,不会再更新
 def dnsAllocation():
     if JNLP_INGRESS == "nginx":
-        httpClient = httplib.HTTPConnection("10.26.31.137", 80, timeout=30)
+        httpClient = httplib.HTTPConnection("opsadmin.evbj.easou.com", 80, timeout=30)
         headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"}
         params = urllib.urlencode({'method': 'add', 'type': 'record', 'domain_id': 24, 'record_type': 'A', 'record_name': RECORD_NAME ,'record_ip': NGINX_RECORD_IP , 'record_ttl': 180})
         httpClient.request("POST", "/dns/dnsapi/?token=c2d1856be235a3207cd03b6f4d3c4094", params, headers)
         response = httpClient.getresponse().read()
         jstr = json.loads(response)
         nsStatus = jstr['status']
+        print(NGINX_RECORD_IP)
         if nsStatus == "-501":
-            print(JNLP_ENV + "-" + JNLP_CONTROL_NAME + JNLP_DOMAIN + " is already exist") 
-        elif nsStatus == "0": 
-            httpClient = httplib.HTTPConnection("10.26.31.137", 80, timeout=30)
+            print(JNLP_ENV + "-" + JNLP_CONTROL_NAME + JNLP_DOMAIN + " is already exist")
+        elif nsStatus == "0":
+            httpClient = httplib.HTTPConnection("opsadmin.evbj.easou.com", 80, timeout=30)
             httpClient.request("POST", "/dns/mkconfig/?token=c2d1856be235a3207cd03b6f4d3c4094")
             response = httpClient.getresponse().read()
             jstr = json.loads(response)
@@ -191,21 +174,49 @@ def dnsAllocation():
         else:
             print("*****Please contact DNS systen administrator*****")
     else :
-        print(">>> Ingress error, Only nginx !!! <<<") 
+        print(">>> Ingress error, Only nginx !!! <<<")
     return
 
+def cloudDns():
+    if JNLP_INGRESS == "nginx":
+        client = AcsClient('LTAI4LibOCW5ilIa', 'NiA9OumXJDHp4TwLwXWcCKGoDgDjms', 'cn-hangzhou')
+
+        # describe record
+        request = DescribeDomainRecordsRequest()
+        request.set_accept_format('json')
+        request.set_DomainName(DOMAINNAME)
+        request.set_RRKeyWord(RECORD_NAME)
+        response = client.do_action_with_exception(request)
+        jsondata = json.loads(response)
+        # print(response)
+        if jsondata['TotalCount'] != 0:
+            print(RECORD_NAME + "." + DOMAINNAME + " is already exists <<<")
+        else :
+        # add record
+            request = AddDomainRecordRequest()
+            request.set_accept_format('json')
+            request.set_Value(NGINX_RECORD_IP)
+            request.set_Type("A")
+            request.set_RR(RECORD_NAME)
+            request.set_DomainName(DOMAINNAME)
+            response = client.do_action_with_exception(request)
+            # print(response)
+            print(RECORD_NAME + "." + DOMAINNAME + " add sucess <<<")
+    else :
+        print(">>> Ingress error, Only nginx !!! <<<")
+    return
 
 def main(argv=None):
     if argv is None:
         args = sys.argv[1:]
         for opt_name in args :
             if opt_name in ('-a','--apply'):
-                print("===>>> deploy app to kubernetes <<<===") 
+                print("===>>> deploy app to kubernetes <<<===")
                 deployToKube()
                 time.sleep(10)
                 sys.exit()
             if opt_name in ('-b','--build'):
-                print("===>>> create deploy.yaml <<<===") 
+                print("===>>> create deploy.yaml <<<===")
                 deployYamlCreate()
                 sys.exit()
             if opt_name in ('-c','--check'):
@@ -213,10 +224,10 @@ def main(argv=None):
                 deployStatus()
                 sys.exit()
             if opt_name in ('-d','--dns'):
-                print("===>>> update dns resolve <<<===") 
-                dnsAllocation()
+                print("===>>> add/update dns resolve <<<===")
+                cloudDns()
                 sys.exit()
     return
 
 if __name__ == "__main__":
-    main()
+    main()