From 5a73f2edd4f4671a095c64286ed39546621225c0 Mon Sep 17 00:00:00 2001 From: David Grove Date: Fri, 12 Feb 2021 17:01:28 -0500 Subject: [PATCH] remove python2ActionLoop --- core/python2ActionLoop/Dockerfile | 86 ------------------- core/python2ActionLoop/Makefile | 31 ------- core/python2ActionLoop/bin/compile | 111 ------------------------- core/python2ActionLoop/build.gradle | 19 ----- core/python2ActionLoop/lib/launcher.py | 71 ---------------- settings.gradle | 1 - 6 files changed, 319 deletions(-) delete mode 100644 core/python2ActionLoop/Dockerfile delete mode 100644 core/python2ActionLoop/Makefile delete mode 100755 core/python2ActionLoop/bin/compile delete mode 100644 core/python2ActionLoop/build.gradle delete mode 100755 core/python2ActionLoop/lib/launcher.py diff --git a/core/python2ActionLoop/Dockerfile b/core/python2ActionLoop/Dockerfile deleted file mode 100644 index 043315cd..00000000 --- a/core/python2ActionLoop/Dockerfile +++ /dev/null @@ -1,86 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# build go proxy from source -FROM golang:1.15 AS builder_source -ARG GO_PROXY_GITHUB_USER=apache -ARG GO_PROXY_GITHUB_BRANCH=master -RUN git clone --branch ${GO_PROXY_GITHUB_BRANCH} \ - https://github.com/${GO_PROXY_GITHUB_USER}/openwhisk-runtime-go /src ;\ - cd /src ; env GO111MODULE=on CGO_ENABLED=0 go build main/proxy.go && \ - mv proxy /bin/proxy - -# or build it from a release -FROM golang:1.15 AS builder_release -ARG GO_PROXY_RELEASE_VERSION=1.15@1.16.0 -RUN curl -sL \ - https://github.com/apache/openwhisk-runtime-go/archive/{$GO_PROXY_RELEASE_VERSION}.tar.gz\ - | tar xzf -\ - && cd openwhisk-runtime-go-*/main\ - && GO111MODULE=on go build -o /bin/proxy - -FROM python:2.7-alpine -# select the builder to use -ARG GO_PROXY_BUILD_FROM=release - -# Upgrade and install basic Python dependencies -RUN apk add --no-cache \ - bash \ - bzip2-dev \ - gcc \ - libc-dev \ - libxslt-dev \ - libxml2-dev \ - libffi-dev \ - linux-headers \ - openssl-dev \ - python-dev - -# Install common modules for python -RUN pip install --no-cache-dir --upgrade pip setuptools six \ - && pip install --no-cache-dir \ - gevent==1.3.6 \ - flask==1.0.2 \ - beautifulsoup4==4.6.3 \ - httplib2==0.11.3 \ - kafka_python==1.4.3 \ - lxml==4.2.5 \ - python-dateutil==2.7.3 \ - requests==2.19.1 \ - scrapy==1.5.1 \ - simplejson==3.16.0 \ - virtualenv==16.0.0 \ - twisted==18.7.0 \ - signalfx_lambda==0.2.1 - -RUN mkdir -p /action -WORKDIR / -COPY --from=builder_source /bin/proxy /bin/proxy_source -COPY --from=builder_release /bin/proxy /bin/proxy_release -RUN mv /bin/proxy_${GO_PROXY_BUILD_FROM} /bin/proxy - -ADD bin/compile /bin/compile -ADD lib/launcher.py /lib/launcher.py -# the compiler script -ENV OW_COMPILER=/bin/compile -# log initialization errors -ENV OW_LOG_INIT_ERROR=1 -# the launcher must wait for an ack -ENV OW_WAIT_FOR_ACK=1 -# using the runtime name to identify the execution environment -ENV OW_EXECUTION_ENV=openwhisk/action-python-v2.7 -ENTRYPOINT ["/bin/proxy"] diff --git a/core/python2ActionLoop/Makefile b/core/python2ActionLoop/Makefile deleted file mode 100644 index 4bae7ae3..00000000 --- a/core/python2ActionLoop/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -IMG=whisk/actionloop-python-v2.7:latest - -build: - docker build -t $(IMG) -f Dockerfile . - -clean: - docker rmi -f $(IMG) - -debug: - docker run -p 8080:8080 \ - -ti --entrypoint=/bin/bash -v $(PWD):/mnt \ - -e OW_COMPILER=/mnt/bin/compile \ - $(IMG) - -.PHONY: build clean debug diff --git a/core/python2ActionLoop/bin/compile b/core/python2ActionLoop/bin/compile deleted file mode 100755 index 62b55e75..00000000 --- a/core/python2ActionLoop/bin/compile +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env python -"""Python Action Builder -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -""" - -from __future__ import print_function -import os, os.path, sys, imp, ast, shutil, subprocess, traceback -from os.path import abspath, exists, dirname - -# write a file creating intermediate directories -def write_file(file, body, executable=False): - try: os.makedirs(dirname(file), mode=0o755) - except: pass - with open(file, mode="wb") as f: - f.write(body) - if executable: - os.chmod(file, 0o755) - -# copy a file eventually replacing a substring -def copy_replace(src, dst, match=None, replacement=""): - with open(src, 'rb') as s: - body = s.read() - if match: - body = body.replace(match, replacement) - write_file(dst, body) - -# assemble sources -def sources(launcher, main, src_dir): - # move exec in the right place if exists - src_file = "%s/exec" % src_dir - if exists(src_file): - os.rename(src_file, "%s/__main__.py" % src_dir) - if exists("%s/__main__.py" % src_dir): - os.rename("%s/__main__.py" % src_dir, "%s/main__.py" % src_dir) - - # write the boilerplate in a temp dir - copy_replace(launcher, "%s/exec__.py" % src_dir, - "from main__ import main as main", - "from main__ import %s as main" % main ) - -# compile sources -def build(src_dir, tgt_dir): - # in general, compile your program into an executable format - # for scripting languages, move sources and create a launcher - # move away the action dir and replace with the new - shutil.rmtree(tgt_dir) - shutil.move(src_dir, tgt_dir) - tgt_file = "%s/exec" % tgt_dir - write_file(tgt_file, """#!/bin/bash -if [ "$(cat $0.env)" = "$__OW_EXECUTION_ENV" ] -then cd "$(dirname $0)" - exec /usr/local/bin/python exec__.py "$@" -else echo "Execution Environment Mismatch" - echo "Expected: $(cat $0.env)" - echo "Actual: $__OW_EXECUTION_ENV" - exit 1 -fi -""", True) - write_file("%s.env"%tgt_file, os.environ['__OW_EXECUTION_ENV']) - return tgt_file - -#check if a module exists -def check(tgt_dir, module_name): - try: - - # find module - mod = imp.find_module(module_name, [tgt_dir]) - # parse module - ast.parse(mod[0].read()) - # check virtualenv - path_to_virtualenv = abspath('%s/virtualenv' % tgt_dir) - if os.path.isdir(path_to_virtualenv): - activate_this_file = path_to_virtualenv + '/bin/activate_this.py' - if not os.path.exists(activate_this_file): - sys.stderr.write('Invalid virtualenv. Zip file does not include activate_this.py') - except ImportError: - sys.stderr.write("Zip file does not include %s" % module_name) - except SyntaxError as er: - sys.stderr.write(er.msg) - except Exception as ex: - sys.stderr.write(ex.message) - sys.stderr.flush() - -if __name__ == '__main__': - if len(sys.argv) < 4: - sys.stdout.write("usage: \n") - sys.stdout.flush() - sys.exit(1) - launcher = "%s/lib/launcher.py" % dirname(dirname(sys.argv[0])) - src_dir = abspath(sys.argv[2]) - tgt_dir = abspath(sys.argv[3]) - sources(launcher, sys.argv[1], src_dir) - tgt = build(abspath(sys.argv[2]), tgt_dir) - check(tgt_dir, "main__") - sys.stdout.flush() - sys.stderr.flush() diff --git a/core/python2ActionLoop/build.gradle b/core/python2ActionLoop/build.gradle deleted file mode 100644 index 66ecc3aa..00000000 --- a/core/python2ActionLoop/build.gradle +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -ext.dockerImageName = 'actionloop-python-v2.7' -apply from: '../../gradle/docker.gradle' diff --git a/core/python2ActionLoop/lib/launcher.py b/core/python2ActionLoop/lib/launcher.py deleted file mode 100755 index 3204c9c8..00000000 --- a/core/python2ActionLoop/lib/launcher.py +++ /dev/null @@ -1,71 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -from __future__ import print_function -from os import fdopen -import sys, os, codecs, json, traceback, warnings - -sys.stdout = codecs.getwriter('utf8')(sys.stdout) -sys.stderr = codecs.getwriter('utf8')(sys.stderr) - -try: - # if the directory 'virtualenv' is extracted out of a zip file - path_to_virtualenv = os.path.abspath('./virtualenv') - if os.path.isdir(path_to_virtualenv): - # activate the virtualenv using activate_this.py contained in the virtualenv - activate_this_file = path_to_virtualenv + '/bin/activate_this.py' - if os.path.exists(activate_this_file): - with open(activate_this_file) as f: - code = compile(f.read(), activate_this_file, 'exec') - exec(code, dict(__file__=activate_this_file)) - else: - sys.stderr.write('Invalid virtualenv. Zip file does not include /virtualenv/bin/' + os.path.basename(activate_this_file) + '\n') - sys.exit(1) -except Exception: - traceback.print_exc(file=sys.stderr, limit=0) - sys.exit(1) - -# now import the action as process input/output -from main__ import main as main - -env = os.environ -out = fdopen(3, "wb") -if os.getenv("__OW_WAIT_FOR_ACK", "") != "": - out.write(json.dumps({"ok": True}, ensure_ascii=False).encode('utf-8')) - out.write(b'\n') - out.flush() -while True: - line = sys.stdin.readline().decode('utf-8') - if not line: break - args = json.loads(line) - payload = {} - for key in args: - akey = key.encode("ascii", "ignore") - if akey == "value": - payload = args["value"] - else: - env["__OW_%s" % akey.upper()] = args[key].encode("ascii", "ignore") - res = {} - try: - res = main(payload) - except Exception as ex: - print(traceback.format_exc(), file=sys.stderr) - res = {"error": str(ex)} - out.write(json.dumps(res, ensure_ascii=False).encode('utf-8')) - out.write(b'\n') - sys.stdout.flush() - sys.stderr.flush() - out.flush() diff --git a/settings.gradle b/settings.gradle index 1445790d..d02dad7f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,7 +17,6 @@ include 'tests' -include 'core:python2ActionLoop' include 'core:python3ActionLoop' include 'core:python3AiActionLoop'