├── .asf.yaml ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE.md ├── ISSUE_TEMPLATE │ └── proposal.md ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml └── workflows │ ├── 0-on-demand.yaml │ ├── 1-unit.yaml │ ├── 2-system.yaml │ ├── 3-multi-runtime.yaml │ ├── 4-standalone.yaml │ ├── 5-scheduler.yaml │ ├── 6-performance.yaml │ └── README.md ├── .gitignore ├── .pydevproject ├── .scalafmt.conf ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── CREDITS.txt ├── Jenkinsfile ├── LICENSE.txt ├── NOTICE.txt ├── README.md ├── ansible ├── README.md ├── ansible.cfg ├── apigateway.yml ├── callbacks │ └── logformatter.py ├── controller.yml ├── couchdb.yml ├── downloadcli-github.yml ├── downloadcli.yml ├── edge.yml ├── elasticsearch.yml ├── environments │ ├── docker-machine │ │ ├── group_vars │ │ │ └── all │ │ └── hosts.j2.ini │ ├── jenkins │ │ ├── ansible_jenkins.cfg │ │ ├── group_vars │ │ │ ├── openwhisk-vm1-he-de │ │ │ ├── openwhisk-vm2-he-de │ │ │ └── openwhisk-vm3-he-de │ │ ├── openwhisk-vm1-he-de.j2.ini │ │ ├── openwhisk-vm2-he-de.j2.ini │ │ └── openwhisk-vm3-he-de.j2.ini │ ├── local │ │ ├── group_vars │ │ │ └── all │ │ └── hosts.j2.ini │ └── vagrant │ │ ├── group_vars │ │ └── all │ │ └── hosts ├── etcd.yml ├── files │ ├── activations_design_document_for_activations_db.json │ ├── auth.guest │ ├── auth.whisk.system │ ├── auth_design_document_for_subjects_db_v2.0.0.json │ ├── filter_design_document.json │ ├── genssl.sh │ ├── logCleanup_design_document_for_activations_db.json │ ├── namespace_throttlings_design_document_for_subjects_db.json │ ├── package-versions.ini │ ├── runtimes-nodeonly.json │ ├── runtimes.json │ ├── whisks_design_document_for_activations_db_filters_v2.1.0.json │ ├── whisks_design_document_for_activations_db_filters_v2.1.1.json │ ├── whisks_design_document_for_activations_db_v2.1.0.json │ └── whisks_design_document_for_entities_db_v2.1.0.json ├── group_vars │ └── all ├── initMongoDB.yml ├── initdb.yml ├── invoker.yml ├── kafka.yml ├── library │ └── mongodb.py ├── logs.yml ├── mongodb.yml ├── openwhisk.yml ├── postdeploy.yml ├── prereq.yml ├── properties.yml ├── publish.yml ├── recreateDesignDocs.yml ├── roles │ ├── apigateway │ │ └── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ ├── cli-install │ │ └── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ ├── cli │ │ └── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ ├── controller │ │ ├── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ ├── join_akka_cluster.yml │ │ │ ├── lean.yml │ │ │ └── main.yml │ │ └── templates │ │ │ └── config.j2 │ ├── couchdb │ │ └── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ ├── elasticsearch │ │ ├── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ │ └── templates │ │ │ ├── elasticsearch.yml.j2 │ │ │ └── log4j2.properties.j2 │ ├── etcd │ │ └── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ ├── invoker │ │ ├── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ │ └── templates │ │ │ └── config.j2 │ ├── kafka │ │ └── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ ├── mongodb │ │ └── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ ├── nginx │ │ ├── files │ │ │ └── openwhisk-server-key.pem │ │ ├── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ │ └── templates │ │ │ └── nginx.conf.j2 │ ├── prereq │ │ └── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ ├── redis │ │ └── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ ├── routemgmt │ │ ├── files │ │ │ ├── installRouteMgmt.sh │ │ │ └── uninstallRouteMgmt.sh │ │ └── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ └── main.yml │ ├── schedulers │ │ ├── tasks │ │ │ ├── clean.yml │ │ │ ├── deploy.yml │ │ │ ├── join_akka_cluster.yml │ │ │ └── main.yml │ │ └── templates │ │ │ └── jmx.yml.j2 │ └── zookeeper │ │ └── tasks │ │ ├── clean.yml │ │ ├── deploy.yml │ │ └── main.yml ├── routemgmt.yml ├── scheduler.yml ├── setup.yml ├── tasks │ ├── db │ │ ├── checkDb.yml │ │ ├── createUsers.yml │ │ ├── grantPermissions.yml │ │ ├── recreateDb.yml │ │ └── recreateDoc.yml │ ├── docker_login.yml │ ├── gen_erl_cookie.yml │ ├── initdb.yml │ ├── installOpenwhiskCatalog.yml │ ├── recreateViews.yml │ ├── wipeDatabase.yml │ └── writeWhiskProperties.yml ├── teardown.yml ├── templates │ ├── db_local.ini.j2 │ ├── jmxremote.access.j2 │ ├── jmxremote.password.j2 │ ├── whisk.conf.j2 │ └── whisk.properties.j2 ├── wipe.yml └── yamllint.yml ├── bin ├── wskadmin └── wskdev ├── build.gradle ├── common └── scala │ ├── .dockerignore │ ├── Dockerfile │ ├── Dockerfile-debian │ ├── build.gradle │ ├── copyJMXFiles.sh │ ├── src │ └── main │ │ ├── resources │ │ ├── application.conf │ │ ├── logback.xml │ │ ├── logging.conf │ │ ├── reference.conf │ │ └── s3-reference.conf │ │ └── scala │ │ └── org │ │ └── apache │ │ └── openwhisk │ │ ├── common │ │ ├── AverageRingBuffer.scala │ │ ├── CausedBy.scala │ │ ├── Config.scala │ │ ├── ConfigMXBean.scala │ │ ├── ConfigMapValue.scala │ │ ├── Counter.scala │ │ ├── ExecutorCloser.scala │ │ ├── ForcibleSemaphore.scala │ │ ├── Https.scala │ │ ├── Logging.scala │ │ ├── Message.scala │ │ ├── NestedSemaphore.scala │ │ ├── Prometheus.scala │ │ ├── ResizableSemaphore.scala │ │ ├── RingBuffer.scala │ │ ├── Scheduler.scala │ │ ├── TransactionId.scala │ │ ├── UserEvents.scala │ │ ├── WhiskInstants.scala │ │ ├── time │ │ │ └── Clock.scala │ │ └── tracing │ │ │ └── OpenTracingProvider.scala │ │ ├── connector │ │ ├── kafka │ │ │ ├── KafkaConsumerConnector.scala │ │ │ ├── KafkaMessagingProvider.scala │ │ │ ├── KafkaMetrics.scala │ │ │ ├── KafkaProducerConnector.scala │ │ │ └── KamonMetricsReporter.scala │ │ └── lean │ │ │ ├── LeanConsumer.scala │ │ │ ├── LeanMessagingProvider.scala │ │ │ └── LeanProducer.scala │ │ ├── core │ │ ├── FeatureFlags.scala │ │ ├── WarmUp.scala │ │ ├── WhiskConfig.scala │ │ ├── ack │ │ │ ├── Ack.scala │ │ │ ├── HealthActionAck.scala │ │ │ └── MessagingActiveAck.scala │ │ ├── connector │ │ │ ├── Message.scala │ │ │ ├── MessageConsumer.scala │ │ │ ├── MessageProducer.scala │ │ │ └── MessagingProvider.scala │ │ ├── containerpool │ │ │ ├── AkkaContainerClient.scala │ │ │ ├── ApacheBlockingContainerClient.scala │ │ │ ├── Container.scala │ │ │ ├── ContainerClient.scala │ │ │ ├── ContainerFactory.scala │ │ │ └── logging │ │ │ │ ├── DockerToActivationFileLogStore.scala │ │ │ │ ├── DockerToActivationLogStore.scala │ │ │ │ ├── ElasticSearchLogStore.scala │ │ │ │ ├── ElasticSearchRestClient.scala │ │ │ │ ├── LogDriverLogStore.scala │ │ │ │ ├── LogStore.scala │ │ │ │ └── SplunkLogStore.scala │ │ ├── database │ │ │ ├── ActivationFileStorage.scala │ │ │ ├── ActivationStore.scala │ │ │ ├── ActivationStoreLevel.scala │ │ │ ├── ArtifactActivationStore.scala │ │ │ ├── ArtifactStore.scala │ │ │ ├── ArtifactStoreExceptions.scala │ │ │ ├── ArtifactStoreProvider.scala │ │ │ ├── ArtifactWithFileStorageActivationStore.scala │ │ │ ├── AttachmentStore.scala │ │ │ ├── AttachmentSupport.scala │ │ │ ├── Batcher.scala │ │ │ ├── ConcurrentMapBackedCache.scala │ │ │ ├── CouchDbRestClient.scala │ │ │ ├── CouchDbRestStore.scala │ │ │ ├── CouchDbStoreProvider.scala │ │ │ ├── DocumentFactory.scala │ │ │ ├── DocumentHandler.scala │ │ │ ├── MultipleReadersSingleWriterCache.scala │ │ │ ├── RemoteCacheInvalidation.scala │ │ │ ├── StoreUtils.scala │ │ │ ├── azblob │ │ │ │ └── AzureBlobAttachmentStore.scala │ │ │ ├── cosmosdb │ │ │ │ ├── CollectionResourceUsage.scala │ │ │ │ ├── CosmosDBArtifactStore.scala │ │ │ │ ├── CosmosDBArtifactStoreProvider.scala │ │ │ │ ├── CosmosDBConfig.scala │ │ │ │ ├── CosmosDBSupport.scala │ │ │ │ ├── CosmosDBUtil.scala │ │ │ │ ├── CosmosDBViewMapper.scala │ │ │ │ ├── IndexingPolicy.scala │ │ │ │ ├── ReferenceCounted.scala │ │ │ │ ├── RetryMetricsCollector.scala │ │ │ │ └── RxObservableImplicits.scala │ │ │ ├── elasticsearch │ │ │ │ └── ElasticSearchActivationStore.scala │ │ │ ├── memory │ │ │ │ ├── MemoryArtifactStore.scala │ │ │ │ ├── MemoryAttachmentStore.scala │ │ │ │ ├── MemoryViewMapper.scala │ │ │ │ └── NoopActivationStore.scala │ │ │ ├── mongodb │ │ │ │ ├── MongoDBArtifactStore.scala │ │ │ │ ├── MongoDBArtifactStoreProvider.scala │ │ │ │ ├── MongoDBAsyncStreamSink.scala │ │ │ │ ├── MongoDBAsyncStreamSource.scala │ │ │ │ └── MongoDBViewMapper.scala │ │ │ └── s3 │ │ │ │ ├── CloudFrontSigner.scala │ │ │ │ └── S3AttachmentStore.scala │ │ ├── entitlement │ │ │ └── Privilege.scala │ │ ├── entity │ │ │ ├── ActivationEntityLimit.scala │ │ │ ├── ActivationId.scala │ │ │ ├── ActivationLogs.scala │ │ │ ├── ActivationResult.scala │ │ │ ├── Annotations.scala │ │ │ ├── ArgNormalizer.scala │ │ │ ├── Attachments.scala │ │ │ ├── BasicAuthenticationAuthKey.scala │ │ │ ├── CacheKey.scala │ │ │ ├── CreationId.scala │ │ │ ├── DocInfo.scala │ │ │ ├── DocumentReader.scala │ │ │ ├── EntityPath.scala │ │ │ ├── Exec.scala │ │ │ ├── ExecManifest.scala │ │ │ ├── FullyQualifiedEntityName.scala │ │ │ ├── GenericAuthKey.scala │ │ │ ├── Identity.scala │ │ │ ├── InstanceConcurrencyLimit.scala │ │ │ ├── InstanceId.scala │ │ │ ├── IntraConcurrencyLimit.scala │ │ │ ├── Limits.scala │ │ │ ├── LimitsExceptions.scala │ │ │ ├── LogLimit.scala │ │ │ ├── MemoryLimit.scala │ │ │ ├── Parameter.scala │ │ │ ├── ParameterEncryption.scala │ │ │ ├── Secret.scala │ │ │ ├── SemVer.scala │ │ │ ├── Size.scala │ │ │ ├── Subject.scala │ │ │ ├── TimeLimit.scala │ │ │ ├── UUID.scala │ │ │ ├── WhiskAction.scala │ │ │ ├── WhiskActivation.scala │ │ │ ├── WhiskAuth.scala │ │ │ ├── WhiskEntity.scala │ │ │ ├── WhiskPackage.scala │ │ │ ├── WhiskRule.scala │ │ │ ├── WhiskStore.scala │ │ │ └── WhiskTrigger.scala │ │ ├── etcd │ │ │ ├── EtcdClient.scala │ │ │ ├── EtcdUtils.scala │ │ │ └── EtcdWorker.scala │ │ ├── service │ │ │ ├── DataManagementService.scala │ │ │ ├── LeaseKeepAliveService.scala │ │ │ └── WatcherService.scala │ │ └── yarn │ │ │ ├── YARNComponentActor.scala │ │ │ ├── YARNContainerFactory.scala │ │ │ ├── YARNContainerInfoActor.scala │ │ │ ├── YARNRESTUtil.scala │ │ │ └── YARNTask.scala │ │ ├── http │ │ ├── BasicHttpService.scala │ │ ├── BasicRasService.scala │ │ ├── CorsSettings.scala │ │ ├── ErrorResponse.scala │ │ ├── LenientSprayJsonSupport.scala │ │ └── PoolingRestClient.scala │ │ ├── spi │ │ └── SpiLoader.scala │ │ └── utils │ │ ├── Exceptions.scala │ │ ├── ExecutionContextFactory.scala │ │ ├── JsHelpers.scala │ │ ├── Retry.scala │ │ └── TimeHelpers.scala │ └── transformEnvironment.sh ├── core ├── controller │ ├── .dockerignore │ ├── Dockerfile │ ├── Dockerfile-debian │ ├── Dockerfile.cov │ ├── build.gradle │ ├── init.sh │ └── src │ │ └── main │ │ ├── resources │ │ ├── apiv1swagger.json │ │ ├── application.conf │ │ ├── infoswagger.json │ │ └── reference.conf │ │ └── scala │ │ └── org │ │ └── apache │ │ └── openwhisk │ │ └── core │ │ ├── controller │ │ ├── Actions.scala │ │ ├── Activations.scala │ │ ├── ApiUtils.scala │ │ ├── AuthenticatedRoute.scala │ │ ├── AuthorizedRouteDispatcher.scala │ │ ├── Backend.scala │ │ ├── BasicAuthenticationDirective.scala │ │ ├── Controller.scala │ │ ├── Entities.scala │ │ ├── Limits.scala │ │ ├── Namespaces.scala │ │ ├── Packages.scala │ │ ├── RestAPIs.scala │ │ ├── Rules.scala │ │ ├── Triggers.scala │ │ ├── WebActions.scala │ │ └── actions │ │ │ ├── PostActionActivation.scala │ │ │ ├── PrimitiveActions.scala │ │ │ └── SequenceActions.scala │ │ ├── entitlement │ │ ├── ActionCollection.scala │ │ ├── ActivationThrottler.scala │ │ ├── Collection.scala │ │ ├── Entitlement.scala │ │ ├── FPCEntitlement.scala │ │ ├── KindRestrictor.scala │ │ ├── LocalEntitlement.scala │ │ ├── PackageCollection.scala │ │ └── RateThrottler.scala │ │ └── loadBalancer │ │ ├── CommonLoadBalancer.scala │ │ ├── FPCPoolBalancer.scala │ │ ├── FeedFactory.scala │ │ ├── InvokerPoolFactory.scala │ │ ├── InvokerSupervision.scala │ │ ├── LeanBalancer.scala │ │ ├── LoadBalancer.scala │ │ └── ShardingContainerPoolBalancer.scala ├── cosmosdb │ └── cache-invalidator │ │ ├── .dockerignore │ │ ├── Dockerfile │ │ ├── Dockerfile-debian │ │ ├── README.md │ │ ├── build.gradle │ │ ├── docker-compose.yml │ │ ├── init.sh │ │ └── src │ │ └── main │ │ ├── resources │ │ ├── application.conf │ │ └── reference.conf │ │ └── scala │ │ └── org │ │ └── apache │ │ └── openwhisk │ │ └── core │ │ └── database │ │ └── cosmosdb │ │ └── cache │ │ ├── CacheInvalidator.scala │ │ ├── CacheInvalidatorConfig.scala │ │ ├── ChangeFeedConsumer.scala │ │ ├── KafkaEventProducer.scala │ │ ├── Main.scala │ │ └── WhiskChangeEventObserver.scala ├── invoker │ ├── .dockerignore │ ├── Dockerfile │ ├── Dockerfile-debian │ ├── Dockerfile.cov │ ├── build.gradle │ ├── init.sh │ └── src │ │ └── main │ │ ├── resources │ │ └── application.conf │ │ └── scala │ │ └── org │ │ └── apache │ │ └── openwhisk │ │ └── core │ │ ├── containerpool │ │ ├── ContainerPool.scala │ │ ├── ContainerProxy.scala │ │ ├── docker │ │ │ ├── DockerCliLogStore.scala │ │ │ ├── DockerClient.scala │ │ │ ├── DockerClientWithFileAccess.scala │ │ │ ├── DockerContainer.scala │ │ │ ├── DockerContainerFactory.scala │ │ │ ├── DockerForMacContainerFactory.scala │ │ │ ├── ProcessRunner.scala │ │ │ ├── RuncClient.scala │ │ │ └── StandaloneDockerContainerFactory.scala │ │ ├── kubernetes │ │ │ ├── KubernetesClient.scala │ │ │ ├── KubernetesContainer.scala │ │ │ ├── KubernetesContainerFactory.scala │ │ │ └── WhiskPodBuilder.scala │ │ └── v2 │ │ │ ├── ActivationClientProxy.scala │ │ │ ├── FunctionPullingContainerPool.scala │ │ │ ├── FunctionPullingContainerProxy.scala │ │ │ └── InvokerHealthManager.scala │ │ └── invoker │ │ ├── ContainerMessageConsumer.scala │ │ ├── DefaultInvokerServer.scala │ │ ├── FPCInvokerReactive.scala │ │ ├── FPCInvokerServer.scala │ │ ├── InstanceIdAssigner.scala │ │ ├── Invoker.scala │ │ ├── InvokerReactive.scala │ │ ├── LogStoreCollector.scala │ │ └── NamespaceBlacklist.scala ├── monitoring │ └── user-events │ │ ├── .dockerignore │ │ ├── Dockerfile │ │ ├── Dockerfile-debian │ │ ├── README.md │ │ ├── build.gradle │ │ ├── compose │ │ ├── grafana │ │ │ ├── dashboards │ │ │ │ ├── global-metrics.json │ │ │ │ ├── openwhisk_events.json │ │ │ │ └── top-namespaces.json │ │ │ └── provisioning │ │ │ │ ├── dashboards │ │ │ │ └── dashboard.yml │ │ │ │ └── datasources │ │ │ │ └── datasource.yml │ │ └── prometheus │ │ │ └── prometheus.yml │ │ ├── images │ │ └── demo_landing.png │ │ ├── init.sh │ │ └── src │ │ ├── main │ │ ├── resources │ │ │ ├── application.conf │ │ │ ├── reference.conf │ │ │ └── whisk-logback.xml │ │ └── scala │ │ │ └── org │ │ │ └── apache │ │ │ └── openwhisk │ │ │ └── core │ │ │ └── monitoring │ │ │ └── metrics │ │ │ ├── EventConsumer.scala │ │ │ ├── KamonRecorder.scala │ │ │ ├── Main.scala │ │ │ ├── MetricNames.scala │ │ │ ├── OpenWhiskEvents.scala │ │ │ ├── PrometheusEventsApi.scala │ │ │ └── PrometheusRecorder.scala │ │ └── test │ │ ├── resources │ │ ├── application.conf │ │ └── logback-test.xml │ │ └── scala │ │ └── org │ │ └── apache │ │ └── openwhisk │ │ └── core │ │ └── monitoring │ │ └── metrics │ │ ├── ApiTests.scala │ │ ├── EventsTestHelper.scala │ │ ├── KafkaSpecBase.scala │ │ ├── KamonRecorderTests.scala │ │ ├── OpenWhiskEventsTests.scala │ │ └── PrometheusRecorderTests.scala ├── routemgmt │ ├── common │ │ ├── apigw-utils.js │ │ └── utils.js │ ├── createApi │ │ ├── createApi.js │ │ └── package.json │ ├── deleteApi │ │ ├── deleteApi.js │ │ └── package.json │ └── getApi │ │ ├── getApi.js │ │ └── package.json ├── scheduler │ ├── Dockerfile │ ├── Dockerfile.cov │ ├── build.gradle │ ├── init.sh │ └── src │ │ └── main │ │ ├── java │ │ └── Empty.java │ │ ├── protobuf │ │ └── activation.proto │ │ ├── resources │ │ └── application.conf │ │ └── scala │ │ └── org │ │ └── apache │ │ └── openwhisk │ │ └── core │ │ └── scheduler │ │ ├── FPCSchedulerServer.scala │ │ ├── Scheduler.scala │ │ ├── container │ │ ├── ContainerManager.scala │ │ └── CreationJobManager.scala │ │ ├── grpc │ │ └── ActivationServiceImpl.scala │ │ ├── message │ │ └── ContainerMessage.scala │ │ └── queue │ │ ├── ContainerCounter.scala │ │ ├── ElasticSearchDurationChecker.scala │ │ ├── MemoryQueue.scala │ │ ├── NoopDurationChecker.scala │ │ ├── QueueManager.scala │ │ └── SchedulingDecisionMaker.scala └── standalone │ ├── Dockerfile │ ├── README.md │ ├── bin │ ├── init │ ├── stop │ └── waitready │ ├── build.gradle │ ├── src │ ├── main │ │ ├── resources │ │ │ ├── logback-standalone.xml │ │ │ ├── playground │ │ │ │ ├── actions │ │ │ │ │ ├── playground-delete.js │ │ │ │ │ ├── playground-fetch.js │ │ │ │ │ ├── playground-run.js │ │ │ │ │ └── playground-userpackage.js │ │ │ │ └── ui │ │ │ │ │ ├── index.html │ │ │ │ │ ├── playground.css │ │ │ │ │ └── playgroundFunctions.js │ │ │ ├── standalone-kcf.conf │ │ │ └── standalone.conf │ │ └── scala │ │ │ └── org │ │ │ └── apache │ │ │ └── openwhisk │ │ │ ├── core │ │ │ └── ExecManifestSupport.scala │ │ │ └── standalone │ │ │ ├── ApiGwLauncher.scala │ │ │ ├── CouchDBLauncher.scala │ │ │ ├── DockerVersion.scala │ │ │ ├── InstallRouteMgmt.scala │ │ │ ├── KafkaLauncher.scala │ │ │ ├── LogbackConfigurator.scala │ │ │ ├── PlaygroundLauncher.scala │ │ │ ├── PreFlightChecks.scala │ │ │ ├── ServerStartupCheck.scala │ │ │ ├── ServiceInfoLogger.scala │ │ │ ├── StandaloneDockerSupport.scala │ │ │ ├── StandaloneOpenWhisk.scala │ │ │ ├── Unzip.scala │ │ │ ├── UserEventLauncher.scala │ │ │ └── Wsk.scala │ └── test │ │ └── scala │ │ └── org │ │ └── apache │ │ └── openwhisk │ │ └── standalone │ │ └── DockerVersionTests.scala │ ├── start.sh │ └── stop.sh ├── docs ├── README.md ├── about.md ├── actions-actionloop.md ├── actions-docker.md ├── actions-dotnet.md ├── actions-go.md ├── actions-java.md ├── actions-new.md ├── actions-nodejs.md ├── actions-php.md ├── actions-python.md ├── actions-ruby.md ├── actions-rust.md ├── actions-swift.md ├── actions-update.md ├── actions.md ├── annotations.md ├── apigateway.md ├── catalog.md ├── cli.md ├── conductors.md ├── dedicated-invokers.md ├── deploy.md ├── dev │ ├── configuration.md │ ├── future.md │ ├── modules.md │ └── troubleshooting │ │ └── build-failures.md ├── feeds.md ├── images │ ├── IoT_solution_architecture_example.png │ ├── OpenWhisk.png │ ├── OpenWhisk_flow_of_processing.draw.io.xml │ ├── OpenWhisk_flow_of_processing.png │ ├── Openwhisk-flow-diagram.png │ ├── README.md │ ├── apache-openwhisk-stacked.svg │ ├── apache-openwhisk-wide.svg │ ├── components_to_repos.png │ ├── playground-ui.png │ ├── whisk_icon_full-color_with_tm_128x128-300dpi.png │ ├── whisk_icon_full-color_with_tm_210x138-300dpi.png │ ├── whisk_icon_full-color_with_tm_64x64-300dpi.png │ ├── whisk_icon_full_color_with_tm.psd │ ├── whisk_icon_full_color_with_tm_100x100-300dpi.png │ ├── whisk_icon_full_color_with_tm_100x100-96dpi.png │ └── whisk_icon_full_color_with_tm_200x200-300dpi.png ├── intra-concurrency.md ├── logging.md ├── metrics.md ├── packages.md ├── parameters.md ├── reference.md ├── rest_api.md ├── samples.md ├── security.md ├── single_entrypoint_proxy_contract.md ├── spi.md ├── tag-based-scheduling.md ├── triggers_rules.md ├── use_cases.md ├── warmed-containers.md ├── webactions.md └── yarn.md ├── gradle ├── README.md ├── docker.gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── licenses └── LICENSE-spray.txt ├── proposals ├── POEM-1-proposal-for-openwhisk-enhancements.md ├── POEM-2-function-pulling-container-scheduler.md ├── POEM-3-action-limit-for-namespace.md ├── POEM-4-action-concurrency-limit-within-namespace.md ├── POEM-N-template.md ├── POEM-support-array-result.md └── README.md ├── settings.gradle ├── tests ├── .pydevproject ├── README.md ├── build.gradle ├── dat │ ├── actions │ │ ├── README.md │ │ ├── applicationError.js │ │ ├── argCheck.js │ │ ├── argsPrint.js │ │ ├── asyncError.js │ │ ├── blackbox │ │ │ └── exec │ │ ├── build.sh │ │ ├── cat.js │ │ ├── concurrent.js │ │ ├── concurrentFail1.js │ │ ├── concurrentFail2.js │ │ ├── conductor.js │ │ ├── corsHeaderMod.js │ │ ├── countdown.js │ │ ├── createRule.swift │ │ ├── createTrigger.swift │ │ ├── dosLogs.js │ │ ├── echo-web-http-head.js │ │ ├── echo-web-http.js │ │ ├── echo.js │ │ ├── echo.json │ │ ├── empty.js │ │ ├── emptyJSONResult.js │ │ ├── head.js │ │ ├── hello.js │ │ ├── hello.py │ │ ├── hello.swift │ │ ├── helloArray.js │ │ ├── helloAsync.js │ │ ├── helloContext.js │ │ ├── helloDeadline.js │ │ ├── helloOpenwhiskPackage.js │ │ ├── helloPromise.js │ │ ├── httpGet.swift │ │ ├── initexit.js │ │ ├── initforever.js │ │ ├── invalidInput1.json │ │ ├── invalidInput2.json │ │ ├── invalidInput3.json │ │ ├── invalidInput4.json │ │ ├── invoke.swift │ │ ├── invokeNonBlocking.swift │ │ ├── jsonStringWebAction.js │ │ ├── log.js │ │ ├── loggingTimeout.js │ │ ├── malformed.js │ │ ├── malformed.py │ │ ├── memoryWithGC.js │ │ ├── multipleHeaders.js │ │ ├── niam.js │ │ ├── niam.py │ │ ├── niam.swift │ │ ├── openFiles.js │ │ ├── params.js │ │ ├── ping.js │ │ ├── pngWeb.js │ │ ├── printParams.js │ │ ├── python-zip │ │ │ ├── __main__.py │ │ │ └── greet.py │ │ ├── pythonVersion.py │ │ ├── runexception.js │ │ ├── runexit.js │ │ ├── sizedResult.js │ │ ├── sleep.js │ │ ├── sleep.py │ │ ├── sort-array.js │ │ ├── sort.js │ │ ├── split-array.js │ │ ├── split.js │ │ ├── src │ │ │ └── java │ │ │ │ └── sleep │ │ │ │ ├── build.gradle │ │ │ │ ├── settings.gradle │ │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── java │ │ │ │ └── Sleep.java │ │ ├── stdenv.py │ │ ├── step.js │ │ ├── textBody.js │ │ ├── trigger.swift │ │ ├── unicode.tests │ │ │ ├── go-1.13.txt │ │ │ ├── go-1.15.txt │ │ │ ├── nodejs-10.txt │ │ │ ├── nodejs-12.txt │ │ │ ├── nodejs-14.txt │ │ │ ├── php-7.3.txt │ │ │ ├── php-7.4.txt │ │ │ ├── python-3.txt │ │ │ ├── python.txt │ │ │ ├── ruby-2.5.txt │ │ │ ├── rust-1.34.txt │ │ │ ├── src │ │ │ │ ├── dotnet2.2 │ │ │ │ │ ├── Apache.OpenWhisk.UnicodeTests.Dotnet │ │ │ │ │ │ ├── Apache.OpenWhisk.UnicodeTests.Dotnet.csproj │ │ │ │ │ │ └── Unicode.cs │ │ │ │ │ └── openwhisk-unicodetests-dotnet.sln │ │ │ │ └── java │ │ │ │ │ └── unicode │ │ │ │ │ ├── build.gradle │ │ │ │ │ ├── settings.gradle │ │ │ │ │ └── src │ │ │ │ │ └── main │ │ │ │ │ └── java │ │ │ │ │ └── Unicode.java │ │ │ ├── swift-4.2.txt │ │ │ ├── swift-5.1.txt │ │ │ └── swift-5.3.txt │ │ ├── validInput1.json │ │ ├── validInput2.json │ │ ├── wc.js │ │ ├── wcbin.js │ │ ├── word_count.json │ │ └── zippedaction │ │ │ ├── index.js │ │ │ ├── package-lock.json │ │ │ └── package.json │ └── apigw │ │ ├── apigw_path_param_support_test_invalidActionType.json │ │ ├── apigw_path_param_support_test_invalidParamName1.json │ │ ├── apigw_path_param_support_test_invalidParamName2.json │ │ ├── apigw_path_param_support_test_invalidTargetUrl.json │ │ ├── apigw_path_param_support_test_withPathParameters1.json │ │ ├── apigw_path_param_support_test_withPathParameters2.json │ │ ├── endpoints.without.action.swagger.json │ │ ├── local.api.bad.yaml │ │ ├── local.api.yaml │ │ ├── testswaggerdoc1 │ │ ├── testswaggerdoc2 │ │ └── testswaggerdocinvalid ├── performance │ ├── README.md │ ├── gatling_tests │ │ ├── build.gradle │ │ ├── build.sh │ │ └── src │ │ │ └── gatling │ │ │ ├── resources │ │ │ ├── conf │ │ │ │ └── logback.xml │ │ │ └── data │ │ │ │ ├── nodeJSAction.js │ │ │ │ ├── nodeJSAsyncAction.js │ │ │ │ ├── pythonAction.py │ │ │ │ ├── src │ │ │ │ └── java │ │ │ │ │ ├── build.gradle │ │ │ │ │ ├── settings.gradle │ │ │ │ │ └── src │ │ │ │ │ └── main │ │ │ │ │ └── java │ │ │ │ │ └── JavaAction.java │ │ │ │ ├── swiftAction.swift │ │ │ │ └── users.csv │ │ │ └── scala │ │ │ └── org │ │ │ └── apache │ │ │ └── openwhisk │ │ │ ├── ApiV1Simulation.scala │ │ │ ├── BlockingInvokeOneActionSimulation.scala │ │ │ ├── ColdBlockingInvokeSimulation.scala │ │ │ ├── LatencySimulation.scala │ │ │ └── extension │ │ │ └── whisk │ │ │ ├── OpenWhiskActionBuilder.scala │ │ │ ├── OpenWhiskDsl.scala │ │ │ ├── OpenWhiskProtocolBuilder.scala │ │ │ └── Predef.scala │ ├── preparation │ │ ├── actions │ │ │ ├── async.js │ │ │ └── noop.js │ │ ├── create.sh │ │ ├── deploy-lean.sh │ │ └── deploy.sh │ └── wrk_tests │ │ ├── latency.sh │ │ ├── post.lua │ │ └── throughput.sh └── src │ ├── main │ └── scala │ │ └── org │ │ └── apache │ │ └── openwhisk │ │ └── GradleWorkaround.scala │ └── test │ ├── resources │ ├── application.conf.j2 │ ├── logback-test.xml │ ├── swagger-config.json │ └── templates │ │ └── build.gradle.mustache │ └── scala │ ├── actionContainers │ ├── ActionContainer.scala │ ├── BasicActionRunnerTests.scala │ └── ResourceHelpers.scala │ ├── apigw │ └── healthtests │ │ ├── ApiGwEndToEndTests.scala │ │ └── ApiGwRestEndToEndTests.scala │ ├── common │ ├── ConcurrencyHelpers.scala │ ├── FreePortFinder.scala │ ├── JsHelpers.scala │ ├── LoggedFunction.scala │ ├── Pair.java │ ├── RunCliCmd.scala │ ├── SimpleExec.scala │ ├── StreamLogging.scala │ ├── TestHelpers.scala │ ├── TestUtils.java │ ├── TimingHelpers.scala │ ├── WhiskProperties.java │ ├── WskActorSystem.scala │ ├── WskCliOperations.scala │ ├── WskOperations.scala │ ├── WskTestHelpers.scala │ ├── WskTracingTests.scala │ └── rest │ │ ├── SwaggerValidator.scala │ │ └── WskRestOperations.scala │ ├── ha │ ├── CacheInvalidationTests.scala │ └── ShootComponentsTests.scala │ ├── invokerShoot │ └── ShootInvokerTests.scala │ ├── limits │ └── ThrottleTests.scala │ ├── org │ └── apache │ │ └── openwhisk │ │ ├── common │ │ ├── ConfigMXBeanTests.scala │ │ ├── ConfigMapValueTests.scala │ │ ├── ConfigTests.scala │ │ ├── ForcibleSemaphoreTests.scala │ │ ├── NestedSemaphoreTests.scala │ │ ├── PrometheusTests.scala │ │ ├── ResizableSemaphoreTests.scala │ │ ├── RunCliCmdTests.scala │ │ ├── SchedulerTests.scala │ │ ├── TransactionIdTests.scala │ │ ├── UserEventTests.scala │ │ └── etcd │ │ │ ├── EtcdConfigTests.scala │ │ │ ├── EtcdKvTests.scala │ │ │ ├── EtcdLeaderShipUnitTests.scala │ │ │ └── EtcdWorkerTests.scala │ │ ├── connector │ │ └── kafka │ │ │ └── KafkaMetricsTests.scala │ │ ├── core │ │ ├── WhiskConfigTests.scala │ │ ├── admin │ │ │ └── WskAdminTests.scala │ │ ├── apigw │ │ │ └── actions │ │ │ │ └── test │ │ │ │ ├── ApiGwRestRoutemgmtActionTests.scala │ │ │ │ └── ApiGwRoutemgmtActionTests.scala │ │ ├── cli │ │ │ └── test │ │ │ │ ├── ApiGwRestBasicTests.scala │ │ │ │ ├── ApiGwRestTests.scala │ │ │ │ ├── BaseApiGwTests.scala │ │ │ │ ├── TestJsonArgs.scala │ │ │ │ ├── WskActionSequenceTests.scala │ │ │ │ ├── WskEntitlementTests.scala │ │ │ │ ├── WskRestActionSequenceTests.scala │ │ │ │ ├── WskRestBasicUsageTests.scala │ │ │ │ ├── WskRestEntitlementTests.scala │ │ │ │ └── WskWebActionsTests.scala │ │ ├── connector │ │ │ ├── test │ │ │ │ ├── EventMessageTests.scala │ │ │ │ ├── MessageFeedTests.scala │ │ │ │ ├── MessageTests.scala │ │ │ │ └── TestConnector.scala │ │ │ └── tests │ │ │ │ └── AcknowledgementMessageTests.scala │ │ ├── containerpool │ │ │ ├── docker │ │ │ │ └── test │ │ │ │ │ ├── AkkaContainerClientTests.scala │ │ │ │ │ ├── ApacheBlockingContainerClientTests.scala │ │ │ │ │ ├── DockerClientTests.scala │ │ │ │ │ ├── DockerClientWithFileAccessTests.scala │ │ │ │ │ ├── DockerContainerFactoryTests.scala │ │ │ │ │ ├── DockerContainerTests.scala │ │ │ │ │ ├── ProcessRunnerTests.scala │ │ │ │ │ └── RuncClientTests.scala │ │ │ ├── kubernetes │ │ │ │ └── test │ │ │ │ │ ├── Fabric8ClientTests.scala │ │ │ │ │ ├── KubeClientSupport.scala │ │ │ │ │ ├── KubernetesClientTests.scala │ │ │ │ │ ├── KubernetesContainerTests.scala │ │ │ │ │ └── WhiskPodBuilderTests.scala │ │ │ ├── logging │ │ │ │ ├── ElasticSearchLogStoreTests.scala │ │ │ │ ├── ElasticSearchRestClientTests.scala │ │ │ │ ├── LogDriverLogStoreTests.scala │ │ │ │ ├── SplunkLogStoreTests.scala │ │ │ │ └── test │ │ │ │ │ ├── DockerToActivationFileLogStoreTests.scala │ │ │ │ │ └── DockerToActivationLogStoreTests.scala │ │ │ ├── test │ │ │ │ ├── ContainerArgsConfigTest.scala │ │ │ │ ├── ContainerPoolConfigTests.scala │ │ │ │ ├── ContainerPoolTests.scala │ │ │ │ └── ContainerProxyTests.scala │ │ │ ├── v2 │ │ │ │ └── test │ │ │ │ │ ├── ActivationClientProxyTests.scala │ │ │ │ │ ├── FunctionPullingContainerPoolTests.scala │ │ │ │ │ ├── FunctionPullingContainerProxyTests.scala │ │ │ │ │ └── InvokerHealthManagerTests.scala │ │ │ └── yarn │ │ │ │ └── test │ │ │ │ ├── MockYARNRM.scala │ │ │ │ └── YARNContainerFactoryTests.scala │ │ ├── controller │ │ │ ├── actions │ │ │ │ └── test │ │ │ │ │ └── SequenceAccountingTests.scala │ │ │ └── test │ │ │ │ ├── ActionsApiTests.scala │ │ │ │ ├── ActionsApiWithDbPollingTests.scala │ │ │ │ ├── ActionsApiWithoutDbPollingTests.scala │ │ │ │ ├── ActivationsApiTests.scala │ │ │ │ ├── BasicAuthenticateTests.scala │ │ │ │ ├── ConductorsApiTests.scala │ │ │ │ ├── ControllerApiTests.scala │ │ │ │ ├── ControllerRoutesTests.scala │ │ │ │ ├── ControllerTestCommon.scala │ │ │ │ ├── EntitlementProviderTests.scala │ │ │ │ ├── FPCEntitlementTests.scala │ │ │ │ ├── KindRestrictorTests.scala │ │ │ │ ├── LimitsApiTests.scala │ │ │ │ ├── NamespacesApiTests.scala │ │ │ │ ├── PackageActionsApiTests.scala │ │ │ │ ├── PackagesApiTests.scala │ │ │ │ ├── RateThrottleTests.scala │ │ │ │ ├── RespondWithHeadersTests.scala │ │ │ │ ├── RulesApiTests.scala │ │ │ │ ├── SequenceApiTests.scala │ │ │ │ ├── SwaggerRoutesTests.scala │ │ │ │ ├── TriggersApiTests.scala │ │ │ │ ├── WebActionsApiTests.scala │ │ │ │ ├── WhiskAuthHelpers.scala │ │ │ │ └── migration │ │ │ │ └── SequenceActionApiMigrationTests.scala │ │ ├── database │ │ │ ├── ArtifactActivationStoreBehaviorBase.scala │ │ │ ├── ArtifactActivationStoreTests.scala │ │ │ ├── ArtifactWithFileStorageActivationStoreTests.scala │ │ │ ├── CouchDBArtifactStoreTests.scala │ │ │ ├── CouchDBAttachmentStoreTests.scala │ │ │ ├── CouchDBStoreBehaviorBase.scala │ │ │ ├── LimitsCommandTests.scala │ │ │ ├── UserCommandTests.scala │ │ │ ├── WhiskAdminCliTestBase.scala │ │ │ ├── azblob │ │ │ │ ├── AzureBlob.scala │ │ │ │ ├── AzureBlobAttachmentStoreBehaviorBase.scala │ │ │ │ ├── AzureBlobAttachmentStoreCDNTests.scala │ │ │ │ ├── AzureBlobAttachmentStoreITTests.scala │ │ │ │ └── AzureBlobConfigTest.scala │ │ │ ├── cosmosdb │ │ │ │ ├── CollectionResourceUsageTests.scala │ │ │ │ ├── CosmosDBArtifactStoreTests.scala │ │ │ │ ├── CosmosDBAttachmentStoreTests.scala │ │ │ │ ├── CosmosDBConfigTests.scala │ │ │ │ ├── CosmosDBLeakTests.scala │ │ │ │ ├── CosmosDBSoftDeleteTests.scala │ │ │ │ ├── CosmosDBStoreBehaviorBase.scala │ │ │ │ ├── CosmosDBSupportTests.scala │ │ │ │ ├── CosmosDBTestSupport.scala │ │ │ │ ├── CosmosDBUtilTest.scala │ │ │ │ ├── IndexingPolicyTests.scala │ │ │ │ ├── RecordingLeakDetector.java │ │ │ │ ├── RecordingLeakDetectorFactory.java │ │ │ │ ├── ReferenceCountedTests.scala │ │ │ │ └── cache │ │ │ │ │ ├── CacheInvalidatorTests.scala │ │ │ │ │ └── WhiskChangeEventObserverTests.scala │ │ │ ├── elasticsearch │ │ │ │ ├── ElasticSearchActivationStoreBehaviorBase.scala │ │ │ │ └── ElasticSearchActivationStoreTests.scala │ │ │ ├── memory │ │ │ │ ├── MemoryArtifactStoreBehaviorBase.scala │ │ │ │ ├── MemoryArtifactStoreTests.scala │ │ │ │ └── MemoryAttachmentStoreTests.scala │ │ │ ├── mongodb │ │ │ │ ├── MongoDBArtifactStoreTests.scala │ │ │ │ ├── MongoDBAsyncStreamGraphTests.scala │ │ │ │ ├── MongoDBAttachmentStoreTests.scala │ │ │ │ ├── MongoDBStoreBehaviorBase.scala │ │ │ │ └── MongoDBViewMapperTests.scala │ │ │ ├── s3 │ │ │ │ ├── CloudFrontSignerTests.scala │ │ │ │ ├── S3AttachmentStoreAwsTests.scala │ │ │ │ ├── S3AttachmentStoreBehaviorBase.scala │ │ │ │ ├── S3AttachmentStoreCloudFrontTests.scala │ │ │ │ ├── S3AttachmentStoreMinioTests.scala │ │ │ │ ├── S3Aws.scala │ │ │ │ ├── S3Minio.scala │ │ │ │ └── S3WithPrefixTests.scala │ │ │ └── test │ │ │ │ ├── AttachmentCompatibilityTests.scala │ │ │ │ ├── AttachmentStoreBehaviors.scala │ │ │ │ ├── AttachmentSupportTests.scala │ │ │ │ ├── BatcherTests.scala │ │ │ │ ├── CacheConcurrencyTests.scala │ │ │ │ ├── CleanUpActivationsTest.scala │ │ │ │ ├── CouchDbRestClientTests.scala │ │ │ │ ├── DatabaseScriptTestUtils.scala │ │ │ │ ├── DbUtils.scala │ │ │ │ ├── DocumentHandlerTests.scala │ │ │ │ ├── ExtendedCouchDbRestClient.scala │ │ │ │ ├── MultipleReadersSingleWriterCacheTests.scala │ │ │ │ ├── RemoveLogsTests.scala │ │ │ │ ├── ReplicatorTests.scala │ │ │ │ └── behavior │ │ │ │ ├── ActivationStoreBehavior.scala │ │ │ │ ├── ActivationStoreBehaviorBase.scala │ │ │ │ ├── ActivationStoreCRUDBehaviors.scala │ │ │ │ ├── ActivationStoreQueryBehaviors.scala │ │ │ │ ├── ArtifactStoreActivationsQueryBehaviors.scala │ │ │ │ ├── ArtifactStoreAttachmentBehaviors.scala │ │ │ │ ├── ArtifactStoreBehavior.scala │ │ │ │ ├── ArtifactStoreBehaviorBase.scala │ │ │ │ ├── ArtifactStoreCRUDBehaviors.scala │ │ │ │ ├── ArtifactStoreQueryBehaviors.scala │ │ │ │ ├── ArtifactStoreSubjectQueryBehaviors.scala │ │ │ │ ├── ArtifactStoreTestUtil.scala │ │ │ │ └── ArtifactStoreWhisksQueryBehaviors.scala │ │ ├── entity │ │ │ └── test │ │ │ │ ├── ActivationCompatTests.scala │ │ │ │ ├── ActivationResponseTests.scala │ │ │ │ ├── ControllerInstanceIdTests.scala │ │ │ │ ├── DatastoreTests.scala │ │ │ │ ├── ExecHelpers.scala │ │ │ │ ├── ExecManifestTests.scala │ │ │ │ ├── ExecTests.scala │ │ │ │ ├── InvokerInstanceIdTests.scala │ │ │ │ ├── MigrationEntities.scala │ │ │ │ ├── ParameterEncryptionTests.scala │ │ │ │ ├── SchemaTests.scala │ │ │ │ ├── SizeTests.scala │ │ │ │ ├── ViewTests.scala │ │ │ │ └── WhiskEntityTests.scala │ │ ├── invoker │ │ │ └── test │ │ │ │ ├── ContainerMessageConsumerTests.scala │ │ │ │ ├── DefaultInvokerServerTests.scala │ │ │ │ ├── FPCInvokerServerTests.scala │ │ │ │ ├── InstanceIdAssignerTests.scala │ │ │ │ ├── InvokerBootUpTests.scala │ │ │ │ └── NamespaceBlacklistTests.scala │ │ ├── limits │ │ │ ├── ActionLimitsTests.scala │ │ │ ├── ConcurrencyTests.scala │ │ │ └── MaxActionDurationTests.scala │ │ ├── loadBalancer │ │ │ └── test │ │ │ │ ├── FPCPoolBalancerTests.scala │ │ │ │ ├── InvokerSupervisionTests.scala │ │ │ │ └── ShardingContainerPoolBalancerTests.scala │ │ ├── scheduler │ │ │ ├── FPCSchedulerServerTests.scala │ │ │ ├── container │ │ │ │ └── test │ │ │ │ │ ├── ContainerManagerTests.scala │ │ │ │ │ └── CreationJobManagerTests.scala │ │ │ ├── grpc │ │ │ │ └── test │ │ │ │ │ ├── ActivationServiceImplTests.scala │ │ │ │ │ └── CommonVariable.scala │ │ │ └── queue │ │ │ │ └── test │ │ │ │ ├── ContainerCounterTests.scala │ │ │ │ ├── ElasticSearchDurationCheckResultFormatTest.scala │ │ │ │ ├── ElasticSearchDurationCheckerTests.scala │ │ │ │ ├── MemoryQueueFlowTests.scala │ │ │ │ ├── MemoryQueueTests.scala │ │ │ │ ├── MemoryQueueTestsFixture.scala │ │ │ │ ├── QueueManagerTests.scala │ │ │ │ └── SchedulingDecisionMakerTests.scala │ │ └── service │ │ │ ├── DataManagementServiceTests.scala │ │ │ ├── LeaseKeepAliveServiceTests.scala │ │ │ └── WatcherServiceTests.scala │ │ ├── http │ │ └── PoolingRestClientTests.scala │ │ ├── spi │ │ └── SpiTests.scala │ │ ├── standalone │ │ ├── StandaloneApiGwTests.scala │ │ ├── StandaloneCouchTests.scala │ │ ├── StandaloneKCFTests.scala │ │ ├── StandaloneKafkaTests.scala │ │ ├── StandaloneSanityTestSupport.scala │ │ ├── StandaloneServerFixture.scala │ │ ├── StandaloneServerTests.scala │ │ └── StandaloneUserEventTests.scala │ │ ├── test │ │ └── http │ │ │ └── RESTProxy.scala │ │ └── utils │ │ └── test │ │ └── ExecutionContextFactoryTests.scala │ ├── services │ ├── HeadersTests.scala │ └── KafkaConnectorTests.scala │ └── system │ ├── basic │ ├── WskActionTests.scala │ ├── WskActivationLogsTests.scala │ ├── WskActivationTests.scala │ ├── WskConductorTests.scala │ ├── WskConsoleTests.scala │ ├── WskMultiRuntimeTests.scala │ ├── WskPackageTests.scala │ ├── WskRestBasicTests.scala │ ├── WskRestRuleTests.scala │ ├── WskRuleTests.scala │ ├── WskSequenceTests.scala │ └── WskUnicodeTests.scala │ └── rest │ ├── ActionSchemaTests.scala │ ├── GoCLINginxTests.scala │ ├── JsonSchema.scala │ ├── JsonSchemaTests.scala │ ├── RestUtil.scala │ └── SwaggerTests.scala └── tools ├── actionProxy ├── Dockerfile ├── README.md ├── build.gradle └── invoke.py ├── admin ├── README-NEXT.md ├── README.md ├── build.gradle ├── src │ └── main │ │ ├── resources │ │ └── application.conf │ │ └── scala │ │ └── org │ │ └── apache │ │ └── openwhisk │ │ └── core │ │ ├── cli │ │ ├── CommandMessages.scala │ │ └── Main.scala │ │ └── database │ │ ├── LimitsCommand.scala │ │ └── UserCommand.scala ├── wskadmin ├── wskprop.py └── wskutil.py ├── build ├── README.md ├── checkLogs.py ├── citool └── redo ├── db ├── README.md ├── cleanUpActivations.py ├── cosmosDbUtil.py ├── deleteLogsFromActivations.py ├── moveCodeToAttachment.py └── replicateDbs.py ├── dev ├── README.md ├── build.gradle └── src │ └── main │ ├── groovy │ ├── CategoryManager.groovy │ ├── couchdbViews.groovy │ ├── intellijRunConfig.groovy │ ├── listRepos.groovy │ └── renderModuleDetails.groovy │ └── resources │ └── modules.md ├── eclipse ├── java.xml └── scala.properties ├── git ├── README.md ├── pre-commit-scalafmt-gradlew.sh └── pre-commit-scalafmt-native.sh ├── github ├── checkAndUploadLogs.sh ├── debugAction.sh ├── flake8.sh ├── runDummyTests.sh ├── runLeanSystemTests.sh ├── runMultiRuntimeTests.sh ├── runSchedulerTests.sh ├── runStandaloneTests.sh ├── runSystemTests.sh ├── runUnitTests.sh ├── s3-upload.sh ├── scan.sh ├── setup.sh ├── waitIfDebug.sh └── writeOnSlack.sh ├── jenkins └── apache │ └── dockerhub.groovy ├── macos ├── README.md └── docker-machine │ ├── README.md │ ├── tweak-dockerhost.sh │ └── tweak-dockermachine.sh ├── ow-utils ├── Dockerfile ├── Dockerfile.arm ├── README.md └── build.gradle ├── owperf ├── README.md ├── owperf.js ├── owperf.sh ├── owperf_data.odg ├── owperf_data.png ├── package.json ├── setup.sh └── testAction.js ├── travis ├── README.md ├── box-upload.py ├── checkAndUploadLogs.sh ├── distDocker.sh ├── docker.conf ├── docker.sh ├── flake8.sh ├── runLeanSystemTests.sh ├── runMultiRuntimeTests.sh ├── runSchedulerTests.sh ├── runStandaloneTests.sh ├── runSystemTests.sh ├── runTests.sh ├── runUnitTests.sh ├── scan.sh ├── setup-docker.py ├── setup.sh ├── setupLeanSystem.sh ├── setupPrereq.sh └── setupSystem.sh └── ubuntu-setup ├── README.md ├── all.sh ├── ansible.sh ├── bashprofile.sh ├── docker-xenial.sh ├── docker.sh ├── java8.sh ├── misc.sh └── pip.sh /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization. 2 | # Resources: 3 | # - https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html 4 | # - http://davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/ 5 | # - https://help.github.com/articles/dealing-with-line-endings/ 6 | * text=auto 7 | 8 | *.go text eol=lf 9 | *.java text 10 | *.js text 11 | *.md text 12 | *.py text eol=lf 13 | *.scala text 14 | *.sh text eol=lf 15 | *.gradle text 16 | *.xml text 17 | *.bat text eol=crlf 18 | 19 | *.jar binary 20 | *.png binary 21 | 22 | # python files not having the .py extension 23 | tools/cli/wsk text eol=lf 24 | tools/cli/wskadmin text eol=lf 25 | 26 | # bash files not having the .sh extension 27 | gradlew text eol=lf 28 | core/javaAction/proxy/gradlew text eol=lf 29 | sdk/docker/client/action text eol=lf 30 | 31 | # auth files with default api keys 32 | ansible/files/auth.guest text eol=lf 33 | ansible/files/auth.whisk.system text eol=lf 34 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/proposal.md: -------------------------------------------------------------------------------- 1 | ## Enhancement Description 2 | Please summarize your proposal (e.g. the "what", the "why", and some of the "how"). 3 | 4 | * Proposal: [a link to the corresponding pull request if it exists already]() 5 | 6 | ## References 7 | Please provide links to prior discussion (e.g., Apache `dev` list), wikis, or related issues. 8 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Keep GitHub Actions up to date with GitHub's Dependabot... 2 | # https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot 3 | version: 2 4 | updates: 5 | - package-ecosystem: "github-actions" 6 | directory: "/" 7 | groups: 8 | GitHub_Actions: 9 | patterns: 10 | - "*" # Group all Actions updates into a single larger pull request 11 | schedule: 12 | interval: weekly 13 | -------------------------------------------------------------------------------- /.pydevproject: -------------------------------------------------------------------------------- 1 | 2 | 3 | Default 4 | python 3.6 5 | 6 | -------------------------------------------------------------------------------- /.scalafmt.conf: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | version = 1.5.1 19 | style = intellij 20 | danglingParentheses = false 21 | maxColumn = 120 22 | docstrings = JavaDoc 23 | rewrite.rules = [SortImports] 24 | project.git = true 25 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | 19 | 20 | # Apache OpenWhisk Community Code of Conduct 21 | 22 | Please refer to the [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html). 23 | -------------------------------------------------------------------------------- /NOTICE.txt: -------------------------------------------------------------------------------- 1 | Apache OpenWhisk 2 | Copyright 2016-2024 The Apache Software Foundation 3 | 4 | This product includes software developed at 5 | The Apache Software Foundation (http://www.apache.org/). 6 | -------------------------------------------------------------------------------- /ansible/ansible.cfg: -------------------------------------------------------------------------------- 1 | [defaults] 2 | 3 | callback_whitelist = profile_tasks 4 | retry_files_enabled = False 5 | host_key_checking = False 6 | inventory = environments/local 7 | callback_plugins = callbacks 8 | hash_behaviour = merge 9 | gather_timeout = 60 10 | 11 | [ssh_connection] 12 | scp_if_ssh = True 13 | -------------------------------------------------------------------------------- /ansible/apigateway.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | - hosts: redis 19 | roles: 20 | - redis 21 | 22 | - hosts: apigateway 23 | roles: 24 | - apigateway 25 | -------------------------------------------------------------------------------- /ansible/couchdb.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This playbook deploys a CouchDB for Openwhisk. 19 | 20 | - hosts: db 21 | roles: 22 | - couchdb 23 | -------------------------------------------------------------------------------- /ansible/downloadcli.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This playbook downloads the Openwhisk cli aka wsk from the API host. 19 | 20 | - hosts: ansible 21 | roles: 22 | - cli-install 23 | -------------------------------------------------------------------------------- /ansible/edge.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This playbook deploys Openwhisk Edge servers. 19 | # The edge is usually populated with NGINX serving as proxy. 20 | # The CLI also gets built and published for downloading from NGINX. 21 | # SDKs for blackbox get published to NGINX also. 22 | 23 | - hosts: edge 24 | roles: 25 | - nginx 26 | - cli 27 | -------------------------------------------------------------------------------- /ansible/environments/jenkins/ansible_jenkins.cfg: -------------------------------------------------------------------------------- 1 | [defaults] 2 | 3 | callback_whitelist = profile_tasks 4 | retry_files_enabled = False 5 | host_key_checking = False 6 | inventory = environments/jenkins 7 | callback_plugins = callbacks 8 | hash_behaviour = merge 9 | remote_user = openwhisk 10 | private_key_file=/home/jenkins/secret/openwhisk_key 11 | 12 | [ssh_connection] 13 | scp_if_ssh = True 14 | -------------------------------------------------------------------------------- /ansible/environments/jenkins/openwhisk-vm1-he-de.j2.ini: -------------------------------------------------------------------------------- 1 | ; the first parameter in a host is the inventory_hostname 2 | 3 | ; used for local actions only 4 | ansible ansible_connection=local 5 | 6 | [edge] 7 | 144.76.63.94 ansible_host=144.76.63.94 ansible_connection=local 8 | 9 | [controllers] 10 | controller0 ansible_host=144.76.63.94 ansible_connection=local 11 | ;{% if mode is defined and 'HA' in mode %} 12 | ;controller1 ansible_host=144.76.63.94 ansible_connection=local 13 | ;{% endif %} 14 | 15 | [kafkas] 16 | kafka0 ansible_host=144.76.63.94 ansible_connection=local 17 | {% if mode is defined and 'HA' in mode %} 18 | kafka1 ansible_host=144.76.63.94 ansible_connection=local 19 | {% endif %} 20 | 21 | [zookeepers:children] 22 | kafkas 23 | 24 | [invokers] 25 | invoker0 ansible_host=5.9.20.92 ansible_connection=ssh 26 | invoker1 ansible_host=144.76.27.183 ansible_connection=ssh 27 | 28 | ; db group is only used if db.provider is CouchDB 29 | [db] 30 | 144.76.63.94 ansible_host=144.76.63.94 ansible_connection=local 31 | 32 | [redis] 33 | 144.76.63.94 ansible_host=144.76.63.94 ansible_connection=local 34 | 35 | [apigateway] 36 | 144.76.63.94 ansible_host=144.76.63.94 ansible_connection=local 37 | -------------------------------------------------------------------------------- /ansible/environments/jenkins/openwhisk-vm2-he-de.j2.ini: -------------------------------------------------------------------------------- 1 | ; the first parameter in a host is the inventory_hostname 2 | 3 | ; used for local actions only 4 | ansible ansible_connection=local 5 | 6 | [edge] 7 | 5.9.20.92 ansible_host=5.9.20.92 ansible_connection=local 8 | 9 | [controllers] 10 | controller0 ansible_host=5.9.20.92 ansible_connection=local 11 | ;{% if mode is defined and 'HA' in mode %} 12 | ;controller1 ansible_host=5.9.20.92 ansible_connection=local 13 | ;{% endif %} 14 | 15 | [kafkas] 16 | kafka0 ansible_host=5.9.20.92 ansible_connection=local 17 | {% if mode is defined and 'HA' in mode %} 18 | kafka1 ansible_host=5.9.20.92 ansible_connection=local 19 | {% endif %} 20 | 21 | [zookeepers:children] 22 | kafkas 23 | 24 | [invokers] 25 | invoker0 ansible_host=144.76.27.183 ansible_connection=ssh 26 | invoker1 ansible_host=144.76.63.94 ansible_connection=ssh 27 | 28 | ; db group is only used if db.provider is CouchDB 29 | [db] 30 | 5.9.20.92 ansible_host=5.9.20.92 ansible_connection=local 31 | 32 | [redis] 33 | 5.9.20.92 ansible_host=5.9.20.92 ansible_connection=local 34 | 35 | [apigateway] 36 | 5.9.20.92 ansible_host=5.9.20.92 ansible_connection=local 37 | -------------------------------------------------------------------------------- /ansible/environments/jenkins/openwhisk-vm3-he-de.j2.ini: -------------------------------------------------------------------------------- 1 | ; the first parameter in a host is the inventory_hostname 2 | 3 | ; used for local actions only 4 | ansible ansible_connection=local 5 | 6 | [edge] 7 | 144.76.27.183 ansible_host=144.76.27.183 ansible_connection=local 8 | 9 | [controllers] 10 | controller0 ansible_host=144.76.27.183 ansible_connection=local 11 | ;{% if mode is defined and 'HA' in mode %} 12 | ;controller1 ansible_host=144.76.27.183 ansible_connection=local 13 | ;{% endif %} 14 | 15 | [kafkas] 16 | kafka0 ansible_host=144.76.27.183 ansible_connection=local 17 | {% if mode is defined and 'HA' in mode %} 18 | kafka1 ansible_host=144.76.27.183 ansible_connection=local 19 | {% endif %} 20 | 21 | [zookeepers:children] 22 | kafkas 23 | 24 | [invokers] 25 | invoker0 ansible_host=144.76.63.94 ansible_connection=ssh 26 | invoker1 ansible_host=5.9.20.92 ansible_connection=ssh 27 | 28 | ; db group is only used if db.provider is CouchDB 29 | [db] 30 | 144.76.27.183 ansible_host=144.76.27.183 ansible_connection=local 31 | 32 | [redis] 33 | 144.76.27.183 ansible_host=144.76.27.183 ansible_connection=local 34 | 35 | [apigateway] 36 | 144.76.27.183 ansible_host=144.76.27.183 ansible_connection=local 37 | -------------------------------------------------------------------------------- /ansible/environments/vagrant/hosts: -------------------------------------------------------------------------------- 1 | ; the first parameter in a host is the inventory_hostname 2 | 3 | ; used for local actions only 4 | ansible ansible_connection=local 5 | 6 | [edge] 7 | 172.17.0.1 ansible_host=172.17.0.1 ansible_connection=local 8 | 9 | [controllers] 10 | controller0 ansible_host=172.17.0.1 ansible_connection=local 11 | ; 12 | [kafkas] 13 | kafka0 ansible_host=172.17.0.1 ansible_connection=local 14 | 15 | [zookeepers:children] 16 | kafkas 17 | 18 | [invokers] 19 | invoker0 ansible_host=172.17.0.1 ansible_connection=local 20 | 21 | ; db group is only used if db.provider is CouchDB 22 | [db] 23 | 172.17.0.1 ansible_host=172.17.0.1 ansible_connection=local 24 | 25 | [redis] 26 | 172.17.0.1 ansible_host=172.17.0.1 ansible_connection=local 27 | 28 | [apigateway] 29 | 172.17.0.1 ansible_host=172.17.0.1 ansible_connection=local 30 | 31 | [etcd] 32 | etcd0 ansible_host=172.17.0.1 ansible_connection=local 33 | -------------------------------------------------------------------------------- /ansible/etcd.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This playbook deploys Openwhisk Invokers. 19 | 20 | - hosts: etcd 21 | roles: 22 | - etcd 23 | -------------------------------------------------------------------------------- /ansible/files/activations_design_document_for_activations_db.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "_design/activations", 3 | "views": { 4 | "byDate": { 5 | "map": "function (doc) {\n if (doc.activationId !== undefined) try {\n emit(doc.start, [doc._id, doc._rev]);\n } catch (e) {}\n}" 6 | } 7 | }, 8 | "language": "javascript" 9 | } 10 | -------------------------------------------------------------------------------- /ansible/files/auth.guest: -------------------------------------------------------------------------------- 1 | 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP -------------------------------------------------------------------------------- /ansible/files/auth.whisk.system: -------------------------------------------------------------------------------- 1 | 789c46b1-71f6-4ed5-8c54-816aa4f8c502:abczO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP -------------------------------------------------------------------------------- /ansible/files/auth_design_document_for_subjects_db_v2.0.0.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "_design/subjects.v2.0.0", 3 | "views": { 4 | "identities": { 5 | "map": "function (doc) {\n if (doc.namespaces && !doc.blocked) {\n doc.namespaces.forEach(function(namespace) {\n var v = {_id: namespace.name + '/limits', namespace: namespace.name, uuid: namespace.uuid, key: namespace.key};\n emit([namespace.name], v);\n emit([namespace.uuid, namespace.key], v);\n });\n }\n}" 6 | } 7 | }, 8 | "language": "javascript", 9 | "indexes": {} 10 | } 11 | -------------------------------------------------------------------------------- /ansible/files/filter_design_document.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "_design/snapshotFilters", 3 | "filters": { 4 | "withoutDeletedAndDesignDocuments": "function(doc, req) {\n return !doc._deleted && !(doc._id.indexOf(\"_design/\") == 0);\n}" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ansible/files/logCleanup_design_document_for_activations_db.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "_design/logCleanup", 3 | "views": { 4 | "byDateWithLogs": { 5 | "map": "function (doc) {\n if (doc.activationId !== undefined && doc.logs && doc.logs.length > 0) try {\n var deleteLogs = true;\n for (i = 0; i < doc.annotations.length; i++) {\n var a = doc.annotations[i];\n if (a.key == \"kind\") {\n deleteLogs = a.value != \"sequence\";\n break;\n }\n }\n if (deleteLogs) {\n emit(doc.start, doc._id);\n }\n } catch (e) {}\n}" 6 | } 7 | }, 8 | "language": "javascript" 9 | } 10 | -------------------------------------------------------------------------------- /ansible/files/namespace_throttlings_design_document_for_subjects_db.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "_design/namespaceThrottlings", 3 | "views": { 4 | "blockedNamespaces": { 5 | "map": "function (doc) {\n if (doc._id.indexOf(\"/limits\") >= 0) {\n if (doc.concurrentInvocations === 0 || doc.invocationsPerMinute === 0) {\n var namespace = doc._id.replace(\"/limits\", \"\");\n emit(namespace, 1);\n }\n } else if (doc.subject && doc.namespaces && doc.blocked) {\n doc.namespaces.forEach(function(namespace) {\n emit(namespace.name, 1);\n });\n }\n}", 6 | "reduce": "_sum" 7 | } 8 | }, 9 | "language": "javascript" 10 | } 11 | -------------------------------------------------------------------------------- /ansible/files/package-versions.ini: -------------------------------------------------------------------------------- 1 | [openwhisk-cli] 2 | git_tag=latest 3 | -------------------------------------------------------------------------------- /ansible/files/whisks_design_document_for_activations_db_v2.1.0.json: -------------------------------------------------------------------------------- 1 | { 2 | "_id": "_design/whisks.v2.1.0", 3 | "language": "javascript", 4 | "views": { 5 | "activations": { 6 | "map": "function (doc) {\n var PATHSEP = \"/\";\n var isActivation = function (doc) { return (doc.activationId !== undefined) };\n var summarize = function (doc) {\n var endtime = doc.end !== 0 ? doc.end : undefined;\n return {\n namespace: doc.namespace,\n name: doc.name,\n version: doc.version,\n publish: doc.publish,\n annotations: doc.annotations,\n activationId: doc.activationId,\n start: doc.start,\n end: endtime,\n duration: endtime !== undefined ? endtime - doc.start : undefined,\n cause: doc.cause,\n statusCode: (endtime !== undefined && doc.response !== undefined && doc.response.statusCode !== undefined) ? doc.response.statusCode : undefined\n }\n };\n\n if (isActivation(doc)) try {\n var value = summarize(doc)\n emit([doc.namespace, doc.start], value);\n } catch (e) {}\n}\n", 7 | "reduce": "_count" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /ansible/initdb.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This playbook will initialize the immortal DBs in the database account. 19 | # This step is usually done only once per deployment. 20 | 21 | - hosts: ansible 22 | tasks: 23 | - include_tasks: tasks/initdb.yml 24 | -------------------------------------------------------------------------------- /ansible/kafka.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This playbook deploys an Openwhisk Kafka bus. 19 | 20 | - hosts: zookeepers 21 | roles: 22 | - zookeeper 23 | 24 | - hosts: kafkas 25 | roles: 26 | - kafka 27 | -------------------------------------------------------------------------------- /ansible/postdeploy.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This playbook installs additional packages after whisk has been deployed. 19 | 20 | - import_playbook: properties.yml 21 | 22 | - hosts: ansible 23 | tasks: 24 | - include_tasks: tasks/installOpenwhiskCatalog.yml 25 | when: (mode == "deploy") 26 | with_dict: "{{ catalog_repos }}" 27 | -------------------------------------------------------------------------------- /ansible/prereq.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This playbook prepares all target hosts for Openwhisk installation. 19 | # It will install all necessary packages to run Openwhisk playbooks. 20 | 21 | - hosts: all:!ansible 22 | serial: 1 23 | roles: 24 | - prereq 25 | -------------------------------------------------------------------------------- /ansible/properties.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This playbook writes whisk.properties. 19 | 20 | - hosts: ansible 21 | tasks: 22 | - import_tasks: tasks/writeWhiskProperties.yml 23 | when: mode == "deploy" 24 | -------------------------------------------------------------------------------- /ansible/publish.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This playbook updates CLIs and SDKs on an existing edge host. 19 | # Artifacts get built and published to NGINX. This assumes an already running edge host in an Openwhisk deployment. 20 | 21 | - hosts: edge 22 | roles: 23 | - cli 24 | - sdk 25 | -------------------------------------------------------------------------------- /ansible/recreateDesignDocs.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This playbook recreates all design documents in the whisks and the activations DB. 19 | 20 | - hosts: ansible 21 | tasks: 22 | - import_tasks: tasks/recreateViews.yml 23 | when: mode == "deploy" 24 | -------------------------------------------------------------------------------- /ansible/roles/apigateway/tasks/clean.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # Remove apigateway container. 19 | 20 | - name: remove apigateway 21 | docker_container: 22 | name: apigateway 23 | state: absent 24 | ignore_errors: True 25 | -------------------------------------------------------------------------------- /ansible/roles/apigateway/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will install apigateway in the group 'apigateway' in the environment inventory 19 | # In deploy mode it will deploy apigateway. 20 | # In clean mode it will remove the apigateway containers. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/cli-install/tasks/clean.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | 19 | - name: remove wsk binary 20 | file: 21 | path: "{{ openwhisk_home }}/bin/{{ wsk }}" 22 | state: absent 23 | vars: 24 | wsk: "{{ ( ansible_system == 'Windows') | ternary('wsk.exe', 'wsk') }}" 25 | -------------------------------------------------------------------------------- /ansible/roles/cli-install/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will configure and publish the CLI tarball. 19 | # In deploy mode it will generate a new CLI config, generate a tarball and copy it to nginx. 20 | # In clean mode it will clean the cli.nginxdir 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/cli/tasks/clean.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | 19 | - name: remove cli nginx directory 20 | file: 21 | path: "{{ openwhisk_cli.nginxdir.name }}" 22 | state: absent 23 | become: "{{ openwhisk_cli.nginxdir.become }}" 24 | -------------------------------------------------------------------------------- /ansible/roles/cli/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will configure and publish the CLI tarball. 19 | # In deploy mode it will generate a new CLI config, generate a tarball and copy it to nginx. 20 | # In clean mode it will clean the cli.nginxdir 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/controller/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will install controller in group 'controllers' in the environment inventory 19 | # In deploy mode it will deploy controllers. 20 | # In clean mode it will remove the controller containers. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/controller/templates/config.j2: -------------------------------------------------------------------------------- 1 | include classpath("application.conf") 2 | 3 | # Specify any custom config here. For example 4 | # whisk { 5 | # metrics { 6 | # prometheus-enabled = true 7 | # } 8 | # } 9 | -------------------------------------------------------------------------------- /ansible/roles/couchdb/tasks/clean.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # Remove CouchDB server 19 | 20 | - name: remove CouchDB 21 | docker_container: 22 | name: couchdb 23 | state: absent 24 | ignore_errors: True 25 | -------------------------------------------------------------------------------- /ansible/roles/couchdb/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will deploy a database server. Use the role if you want to use CouchCB locally. 19 | # In deploy mode it will start the CouchDB container. 20 | # In clean mode it will remove the CouchDB container. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/elasticsearch/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will deploy a database server. Use the role if you want to use ElasticSearch locally. 19 | # In deploy mode it will start the ElasticSearch container. 20 | # In clean mode it will remove the ElasticSearch container. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/elasticsearch/templates/elasticsearch.yml.j2: -------------------------------------------------------------------------------- 1 | cluster.name: "{{ db.elasticsearch.cluster_name }}" 2 | node.name: "{{ elasticsearch_name }}" 3 | network.host: 0.0.0.0 4 | network.publish_host: {{ ansible_default_ipv4.address | default(ansible_host | default('127.0.0.1')) }} 5 | 6 | http.port: 9200 7 | transport.tcp.port: {{ transport_port }} 8 | 9 | # minimum_master_nodes need to be explicitly set when bound on a public IP 10 | # set to 1 to allow single node clusters 11 | # Details: https://github.com/elastic/elasticsearch/pull/17282 12 | discovery.zen.ping.unicast.hosts: 13 | {% for es in groups['elasticsearch'] %} 14 | - {{ hostvars[es].ansible_host }}:{{ db.elasticsearch.base_transport_port|int + host_group.index(es)|int }} 15 | {% endfor %} 16 | discovery.zen.minimum_master_nodes: {{ (host_group|length / 2 + 1) | int}} 17 | 18 | gateway.recover_after_nodes: {{ (host_group|length / 2 + 1) | int }} 19 | gateway.expected_nodes: {{ host_group|length }} 20 | gateway.recover_after_time: 5m 21 | 22 | xpack.security.enabled: false 23 | bootstrap.memory_lock: true 24 | -------------------------------------------------------------------------------- /ansible/roles/elasticsearch/templates/log4j2.properties.j2: -------------------------------------------------------------------------------- 1 | status = error 2 | 3 | appender.console.type = Console 4 | appender.console.name = console 5 | appender.console.layout.type = PatternLayout 6 | appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n 7 | 8 | rootLogger.appenderRef.console.ref = console 9 | 10 | rootLogger.level = {{ db.elasticsearch.loglevel }} 11 | -------------------------------------------------------------------------------- /ansible/roles/etcd/tasks/clean.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # Remove etcd containers. 19 | 20 | - name: remove etcd 21 | docker_container: 22 | name: etcd{{ groups['etcd'].index(inventory_hostname) }} 23 | keep_volumes: True 24 | state: absent 25 | ignore_errors: True 26 | -------------------------------------------------------------------------------- /ansible/roles/etcd/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will install etcd in group 'etcd' in the environment inventory 19 | # In deploy mode it will deploy etcd containers. 20 | # In clean mode it will remove etcd containers. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/invoker/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will install invoker in group 'invokers' in the environment inventory 19 | # In deploy mode it will deploy invokers. 20 | # In clean mode it will remove the invoker containers. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/invoker/templates/config.j2: -------------------------------------------------------------------------------- 1 | include classpath("application.conf") 2 | 3 | # Specify any custom config here. For example 4 | # whisk { 5 | # metrics { 6 | # prometheus-enabled = true 7 | # } 8 | # } -------------------------------------------------------------------------------- /ansible/roles/kafka/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will install kafka in group 'kafka' in the environment inventory 19 | # In deploy mode it will deploy kafka including zookeeper. 20 | # In clean mode it will remove kafka and zookeeper containers. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/mongodb/tasks/clean.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # Remove MongoDB server 19 | 20 | - name: remove MongoDB 21 | docker_container: 22 | name: mongodb 23 | state: absent 24 | keep_volumes: False 25 | -------------------------------------------------------------------------------- /ansible/roles/mongodb/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will deploy a database server. Use the role if you want to use CouchCB locally. 19 | # In deploy mode it will start the MongoDB container. 20 | # In clean mode it will remove the MongoDB container. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | 28 | -------------------------------------------------------------------------------- /ansible/roles/nginx/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will install nginx. 19 | # In deploy mode it will deploy an nginx server. 20 | # In clean mode it will remove the nginx server as well as nginx.confdir 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/prereq/tasks/clean.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # Remove prereq packages 19 | 20 | - name: remove requests 21 | pip: 22 | name: requests 23 | state: absent 24 | become: true 25 | 26 | - name: remove docker 27 | pip: 28 | name: docker 29 | state: absent 30 | become: true 31 | 32 | - name: remove httplib2 33 | pip: 34 | name: httplib2 35 | state: absent 36 | become: true 37 | -------------------------------------------------------------------------------- /ansible/roles/prereq/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will prepare target VMs for a whisk deployment using ansible. 19 | # In deploy mode it will install all necessary packages and programs. 20 | # In clean mode it will uninstall packages from deploy mode. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/redis/tasks/clean.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # Remove redis container. 19 | 20 | - name: remove redis 21 | docker_container: 22 | name: redis 23 | state: absent 24 | ignore_errors: True 25 | -------------------------------------------------------------------------------- /ansible/roles/redis/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will install redis in group 'redis' in the environment inventory 19 | # In deploy mode it will deploy redis. 20 | # In clean mode it will remove the redis containers. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/routemgmt/tasks/clean.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # Remove API Gateway route management actions. 19 | 20 | - name: remove route management actions 21 | shell: ./uninstallRouteMgmt.sh {{ catalog_auth_key }} {{ groups['edge'] | first }} {{ catalog_namespace }} {{ cli.path }} chdir="{{ openwhisk_home }}/ansible/roles/routemgmt/files" 22 | environment: 23 | OPENWHISK_HOME: "{{ openwhisk_home }}" 24 | -------------------------------------------------------------------------------- /ansible/roles/routemgmt/tasks/deploy.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # Install the API Gateway route management actions. 19 | - name: install route management actions 20 | shell: ./installRouteMgmt.sh {{ catalog_auth_key }} {{ whisk_api_host_name | default(groups['edge'] | first) }} {{ catalog_namespace }} {{ cli.path }} chdir="{{ openwhisk_home }}/ansible/roles/routemgmt/files" 21 | environment: 22 | OPENWHISK_HOME: "{{ openwhisk_home }}" 23 | -------------------------------------------------------------------------------- /ansible/roles/routemgmt/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will install the API Gateway route management actions 19 | # In deploy mode it will deploy the API Gateway route management actions. 20 | # In clean mode it will remove the API Gateway route management actions. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/schedulers/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will install scheduler in group 'schedulers' in the environment inventory 19 | # In deploy mode it will deploy schedulers. 20 | # In clean mode it will remove the scheduler containers. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/roles/zookeeper/tasks/main.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This role will install kafka in group 'kafka' in the environment inventory 19 | # In deploy mode it will deploy kafka including zookeeper. 20 | # In clean mode it will remove kafka and zookeeper containers. 21 | 22 | - import_tasks: deploy.yml 23 | when: mode == "deploy" 24 | 25 | - import_tasks: clean.yml 26 | when: mode == "clean" 27 | -------------------------------------------------------------------------------- /ansible/routemgmt.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # This playbook deploys the Openwhisk API Gateway route management actions. 19 | 20 | - hosts: ansible 21 | roles: 22 | - routemgmt 23 | -------------------------------------------------------------------------------- /ansible/tasks/docker_login.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | 19 | # Logs in to private registry if needed. 20 | 21 | - name: docker login 22 | docker_login: 23 | registry: "{{ docker_registry }}" 24 | username: "{{ docker_registry_username }}" 25 | password: "{{ docker_registry_password }}" 26 | when: docker_registry != "" and docker_registry_password is defined 27 | -------------------------------------------------------------------------------- /ansible/templates/db_local.ini.j2: -------------------------------------------------------------------------------- 1 | [db_creds] 2 | db_provider={{ lookup('env', 'OW_DB')|default('CouchDB', true) }} 3 | db_username={{ lookup('env', 'OW_DB_USERNAME')|default('whisk_admin', true) }} 4 | db_password={{ lookup('env', 'OW_DB_PASSWORD')|default('some_passw0rd', true) }} 5 | db_protocol={{ lookup('env', 'OW_DB_PROTOCOL')|default('http', true) }} 6 | db_host={{ lookup('env', 'OW_DB_HOST')|default(groups['db']|first, true) }} 7 | db_port={{ lookup('env', 'OW_DB_PORT')|default('5984', true) }} 8 | 9 | [controller] 10 | db_username={{ lookup('env', 'OW_DB_CONTROLLER_USERNAME') | default(db_prefix + 'controller0', true) }} 11 | db_password={{ lookup('env', 'OW_DB_CONTROLLER_PASSWORD') | default('some_controller_passw0rd', true) }} 12 | 13 | [invoker] 14 | db_username={{ lookup('env', 'OW_DB_INVOKER_USERNAME') | default(db_prefix + 'invoker0', true) }} 15 | db_password={{ lookup('env', 'OW_DB_INVOKER_PASSWORD') | default('some_invoker_passw0rd', true) }} 16 | 17 | [scheduler] 18 | db_username={{ lookup('env', 'OW_DB_SCHEDULER_USERNAME') | default(db_prefix + 'scheduler0', true) }} 19 | db_password={{ lookup('env', 'OW_DB_SCHEDULER_PASSWORD') | default('some_scheduler_passw0rd', true) }} 20 | -------------------------------------------------------------------------------- /ansible/templates/jmxremote.access.j2: -------------------------------------------------------------------------------- 1 | {{ jmx.user }} readwrite 2 | -------------------------------------------------------------------------------- /ansible/templates/jmxremote.password.j2: -------------------------------------------------------------------------------- 1 | {{ jmx.user }} {{ jmx.pass }} 2 | -------------------------------------------------------------------------------- /ansible/templates/whisk.conf.j2: -------------------------------------------------------------------------------- 1 | include classpath("application.conf") 2 | 3 | whisk { 4 | couchdb { 5 | protocol = "{{ db.protocol }}" 6 | host = "{{ db.host }}" 7 | port = "{{ db.port }}" 8 | username = "{{ db.credentials.admin.user }}" 9 | password = "{{ db.credentials.admin.pass }}" 10 | provider = "{{ db.provider }}" 11 | databases { 12 | WhiskAuth = "{{ db.whisk.auth }}" 13 | WhiskEntity = "{{ db.whisk.actions }}" 14 | WhiskActivation = "{{ db.whisk.activations }}" 15 | } 16 | } 17 | {% if db.artifact_store.backend == 'MongoDB' %} 18 | mongodb { 19 | uri = "{{ db.mongodb.connect_string }}" 20 | database = "{{ db.mongodb.database }}" 21 | } 22 | 23 | spi { 24 | ArtifactStoreProvider = org.apache.openwhisk.core.database.mongodb.MongoDBArtifactStoreProvider 25 | } 26 | {% endif %} 27 | } 28 | -------------------------------------------------------------------------------- /ansible/wipe.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | --- 18 | # WARNING: This playbook wipes the database. This action is not reversible. Be very careful and know what you are doing. 19 | 20 | - hosts: ansible 21 | tasks: 22 | - import_tasks: tasks/wipeDatabase.yml 23 | vars: 24 | withViews: True 25 | when: mode == "deploy" 26 | -------------------------------------------------------------------------------- /ansible/yamllint.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | extends: default 19 | 20 | rules: 21 | # Needs to be more than 80 because of the standard 22 | # apache header overflowing in a couple places 23 | line-length: 24 | max: 90 25 | -------------------------------------------------------------------------------- /bin/wskadmin: -------------------------------------------------------------------------------- 1 | ../tools/admin/wskadmin -------------------------------------------------------------------------------- /bin/wskdev: -------------------------------------------------------------------------------- 1 | ../tools/build/redo -------------------------------------------------------------------------------- /common/scala/.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | !transformEnvironment.sh 3 | !copyJMXFiles.sh 4 | !build/distributions -------------------------------------------------------------------------------- /common/scala/copyJMXFiles.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | if [[ $( ls /conf/jmxremote.* 2> /dev/null ) ]] 20 | then 21 | # JMX auth files would be mounted as a symbolic link (read-only mode) 22 | # with `root` privileges by the k8s secret. 23 | cp -rL /conf/jmxremote.* /home/owuser 24 | rm -f /conf/jmxremote.* 2>/dev/null || true 25 | 26 | # The owner must be `owuser` and the file only have read permission. 27 | chmod 600 /home/owuser/jmxremote.* 28 | fi 29 | -------------------------------------------------------------------------------- /common/scala/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | [%d{yyyy-MM-dd'T'HH:mm:ss.SSS'Z'}] [%p] %msg%n 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /common/scala/src/main/resources/logging.conf: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | akka { 19 | loglevel = "DEBUG" 20 | loggers = ["akka.event.slf4j.Slf4jLogger"] 21 | logging-filter = "akka.event.slf4j.Slf4jLoggingFilter" 22 | } 23 | -------------------------------------------------------------------------------- /common/scala/src/main/scala/org/apache/openwhisk/common/time/Clock.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.openwhisk.common.time 19 | 20 | import java.time.Instant 21 | 22 | trait Clock { 23 | def now(): Instant 24 | } 25 | 26 | object SystemClock extends Clock { 27 | def now() = Instant.now() 28 | } 29 | -------------------------------------------------------------------------------- /common/scala/src/main/scala/org/apache/openwhisk/core/entity/DocumentReader.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.openwhisk.core.entity 19 | 20 | import spray.json._ 21 | 22 | protected[core] abstract class DocumentReader { 23 | def read[A](ma: Manifest[A], value: JsValue): WhiskDocument 24 | } 25 | -------------------------------------------------------------------------------- /core/controller/.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | !init.sh 3 | !build/distributions 4 | !build/tmp/docker-coverage 5 | -------------------------------------------------------------------------------- /core/controller/init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ./copyJMXFiles.sh 20 | 21 | export CONTROLLER_OPTS 22 | CONTROLLER_OPTS="$CONTROLLER_OPTS -Dakka.remote.artery.bind.hostname=$(hostname -i) $(./transformEnvironment.sh)" 23 | 24 | exec controller/bin/controller "$@" 25 | -------------------------------------------------------------------------------- /core/cosmosdb/cache-invalidator/.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | !init.sh 3 | !build/distributions 4 | !build/tmp/docker-coverage 5 | -------------------------------------------------------------------------------- /core/cosmosdb/cache-invalidator/Dockerfile: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | ARG BASE=scala 19 | FROM ${BASE} 20 | 21 | ENV UID=1001 \ 22 | NOT_ROOT_USER=owuser 23 | 24 | 25 | # Copy app jars 26 | ADD build/distributions/cache-invalidator.tar / 27 | 28 | COPY init.sh / 29 | RUN chmod +x init.sh 30 | 31 | RUN useradd -m -u 1001 -d /home/${NOT_ROOT_USER} -s /bin/bash ${NOT_ROOT_USER} 32 | USER ${NOT_ROOT_USER} 33 | 34 | EXPOSE 8080 35 | CMD ["./init.sh", "0"] 36 | -------------------------------------------------------------------------------- /core/cosmosdb/cache-invalidator/Dockerfile-debian: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | FROM scala 19 | 20 | ENV UID=1001 \ 21 | NOT_ROOT_USER=owuser 22 | 23 | 24 | # Copy app jars 25 | ADD build/distributions/cache-invalidator.tar / 26 | 27 | COPY init.sh / 28 | RUN chmod +x init.sh 29 | 30 | RUN adduser --disabled-password --disabled-login --gecos '' --uid ${UID} --home /home/${NOT_ROOT_USER} ${NOT_ROOT_USER} 31 | USER ${NOT_ROOT_USER} 32 | 33 | EXPOSE 8080 34 | CMD ["./init.sh", "0"] 35 | -------------------------------------------------------------------------------- /core/cosmosdb/cache-invalidator/init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Licensed to the Apache Software Foundation (ASF) under one or more 5 | # contributor license agreements. See the NOTICE file distributed with 6 | # this work for additional information regarding copyright ownership. 7 | # The ASF licenses this file to You under the Apache License, Version 2.0 8 | # (the "License"); you may not use this file except in compliance with 9 | # the License. You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | ./copyJMXFiles.sh 21 | 22 | export CACHE_INVALIDATOR_OPTS 23 | CACHE_INVALIDATOR_OPTS="$CACHE_INVALIDATOR_OPTS $(./transformEnvironment.sh)" 24 | 25 | exec cache-invalidator/bin/cache-invalidator "$@" 26 | -------------------------------------------------------------------------------- /core/cosmosdb/cache-invalidator/src/main/resources/application.conf: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | akka.kafka.producer { 19 | # Properties defined by org.apache.kafka.clients.consumer.ConsumerConfig 20 | # can be defined in this configuration section. 21 | kafka-clients { 22 | bootstrap.servers = ${?KAFKA_HOSTS} 23 | //change the default producer timeout so that it will quickly fail when kafka topic cannot be written 24 | max.block.ms = 2000 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /core/invoker/.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | !init.sh 3 | !build/distributions 4 | !build/tmp/docker-coverage 5 | -------------------------------------------------------------------------------- /core/invoker/init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ./copyJMXFiles.sh 20 | 21 | export INVOKER_OPTS 22 | INVOKER_OPTS="$INVOKER_OPTS $(./transformEnvironment.sh)" 23 | 24 | exec invoker/bin/invoker "$@" 25 | -------------------------------------------------------------------------------- /core/monitoring/user-events/.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | !transformEnvironment.sh 3 | !init.sh 4 | !build/distributions 5 | !Dockerfile -------------------------------------------------------------------------------- /core/monitoring/user-events/Dockerfile: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | ARG BASE=scala 19 | FROM ${BASE} 20 | 21 | ENV UID=1001 \ 22 | NOT_ROOT_USER=owuser 23 | 24 | # Copy app jars 25 | ADD build/distributions/user-events.tar / 26 | 27 | COPY init.sh / 28 | RUN chmod +x init.sh 29 | 30 | RUN useradd -m -u 1001 -d /home/${NOT_ROOT_USER} -s /bin/bash ${NOT_ROOT_USER} 31 | USER ${NOT_ROOT_USER} 32 | 33 | # Prometheus port 34 | EXPOSE 9095 35 | CMD ["./init.sh", "0"] 36 | -------------------------------------------------------------------------------- /core/monitoring/user-events/compose/grafana/provisioning/dashboards/dashboard.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | apiVersion: 1 19 | 20 | providers: 21 | - name: 'Prometheus' 22 | orgId: 1 23 | folder: '' 24 | type: file 25 | disableDeletion: false 26 | editable: true 27 | options: 28 | path: /var/lib/grafana/dashboards 29 | -------------------------------------------------------------------------------- /core/monitoring/user-events/compose/prometheus/prometheus.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | global: 19 | scrape_interval: 10s 20 | evaluation_interval: 10s 21 | 22 | scrape_configs: 23 | - job_name: 'prometheus-server' 24 | static_configs: 25 | - targets: ['localhost:9090'] 26 | 27 | - job_name: 'openwhisk-metrics' 28 | static_configs: 29 | - targets: ['user-events:9095'] 30 | 31 | -------------------------------------------------------------------------------- /core/monitoring/user-events/images/demo_landing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/core/monitoring/user-events/images/demo_landing.png -------------------------------------------------------------------------------- /core/monitoring/user-events/init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Licensed to the Apache Software Foundation (ASF) under one or more 5 | # contributor license agreements. See the NOTICE file distributed with 6 | # this work for additional information regarding copyright ownership. 7 | # The ASF licenses this file to You under the Apache License, Version 2.0 8 | # (the "License"); you may not use this file except in compliance with 9 | # the License. You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | ./copyJMXFiles.sh 21 | 22 | export USER_EVENTS_OPTS 23 | USER_EVENTS_OPTS="$USER_EVENTS_OPTS $(./transformEnvironment.sh)" 24 | 25 | exec user-events/bin/user-events "$@" 26 | -------------------------------------------------------------------------------- /core/monitoring/user-events/src/main/resources/whisk-logback.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | true 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /core/routemgmt/createApi/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "createApi.js", 3 | "dependencies": { 4 | "lodash": "4.17.15", 5 | "request": "2.88.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /core/routemgmt/deleteApi/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "deleteApi.js", 3 | "dependencies": { 4 | "lodash": "4.17.15", 5 | "request": "2.88.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /core/routemgmt/getApi/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": "getApi.js", 3 | "dependencies": { 4 | "lodash": "4.17.21", 5 | "request": "2.88.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /core/scheduler/Dockerfile: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | ARG BASE=scala 19 | FROM ${BASE} 20 | 21 | ENV UID=1001 \ 22 | NOT_ROOT_USER=owuser 23 | 24 | # Copy app jars 25 | ADD build/distributions/scheduler.tar / 26 | 27 | COPY init.sh / 28 | RUN chmod +x init.sh 29 | 30 | RUN useradd -m -u 1001 -d /home/${NOT_ROOT_USER} -s /bin/bash ${NOT_ROOT_USER} 31 | USER ${NOT_ROOT_USER} 32 | 33 | EXPOSE 8080 34 | CMD ["./init.sh", "0"] 35 | -------------------------------------------------------------------------------- /core/scheduler/init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ./copyJMXFiles.sh 20 | 21 | export SCHEDULER_OPTS 22 | SCHEDULER_OPTS="$SCHEDULER_OPTS -Dakka.remote.artery.bind.hostname=$(hostname -i) $(./transformEnvironment.sh)" 23 | 24 | exec scheduler/bin/scheduler "$@" 25 | -------------------------------------------------------------------------------- /core/scheduler/src/main/java/Empty.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | public class Empty { 19 | // Workaround for this issue https://github.com/akka/akka-grpc/issues/289 20 | // Gradle complains about no java sources. 21 | // Note. Openwhisk is using a lower gradle version, so the latest akka-grpc version cannot be used. 22 | } 23 | -------------------------------------------------------------------------------- /core/standalone/bin/init: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | if ! test -e /var/run/docker.sock 19 | then echo "Please launch this image with the option -v /var/run/docker.sock:/var/run/docker.sock" 20 | exit 1 21 | fi 22 | JVM_ARGS="$JVM_EXTRA_ARGS\ 23 | -Dwhisk.standalone.host.name=$(hostname)\ 24 | -Dwhisk.standalone.host.internal=$(hostname -i)\ 25 | -Dwhisk.standalone.host.external=localhost" 26 | set -x 27 | java $JVM_ARGS -jar openwhisk-standalone.jar --no-browser "$@" 28 | -------------------------------------------------------------------------------- /core/standalone/bin/stop: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | ps -o comm,pid ax | awk '/^java/ { print $2 }' | xargs kill 19 | -------------------------------------------------------------------------------- /core/standalone/stop.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | docker exec openwhisk stop 19 | -------------------------------------------------------------------------------- /docs/images/IoT_solution_architecture_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/IoT_solution_architecture_example.png -------------------------------------------------------------------------------- /docs/images/OpenWhisk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/OpenWhisk.png -------------------------------------------------------------------------------- /docs/images/OpenWhisk_flow_of_processing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/OpenWhisk_flow_of_processing.png -------------------------------------------------------------------------------- /docs/images/Openwhisk-flow-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/Openwhisk-flow-diagram.png -------------------------------------------------------------------------------- /docs/images/README.md: -------------------------------------------------------------------------------- 1 | 19 | 20 | This folder contains approved OpenWhisk logo images bearing the Trademark (TM) symbol that indicates that the OpenWhisk project has been granted (or has filed for) a trademark for the OpenWhisk name and/or logo in various geographies. 21 | -------------------------------------------------------------------------------- /docs/images/components_to_repos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/components_to_repos.png -------------------------------------------------------------------------------- /docs/images/playground-ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/playground-ui.png -------------------------------------------------------------------------------- /docs/images/whisk_icon_full-color_with_tm_128x128-300dpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/whisk_icon_full-color_with_tm_128x128-300dpi.png -------------------------------------------------------------------------------- /docs/images/whisk_icon_full-color_with_tm_210x138-300dpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/whisk_icon_full-color_with_tm_210x138-300dpi.png -------------------------------------------------------------------------------- /docs/images/whisk_icon_full-color_with_tm_64x64-300dpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/whisk_icon_full-color_with_tm_64x64-300dpi.png -------------------------------------------------------------------------------- /docs/images/whisk_icon_full_color_with_tm.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/whisk_icon_full_color_with_tm.psd -------------------------------------------------------------------------------- /docs/images/whisk_icon_full_color_with_tm_100x100-300dpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/whisk_icon_full_color_with_tm_100x100-300dpi.png -------------------------------------------------------------------------------- /docs/images/whisk_icon_full_color_with_tm_100x100-96dpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/whisk_icon_full_color_with_tm_100x100-96dpi.png -------------------------------------------------------------------------------- /docs/images/whisk_icon_full_color_with_tm_200x200-300dpi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/docs/images/whisk_icon_full_color_with_tm_200x200-300dpi.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | distributionBase=GRADLE_USER_HOME 19 | distributionPath=wrapper/dists 20 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip 21 | zipStoreBase=GRADLE_USER_HOME 22 | zipStorePath=wrapper/dists 23 | -------------------------------------------------------------------------------- /licenses/LICENSE-spray.txt: -------------------------------------------------------------------------------- 1 | This software is licensed under the Apache 2 license, quoted below. 2 | 3 | Copyright © 2011-2015 the spray project 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); you may not 6 | use this file except in compliance with the License. You may obtain a copy of 7 | the License at 8 | 9 | [http://www.apache.org/licenses/LICENSE-2.0] 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 13 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 14 | License for the specific language governing permissions and limitations under 15 | the License. 16 | -------------------------------------------------------------------------------- /tests/.pydevproject: -------------------------------------------------------------------------------- 1 | 2 | 3 | Default 4 | python 2.7 5 | 6 | -------------------------------------------------------------------------------- /tests/dat/actions/applicationError.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(args) { 19 | return { error: "This error thrown on purpose by the action."}; 20 | } 21 | -------------------------------------------------------------------------------- /tests/dat/actions/argCheck.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(params) { 19 | return {payload: params.payload}; 20 | } 21 | -------------------------------------------------------------------------------- /tests/dat/actions/argsPrint.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(params) { 19 | var param1 = params.param1 || ''; 20 | var param2 = params.param2 || ''; 21 | return {param1: param1, param2: param2}; 22 | } 23 | -------------------------------------------------------------------------------- /tests/dat/actions/asyncError.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(params) { 19 | return Promise.reject({msg: 'failed activation on purpose'}); 20 | } 21 | -------------------------------------------------------------------------------- /tests/dat/actions/blackbox/exec: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | echo 'This is an example zip used with the docker skeleton action.' 20 | echo '{ "msg": "hello zip" }' 21 | -------------------------------------------------------------------------------- /tests/dat/actions/cat.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Equivalent to unix cat command. 20 | * Return all the lines in an array. All other fields in the input message are stripped. 21 | * @param lines An array of strings. 22 | */ 23 | function main(msg) { 24 | var lines = msg.lines || []; 25 | var retn = {lines: lines, payload: lines.join("\n")}; 26 | console.log('cat: returning ' + JSON.stringify(retn)); 27 | return retn; 28 | } 29 | -------------------------------------------------------------------------------- /tests/dat/actions/createTrigger.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | func main(args: [String:Any]) -> [String:Any] { 19 | guard let triggerName = args["triggerName"] as? String else { 20 | return ["error": "You must specify a triggerName parameter!"] 21 | } 22 | print("Trigger Name: \(triggerName)") 23 | return Whisk.createTrigger(triggerNamed: triggerName, withParameters: [:]) 24 | } 25 | -------------------------------------------------------------------------------- /tests/dat/actions/dosLogs.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(msg) { 19 | // Each log line with 16 characters (new line character counts) 20 | var lines = msg.payload / 16 || 1; 21 | for(var i = 1; i <= lines; i++) { 22 | console.log("123456789abcdef"); 23 | } 24 | return {msg: lines}; 25 | } 26 | -------------------------------------------------------------------------------- /tests/dat/actions/echo-web-http-head.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(params) { 19 | return { 20 | statusCode: 200, 21 | headers: { 'Request-type': params.__ow_method } 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /tests/dat/actions/echo-web-http.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(params) { 19 | return { 20 | statusCode: 200, 21 | headers: { 'Content-Type': 'application/json' }, 22 | body: params 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /tests/dat/actions/echo.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Returns params, or an empty string if no parameter values are provided 20 | */ 21 | function main(params) { 22 | return params || {}; 23 | } 24 | -------------------------------------------------------------------------------- /tests/dat/actions/echo.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "echo", 3 | "version": "0.0.1", 4 | "publish": false, 5 | "exec": { 6 | "kind": "nodejs:20", 7 | "code": "/**\n * Returns params, or an empty string if no parameter values are provided\n */\nfunction main(params) {\n return params || {};\n}\n\n" 8 | }, 9 | "annotations": [], 10 | "parameters": [], 11 | "limits": { 12 | "timeout": 60000, 13 | "memory": 256, 14 | "logs": 10 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tests/dat/actions/empty.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/tests/dat/actions/empty.js -------------------------------------------------------------------------------- /tests/dat/actions/emptyJSONResult.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(params) { 19 | } 20 | -------------------------------------------------------------------------------- /tests/dat/actions/head.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Return the first num lines of an array. 20 | * @param lines An array of strings. 21 | * @param num Number of lines to return. 22 | */ 23 | function main(msg) { 24 | var lines = msg.lines || []; 25 | var num = msg.num || 1; 26 | var head = lines.slice(0, num); 27 | console.log('head get first ' + num + ' lines of ' + lines + ': ' + head); 28 | return {lines: head, num: num}; 29 | } 30 | -------------------------------------------------------------------------------- /tests/dat/actions/hello.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Hello, world. 20 | */ 21 | function main(params) { 22 | greeting = 'hello, ' + params.payload + '!' 23 | console.log(greeting); 24 | return {payload: greeting} 25 | } 26 | -------------------------------------------------------------------------------- /tests/dat/actions/hello.py: -------------------------------------------------------------------------------- 1 | """Python Hello test. 2 | 3 | /* 4 | * Licensed to the Apache Software Foundation (ASF) under one or more 5 | * contributor license agreements. See the NOTICE file distributed with 6 | * this work for additional information regarding copyright ownership. 7 | * The ASF licenses this file to You under the Apache License, Version 2.0 8 | * (the "License"); you may not use this file except in compliance with 9 | * the License. You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | */ 19 | """ 20 | 21 | 22 | def main(args): 23 | """Main.""" 24 | name = args.get('name', 'stranger') 25 | greeting = 'Hello ' + name + '!' 26 | print(greeting) 27 | return {'greeting': greeting} 28 | -------------------------------------------------------------------------------- /tests/dat/actions/hello.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Hello world as a Swift Whisk action. 20 | */ 21 | func main(args: [String:Any]) -> [String:Any] { 22 | if let name = args["name"] as? String { 23 | return [ "greeting" : "Hello \(name)!" ] 24 | } else { 25 | return [ "greeting" : "Hello stranger!" ] 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /tests/dat/actions/helloArray.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * helloArray action 20 | */ 21 | 22 | function main(params) { 23 | return [{"key1":"value1"},{"key2":"value2"}]; 24 | } 25 | -------------------------------------------------------------------------------- /tests/dat/actions/helloPromise.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(args) { 19 | return new Promise(function(resolve, reject) { 20 | setTimeout(function() { 21 | resolve({ 22 | done : true 23 | }); 24 | }, 2000); 25 | }) 26 | } 27 | -------------------------------------------------------------------------------- /tests/dat/actions/initexit.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | process.exit(1); 19 | -------------------------------------------------------------------------------- /tests/dat/actions/initforever.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | while (true) {} 19 | -------------------------------------------------------------------------------- /tests/dat/actions/invalidInput1.json: -------------------------------------------------------------------------------- 1 | { 2 | "invalidJSON": 3 | } 4 | -------------------------------------------------------------------------------- /tests/dat/actions/invalidInput2.json: -------------------------------------------------------------------------------- 1 | { 2 | "invalid": "JS 3 | ON" 4 | } 5 | -------------------------------------------------------------------------------- /tests/dat/actions/invalidInput3.json: -------------------------------------------------------------------------------- 1 | { 2 | "invalid": "JSON" 3 | -------------------------------------------------------------------------------- /tests/dat/actions/invalidInput4.json: -------------------------------------------------------------------------------- 1 | { 2 | "invalid": "JS"ON" 3 | } 4 | -------------------------------------------------------------------------------- /tests/dat/actions/jsonStringWebAction.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main() { 19 | return { 20 | headers: { 21 | "content-type": "application/json" 22 | }, 23 | statusCode: 200, 24 | body: '{"status": "success"}' 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tests/dat/actions/log.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Emit strings to stdout/stderr. 20 | */ 21 | function main() { 22 | console.log("this is stdout"); 23 | console.error("this is stderr"); 24 | } 25 | -------------------------------------------------------------------------------- /tests/dat/actions/malformed.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | x 19 | -------------------------------------------------------------------------------- /tests/dat/actions/malformed.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | """Invalid Python comment test.""" 19 | // invalid python comment # noqa -- tell linters to ignore the intentional syntax error 20 | -------------------------------------------------------------------------------- /tests/dat/actions/multipleHeaders.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main() { 19 | return { 20 | headers: { 21 | "Set-Cookie": ["a=b", "c=d"] 22 | }, 23 | statusCode: 200 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tests/dat/actions/niam.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function niam(args) { 19 | return { 'greetings': 'Hello from a non-standard entrypoint.' }; 20 | } 21 | -------------------------------------------------------------------------------- /tests/dat/actions/niam.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | """Python Non-standard entry point test.""" 19 | 20 | 21 | def niam(args): 22 | """Non-standard entry point.""" 23 | return {"greetings": "Hello from a non-standard entrypoint."} 24 | -------------------------------------------------------------------------------- /tests/dat/actions/niam.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /* Swift action with a non-default entry point. */ 19 | func niam(args: [String:Any]) -> [String:Any] { 20 | return [ "greetings" : "Hello from a non-standard entrypoint." ] 21 | } 22 | -------------------------------------------------------------------------------- /tests/dat/actions/params.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(args) { 19 | return {args} 20 | } 21 | -------------------------------------------------------------------------------- /tests/dat/actions/python-zip/__main__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | from greet import greet 19 | 20 | 21 | def niam(args): 22 | return greet(args) 23 | -------------------------------------------------------------------------------- /tests/dat/actions/python-zip/greet.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | 19 | def greet(dict): 20 | if 'name' in dict: 21 | name = dict['name'] 22 | else: 23 | name = 'stranger' 24 | greeting = 'Hello ' + name + '!' 25 | return {'greeting': greeting} 26 | -------------------------------------------------------------------------------- /tests/dat/actions/pythonVersion.py: -------------------------------------------------------------------------------- 1 | """Python Version test. 2 | 3 | /* 4 | * Licensed to the Apache Software Foundation (ASF) under one or more 5 | * contributor license agreements. See the NOTICE file distributed with 6 | * this work for additional information regarding copyright ownership. 7 | * The ASF licenses this file to You under the Apache License, Version 2.0 8 | * (the "License"); you may not use this file except in compliance with 9 | * the License. You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | */ 19 | """ 20 | 21 | import sys 22 | 23 | def main(args): 24 | """Main.""" 25 | return {"version": sys.version_info.major} 26 | -------------------------------------------------------------------------------- /tests/dat/actions/runexception.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main() { 19 | throw "Extraordinary exception" 20 | } 21 | -------------------------------------------------------------------------------- /tests/dat/actions/runexit.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main() { 19 | process.exit(1); 20 | } 21 | -------------------------------------------------------------------------------- /tests/dat/actions/sizedResult.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(args) { 19 | let str = new Array(args.size).join(args.char) 20 | return { 21 | msg : str 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tests/dat/actions/sort-array.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Sort a set of lines. 20 | * @param lines An array of strings to sort. 21 | */ 22 | function main(msg) { 23 | var lines = msg || []; 24 | console.log('sort before: ' + lines); 25 | lines.sort(); 26 | console.log('sort after: ' + lines); 27 | return lines; 28 | } 29 | -------------------------------------------------------------------------------- /tests/dat/actions/src/java/sleep/build.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | plugins { 19 | id 'java' 20 | } 21 | 22 | version = '1.0' 23 | 24 | repositories { 25 | mavenCentral() 26 | } 27 | 28 | dependencies { 29 | implementation "com.google.code.gson:gson:2.6.2" 30 | } 31 | -------------------------------------------------------------------------------- /tests/dat/actions/src/java/sleep/settings.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | rootProject.name = 'sleep' 19 | -------------------------------------------------------------------------------- /tests/dat/actions/stdenv.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | """Unify action container environments.""" 19 | import os 20 | 21 | 22 | def main(dict): 23 | return {"auth": os.environ['__OW_API_KEY'], 24 | "edge": os.environ['__OW_API_HOST']} 25 | -------------------------------------------------------------------------------- /tests/dat/actions/step.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * Increment action. 20 | */ 21 | function main({ n }) { 22 | if (typeof n === 'undefined') return { error: 'missing parameter'} 23 | return { n: n + 1 } 24 | } 25 | -------------------------------------------------------------------------------- /tests/dat/actions/textBody.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main() { 19 | return { 20 | headers: { 21 | 'Content-Type': 'text/html' 22 | }, 23 | body: 'plain text' 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /tests/dat/actions/trigger.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | func main(args: [String:Any]) -> [String:Any] { 19 | if let triggerName = args["triggerName"] as? String { 20 | print("Trigger Name: \(triggerName)") 21 | return Whisk.trigger(eventNamed: triggerName, withParameters: [:]) 22 | } else { 23 | return ["error": "You must specify a triggerName parameter!"] 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/go-1.13.txt: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package main 19 | 20 | import "fmt" 21 | 22 | func Main(args map[string]interface{}) map[string]interface{} { 23 | delimiter := args["delimiter"].(string) 24 | str := delimiter + " ☃ " + delimiter 25 | fmt.Println(str) 26 | res := make(map[string]interface{}) 27 | res["winter"] = str 28 | return res 29 | } 30 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/go-1.15.txt: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package main 19 | 20 | import "fmt" 21 | 22 | func Main(args map[string]interface{}) map[string]interface{} { 23 | delimiter := args["delimiter"].(string) 24 | str := delimiter + " ☃ " + delimiter 25 | fmt.Println(str) 26 | res := make(map[string]interface{}) 27 | res["winter"] = str 28 | return res 29 | } 30 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/nodejs-10.txt: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(args) { 19 | var str = args.delimiter + " ☃ " + args.delimiter; 20 | console.log(str); 21 | return { "winter": str }; 22 | } 23 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/nodejs-12.txt: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(args) { 19 | var str = args.delimiter + " ☃ " + args.delimiter; 20 | console.log(str); 21 | return { "winter": str }; 22 | } 23 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/nodejs-14.txt: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(args) { 19 | var str = args.delimiter + " ☃ " + args.delimiter; 20 | console.log(str); 21 | return { "winter": str }; 22 | } 23 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/php-7.3.txt: -------------------------------------------------------------------------------- 1 | $str]; 23 | } 24 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/php-7.4.txt: -------------------------------------------------------------------------------- 1 | $str]; 23 | } 24 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/python-3.txt: -------------------------------------------------------------------------------- 1 | """Python 3 Unicode test. 2 | /* 3 | * Licensed to the Apache Software Foundation (ASF) under one or more 4 | * contributor license agreements. See the NOTICE file distributed with 5 | * this work for additional information regarding copyright ownership. 6 | * The ASF licenses this file to You under the Apache License, Version 2.0 7 | * (the "License"); you may not use this file except in compliance with 8 | * the License. You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | """ 19 | 20 | def main(args): 21 | sep = args['delimiter'] 22 | str = sep + " ☃ " + sep 23 | print(str) 24 | return {"winter": str} 25 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/python.txt: -------------------------------------------------------------------------------- 1 | """Python 3 Unicode test. 2 | /* 3 | * Licensed to the Apache Software Foundation (ASF) under one or more 4 | * contributor license agreements. See the NOTICE file distributed with 5 | * this work for additional information regarding copyright ownership. 6 | * The ASF licenses this file to You under the Apache License, Version 2.0 7 | * (the "License"); you may not use this file except in compliance with 8 | * the License. You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | """ 19 | 20 | def main(args): 21 | sep = args['delimiter'] 22 | str = sep + " ☃ " + sep 23 | print(str) 24 | return {"winter": str} 25 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/ruby-2.5.txt: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | def main(args) 19 | str = args["delimiter"] + " ☃ " + args["delimiter"] 20 | puts str 21 | { "winter" => str } 22 | end 23 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/src/dotnet2.2/Apache.OpenWhisk.UnicodeTests.Dotnet/Apache.OpenWhisk.UnicodeTests.Dotnet.csproj: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | netcoreapp2.2 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/src/java/unicode/build.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | plugins { 19 | id 'java' 20 | } 21 | 22 | version = '1.0' 23 | 24 | repositories { 25 | mavenCentral() 26 | } 27 | 28 | dependencies { 29 | implementation "com.google.code.gson:gson:2.6.2" 30 | } 31 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/src/java/unicode/settings.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | rootProject.name = 'unicode' 19 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/swift-4.2.txt: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | func main(args: Any) -> Any { 19 | let dict = args as! [String:Any] 20 | if let str = dict["delimiter"] as? String { 21 | let msg = "\(str) ☃ \(str)" 22 | print(msg) 23 | return [ "winter" : msg ] 24 | } else { 25 | return [ "error" : "no delimiter" ] 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/swift-5.1.txt: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | func main(args: Any) -> Any { 19 | let dict = args as! [String:Any] 20 | if let str = dict["delimiter"] as? String { 21 | let msg = "\(str) ☃ \(str)" 22 | print(msg) 23 | return [ "winter" : msg ] 24 | } else { 25 | return [ "error" : "no delimiter" ] 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /tests/dat/actions/unicode.tests/swift-5.3.txt: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | func main(args: Any) -> Any { 19 | let dict = args as! [String:Any] 20 | if let str = dict["delimiter"] as? String { 21 | let msg = "\(str) ☃ \(str)" 22 | print(msg) 23 | return [ "winter" : msg ] 24 | } else { 25 | return [ "error" : "no delimiter" ] 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /tests/dat/actions/validInput1.json: -------------------------------------------------------------------------------- 1 | { 2 | "a key": "a value", 3 | "a bool": true, 4 | "objKey": {"b": "c"}, 5 | "objKey2": {"another object": {"some string": "1111"}}, 6 | "objKey3": {"json object": {"some int": 1111}}, 7 | "a number arr": [1,2,3], 8 | "a string arr": ["1", "2", "3"], 9 | "a bool arr": [true, false, true], 10 | "strThatLooksLikeJSON": "{\"someKey\": \"someValue\"}" 11 | } 12 | -------------------------------------------------------------------------------- /tests/dat/actions/validInput2.json: -------------------------------------------------------------------------------- 1 | { 2 | "payload": "test" 3 | } 4 | -------------------------------------------------------------------------------- /tests/dat/actions/wc.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | /** 19 | * word count utility 20 | */ 21 | function main(params) { 22 | var str = params.payload.toString(); 23 | var words = str.split(" "); 24 | var count = words.length; 25 | console.log("The message '"+str+"' has", count, 'words'); 26 | return { count: count }; 27 | } 28 | -------------------------------------------------------------------------------- /tests/dat/actions/word_count.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "word_count", 3 | "version": "0.0.1", 4 | "publish": false, 5 | "exec": { 6 | "kind": "nodejs:20", 7 | "code": "/**\n * word count utility\n */\nfunction main(params) {\n var str = params.payload.toString();\n var words = str.split(\" \");\n var count = words.length;\n console.log(\"The message '\"+str+\"' has\", count, 'words');\n return { count: count };\n}\n" 8 | }, 9 | "annotations": [], 10 | "parameters": [], 11 | "limits": { 12 | "timeout": 60000, 13 | "memory": 256, 14 | "logs": 10 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tests/dat/actions/zippedaction/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function entryPoint(args) { 19 | var pq = require("prog-quote")(); 20 | 21 | return pq.next().value; 22 | } 23 | 24 | exports.main = entryPoint; 25 | -------------------------------------------------------------------------------- /tests/dat/actions/zippedaction/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test-action", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "test-action", 9 | "version": "1.0.0", 10 | "license": "Apache 2.0", 11 | "dependencies": { 12 | "prog-quote": "2.0.0" 13 | } 14 | }, 15 | "node_modules/prog-quote": { 16 | "version": "2.0.0", 17 | "resolved": "https://registry.npmjs.org/prog-quote/-/prog-quote-2.0.0.tgz", 18 | "integrity": "sha1-TLBMeosV/zu/kxMQxCsBzSjcMB0=", 19 | "dependencies": { 20 | "random-js": "1.0.8" 21 | } 22 | }, 23 | "node_modules/random-js": { 24 | "version": "1.0.8", 25 | "resolved": "https://registry.npmjs.org/random-js/-/random-js-1.0.8.tgz", 26 | "integrity": "sha1-lo/WiabyXWwKrHZig94vaIycGQo=" 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tests/dat/actions/zippedaction/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "test-action", 3 | "version": "1.0.0", 4 | "description": "An action written as an npm package.", 5 | "main": "index.js", 6 | "author": "OpenWhisk", 7 | "license": "Apache 2.0", 8 | "dependencies": { 9 | "prog-quote": "2.0.0" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /tests/dat/apigw/testswaggerdocinvalid: -------------------------------------------------------------------------------- 1 | { 2 | "swagger": "2.0", 3 | "info": { 4 | "title": "/", 5 | "version": "1.0.0" 6 | }, 7 | "paths": { 8 | "/test1": { 9 | 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /tests/performance/gatling_tests/src/gatling/resources/conf/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | false 5 | 6 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 7 | 8 | 9 | 10 | false 11 | build/gatling.log 12 | false 13 | 14 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /tests/performance/gatling_tests/src/gatling/resources/data/nodeJSAction.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(params) { 19 | var greeting = "Hello" + (params.text || "stranger") + "!"; 20 | console.log(greeting); 21 | return { payload: greeting }; 22 | } 23 | -------------------------------------------------------------------------------- /tests/performance/gatling_tests/src/gatling/resources/data/nodeJSAsyncAction.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main(params) { 19 | var greeting = "Hello" + (params.text || "stranger") + "!"; 20 | console.log(greeting); 21 | return new Promise(function (resolve, reject) { 22 | setTimeout(function () { 23 | resolve({ payload: greeting }); 24 | }, 175); 25 | }) 26 | } 27 | -------------------------------------------------------------------------------- /tests/performance/gatling_tests/src/gatling/resources/data/pythonAction.py: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | def main(dict): 19 | if 'text' in dict: 20 | text = dict['text'] 21 | else: 22 | text = "stranger" 23 | greeting = "Hello " + text + "!" 24 | print(greeting) 25 | return {"payload": greeting} 26 | -------------------------------------------------------------------------------- /tests/performance/gatling_tests/src/gatling/resources/data/src/java/build.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | plugins { 19 | id 'java' 20 | } 21 | 22 | compileJava { 23 | sourceCompatibility = '1.8' 24 | targetCompatibility = '1.8' 25 | } 26 | 27 | version = '1.0' 28 | 29 | repositories { 30 | mavenCentral() 31 | } 32 | 33 | dependencies { 34 | implementation "com.google.code.gson:gson:2.6.2" 35 | } 36 | -------------------------------------------------------------------------------- /tests/performance/gatling_tests/src/gatling/resources/data/src/java/settings.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | rootProject.name = 'gatling' 19 | -------------------------------------------------------------------------------- /tests/performance/gatling_tests/src/gatling/resources/data/swiftAction.swift: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | func main(args: [String:Any]) -> [String:Any] { 19 | if let text = args["text"] as? String { 20 | print("Hello " + text + "!") 21 | return [ "payload" : "Hello " + text + "!" ] 22 | } else { 23 | print("Hello stranger!") 24 | return [ "payload" : "Hello stranger!" ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tests/performance/gatling_tests/src/gatling/resources/data/users.csv: -------------------------------------------------------------------------------- 1 | uuid,key 2 | 23bc46b1-71f6-4ed5-8c54-816aa4f8c502,123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP 3 | add_more_users,here 4 | -------------------------------------------------------------------------------- /tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/extension/whisk/OpenWhiskDsl.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.openwhisk.extension.whisk 19 | 20 | import io.gatling.core.session.Expression 21 | 22 | trait OpenWhiskDsl { 23 | def openWhisk = OpenWhiskProtocolBuilderBase 24 | 25 | def openWhisk(requestName: Expression[String]) = new OpenWhiskActionBuilderBase(requestName) 26 | } 27 | -------------------------------------------------------------------------------- /tests/performance/gatling_tests/src/gatling/scala/org/apache/openwhisk/extension/whisk/Predef.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.openwhisk.extension.whisk 19 | 20 | object Predef extends OpenWhiskDsl 21 | -------------------------------------------------------------------------------- /tests/performance/preparation/actions/async.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main() { 19 | return new Promise(function (resolve, reject) { 20 | setTimeout(function () { 21 | resolve({done: true}); 22 | }, 175); 23 | }) 24 | } 25 | -------------------------------------------------------------------------------- /tests/performance/preparation/actions/noop.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | function main() { 19 | return {}; 20 | } 21 | -------------------------------------------------------------------------------- /tests/performance/wrk_tests/latency.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | set -e 19 | currentDir="$(cd "$(dirname "$0")"; pwd)" 20 | 21 | # Host to use. Needs to include the protocol. 22 | host=$1 23 | # Credentials to use for the test. USER:PASS format. 24 | credentials=$2 25 | # Path to action src 26 | action_src=$3 27 | # How long to run the test 28 | duration=${4:-30s} 29 | 30 | $currentDir/throughput.sh $host $credentials $action_src 1 1 1 $duration 31 | -------------------------------------------------------------------------------- /tests/performance/wrk_tests/post.lua: -------------------------------------------------------------------------------- 1 | -- 2 | -- Licensed to the Apache Software Foundation (ASF) under one or more 3 | -- contributor license agreements. See the NOTICE file distributed with 4 | -- this work for additional information regarding copyright ownership. 5 | -- The ASF licenses this file to You under the Apache License, Version 2.0 6 | -- (the "License"); you may not use this file except in compliance with 7 | -- the License. You may obtain a copy of the License at 8 | -- 9 | -- http://www.apache.org/licenses/LICENSE-2.0 10 | -- 11 | -- Unless required by applicable law or agreed to in writing, software 12 | -- distributed under the License is distributed on an "AS IS" BASIS, 13 | -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | -- See the License for the specific language governing permissions and 15 | -- limitations under the License. 16 | -- 17 | wrk.method = "POST" 18 | -------------------------------------------------------------------------------- /tests/src/main/scala/org/apache/openwhisk/GradleWorkaround.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.openwhisk 19 | 20 | /** 21 | * This class is a workaround for https://github.com/gradle/gradle/issues/6849 22 | */ 23 | class GradleWorkaround {} 24 | -------------------------------------------------------------------------------- /tests/src/test/resources/swagger-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "library": "okhttp-gson", 3 | "dateLibrary": "java8", 4 | "hideGenerationTimestamp": true 5 | } 6 | -------------------------------------------------------------------------------- /tests/src/test/scala/common/Pair.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package common; 19 | 20 | public class Pair { 21 | public final String fst; 22 | public final String snd; 23 | 24 | public Pair(String a, String b) { 25 | this.fst = a; 26 | this.snd = b; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /tests/src/test/scala/org/apache/openwhisk/core/database/test/behavior/ActivationStoreBehavior.scala: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package org.apache.openwhisk.core.database.test.behavior 19 | 20 | trait ActivationStoreBehavior 21 | extends ActivationStoreBehaviorBase 22 | with ActivationStoreCRUDBehaviors 23 | with ActivationStoreQueryBehaviors 24 | -------------------------------------------------------------------------------- /tools/actionProxy/Dockerfile: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | # Dockerfile for docker skeleton (useful for running blackbox binaries, scripts, or Python 3 actions) . 19 | FROM openwhisk/dockerskeleton 20 | -------------------------------------------------------------------------------- /tools/actionProxy/build.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Licensed to the Apache Software Foundation (ASF) under one or more 3 | * contributor license agreements. See the NOTICE file distributed with 4 | * this work for additional information regarding copyright ownership. 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 6 | * (the "License"); you may not use this file except in compliance with 7 | * the License. You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | ext.dockerImageName = 'actionproxy' 19 | apply from: '../../gradle/docker.gradle' 20 | -------------------------------------------------------------------------------- /tools/admin/src/main/resources/application.conf: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | whisk{ 19 | # tracing configuration 20 | tracing { 21 | component = "cli" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tools/github/runDummyTests.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | set -e 20 | 21 | SCRIPTDIR=$(cd $(dirname "$0") && pwd) 22 | ROOTDIR="$SCRIPTDIR/../.." 23 | 24 | mkdir $ROOTDIR/logs 25 | echo "

$(date)

" >$ROOTDIR/logs/now.html 26 | exit 0 27 | -------------------------------------------------------------------------------- /tools/github/runMultiRuntimeTests.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # 4 | # Licensed to the Apache Software Foundation (ASF) under one or more 5 | # contributor license agreements. See the NOTICE file distributed with 6 | # this work for additional information regarding copyright ownership. 7 | # The ASF licenses this file to You under the Apache License, Version 2.0 8 | # (the "License"); you may not use this file except in compliance with 9 | # the License. You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | set -e 21 | 22 | SCRIPTDIR=$(cd $(dirname "$0") && pwd) 23 | ROOTDIR="$SCRIPTDIR/../.." 24 | 25 | cd $ROOTDIR/tools/travis 26 | 27 | export ORG_GRADLE_PROJECT_testSetName="REQUIRE_MULTI_RUNTIME" 28 | export GRADLE_COVERAGE=true 29 | 30 | ./setupPrereq.sh 31 | 32 | ./distDocker.sh 33 | 34 | ./setupSystem.sh 35 | 36 | ./runTests.sh 37 | -------------------------------------------------------------------------------- /tools/github/runUnitTests.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | set -e 20 | 21 | SCRIPTDIR=$(cd $(dirname "$0") && pwd) 22 | ROOTDIR="$SCRIPTDIR/../.." 23 | 24 | cd $ROOTDIR/tools/travis 25 | export TESTCONTAINERS_RYUK_DISABLED="true" 26 | export ORG_GRADLE_PROJECT_testSetName="REQUIRE_ONLY_DB" 27 | 28 | ./setupPrereq.sh 29 | 30 | cat "$ROOTDIR/tests/src/test/resources/application.conf" 31 | 32 | ./distDocker.sh 33 | 34 | ./runTests.sh 35 | -------------------------------------------------------------------------------- /tools/github/writeOnSlack.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | if test -z "$SLACK_WEBHOOK" 20 | then echo "Please create an incoming webhook for slack and set SLACK_WEBHOOK" 21 | exit 0 22 | fi 23 | 24 | echo -n '{"text":' >/tmp/msg$$ 25 | echo -n "$@" | jq -Rsa . >>/tmp/msg$$ 26 | echo -n '}' >>/tmp/msg$$ 27 | 28 | curl -X POST -H 'Content-type: application/json' --data "@/tmp/msg$$" "$SLACK_WEBHOOK" 29 | -------------------------------------------------------------------------------- /tools/ow-utils/README.md: -------------------------------------------------------------------------------- 1 | 19 | 20 | Utility image for executing tasks 21 | ================ 22 | 23 | This `ow-utils` image can be used to execute various utility tasks 24 | for OpenWhisk using most of the tools that are used in the project. 25 | It includes a JDK8, python/ansible, nodejs, and standard packages 26 | such as bash, git, wget, curl, and docker. 27 | 28 | It also includes the `wsk` and `wskadmin` CLIs. 29 | -------------------------------------------------------------------------------- /tools/owperf/owperf.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Licensed to the Apache Software Foundation (ASF) under one or more 5 | # contributor license agreements. See the NOTICE file distributed with 6 | # this work for additional information regarding copyright ownership. 7 | # The ASF licenses this file to You under the Apache License, Version 2.0 8 | # (the "License"); you may not use this file except in compliance with 9 | # the License. You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | # This is a simple launch script for owperf 21 | 22 | node owperf.js $@ 23 | -------------------------------------------------------------------------------- /tools/owperf/owperf_data.odg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/tools/owperf/owperf_data.odg -------------------------------------------------------------------------------- /tools/owperf/owperf_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/openwhisk/0f48cd5b32adc3867df57e0f3ad8f5acd9ea9d8e/tools/owperf/owperf_data.png -------------------------------------------------------------------------------- /tools/owperf/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "owperf", 3 | "version": "1.0.0", 4 | "description": "owperf - a performance evaluation tool for Apache OpenWhisk", 5 | "main": "owperf.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": { 10 | "name": "Erez Hadad", 11 | "email": "erezh@il.ibm.com" 12 | }, 13 | "license": "Apache-2.0", 14 | "dependencies": { 15 | "btoa": "^1.2.1", 16 | "child-process-promise": "^2.2.1", 17 | "cluster": "^0.7.7", 18 | "commander": "^2.19.0", 19 | "ini": "^1.3.5", 20 | "node-exec-promise": "^1.0.2", 21 | "openwhisk": "^3.21.7", 22 | "xmlhttprequest": "^1.8.0" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /tools/travis/docker.conf: -------------------------------------------------------------------------------- 1 | # 2 | # Licensed to the Apache Software Foundation (ASF) under one or more 3 | # contributor license agreements. See the NOTICE file distributed with 4 | # this work for additional information regarding copyright ownership. 5 | # The ASF licenses this file to You under the Apache License, Version 2.0 6 | # (the "License"); you may not use this file except in compliance with 7 | # the License. You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | [Service] 18 | ExecStart= 19 | ExecStart=/usr/bin/dockerd 20 | -------------------------------------------------------------------------------- /tools/travis/runMultiRuntimeTests.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # 4 | # Licensed to the Apache Software Foundation (ASF) under one or more 5 | # contributor license agreements. See the NOTICE file distributed with 6 | # this work for additional information regarding copyright ownership. 7 | # The ASF licenses this file to You under the Apache License, Version 2.0 8 | # (the "License"); you may not use this file except in compliance with 9 | # the License. You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, software 14 | # distributed under the License is distributed on an "AS IS" BASIS, 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | # See the License for the specific language governing permissions and 17 | # limitations under the License. 18 | # 19 | 20 | set -e 21 | 22 | SCRIPTDIR=$(cd $(dirname "$0") && pwd) 23 | ROOTDIR="$SCRIPTDIR/../.." 24 | 25 | cd $ROOTDIR/tools/travis 26 | 27 | export ORG_GRADLE_PROJECT_testSetName="REQUIRE_MULTI_RUNTIME" 28 | export GRADLE_COVERAGE=true 29 | 30 | ./setupPrereq.sh 31 | 32 | ./distDocker.sh 33 | 34 | ./setupSystem.sh 35 | 36 | ./runTests.sh 37 | -------------------------------------------------------------------------------- /tools/travis/runTests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | set -e 20 | 21 | # Build script for Travis-CI. 22 | 23 | SECONDS=0 24 | SCRIPTDIR=$(cd "$(dirname "$0")" && pwd) 25 | ROOTDIR="$SCRIPTDIR/../.." 26 | 27 | cd $ROOTDIR 28 | cat whisk.properties 29 | TERM=dumb ./gradlew :tests:testCoverageLean :tests:reportCoverage :tests:testSwaggerCodegen 30 | 31 | bash <(curl -s https://codecov.io/bash) 32 | echo "Time taken for ${0##*/} is $SECONDS secs" 33 | -------------------------------------------------------------------------------- /tools/ubuntu-setup/bashprofile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | # Adds openwhisk bin to bash profile 20 | echo 'export PATH=$HOME/openwhisk/bin:$PATH' > "$HOME/.bash_profile" 21 | # Adds tab completion 22 | echo 'eval "$(register-python-argcomplete wskadmin)"' >> "$HOME/.bash_profile" 23 | -------------------------------------------------------------------------------- /tools/ubuntu-setup/misc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | set -e 20 | set -x 21 | 22 | export DEBIAN_FRONTEND=noninteractive 23 | 24 | sudo apt-get update -y 25 | sudo apt-get install -y ntp git zip unzip tzdata lsb-release npm 26 | 27 | echo "Etc/UTC" | sudo tee /etc/timezone 28 | sudo dpkg-reconfigure --frontend noninteractive tzdata 29 | 30 | sudo service ntp restart 31 | sudo ntpq -c lpeer 32 | -------------------------------------------------------------------------------- /tools/ubuntu-setup/pip.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | set -e 20 | set -x 21 | 22 | sudo apt-get install -y python-pip 23 | sudo pip install argcomplete 24 | sudo pip install couchdb 25 | --------------------------------------------------------------------------------