Commit 3cf42bfe authored by Spiros Koulouzis's avatar Spiros Koulouzis

added ssl and basic auth

parent 9e578a77
...@@ -4,34 +4,81 @@ ...@@ -4,34 +4,81 @@
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [ "source": [
"Upload ExoGeni Credentials from ~/.ssl/user.jks\n" "## Install Prerequisites"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import subprocess\n",
"import sys\n",
"import base64\n",
"import getpass\n",
"import requests\n",
"subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"pyyaml\"])\n",
"subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"networkx\"])\n",
"subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"matplotlib\"])\n",
"subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"plotly\"])\n",
"import yaml\n",
"import matplotlib\n",
"import plotly.graph_objects as go\n",
"import networkx as nx\n",
"import webbrowser"
] ]
}, },
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
"source": [ "source": [
"## Create ExoGeni Credentials " "## Create ExoGeni Credentials \n",
"Upload ExoGeni Credentials from ~/.ssl/user.jks"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 2,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"ename": "FileNotFoundError",
"evalue": "[Errno 2] No such file or directory: 'user.jks'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-2-a7453877d0f6>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mbase64\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"user.jks\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"rb\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mimage_file\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mexoGENI_keystore_as_base64\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbase64\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mb64encode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mimage_file\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"utf-8\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'user.jks'"
]
}
],
"source": [ "source": [
"import base64\n",
"with open(\"user.jks\", \"rb\") as image_file:\n", "with open(\"user.jks\", \"rb\") as image_file:\n",
" exoGENI_keystore_as_base64 = base64.b64encode(image_file.read()).decode(\"utf-8\") \n" " exoGENI_keystore_as_base64 = base64.b64encode(image_file.read()).decode(\"utf-8\") \n"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 3,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"ename": "KeyboardInterrupt",
"evalue": "Interrupted by user",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-3-3cdeee16635b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mgetpass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mexoGENI_credential_user\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetpass\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetpass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Enter your ExoGENI_credential_user'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\u001b[0m in \u001b[0;36mgetpass\u001b[0;34m(self, prompt, stream)\u001b[0m\n\u001b[1;32m 844\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_parent_ident\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 845\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_parent_header\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 846\u001b[0;31m \u001b[0mpassword\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 847\u001b[0m )\n\u001b[1;32m 848\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.7/site-packages/ipykernel/kernelbase.py\u001b[0m in \u001b[0;36m_input_request\u001b[0;34m(self, prompt, ident, parent, password)\u001b[0m\n\u001b[1;32m 902\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyboardInterrupt\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 903\u001b[0m \u001b[0;31m# re-raise KeyboardInterrupt, to truncate traceback\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 904\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyboardInterrupt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Interrupted by user\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 905\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 906\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwarning\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Invalid Message:\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexc_info\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: Interrupted by user"
]
}
],
"source": [ "source": [
"import getpass\n",
"exoGENI_credential_user = getpass.getpass('Enter your ExoGENI_credential_user')" "exoGENI_credential_user = getpass.getpass('Enter your ExoGENI_credential_user')"
] ]
}, },
...@@ -53,22 +100,72 @@ ...@@ -53,22 +100,72 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 6,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Enter your aws_access_key_id········\n"
]
}
],
"source": [ "source": [
"aws_access_key_id = getpass.getpass('Enter your aws_access_key_id')" "aws_access_key_id = getpass.getpass('Enter your aws_access_key_id')"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 7,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Enter your aws_secret_access_key········\n"
]
}
],
"source": [ "source": [
"aws_secret_access_key = getpass.getpass('Enter your aws_secret_access_key')" "aws_secret_access_key = getpass.getpass('Enter your aws_secret_access_key')"
] ]
}, },
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Enter your username········\n"
]
}
],
"source": [
"username = getpass.getpass('Enter your username')"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Enter your password········\n"
]
}
],
"source": [
"password = getpass.getpass('Enter your password')"
]
},
{ {
"cell_type": "markdown", "cell_type": "markdown",
"metadata": {}, "metadata": {},
...@@ -78,13 +175,22 @@ ...@@ -78,13 +175,22 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 19,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"https://lifewatch.lab.uvalight.net:30001/manager\n"
]
}
],
"source": [ "source": [
"base_url = input(\"Enter host base_url \" )\n", "# base_url = input(\"Enter host base_url \" )\n",
"# http://manager:8080\n", "# http://manager:8080\n",
"# http://localhost:30000\n", "# http://localhost:30000\n",
"base_url = 'https://lifewatch.lab.uvalight.net:30001/manager'\n",
"print(base_url)" "print(base_url)"
] ]
}, },
...@@ -97,11 +203,22 @@ ...@@ -97,11 +203,22 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 14,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"ename": "NameError",
"evalue": "name 'exoGENI_keystore_as_base64' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-14-97b4be67a8de>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mrequests\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0mpath\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"/credential\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mpayload\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'{\"cloud_provider_name\": \"ExoGENI\",\"keys\": {\"keystore\": \"'\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mexoGENI_keystore_as_base64\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m'\"}, \"token\": \"'\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mexoGENI_credential_token\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m'\", \"token_type\": \"password\", \"user\": \"'\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mexoGENI_credential_user\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m'\"}'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m headers = {\n\u001b[1;32m 5\u001b[0m \u001b[0;34m'Content-Type'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'application/json'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'exoGENI_keystore_as_base64' is not defined"
]
}
],
"source": [ "source": [
"import requests\n",
"path = \"/credential\"\n", "path = \"/credential\"\n",
"payload = '{\"cloud_provider_name\": \"ExoGENI\",\"keys\": {\"keystore\": \"'+exoGENI_keystore_as_base64+'\"}, \"token\": \"'+exoGENI_credential_token+'\", \"token_type\": \"password\", \"user\": \"'+exoGENI_credential_user+'\"}'\n", "payload = '{\"cloud_provider_name\": \"ExoGENI\",\"keys\": {\"keystore\": \"'+exoGENI_keystore_as_base64+'\"}, \"token\": \"'+exoGENI_credential_token+'\", \"token_type\": \"password\", \"user\": \"'+exoGENI_credential_user+'\"}'\n",
"headers = {\n", "headers = {\n",
...@@ -115,9 +232,25 @@ ...@@ -115,9 +232,25 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 21,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5efb35329c8dc53728a46cfc\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.7/site-packages/urllib3/connectionpool.py:986: InsecureRequestWarning: Unverified HTTPS request is being made to host 'lifewatch.lab.uvalight.net'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [ "source": [
"path = \"/credential\"\n", "path = \"/credential\"\n",
"payload = '{ \"cloud_provider_name\": \"EC2\",\"keys\": {\"aws_access_key_id\": \"'+aws_access_key_id+'\"}, \"token_type\": \"access_key\", \"token\": \"'+aws_secret_access_key+'\"}' \n", "payload = '{ \"cloud_provider_name\": \"EC2\",\"keys\": {\"aws_access_key_id\": \"'+aws_access_key_id+'\"}, \"token_type\": \"access_key\", \"token\": \"'+aws_secret_access_key+'\"}' \n",
...@@ -125,7 +258,9 @@ ...@@ -125,7 +258,9 @@
" 'Content-Type': 'application/json',\n", " 'Content-Type': 'application/json',\n",
" 'accept': 'application/json'\n", " 'accept': 'application/json'\n",
"}\n", "}\n",
"response = requests.post(base_url+path, data=payload,headers=headers)\n", "\n",
"\n",
"response = requests.post(base_url+path, data=payload,headers=headers,verify=False, auth=(username, password))\n",
"credential_id = response.text\n", "credential_id = response.text\n",
"print(credential_id)" "print(credential_id)"
] ]
...@@ -139,9 +274,18 @@ ...@@ -139,9 +274,18 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 24,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.7/site-packages/urllib3/connectionpool.py:986: InsecureRequestWarning: Unverified HTTPS request is being made to host 'lifewatch.lab.uvalight.net'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [ "source": [
"path = \"/tosca_template\"\n", "path = \"/tosca_template\"\n",
"payload = {}\n", "payload = {}\n",
...@@ -151,7 +295,7 @@ ...@@ -151,7 +295,7 @@
"\n", "\n",
"headers = {}\n", "headers = {}\n",
"\n", "\n",
"response = requests.request(\"POST\", base_url+path, headers=headers, files = files)\n", "response = requests.request(\"POST\", base_url+path, headers=headers, files = files,verify=False, auth=(username, password))\n",
"tosca_id = response.text\n", "tosca_id = response.text\n",
" " " "
] ]
...@@ -165,19 +309,84 @@ ...@@ -165,19 +309,84 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 29,
"metadata": { "metadata": {
"scrolled": true "scrolled": true
}, },
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"tosca_definitions_version: \"tosca_simple_yaml_1_0\"\n",
"topology_template:\n",
" node_templates:\n",
" ws-pema:\n",
" properties:\n",
" ports:\n",
" - \"30001:8080\"\n",
" interfaces:\n",
" Kubernetes:\n",
" delete:\n",
" inputs:\n",
" repository: \"https://github.com/QCAPI-DRIP/playbooks.git\"\n",
" resources:\n",
" - \"k8s/delete_service.yml\"\n",
" create:\n",
" inputs:\n",
" repository: \"https://github.com/QCAPI-DRIP/playbooks.git\"\n",
" resources:\n",
" - \"k8s/create_service.yml\"\n",
" scale:\n",
" inputs:\n",
" repository: \"https://github.com/QCAPI-DRIP/playbooks.git\"\n",
" resources:\n",
" - \"k8s/scale_service.yml\"\n",
" replicas: 1\n",
" autoscale:\n",
" inputs:\n",
" repository: \"https://github.com/QCAPI-DRIP/playbooks.git\"\n",
" resources:\n",
" - \"k8s/autoscale_service.yml\"\n",
" horizontal_pod_autoscaler: \"horizontal_pod_autoscaler.yml\"\n",
" info:\n",
" inputs:\n",
" repository: \"https://github.com/QCAPI-DRIP/playbooks.git\"\n",
" resources:\n",
" - \"k8s/get_info_service.yml\"\n",
" type: \"tosca.nodes.QC.Container.Application.Docker\"\n",
" artifacts:\n",
" image:\n",
" type: \"tosca.artifacts.Deployment.Image.Container.Docker\"\n",
" file: \"alogo53/ws-pema-lifewatch\"\n",
" repository: \"docker_hub\"\n",
"description: \"TOSCA example\\n\"\n",
"imports:\n",
"- nodes: \"https://raw.githubusercontent.com/QCDIS/sdia-tosca/master/types/nodes.yaml\"\n",
"- data: \"https://raw.githubusercontent.com/QCDIS/sdia-tosca/master/types/data.yml\"\n",
"- capabilities: \"https://raw.githubusercontent.com/QCDIS/sdia-tosca/master/types/capabilities.yaml\"\n",
"- policies: \"https://raw.githubusercontent.com/QCDIS/sdia-tosca/master/types/policies.yaml\"\n",
"- interfaces: \"https://raw.githubusercontent.com/QCDIS/sdia-tosca/master/types/interfaces.yml\"\n",
"repositories:\n",
" docker_hub: \"https://hub.docker.com/\"\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.7/site-packages/urllib3/connectionpool.py:986: InsecureRequestWarning: Unverified HTTPS request is being made to host 'lifewatch.lab.uvalight.net'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [ "source": [
"import yaml\n",
"\n",
"path = \"/tosca_template/\"+tosca_id\n", "path = \"/tosca_template/\"+tosca_id\n",
"payload = {}\n", "payload = {}\n",
"headers= {'accept':'text/plain'}\n", "headers= {'accept':'text/plain'}\n",
"\n", "\n",
"response = requests.request(\"GET\", base_url+path, headers=headers, data = payload)\n", "response = requests.request(\"GET\", base_url+path, headers=headers, data = payload,verify=False, auth=(username, password))\n",
"tosca = response.text\n", "tosca = response.text\n",
"print(tosca)" "print(tosca)"
] ]
...@@ -191,13 +400,30 @@ ...@@ -191,13 +400,30 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 38,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.7/site-packages/urllib3/connectionpool.py:986: InsecureRequestWarning: Unverified HTTPS request is being made to host 'lifewatch.lab.uvalight.net'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"data": {
"image/png": "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dlv279+fF198MUNDQ7nvvvuybNmyjI6OZnR0NBse+dHMeNPjo5k+NT6zPTnydtq6FqT1Cz1paZ+Txb/zYJZt+uuf/mzPsm89PvPc1paPP+9bbrklK1euzMsvv5yRkZFs2bIlLtOF/0z44CMajUZ2796dsbGxLFmyJGvXrs3OnTtz9OjRXHHFFXn66afz5JNPZmJiIueee246OzvT2nr6W2nll3syp/1nvzv+93+R5tRExg+9kLF/fSrnrvzVtLS0puvyX8+7u/4kU+99cOnC5InhjL2yP0lyTltr2ts+fvlOnDiRnp6edHV1ZXBwMA899NCnsBrw+SN88BErVqxIV1dX1q5dmyTp6enJ8uXLc9VVV6WtrS0jIyPp6+vL/Pnzc8EFF2ThwoW58847Txvj66uXzDxu65qf1s6uHH7gmxn+/rezYN2GdCxcmiSZ/9Wb0j6/N2/82bfyb3+wPm/+1e9n4p0jSZJmkrkdH//biK1bt+axxx5Ld3d3+vr6cv311/8fVwI+n/zLMpglv/vnz+Rvdv4gw9//dpZseOQTvbalJVm36rz80Y2/NEuzg7oc8cEs2XD1RTnnpyemfFKd7W259eqLPuUZAYnwway5fOm8fGPNsnyC81OSJHM7WrP5ayvzC0vcpQFmg486YZa5OwP8/yJ8cAY8f/hYtu05mN3/8nZakoz/F/fj++pXvpRbr77IkR7MMuGDM+jo6Mk8/k+HM/iTExkZn0hPZ0dW9nbn67/oDuxwpggfAKU4uQWAUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFKED4BShA+AUoQPgFL+HWZOPF1Nbc9sAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [ "source": [
"import networkx as nx\n", "\n",
"import matplotlib\n",
"import plotly.graph_objects as go\n",
"\n", "\n",
"\n", "\n",
"def build_graph(node_templates):\n", "def build_graph(node_templates):\n",
...@@ -226,7 +452,7 @@ ...@@ -226,7 +452,7 @@
" path = \"/tosca_template/\"+tosca_id\n", " path = \"/tosca_template/\"+tosca_id\n",
" payload = {}\n", " payload = {}\n",
" headers= {'accept':'text/plain'}\n", " headers= {'accept':'text/plain'}\n",
" response = requests.request(\"GET\", base_url+path, headers=headers, data = payload)\n", " response = requests.request(\"GET\", base_url+path, headers=headers, data = payload,verify=False, auth=(username, password))\n",
" return response.text\n", " return response.text\n",
"\n", "\n",
"tosca = get_tosca(tosca_id)\n", "tosca = get_tosca(tosca_id)\n",
...@@ -244,23 +470,65 @@ ...@@ -244,23 +470,65 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 39,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.7/site-packages/urllib3/connectionpool.py:986: InsecureRequestWarning: Unverified HTTPS request is being made to host 'lifewatch.lab.uvalight.net'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [ "source": [
"path = \"/planner/plan/\"+tosca_id\n", "path = \"/planner/plan/\"+tosca_id\n",
"payload = {}\n", "payload = {}\n",
"headers= {'accept':'text/plain'}\n", "headers= {'accept':'text/plain'}\n",
"\n", "\n",
"response = requests.request(\"GET\", base_url+path, headers=headers, data = payload)\n", "response = requests.request(\"GET\", base_url+path, headers=headers, data = payload,verify=False, auth=(username, password))\n",
"planed_tosca_id = response.text" "planed_tosca_id = response.text"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 40,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.7/site-packages/urllib3/connectionpool.py:986: InsecureRequestWarning: Unverified HTTPS request is being made to host 'lifewatch.lab.uvalight.net'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"compute: {'disk_size': '20000 MB', 'mem_size': '1000 MB', 'num_cores': 1, 'os': 'Ubuntu 18.04', 'user_name': 'vm_user'}\n",
"---------------------------------------------------------------------------------------------------------------------\n",
"compute_1: {'disk_size': '20000 MB', 'mem_size': '1000 MB', 'num_cores': 1, 'os': 'Ubuntu 18.04', 'user_name': 'vm_user'}\n",
"---------------------------------------------------------------------------------------------------------------------\n",
"topology: {'domain': 'Frankfurt', 'provider': 'EC2'}\n",
"---------------------------------------------------------------------------------------------------------------------\n",
"ws-pema: {'ports': ['30001:8080']}\n",
"---------------------------------------------------------------------------------------------------------------------\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [ "source": [
"tosca = get_tosca(planed_tosca_id)\n", "tosca = get_tosca(planed_tosca_id)\n",
"\n", "\n",
...@@ -285,23 +553,59 @@ ...@@ -285,23 +553,59 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 41,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.7/site-packages/urllib3/connectionpool.py:986: InsecureRequestWarning: Unverified HTTPS request is being made to host 'lifewatch.lab.uvalight.net'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [ "source": [
"path = \"/provisioner/provision/\"+planed_tosca_id\n", "path = \"/provisioner/provision/\"+planed_tosca_id\n",
"payload = {}\n", "payload = {}\n",
"headers= {'accept':'text/plain'}\n", "headers= {'accept':'text/plain'}\n",
"\n", "\n",
"response = requests.request(\"GET\", base_url+path, headers=headers, data = payload)\n", "response = requests.request(\"GET\", base_url+path, headers=headers, data = payload,verify=False, auth=(username, password))\n",
"provisioned_tosca_id = response.text" "provisioned_tosca_id = response.text"
] ]
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 42,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.7/site-packages/urllib3/connectionpool.py:986: InsecureRequestWarning: Unverified HTTPS request is being made to host 'lifewatch.lab.uvalight.net'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"compute: 3.120.209.252\n",
"compute_1: 3.126.139.56\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAEuCAYAAADx63eqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deVSUhf7H8fcMICBII+4KooZrbqmZWgqu3NT06s891HIp11xKW8zAvdSyum6VoTeX61apXJdMc8vUTFPRJEVld8EFBWQbZn5/eKMoyw0cYD6vczyHYZ7nmc/M0fn4nXkWg9VqtSIiImInjLYOICIi8jCp+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK6o+ERExK442jqASGF2OTmdtYdiCb9wgxtpZjxcHKlR1oPuDb0o4e5s63gidslgtVqttg4hUtgcjUlk3s4Idp1KACDdbMm+z8XRiBXwr16KYX6+1PM22SiliH1S8YnksmX7I5m2KZw0cxZ/96/LYAAXRwcmtK9BYJNKDy2fiL3TR50iuehW6Z0kNdNyx2WtVkjNzGLappMAKj+Rh0Q7t4jkkqMxiUzbFH5Xpfd7qZkWpm0K51hsYh4lE5HfU/GJ5JJ5OyNIM2fd17pp5izm74zI5UQicjsqPrFrixcv5tlnn82+XbVqVbp3755929vbm59++okxY8ZQunRpPDw8qFOnDsePH8+xncvJ6ew6lUBq5DFi5/Xn+verifmwD7HzB5B8Ykf2clZzJte+/YzY+S8Q81EgV7bMxZKZjtUKG7/eTvkKXsycOZPSpUtTrlw51q1bx6ZNm6hWrRqenp5Mnz49e1s//PADTZs2xWQyUa5cOUaMGEFGRkYevloihYOKT+yan58fe/bswWKxEB8fT0ZGBvv27QPg7NmzJCcnc+nSJXbv3s2pU6e4fv06q1evpkSJEjm2s/ZQbPbPWcnXyEq9jtfwf1Oy4xiubplL5pVb91/buYTMq3GUe+EjKrz0CVlJV7i+9z8AGICLFy+QlpZGXFwckydPZvDgwSxbtoxDhw6xZ88epkyZwrlz5wBwcHBgzpw5XL58mX379rF9+3bmz5//EF41kYJNxSd2rUqVKhQrVowjR46we/duAgICKF++POHh4ezatYvmzZvj5OREUlIS4eHhWK1WatasSbly5XJsJ/zCjRyHLJia98Xg6IRLxTq4PvoEKeF7sFqtJB/dQvHWg3FwLYbRuSiPNOtBysk9AGRkWTAYHZkwYQJOTk706tWLy5cvM2rUKIoVK8Zjjz1GrVq1OHr0KAANGzakSZMmODo6UqlSJV566SV27dr18F48kQJKe3WK3fPz82Pnzp1ERETg5+eHyWRi165d7Nu3Dz8/P1q1asWIESMYPnw4UVFRdO3aldmzZ5OYmEitWrWAW8fpVRizBgCjizvGIi7Z23f0KE1W8lUsN69jzUzn/JLRv3t0K1h+K0xn90dwcHAAwNXVFYAyZcpk3+/q6kpycjIAp06dYuzYsfz444/cvHkTs9lMw4YN8+Q1EilMNPGJ3fu1+Pbs2YOfnx9+fn7s2rWLXbt24efnB8DLL7/MoUOH+Pnnnzl16hSzZs2iYsWKJCcnk5yczPB/783eniUtGUtGWvZt840EHNw9MRb1wODoTPlB86g4ZtX//qym4itrs5c1Gu4+99ChQ6lRowanT5/mxo0bTJ8+HR2WK3JnKj6xe35+fuzYsYPU1FS8vLxo3rw5W7Zs4cqVKzz++OMcPHiQAwcOkJmZiZubGy4uLhiNOf/p1CjrgbPjb7+7/t1yrFmZpMUcJ/XMD7jVeBqDwYh7vXZc276IrJRbhy6Yky6TevYQAEUcjDg63H3zJSUl4eHhgbu7O+Hh4SxYsCAXXg2Rwk/FJ3avWrVquLu707x5cwA8PDyoUqUKTz31FA4ODty4cYPBgwdTvHhxfHx8KFGiBOPGjcuxjW4NvbJ/dnAvjtHFndi5/bkc+h6eAcNxKuENQPGWL+BYvBwXPn+F6Pe7c3HlW2RejQPACrg63f23D7Nnz2bFihUUK1aMwYMH07Nnzwd8JUTsg05ZJpJLXlz6Ixu2fMPl0PfwGv7ve1rXYICAWmVYGNgoj9KJyK808YnkkuH+vhT5344p98rF0YFh/r65nEhEbkfFJ5JL6nmb6NukIvewfwoArk5GJrSvQV0vXaVB5GHQR50iueyur84AuDjp6gwiD5uKTyQPHItNZP7OCHb8koABSPvD9fgyMjOp6JjER0M6aNITechUfCJ56EpyOmsPxxJ+PokbaZl4uDhRo1wx6ril0LVDOyIjI3FxcbnzhkQk16j4RGykQ4cOdO7cmRdffNHWUUTsiopPxEZ27tzJSy+9xMmTJ/90QLyI5B39axOxET8/Pzw8PNiwYYOto4jYFRWfiI0YDAbGjx/PrFmzbB1FxK6o+ERsqGvXrly4cIG9e/feeWERyRUqPhEbcnBwYOzYsZr6RB4i7dwiYmM3b96kUqVK7Nmzh+rVq9s6jkihp4lPxMaKFi3K0KFDee+992wdRcQuaOITyQcSEhKoVq0a4eHhOa64LiK5TxOfSD5QqlQpevXqxb/+9S9bRxEp9DTxieQTERERNG3alHPnzuHu7m7rOCKFliY+kXzC19cXPz8/QkJCbB1FpFDTxCeSjxw4cICePXsSERGBo6OjreOI/KXLyemsPRRL+IUb3Egz4+HiSI2yHnRv6EUJd2dbx/tbKj6RfKZFixYMHTqU3r172zqKyJ8cjUlk3s4Idp1KACD9D5fcsgL+1UsxzM+Xet7585JbKj6RfCY0NJSgoCAOHTqEwXCv13MXyTt3fZFlA7g45t+LLOs7PpF8pkOHDqSmpvLtt9/aOopItluld5LUzL8vPQCrFVIzs5i26STL9kc+lHz3QsUnks8YjUZeffVVncZM8o2jMYlM2xROaqblzgv/TmqmhaAVuzAYDJjN5gfOMXHiROrUqYOjoyPBwcH3vR0Vn0g+FBgYyLFjxzh27Jito4gwb2cEaeas+1o3/T7Xux1fX19mzpxJhw4dHmg7Kj6RfMjZ2ZmXX36Z2bNn2zqKFAAxMTF07dqVUqVKUaJECUaMGIHFYmHq1Kn4+PhQunRp+vXrx/Xr1wGIjIzEYDCwePFivL29KV68OAsXLuTgwYPUrVsXk8nEiBEjgFt7b25Ys4Lzn4/j6tYFRM/pQdwnQ0iNPJL9+LHzB+S4nbhnOZdDb/3dvbD8dQBMJhPu7u7s27cPgJCQEGrWrEnx4sUJCAggKirqjs+zf//+PPPMMxQrVuyBXi8Vn0g+NWTIEP773/8SExNj6yiSj2VlZdGxY0d8fHyIjIwkLi6OXr16sWTJEpYsWcKOHTs4e/YsycnJ2WX2qwMHDnD69GlWrVrF6NGjmTZtGtu2bePEiROsXr2aXbt2sfZQLADp8b/gaCqH98srMDXvQ8JX08lKTbpjvrJ93gFg5oZDJCcn07RpU9avX8/06dP58ssvSUhIoHnz5g91L2YVn0g+ZTKZeP755/nggw9sHUXysR9++IH4+HhmzZqFm5sbLi4uPP300yxfvpyxY8dSpUoV3N3dmTFjBitXrszxXdvEiRNxcXGhXbt2uLm50bt3b0qXLk2FChVo3rw5P/30E+EXbmDOsuLgZqLYE50xODjiVrMFTp4VSD1z8K5z/nLht5JcuHAhb7zxBjVr1sTR0ZE333yTI0eO3NXUlxtUfCL52OjRo1m8eDGJiYm2jiL5VExMDD4+Pn864UF8fDw+Pj7Zt318fDCbzVy8eDH7d78/Ibqrq+ufbicnJ3Mj7VZROriXyHF4jaNHabKSr951zhtpmdk/R0VFMWrUKEwmEyaTCU9PT6xWK3FxcXe9vQeh4hPJxypWrEj79u35+OOPbR1F8ilvb2+io6P/tNdk+fLlc0xQ0dHRODo63vPVPzxcbhVqVvIVfn/Yt/lGAg7ungAYi7hgzUzPvi8r5dpvG/hfWXq4OOXI/PHHH5OYmJj9JzU1lWbNmt1Ttvul4hPJ58aNG8dHH31Eenr6nRcWu9O4cWPKlSvH66+/TkpKCmlpaezdu5fevXszZ84czp07R3JyMm+++SY9e/a851Ph1SjrgaODgayURJJ+3IA1y0xK+HdkXonB9dFGADiVrkzKyd1Ys8yknz/NzV++z17fWNQDDEZKWH/71GLIkCHMmDGDEydOAHD9+nXWrFlzxyyZmZmkpaVhsVgwm82kpaWRlXXve42q+ETyuXr16lG7dm1WrFhh6yiSDzk4OBAaGkpERAQVK1bEy8uLVatWMWDAAPr27UuLFi2oXLkyLi4u93XZq24NvQBwLl8d87V4Yj7qQ+KuzynV5Q0cXD0AMLXoi/naeWI+6MX175bjVssve32jkwueT/Xko1G9MZlM7N+/ny5duvDaa6/Rq1cvPDw8qF27Nps3b75jlsGDB+Pq6sp//vMfpk2bhqurK0uXLr3n56RTlokUANu2bWPUqFGEhYVhNOr/q5J3bt68SUxMDDExMZw6dYoffviByCI+7N+8lrKBM+95ewYDBNQqw8LARnmQ9v7o9O8iBUDr1q0pUqQImzdvfuCDd0X+ytatWwkICMDd3R2r1UpKSgqPPPIIY9+exg9b7m+bLo4ODPP3zd2gD0j/dRQpAAwGA+PGjWPmzHv/H7fI3WrRogUVKlQgOTmZlJQUnJ2dCQ0NpaKnG97Fi+LqdG+V4epkZEL7GtT1ururNOzZswd3d/fb/slN+qhTpIDIzMzE19eXNWvW0LhxY1vHkUJo/fr1DBo0iMTERKxWKx06dGD9+vXZ9xeWqzM4BD/ImT5F5KFxcHDAYDCwcuVKevToYes4UogkJCQwaNAglixZwrJlyyhSpAhHjhzh66+/5pFHHslerq6XiRZVS3ItJYOYa6k4GQ2YLb81oIujEQejgTY1SzPz/+rStlZZWzydO9LEJ1KAJCcnU7lyZfbv38+jjz5q6zhSwFmt1uzTlQUGBjJ58mSKFi1KWloaJ0+e5PHHH//Lda8kp7P2cCzh55O4kZaJh4sTNcoVo1sDXYFdRHLZhAkTSExMZN68ebaOIgVYfHw8w4YN4/Tp04SEhPDkk0/aOtJDo51bRAqYkSNH8p///IfLly/bOooUQFarlcWLF1O/fn3q1KnD4cOH7ar0QBOfSIE0ePBgvLy8CAoKsnUUKUCioqJ48cUXSUhIICQkhPr169s6kk1o4hMpgF555RXmzZvHzZs3bR1FCgCLxcL8+fNp2LAh/v7+HDhwwG5LDzTxiRRYnTt3JiAggGHDhtk6iuRjp0+fZtCgQWRkZGRf/NXeaeITKaDGjRvH+++/f18n6ZXCLysri/fee4+mTZvSpUsXvvvuO5Xe/+iUZSIF1FNPPUXp0qX56quv6Natm63jSD5y4sQJBgwYQNGiRTlw4IAOffkDTXwiBdSvpzGbNWsW+sZC4NbZfaZOnYq/vz8DBgxg+/btKr3bUPGJFGCdOnXi2rVr7Nmzx9ZRxMYOHz7ME088wffff8/hw4d56aWXdCWPv6BXRaQAc3Bw4JVXXmHWrFm2jiI2kpaWxptvvsk//vEPxo4dy8aNG/H29rZ1rHxNxSdSwPXr14+DBw/y888/2zqKPGT79u3j8ccfJzw8nGPHjtGvXz8MBoOtY+V7Kj6RAs7V1ZXhw4cze/ZsW0eRhyQlJYUxY8bQtWtXJk+ezBdffEHZsvnzhND5kYpPpBAYNmwYX331FfHx8baOInlsx44d1K1bl4SEBMLCwujevbumvHukA9hFComXX36ZokWL8s4779g6iuSBGzduMH78eDZu3MiCBQvo2LGjrSMVWJr4RAqJMWPGsGjRIpKSkmwdRXLZ5s2bqV27NllZWYSFhan0HpAmPpFCpFevXjRu3JixY8faOorkgqtXrzJmzBh2797Np59+Sps2bWwdqVDQxCdSiIwbN44PPviAzMxMW0eRB/Tll19Su3ZtTCYTYWFhKr1cpFOWiRQiDRs2xNfXl1WrVhEYGGjrOHIfLl68yMiRIzl69Chr1qzhqaeesnWkQkcTn0ghM27cOGbOnKnTmBUwVquV5cuXU7duXapUqcKRI0dUenlE3/GJFDJWq5W6desye/ZsAgICbB1H7kJcXBxDhgwhKiqKkJAQGjVqZOtIhZomPpFCxmAw8Oqrr+o0ZgWA1Wpl0aJF1K9fn0aNGvHjjz+q9B4CTXwihVBGRgZVqlRhw4YNNGjQwNZx5DbOnTvH4MGDuX79OiEhIdSpU8fWkeyGJj6RQqhIkSKMHj1apzHLhywWCx999BFPPPEE7dq1Y9++fSq9h0wTn0ghdePGDSpXrszhw4fx8fGxdRwBfvnlFwYOHAjAZ599RvXq1W2cyD5p4hMppDw8PBg4cCBz5syxdRS7Zzabeffdd3nqqafo1asXu3fvVunZkCY+kUIsLi6OOnXqEBERgaenp63j2KVjx44xYMAATCYTn376KZUrV7Z1JLuniU+kEKtQoQKdOnViwYIFto5idzIyMggODqZ169YMHTqUb775RqWXT2jiEynkjh8/Ttu2bTl37hwuLi62jmMXDh48yIABA6hUqRILFy6kQoUKto4kv6OJT6SQq127Ng0aNGDp0qW2jlLopaamMn78eDp27Mgbb7zBhg0bVHr5kIpPxA6MGzeO9957D4vFYusohdZ3331HvXr1iIqKIiwsjD59+ugCsfmUik/EDvj5+VGsWDFCQ0NtHaXQSU5OZuTIkfTs2ZN3332XVatWUbp0aVvHkr+h4hOxAwaDgXHjxuk0Zrls27Zt1KlTh6SkJMLCwujSpYutI8ld0M4tInbCbDZTrVo1li1bRrNmzWwdp0BLTEzk1Vdf5ZtvvmHhwoU888wzto4k90ATn4idcHR0ZOzYsZr6HlBoaCi1a9fGycmJsLAwlV4BpIlPxI6kpKRQuXJlvvvuO6pVq2brOAXK5cuXGTVqFAcOHGDRokX4+/vbOpLcJ018InbEzc2NIUOG8N5779k6SoFhtVpZvXo1derUoUyZMhw9elSlV8Bp4hOxM5cuXaJ69eqEh4dTpkwZW8fJ186fP8/w4cMJDw8nJCSEJk2a2DqS5AJNfCJ2pnTp0vTq1Yu5c+faOkq+ZbVa+fe//029evWoVasWP/30k0qvENHEJ2KHTp8+TbNmzYiMjMTNzc3WcfKV6OhoXnrpJS5cuEBISAiPP/64rSNJLtPEJ2KHqlatSosWLQgJCbF1lHzDYrGwcOFCGjZsyNNPP80PP/yg0iukNPGJ2Kn9+/fTu3dvTp8+jaOjo63j2FRERASDBg0iLS2NkJAQatWqZetIkoc08YnYqSZNmuDl5cXatWttHcVmsrKymDNnDk2aNKFTp07s3btXpWcHNPGJ2LENGzYwadIkfvzxR7s7ofLPP//MwIEDcXZ2ZtGiRfj6+to6kjwkmvhE7FjHjh25efMmO3bssHWUhyYzM5Pp06fj5+dH//79+fbbb1V6dsa+P9gXsXNGo5FXX32VWbNm0apVK1vHyXNHjhzhhRdeoEyZMhw6dIiKFSvaOpLYgCY+ETsXGBjI0aNHCQsLs3WUPJOens5bb71Fu3btGD16NJs3b1bp2TEVn4idc3Z2ZuTIkcyePdvWUfLEgQMHaNCgASdOnODo0aP079/f7r7PlJy0c4uIcO3aNR599FGOHTuGl5eXrePkips3bzJx4kRWrFjBhx9+SPfu3VV4AmjiExGgePHi9O/fnw8++MDWUXLFrl27qFu3LhcuXCAsLIwePXqo9CSbJj4RASAqKoq6devSuXNnvvzyS86ePUvp0qVtHeueJCUl8dprr7Fhwwbmz59Pp06dbB1J8iFNfCJCZGQkw4cPJyUlheXLl5OZmUlWVpatY92Tr7/+mtq1a5ORkcHx48dVevKXdDiDiHD27Fm+/vrrHGXn6upqw0R379q1a4wdO5YdO3awaNEi2rZta+tIks9p4hMRWrVqxb59+yhRogRw6yDvglB869ato3bt2ri7u3P8+HGVntwVfccnItkuXrzIU089xZkzZ7BYLPl2h5CEhARGjhzJ4cOH+eyzz2jevLmtI0kBoo86RSRbmTJlOHHiBHPmzMFgMHA5OZ21h2IJv3CDG2lmPFwcqVHWg+4NvSjh7vzQ81mtVlauXMmYMWPo168fixcvLhCTqeQvmvhE5E+OxiQyb2cEu04lAJButmTf5+JoxAr4Vy/FMD9f6nmbHkqm+Ph4hg4dytmzZwkJCeGJJ554KI8rhY++4xORHJbtj6TXp/v55uRF0s2WHKUHkPa/3239+SK9Pt3Psv2ReZrHarXy2WefUb9+fR5//HEOHTqk0pMHoo86RQqASpUqsWjRItq0aXPX6zz//PN4eXkxderUu15n2f5Ipm06SWqm5Y7LWq2QmpnFtE0nAQhsUumuH+duRUZGMnjwYK5du8a2bduoW7durj+G2B9NfCIC3Pp4c9qm8Lsqvd9LzbQwbVM4x2IT/3KZSpUqsW3btrvepsViYe7cuTRq1Ig2bdqwf/9+lZ7kGk18IgLAvJ0RpJlvf9C61ZKFwejwl+ummbOYvzOChYGNHjjHqVOnGDhwIBaLhb1791K9evUH3qbI72niEylgTp48SeXKlZkxYwZPP/10jvsMBgMRERHZty9fvkzbtm0pVqwYfn5+REVFZd8XHh5O27Zt8fT0xLdqNf677gt+3dXt8n/ncOXreVxcHUT0e/9HWnQYsfMHcP3Al8R/NoLoOT1IWPcuVnMGcOtjz9D//pc6dethMplo1qwZx44dA6Bv375ER0fz7LPP4u7uzsyZMwHYv38/zZo1w2QyUa9ePbZv386sWbNo1qwZFStW5Pz58zRq1IjKlSuzfPnyvHxJxc6o+EQKkMOHDxMQEMC//vUvypUrd8flly9fzsSJE7l8+TL169fnueeeAyAlJYW2bdvSp08fLl26RM/XZnNx83wyLkdnr5vy8y4eadYT77FrcPGqBcDN8D2U7jGJCkM+IyPhHMlhtz6+zLhwhouhH9Bh2NtcuXKFl156iU6dOpGens7SpUupWLEioaGhJCcnM378eOLi4ujQoQNvvfUWV69eZfjw4QQEBLBhwwZ27txJaGgomzdvJikpie+//5769evnwasp9krFJ1JA7Nmzh06dOvH555/TsWPHu1qnQ4cOtGjRAmdnZ6ZNm8a+ffuIiYnhv//9L5UqVeKFF17A0dGRlGLeFK3ejJvh32WvW9T3SVy8amEwGDE4FgGgWMNOOBYrgYNrMYr6Nibj4lkAko5uwb3+P0gv/igODg70798fZ2dn9u/ff9tcy5Yto3379rRp04apU6cyYcIEqlevzsCBA6lcuTJGo5Hjx4+TmppKuXLleOyxxx7w1RP5jYpPpIBYuHAhzZo1w9/f/67X8fb2zv7Z3d0dT09P4uPjiYqK4sCBA5hMJkwmEwteaEHKiZ1kpVzLXt7Bo9SftufgXjz7Z4OjM9bMNADM1y9x44d1zH+hefY2Y2JiiI+Pv22uqKgoVq9ejaurK1OmTCEjI4PIyEguXLiAm5sbq1atYuHChZQrV44OHToQHh5+189Z5E5UfCIFxMKFC4mOjmbMmDEAuLm5cfPmzez7L1y48Kd1YmJisn9OTk7m6tWrlC9fHm9vb/z8/EhMTCQxMZGhi3dT8ZW1lAgY/tvK93C6MkePUjzSrAfDFu/J3ubNmzfp3bv3/zb127bS0tI4ceIERqORzz//nIyMDK5fv05KSgqvv/46AAEBAXzzzTecP3+eGjVqMHjw4LvOInInKj6RAqJYsWJs2bKF3bt38/rrr1OvXj1OnDjBkSNHSEtLIzg4+E/rbNq0ie+++46MjAwmTpxIkyZN8Pb2pmPHjpw6dYqlS5eSmZlJ1ZKuWC9FkHk55s8PfBfc6wWQ/NNmnK+dwWq1kpKSwsaNG0lKSgJunQrt7Nmz7N27l/r16+Pu7k6xYsUoWbIkFouFtLQ0du7cSWxsLBcvXmT9+vWkpKTg7OyMu7s7RqPeqiT36G+TSAFiMpn45ptv2Lx5M0uXLuXtt9+mTZs2VK1a9U97eAL06dOHSZMm4enpyaFDh1i2bBlwq0S3bt3KypUrKV++PBO7P0XC9hCsWZn3lcu5XFXKdHyZrz+dQfHixfH19WXJkiXZ948ZM4ZXXnmF5s2b07hxYzZu3EhoaCjTp0+nVKlSeHt7M2vWLCwWCxaLhffff5/y5cvj6enJrl27WLBgwX3lErkdnatTRAB4cemPfPPzRe7nDcFggIBaZW57HN/27dsZPHgwzZs3Z86cOXh6ej54WJEHoAPYRQSAvg1KszUsBhyK3PO6Lo4ODPP3zfG769evM27cOLZs2cLChQtp3759bkUVeSD6qFNEuHr1KqP6/pMGhkhcne7tbcHVyciE9jWo6/XbVRo2btxI7dq1sw9LUOlJfqKJT8TOXblyhTZt2tCuXTveeWc0yw9EMW1TOGnmLP7uixCD4dakN6F9jewTVF+5coXRo0fz/fff8/nnn9OyZcuH8yRE7oEmPhE79mvpBQQE8M4772AwGAhsUolVLzYhoFYZnB2NuDjmfJtwcTTi7GgkoFYZVr3YJLv01q5dS506dShZsiTHjh1T6Um+pZ1bROzU5cuXadOmDc888wzTp0/Pcazdr64kp7P2cCzh55O4kZaJh4sTNcoVo1uD367AfuHCBYYPH87PP/9MSEgITZs2fdhPReSeqPhE7NDly5dp3bo1HTp0YNq0abctvTuxWq0sXbqUcePGMWjQICZOnIiLi0sepBXJXfqOT8TOJCQk0Lp1a5599lmmTp16X6UXExPDSy+9RHx8PJs3b6ZBgwZ5kFQkb+g7PhE78mvpderU6b5Kz2Kx8PHHH9OgQQOaNWvGwYMHVXpS4GjiE7ETly5donXr1vzzn/9k8uTJ91x6Z86cYfDgwaSkpLBz505dMUEKLE18Inbg0qVLtGrVii5dutxz6a8R+70AABkhSURBVGVlZfHBBx/w5JNP0qFDB77//nuVnhRomvhECrmLFy/SqlUrunXrRnBw8D2V3smTJxk4cCBOTk7s27ePqlWr5mFSkYdDE59IIfZr6XXv3p1JkybddellZmYyY8YMWrRoQWBgIDt27FDpSaGhiU+kkLpw4QKtWrWiR48et71k0V85cuQIAwYMoFSpUvz444/4+PjkXUgRG9DEJ1II/Vp6PXv2vOvSS09P5+2336Zdu3aMHDmSLVu2qPSkUNLEJ1LInD9/nlatWtG7d2/efvvtu1rnwIEDDBgwgKpVq3LkyBHKly+fxylFbEfFJ1KInD9/npYtW/Lcc88xceLEOy5/8+ZNgoKCWLp0KR9++CE9evS4rwPaRQoSfdQpUkj8WnqBgYF3VXq7d++mXr16xMbGEhYWRs+ePVV6Yhc08YkUAvHx8bRs2ZL+/fvz5ptv/u2ySUlJvP7666xbt4758+fTuXPnh5RSJH/QxCdSwMXFxeHv78/zzz9/x9LbunUrderUIS0tjePHj6v0xC5p4hMpwOLi4mjZsiUDBgzg9ddf/8vlrl27xiuvvMK3337LJ598Qrt27R5iSpH8RROfSAEVGxuLv78/AwcO/NvSW79+PXXq1KFo0aKEhYWp9MTuaeITKYBiY2Np2bIlgwcPZvz48bddJiEhgZEjR3L48GFWrFhBixYtHnJKkfxJE59IARMTE4O/vz8vvvjibUvParWycuVK6tSpQ8WKFTl69KhKT+R3NPGJFCAxMTG0bNmSIUOG8Oqrr/7p/vj4eIYOHcqZM2fYsGEDjRs3tkFKkfxNE59IAREdHY2/vz9Dhw79U+lZrVZCQkKoX78+9evX59ChQyo9kb+giU+kAIiOjqZly5aMGDGCMWPG5LgvKiqKwYMHc+XKFb755hvq1atno5QiBYMmPpF8LioqCn9//z+VnsViYd68eTRq1IhWrVpx4MABlZ7IXdDEJ5LPmM1mjEYjRqORyMhIWrZsyahRoxg9enT2MqdPn2bgwIGYzWb27NlDjRo1bJhYpGDRxCeSz4wcOZInn3ySn3/+mZYtWzJ69Ojs0svKymL27Nk0bdqU//u//1PpidwHg9Vqtdo6hIjckpWVhaenJ6mpqRgMBqZOncq4ceMAOHHiBAMGDMDNzY1FixZRpUoVG6cVKZg08YnkI3v27CErK4vMzEwsFgtr1qzh+vXrTJkyJfssLdu3b1fpiTwAfccn8pBcTk5n7aFYwi/c4EaaGQ8XR2qU9aB7Qy9KuDsDMHfuXFJSUjAajTg7O3Pu3DmaNm1K5cqVOXz4MN7e3jZ+FiIFnz7qFMljR2MSmbczgl2nEgBIN1uy73NxNGIF/KuXYpifL09WLYuzszMDBgzg+vXrbNy4kdmzZxMYGKhr5YnkEhWfSB5atj+SaZvCSTNn8cd/aVHvdKT8S5/gVLw8BgO4ODrwcgsv6rpeZ9CgQTz22GPMnTuXsmXL2ia8SCGl7/hE/qBSpUps27btgbdzq/ROkpr559L7I6sVUjOzmL3tLD0nzGXKlCmsXbtWpSeSB/Qdn0geOBqTyLRN4aRmWu688O9kGRxwb96Pak2a5lEyEdHEJ/I7ffv2JTo6mmeffRZ3d3dmzpzJhg0beOyxxzCZTPj7+3Py5Mns5StVqsSMGTOoVasWxYsX54UXXiAtLY15OyNIM2eRdGQLcQsHE/NBLy6tnYw56cptH9eSlsLl0PeI+bAPER/1Z9DoN7BYbpVmVlYWr7zyCiVLlqRy5crMnTsXg8GA2WxmzZo1NGzYMMe23n//fV1ZXeRvqPhEfmfp0qVUrFiR0NBQkpOT+ec//0nv3r354IMPSEhIoH379jz77LNkZGRkr7N8+XK+/vprzpw5w6lTp3jz7WB2nUrg5rmjJO76nJL/fA2vEUtx9CjN5fUzb/u4V79ZiCX9JhWGLKJsn3c4smMD/1rwCQCffvopmzdv5siRIxw+fJh169Zlr9epUyfOnTuXo4yXLl1Kv3798ugVEin4VHwif2PVqlV06NCBtm3b4uTkxKuvvkpqairff/999jIjRozA29sbT09PJkyYwNLlKwBI+Xkn7nXb4FzWF4OjEyb//qTHh2NOvJjjMayWLFJO7sHk3x+jc1EcTWXwfLIr8xYtBmD16tWMGjUKLy8vihcvnuNq687OzvTs2ZNly5YBtw5yj4yMpGPHjnn90ogUWCo+kb8RHx+Pj49P9m2j0Yi3tzdxcXHZv/v9sXU+Pj5cS7hEutlCVvJVHD1K/7ZuEVeMrsUwJ+f8uNOSegMs5hzLWouVIuHC+ewMv3+MPx7L179/f1asWIHVamXp0qX06NEDZ2fnB3zmIoWXik/kD35/vFz58uWJiorKvm21WomJiaFChQrZv4uJicn+OTo6mqKmkgA4uHtivnEp+z5LRhqW1CQc3UvkeDyjqwcYHXMsa76RgMsjpQAoV64csbGxt308gCZNmlCkSBH27NnDihUr6Nu37309bxF7oeIT+YMyZcpw9uxZAHr06MHGjRvZvn07mZmZvPfeezg7O9OsWbPs5efNm0dsbCxXr15l2rRpVG/WDgC3Wn4kH9tGxsWzWM2ZJO76N87lq+NoKpPj8QxGB9xqPk3irs+xpN/EfP0SN35YR22/DtkZPvzwQ+Li4khMTOTdd9/9U+Z+/foxYsQInJycePrpp/PqpREpFFR8In/wxhtvMHXqVEwmE6GhoSxbtoyRI0dSsmRJQkNDCQ0NpUiRItnL9+nTh3bt2lGlShUeffRReg9+GQcsuFaqj6lFIAlfTSd2bl/MiRco2Wn8bR+zeNshGIu4ELdwEBeWjeeR2v507X1rchs8eDDt2rWjbt26PP7447Rv3x5HR0ccHByy1+/bty/Hjx8nMDAwb18ckUJAZ24ReQCVKlVi0aJFtGnThvT0dBYtWsSMOXNx+r93sBrv/zBZZ0cj37/WKvscnr+3efNmhgwZkuMj2NTUVEqXLs3hw4epWrXqfT+uiD3QxCfygDIyMliwYAG+vr5s3ryZdSuX0rZ2Be731JoGA7SsXiq79FJTU9m0aRNms5m4uDgmTZpEly5dcqyzYMECnnjiCZWeyF3QmVtE7lNGRgZJSUm88MILNGjQgC+++ILGjRsD4FQmkT2nL5OamXXP23VxdGCYv2/2bavVSlBQED179sTV1ZUOHTowefLk7PsrVaqE1WrNcXyfiPw1fdQpco8yMzP597//zdSpU6levTrBwcE0bfrnU4z9dq7Ouz9tmauTkQntaxLYpFIuJhaR39PEJ3KXMjMzWbp0KVOnTuXRRx9lxYoVOfbu/KNfy+uvrs7we79enWFC+xoqPZE8polP5A7MZjPLli1jypQp+Pj4MGnSJJo3b37X6x+LTWT+zgh2/JKAAUi7zfX4WlYvxTB/X+p6mXL/CYhIDio+kb9gNptZsWIFU6ZMoUKFCkyaNAk/P7/73t6V5HTWHo4l/HwSN9Iy8XBxoka5YnRr4HXbvTdFJG+o+ET+ICsri5UrVzJ58mTKlCnDpEmTaNmypa1jiUgu0Xd8Iv+TlZXF6tWrmTx5Mp6ensybN4/WrVvnOIWZiBR8Kj6xexaLhTVr1jBp0iQeeeQRPvzwQ9q2bavCEymkVHxitywWC1988QWTJk3Czc2N999/n4CAABWeSCGn4hO7Y7FYWLduHcHBwTg7OzNz5kyeeeYZFZ6InVDxid2wWq2sX7+e4OBgjEYj06ZNo2PHjio8ETuj4pNCz2q1EhoaSnBwMFarlUmTJtGpUycVnoidUvFJoWW1Wtm0aRPBwcFkZGQQHBxM586dMRp1bnYRe6bik0LHarWyZcsWgoODuXnzJkFBQXTt2lWFJyKAik8KEavVytatWwkKCiIpKYmgoCC6deumwhORHFR8UuBZrVa2bdtGcHAwV69eJSgoiO7du+e4QrmIyK9UfFJgWa1WduzYQVBQEJcuXcq+Zp0KT0T+jopPCqSdO3cSFBREfHw8b7/9Nr1798bRUX+dReTO9E4hBcru3bsJCgoiJiaGiRMn8txzz6nwROSe6B1DCoS9e/cSFBTE2bNnmThxIoGBgTg5Odk6logUQCo+ydf27dtHUFAQp06d4q233qJ///4qPBF5INrPW/KlAwcO8I9//INevXrRrVs3Tp06xaBBg1R6IvLANPFJvnLw4EGCg4MJCwvjzTffZP369Tg76+rkIpJ7NPFJvnDo0CGeffZZunTpQocOHTh9+jRDhgxR6YlIrlPxiU399NNPdO7cmU6dOtGuXTsiIiIYNmyYCk9E8oyKT2zi6NGj2dNdq1atiIiIYOTIkbi4uNg6mogUcio+eajCwsLo1q0b//jHP2jRogURERGMGjUKV1dXW0cTETuh4pOH4sSJE/To0YO2bdvStGlTzpw5w5gxYyhatKito4mInVHxSZ46efIkvXv3plWrVjRq1IgzZ87wyiuvqPBExGZUfJInfvnlF5577jn8/PyoV68eZ86cYfz48bi5udk6mojYORWf5KrTp0/Tt29fnn76aWrVqkVERASvv/467u7uto4mIgKo+CSXRERE0L9/f5o1a0a1atWIiIhgwoQJeHh42DqaiEgOOnOLPJCzZ88ydepUNmzYwMiRIzl9+jQmk8nWsURE/pImPrkvkZGRDBo0iCeeeAIvLy9Onz5NUFCQSk9E8j0Vn9yTqKgoXnzxRRo2bEjZsmU5ffo0kydPpnjx4raOJiJyV1R8cldiYmIYOnQoDRo0oGTJkpw6dYqpU6fi6elp62giIvdExSd/KzY2luHDh1O/fn0eeeQRfvnlF6ZPn06JEiVsHU1E5L6o+OS24uPjGTlyJHXr1qVo0aKcPHmSd955h5IlS9o6mojIA1HxSQ7nz59n1KhR1K5dmyJFinDy5ElmzZpF6dKlbR1NRCRXqPgEgIsXLzJ27Fgee+wxjEYjP//8M++99x5lypSxdTQRkVyl4rNzly5d4tVXX6VmzZqYzWaOHz/OnDlzKFu2rK2jiYjkCRWfnUpISGD8+PHUqFGDtLQ0wsLC+Oijjyhfvryto4mI5CkVn525cuUKb7zxBjVq1CA5OZmjR48yd+5cKlSoYOtoIiIPhYrPTly9epUJEyZQrVo1rl69yuHDh5k/fz7e3t62jiYi8lCp+Aq5a9euMXHiRKpWrcqlS5c4dOgQH3/8MT4+PraOJiJiEyq+QioxMZHg4GCqVq1KfHw8Bw8e5NNPP6VSpUq2jiYiYlMqvkLm+vXrTJ48GV9fX6Kiojhw4ACfffYZVapUsXU0EZF8QcVXSNy4cYOpU6fi6+tLREQE+/btY/HixTz66KO2jiYikq+o+Aq4pKQkZsyYga+vL+Hh4Xz33Xd8/vnnVK1a1dbRRETyJV2ItoBKTk5m3rx5vP/++7Ru3Zrdu3dTo0YNW8cSEcn3VHwFTEpKCvPnz2f27Nn4+/vz7bff8thjj9k6lohIgaHiKyBu3rzJwoULmTlzJs2bN2f79u3Url3b1rFERAocFV8+l5qayscff8zMmTNp2rQpW7dupW7duraOJSJSYKn48qm0tDQ++eQT3n33XZ544gk2bdpE/fr1bR1LRKTAU/HlM+np6SxatIgZM2bQoEEDQkNDadCgga1jiYgUGiq+fCI9PZ2QkBCmT59OvXr1WLduHY0aNbJ1LBGRQkfFZ2MZGRksXryY6dOnU6tWLb744gsaN25s61giIoWWis9GMjMzWbJkCdOmTaN69eqsXLmSpk2b2jqWiEihp+J7yDIzM1m6dClTpkzB19eXFStW0KxZM1vHEhGxGyq+h8RsNrNs2TKmTJlCpUqV+Pzzz2nevLmtY4mI2B0VXx4zm82sWLGCKVOmUKFCBUJCQvDz87N1LBERu6XiyyNZWVmsXLmSyZMnU6ZMGT755BNatmxp61giInZPxZfLsrKyWL16NZMnT8bT05N58+bRunVrDAaDraOJiAgqvlxjsVhYs2YNkyZN4pFHHuHDDz+kbdu2KjwRkXxGxfeALBYLX375JZMmTaJo0aK8//77BAQEqPBERPIpFd99slgsrFu3jkmTJlGkSBHeffddnnnmGRWeiEg+p+K7R1arlfXr1xMcHIzRaGTq1Kl07NhRhSciUkCo+O6S1WolNDSU4OBgrFYrkyZNolOnTio8EZECRsV3B1arlU2bNhEcHExGRgbBwcF07twZo9Fo62giInIfVHx/wWq1smXLFoKDg7l58yZBQUF07dpVhSciUsCp+P7AarWydetWgoKCSEpKIigoiG7duqnwREQKCRXf/1itVrZv305QUBBXr14lKCiI7t274+DgYOtoIiKSi+y++KxWKzt27CAoKIhLly4RFBREz549VXgiIoWUXRffrl27ePvtt4mPj+ftt9+md+/eODra9UsiIlLo2eW7/J49ewgKCiI6OpqJEyfy3HPPqfBEROxEgXm3v5ycztpDsYRfuMGNNDMeLo7UKOtB94ZelHB3vu0627Zt4/z58/Tt2xeAvXv3EhQUxNmzZ5k4cSKBgYE4OTk9zKchIiI2ZrBarVZbh/g7R2MSmbczgl2nEgBIN1uy73NxNGIF/KuXYpifL/W8Tdn3RUVFUadOHSwWC1999RWzZs3i1KlTvPXWW/Tv31+FJyJip/J18S3bH8m0TeGkmbP4u5QGA7g4OjChfQ0Cm1QiMzOThg0bcuLECQDc3d2ZNWsWzz//PEWKFHlI6UVEJD/Kt8V3q/ROkpppufPC/+PqZGRC+5ps/PANVq9ejcVya11XV1fi4+MxmUx32IKIiBR2+fI7vqMxiUzbFH5PpQeQmmlh6qaTxH5/jCJFilCkSBGMRiMODg4cP34cLy8vKleuTGZmpnZmERGxU/ny3X/ezgjSzFn3tW662ULgtH+zMLDRn+6LjIx8wGQiIlLQ5fp5uGJiYujatSulSpWiRIkSjBgxAovFwtSpU/Hx8aF06dL069eP69evA7fKyGAwsHjxYry9vTEVL876/ywhLf4U8Z+NIHpOT65uXZC9/eRj27iwdBxXty4gek4P4j4ZQmrkkd8ef94A/rt5K1eS0wEIDg4mMDAQgBYtWgBgMplwd3dn3759AISEhFCzZk2KFy9OQEAAUVFRuf2yiIhIPpGrxZeVlUXHjh3x8fEhMjKSuLg4evXqxZIlS1iyZAk7duzg7NmzJCcnM2LEiBzrHjhwgNOnT9NvwhwStn7C9e9XU6bXVMoPmkdK+HekRYdlL5se/wuOpnJ4v7wCU/M+JHw1nazUpOz7DcDaw7F/yrd7924AEhMTSU5OpmnTpqxfv57p06fz5ZdfkpCQQPPmzendu3duviwiIpKP5Grx/fDDD8THxzNr1izc3NxwcXHh6aefZvny5YwdO5YqVarg7u7OjBkzWLlyJWazOXvdiRMn4uLigtG7HgYnF9xqtcDBzYRjsZK4eD1GxsWz2cs6uJko9kRnDA6OuNVsgZNnBVLPHMy+P8NiJfx8Endj4cKFvPHGG9SsWRNHR0fefPNNjhw5oqlPRKSQytXii4mJwcfH5087jsTHx+Pj45N928fHB7PZzMWLF7N/V6ZMGQBupJkxOBXBoehve2AanIpgyUjNvu3gXiLHBWAdPUqTlXw1x2PeSMu8q8xRUVGMGjUKk8mEyWTC09MTq9VKXFzcXa0vIiIFS64Wn7e3N9HR0TkmOYDy5cvnmKCio6NxdHTMLrvf83C58/42WclX+P1RGOYbCTi4ewJgLOKCNTMdD5dbB6hfuHAhe7nbXS3d29ubjz/+mMTExOw/qampNGvW7I45RESk4MnV4mvcuDHlypXj9ddfJyUlhbS0NPbu3Uvv3r2ZM2cO586dIzk5mTfffJOePXve9pCCGmU9+HM95ZSVkkjSjxuwZplJCf+OzCsxuD56ay9Op9KVSQvfTdVSLvz444+sXbs2e71SpUphNBo5e/a3j02HDBnCjBkzsg92v379OmvWrHnwF0NERPKlXC0+BwcHQkNDiYiIoGLFinh5ebFq1SoGDBhA3759adGiBZUrV8bFxYV//etft91Gt4Zed3wc5/LVMV+LJ+ajPiTu+pxSXd7AwdUDAFOLvmReO8/4To0ICgqiT58+2esVLVqUCRMm8NRTT2Eymdi/fz9dunThtddeo1evXnh4eFC7dm02b96cOy+IiIjkO/nyzC0vLv2Rb05evO1pypKPbSP52FbKBs687boGAwTUKnPb4/hERERy/Ti+3DDc3xcXx/u7EKyLowPD/H1zOZGIiBQW+bL46nmbmNC+Bq5O9xbv1rk6a1DXS+fkFBGR28uXH3X+6n6vziAiIvJX8nXxARyLTWT+zgh2/JKAAUi7zfX4WlYvxTB/X016IiJyR/m++H51JTmdtYdjCT+fxI20TDxcnKhRrhjdGvz1FdhFRET+qMAUn4iISG7Ilzu3iIiI5BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2BUVn4iI2JX/B10idCArPXtjAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [ "source": [
"tosca = get_tosca(provisioned_tosca_id)\n", "tosca = get_tosca(provisioned_tosca_id)\n",
"\n", "\n",
...@@ -326,13 +630,22 @@ ...@@ -326,13 +630,22 @@
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.7/site-packages/urllib3/connectionpool.py:986: InsecureRequestWarning: Unverified HTTPS request is being made to host 'lifewatch.lab.uvalight.net'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n",
" InsecureRequestWarning,\n"
]
}
],
"source": [ "source": [
"path = \"/deployer/deploy/\"+provisioned_tosca_id\n", "path = \"/deployer/deploy/\"+provisioned_tosca_id\n",
"payload = {}\n", "payload = {}\n",
"headers= {'accept':'text/plain'}\n", "headers= {'accept':'text/plain'}\n",
"\n", "\n",
"response = requests.request(\"GET\", base_url+path, headers=headers, data = payload)\n", "response = requests.request(\"GET\", base_url+path, headers=headers, data = payload, verify=False, auth=(username, password))\n",
"deployed_tosca_id = response.text" "deployed_tosca_id = response.text"
] ]
}, },
...@@ -383,7 +696,7 @@ ...@@ -383,7 +696,7 @@
"name": "python", "name": "python",
"nbconvert_exporter": "python", "nbconvert_exporter": "python",
"pygments_lexer": "ipython3", "pygments_lexer": "ipython3",
"version": "3.6.9" "version": "3.7.6"
} }
}, },
"nbformat": 4, "nbformat": 4,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment