Skip to content

Commit

Permalink
Merge pull request #5 from SatishRanjan/master
Browse files Browse the repository at this point in the history
Private registry image support and fixing windows to unix line feed char issue in shell command to retrieve triggers from a function app
  • Loading branch information
ebencarek authored Jul 7, 2020
2 parents a4c10e7 + d50bfc1 commit 4a16ad9
Showing 1 changed file with 29 additions and 10 deletions.
39 changes: 29 additions & 10 deletions src/appservice-kube/azext_appservice_kube/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,10 @@ def create_webapp(cmd, resource_group_name, name, plan, runtime=None, startup_fi
if max_worker_count is not None:
site_config.app_settings.append(NameValuePair(name='K8SE_APP_MAX_INSTANCE_COUNT', value=max_worker_count))

if deployment_container_image_name:
site_config.app_settings.append(NameValuePair(name='DOCKER_REGISTRY_SERVER_URL', value=docker_registry_server_url))
site_config.app_settings.append(NameValuePair(name='DOCKER_REGISTRY_SERVER_USERNAME', value=docker_registry_server_user))
site_config.app_settings.append(NameValuePair(name='DOCKER_REGISTRY_SERVER_PASSWORD', value=docker_registry_server_password))
helper = _StackRuntimeHelper(cmd, client, linux=(is_linux or is_kube))

if is_linux or is_kube:
Expand Down Expand Up @@ -667,6 +671,9 @@ def create_function(cmd, resource_group_name, name, storage_account, plan=None,
site_config.linux_fx_version = _format_fx_version(deployment_container_image_name)
function_triggers_json = retrieve_update_function_triggers(deployment_container_image_name, site_config, docker_registry_server_user, docker_registry_server_password)
site_config.app_settings.append(NameValuePair(name='K8SE_FUNCTIONS_TRIGGERS', value=function_triggers_json))
site_config.app_settings.append(NameValuePair(name='DOCKER_REGISTRY_SERVER_URL', value=docker_registry_server_url))
site_config.app_settings.append(NameValuePair(name='DOCKER_REGISTRY_SERVER_USERNAME', value=docker_registry_server_user))
site_config.app_settings.append(NameValuePair(name='DOCKER_REGISTRY_SERVER_PASSWORD', value=docker_registry_server_password))
else:
site_config.app_settings.append(NameValuePair(name='WEBSITES_ENABLE_APP_SERVICE_STORAGE', value='true'))
site_config.linux_fx_version = _get_linux_fx_kube_functionapp(runtime, runtime_version)
Expand Down Expand Up @@ -1724,20 +1731,32 @@ def retrieve_update_function_triggers(container_image_name,
dockerHelper.docker_login(image_registry_url, docker_registry_user_name, docker_registry_password)

dockerHelper.pull_container_image(container_image_name)
container_id = dockerHelper.run_container(container_image_name, "/bin/sh")
container_id = dockerHelper.run_container(container_image_name, "/bin/sh")

#copy the getfunctionsjson.sh in the function image container
dir_path = os.path.dirname(os.path.realpath(__file__))
get_function_sh_script_file_path = os.path.join(dir_path, "getfunctionsjson.sh")
dockerHelper.copy_file_folder_to_container(container_id, get_function_sh_script_file_path, '/getfunctionsjson.sh')

dockerHelper.exec_container(container_id, ["chmod", "+x", "/getfunctionsjson.sh"])
functionJson = dockerHelper.exec_container(container_id, ["/getfunctionsjson.sh"])
functionJson = functionJson.replace("\r", "").replace("\n", "").replace(" ", "").replace(",}}", "}}")
dockerHelper.remove_container(container_id)
dockerHelper.remove_image(container_image_name)
get_function_sh_script_file_path = os.path.join(dir_path, "getfunctionsjson.sh")
try:
tmp_dir = tempfile.mkdtemp()
temp_filename = "getfunctionsjson.sh"
temp_file_path = os.path.join(tmp_dir, temp_filename)

with open(get_function_sh_script_file_path, 'rb') as open_file:
content = open_file.read()
content = content.replace(b'\r\n', b'\n')

with open(temp_file_path, 'wb') as open_file:
open_file.write(content)

dockerHelper.copy_file_folder_to_container(container_id, temp_file_path, '/getfunctionsjson.sh')
dockerHelper.exec_container(container_id, ["chmod", "+x", "/getfunctionsjson.sh"])
functionJson = dockerHelper.exec_container(container_id, ["/getfunctionsjson.sh"])
functionJson = functionJson.replace("\r", "").replace("\n", "").replace(" ", "").replace(",}}", "}}")
json.loads(functionJson)
except ValueError as e:
raise CLIError("No function in the image: " + container_image_name + ",error: " + e)
raise CLIError('No function in the image: ' + container_image_name + ' ,functionjson: ' + functionJson + ' ,error: ' + e.__doc__)
finally:
shutil.rmtree(tmp_dir)
dockerHelper.remove_container(container_id)
dockerHelper.remove_image(container_image_name)
return functionJson

0 comments on commit 4a16ad9

Please sign in to comment.