From 810cfbe965d93642ab74d4f8b10ac59ae1c256c8 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Tue, 3 Dec 2019 10:22:40 -0700 Subject: [PATCH 01/27] Updates --- SUMMARY.md | 1 + networking-and-websites/http2.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/SUMMARY.md b/SUMMARY.md index 1aad7ab..ce70d07 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -36,6 +36,7 @@ * [Releases](/architecture/releases.md) * [Preview Apps](/architecture/preview-apps.md) * [Pipelines](/architecture/pipelines.md) + * [Special Config Vars](/architecture/config-vars.md#injected-runtime-config-vars) * [Managing Environments](/lifecycle/managing-multiple-environments.md) * [Maintenance Mode](/lifecycle/maintenance-mode.md) * Troubleshooting & Support diff --git a/networking-and-websites/http2.md b/networking-and-websites/http2.md index b57a4b1..ead6450 100644 --- a/networking-and-websites/http2.md +++ b/networking-and-websites/http2.md @@ -15,7 +15,7 @@ The steps below show how HTTP connections are handled: 3. The HTTP request is received from the client. 4. The HTTP request may contain an `Upgrade` header to indicate it wants HTTP/2 (even if HTTP/1.1 was requested in the ALPN). 5. Akkeris selects the app to route to based on host and path. -6. Akkeris must determine if backend app is running HTTP/2 or HTTP/1.1. +6. Akkeris must determine if the backend app is running HTTP/2 or HTTP/1.1. 7. The request is forwarded to destination app unecrypted. If the HTTP versions are different, the requests are converted as needed. There is a very important aspect to how HTTP connections are handled: Akkeris cannot negotiate with the backend app to see if it supports HTTP/2. From b23305383d792726506217c7aa7e7fbd93cec1f3 Mon Sep 17 00:00:00 2001 From: Calaway Date: Tue, 31 Dec 2019 12:47:29 -0700 Subject: [PATCH 02/27] Add end-to-end example with ExpressJS --- networking-and-websites/http2.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/networking-and-websites/http2.md b/networking-and-websites/http2.md index ead6450..15702ee 100644 --- a/networking-and-websites/http2.md +++ b/networking-and-websites/http2.md @@ -36,7 +36,26 @@ If you enable the feature `http2-end-to-end` the app receiving requests cannot n While using HTTP/2 from your localhost may require a TLS certificate that was generated this isn't the case on Akkeris, and your HTTP/2 requests should still remain unencrypted. -### Node.js HTTP End-to-End Example +### ExpressJS Example + +```javascript +const express = require("express"); +const spdy = require("spdy"); + +const app = express(); + +app.get("/", (req, res) => res.send("Hello World, from Express!")); + +const spdyOptions = { spdy: { plain: true, ssl: false } }; +const server = spdy.createServer(spdyOptions, app); + +server.listen(9000); +``` + +> **danger** There is currently (as of 12/31/2019) a [bug](https://github.com/spdy-http2/node-spdy/issues/363) in the `spdy` package preventing it from working on Node 12, but it does work with Node 10. +> (Please remove this warning once this bug is fixed.) + +### Pure Node.js Example ```javascript const http2 = require('http2'); From 71567d9b45a885a1c91ec6d1ee28e006778a92fa Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 3 Jan 2020 16:43:52 -0700 Subject: [PATCH 03/27] Typo and edits --- how-akkeris-works.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/how-akkeris-works.md b/how-akkeris-works.md index 9e88c70..a7dd9b1 100644 --- a/how-akkeris-works.md +++ b/how-akkeris-works.md @@ -55,7 +55,7 @@ Akkeris executes applications by running the commands specified in your formatio You have control over the formation that's running via the UI, CLI or [Platform Apps API](/architecture/apps-api.md) \(the `PATCH /apps/{app}/formation` end point\). You can start new dynos or change the amount running with the `aka ps:create` and `aka ps:update` command. For example, to change the quantity of web dynos that are automatically created on the first deployment, run: ```shell -aka ps:update -q 3 -a appname-space +aka ps:update web -q 3 -a appname-space ``` When any portion of the definition of an application changes \(whether its the config vars, running image, formation or addons\) it triggers a new deployment of the application. This is done through a rolling process of starting new dynos, checking the health of the dyno, then stopping the older dynos one at a time. This is called a rolling update, it is designed to prevent application downtime, if the new deployment causes the application to crash, or the health checks to fail, then the old version is not shutdown and continues to receive all traffic on all network ports. @@ -64,7 +64,7 @@ You can see what dynos are running by executing via the CLI: ```shell aka ps -a appname-space -=== web (constellation-prod): (from docker) (1) +=== web (constellation-prod): (from docker) (3) web.1380490387-gv2r3: running 4/4/2018, 1:29:40 PM web.1380490387-nd1dd: running 4/4/2018, 1:29:41 PM web.1380490387-x2395: running 4/4/2018, 1:29:42 PM @@ -109,17 +109,9 @@ One or more applications can be added to any stage, however each stage is a dire Pipeline promotions are an important concept, they in affect are simply a deployment of the image within one stage to all the apps in the next stage. This allows for apps which have passed a specific stage to have its exact image deployed to the next stage in the process. -Each pipeline may also contain extra checks or be configured to perform special duties upon promotion. Paranoid or "safe" promote is a feature of Akkeris that prior to promotion will ensure all the config-vars that exist source app exist in all of the apps in the next stage. If it finds irregularities it blocks the promotion. The same checks are also done for addons. Paranoid or safe promotes can be enabled for any stage as a "status check". +Each pipeline may also contain extra checks called status checks. Status checks happen before the promotion, all status checks must return a result of "ok" in order for a promotion to occur. Any application or system can add itself as a status check and use this primitive in conjunction with webhooks to wire in CI/CD notifications and perform automated checks. Once all systems report back "ok" a pipeline promotion occurs and the app is released. -Status checks happen during a promotion before the promotion happens. All status checks must return a result of "ok" in order for a promotion to occur. Any application or system can add itself as a status check and use this primitive and subsequently hooks to wire in CI/CD notifications and perform automated checks. Once all systems report back "ok" a pipeline promotion occurs and the app is released. - -### Previewing Apps `beta` - -Finally, two of the stages have special meanings, `review` and `canary`. Preview apps can be automatically created by enabling the feature on an app. If a pull request in the source repository is created that is destined for the branch that would normally cause a build on the `development` stage of the pipeline a new application forked from the development application is created and placed in the `review` stage. Note that only the `web` dyno types are re-created with a quantity of 1, and any addons are attached unless they do not support sharing \(such as a log drain addon such as papertrail\). The new preview app will contain the built image for the new code being reviewed, and if the pull request is updated the code is automatically updated on the preview app as well. Once the pull request is closed the preview app is automatically removed. - -When the feature is enabled on a production application, any new release will trigger an entirely new app to be created with the same limitations applied to it as review apps \(only the web dyno, sharing its addons, etc\). This app is placed in the `canary` stage and a small portion of production traffic destined for the current `production` application is routed to the new version prior to being released. If the app begins experiencing a statistically larger amount of server or client error messages \(500/400 status codes\) the release is automatically aborted and the canary app is removed. - -This helps ensure app deployments minimize their production impact on release. +Pipelines play a crucial role in two key features later, preview apps and canary deployments. ## Storing and injecting configuration @@ -187,6 +179,16 @@ Logshuttle keeps a limited buffer of log entries solely for performance reasons. Akkeris will also emit into your logs an average of your memory and CPU utilization \(roughly every 15 minutes\). For more detailed metrics the UI, CLI \(`aka metrics`\) and Platform Apps API provide a mechanism for pulling down to a 1 second average of memory, filesystem I/O and CPU usage. +### Developer Workflow + +Akkeris provides two concepts, preview apps and canary apps `alpha` as a convenience to developers. + +Preview apps can be enabled on any app watching a source control system such as Github. If a pull request is created to the branch being watched by the app a new app forked from the source application is created and placed in the `review` stage (if the app is in a pipeline). Note that only the `web` dyno types are re-created with a quantity of 1, and any addons are attached unless they do not support sharing \(such as a log drain addon such as papertrail\). The new preview app will contain the built image for the new code being reviewed, and if the pull request is updated the code is automatically updated on the preview app as well. Once the pull request is closed the preview app is automatically removed. + +Canaray apps `alpha` can be enabled in production, rather than being triggered by pull requests as preview apps are, they are triggered by a new release. An entirely new app is created \(only the web dyno, sharing its addons\). This app is placed in the `canary` stage and a small portion of production traffic destined for the current `production` application is routed to the new version prior to being released. If the app begins experiencing a statistically larger amount of server or client error messages \(500/400 status codes\) the release is automatically aborted and the canary app is removed. If after time the app is healthy the release completes to the production application and the canary app is removed. + +This helps ensure app deployments minimize their production impact on release. + ## Getting Users to Apps Depending on your formation information and dyno types, you may have a `web` dyno running and may want users to be able to go to a website where a path on that site ties back to the `web` process running. @@ -223,8 +225,6 @@ aka routes:create -s www.siteyouwant.com -a myapp-space / / This will route all traffic on `www.siteyouwant.com` to the app `myapp-space`. Optionally you can specificy specific sub-paths you want to route and route traffic to specific sub paths on your app. - - ## Going Global Each application must be placed within a specific region. Any site or application must exist in the same region. While apps can be managed from one interface a region does impose some geographic limitations; all applications in a space must be in the same region, all applications in the same site must be in the same region, and finally addons are only available in specific regions, and an addon in a specific region may only be shared with other apps in the same region. From 2130c9d0b066dd5eaa452f04090283536fa9ccd1 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 3 Jan 2020 17:08:10 -0700 Subject: [PATCH 04/27] oops --- how-akkeris-works.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/how-akkeris-works.md b/how-akkeris-works.md index a7dd9b1..7f38444 100644 --- a/how-akkeris-works.md +++ b/how-akkeris-works.md @@ -179,7 +179,7 @@ Logshuttle keeps a limited buffer of log entries solely for performance reasons. Akkeris will also emit into your logs an average of your memory and CPU utilization \(roughly every 15 minutes\). For more detailed metrics the UI, CLI \(`aka metrics`\) and Platform Apps API provide a mechanism for pulling down to a 1 second average of memory, filesystem I/O and CPU usage. -### Developer Workflow +## Developer Workflow Akkeris provides two concepts, preview apps and canary apps `alpha` as a convenience to developers. From 0254ec05b3d19669ef6526ca5afe99b96ef84dfe Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:12:57 -0700 Subject: [PATCH 05/27] Updates --- README.md | 7 ++---- architecture/dyno.md | 2 +- architecture/filters.md | 17 ++++++++----- getting-started.md | 6 ++--- .../prerequisites-and-installing.md | 6 ++--- how-akkeris-works.md | 25 +++++++++++++++---- 6 files changed, 39 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index fa03fd4..18731bb 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,7 @@ theme: landing-programming-languages --- -# Akkeris - - -### Learn about building, deploying and managing products, applications on Akkeris. +## Learn about building, deploying and managing products, applications on Akkeris. --- @@ -17,7 +14,7 @@ Need help installing Akkeris? See [prerequisites and installing](/getting-starte * [Java](/getting-started/java.md) * [Go](/getting-started/go.md) * [Scala](/getting-started/scala.md) -* [Other Languages](/getting-started/scala.md) +* [Other Languages](/getting-started/other-languages.md) diff --git a/architecture/dyno.md b/architecture/dyno.md index c5079cb..602eea1 100644 --- a/architecture/dyno.md +++ b/architecture/dyno.md @@ -19,7 +19,7 @@ Akkeris executes applications by running the commands specified in your formatio You have control over the formation that's running via the UI, CLI or [Platform Apps API](/architecture/apps-api.md) \(the `PATCH /apps/{app}/formation` end point\). You can start new dynos or change the amount running with the `aka ps:create` and `aka ps:update` command. For example, to change the quantity of web dynos that are automatically created on the first deployment, run: ```shell -aka scale web=3 -a appname-space +aka ps:scale web=3 -a appname-space ``` When any portion of the definition of an application changes \(whether its the config vars, running image, formation or addons\) it triggers a new deployment of the application. This is done through a rolling process of starting new dynos, checking the health of the dyno, then stopping the older dynos one at a time. This is called a rolling update, it is designed to prevent application downtime, if the new deployment causes the application to crash, or the health checks to fail, then the old version is not shutdown and continues to receive all traffic on all network ports. diff --git a/architecture/filters.md b/architecture/filters.md index 8c73541..7f416b9 100644 --- a/architecture/filters.md +++ b/architecture/filters.md @@ -1,21 +1,26 @@ # Filters `beta` +### Table of Contents + + ## Introduction -Filters intercept requests coming in to an akkeris application and provide additional functionality or checks. Each filter type provides a unique functionality that can be shared or "attached" to applications. +Filters intercept requests coming in to an akkeris application (or site the applicaton is a part of) and provide additional functionality or checks. Each filter has unique functionalities. A filter is first created then can be shared or "attached" to applications. This allows for central managemennt and reuse of functionality. Changes to filters are applied when an app is deployed (however apps are automatically deployed if a filter is attached or detached). -While currently only one filter exists, more are on their way. ## Filter Types | Filter Type | Description | -| :--- | :--- | -| jwt | JWT Authentication Filters allow asserting the incoming HTTP request has a valid JWT token. | +| :---------- | :--- | +| jwt | JWT Authentication filters allow asserting the incoming HTTP request has a valid JWT token. | +| cors | CORS filters respond to `OPTIONS` HTTP requests with the policy set by the CORS Filter. | + +Each filter type has different options available to it, for more information see `aka filters:create --help` or Apps API Platform documentation. ## Creating a Filter -To create a JWT authentication filter you'll need: +In this example we'll create a JWT filter to protect an app, to do so we'll need the following: 1. The JWKS URI that has the JWKS certificate and authorization configuration. 2. The JWKS Issuer to validate on the incoming request. @@ -43,4 +48,4 @@ The command below will attach the filter created in [Creating an Authentication aka filters:attach -a myapp-space my-jwt-filter --excludes "/health-check" --excludes "/debug/" ``` -Once attached, almost all HTTP requests will require authorization (with the exception of `/health-check` and `/debug`). \ No newline at end of file +Once attached, almost all HTTP requests will require authorization (with the exception of `/health-check` and `/debug`). In addition to the `--excludes` option an `--includes` option also exists and by default includes everything. More than one path may be included (just as excludes) by specifying the `--includes` option multiple times. \ No newline at end of file diff --git a/getting-started.md b/getting-started.md index ebce2cb..89ffa3d 100644 --- a/getting-started.md +++ b/getting-started.md @@ -1,6 +1,4 @@ -# Akkeris - -### Step-by-step guides for deploying your first app and mastering akkeris. +## Step-by-step guides for deploying your first app and mastering akkeris. --- @@ -9,6 +7,6 @@ * [Java](/getting-started/java.md) * [Go](/getting-started/go.md) * [Scala](/getting-started/scala.md) -* [Other Languages](/getting-started/scala.md) +* [Other Languages](/getting-started/other-languages.md) Need help installing Akkeris? See [prerequisites and installing](/getting-started/prerequisites-and-installing.md) section \ No newline at end of file diff --git a/getting-started/prerequisites-and-installing.md b/getting-started/prerequisites-and-installing.md index bf559a9..cf03cf1 100644 --- a/getting-started/prerequisites-and-installing.md +++ b/getting-started/prerequisites-and-installing.md @@ -10,9 +10,8 @@ To fully take advantage of Akkeris ensure you install all the prerequisites: You'll also need to ensure you have: -1. An account on your corporate network -2. [Github Account](https://github.com) -3. [Docker Registry \(Quay\) Account](https://quay.example.io) +1. An account on Akkeris +2. [Github Account](https://github.com) (optional) ### Using apt (Debian/Ubuntu) @@ -153,5 +152,6 @@ You'll need to store your Github Personal access token in your netrc as two fact 4. Use things as normal, when prompted you'll be asked for your username and password; you may also be asked for your two factor auth token when logging in \(it'll auto magically appear as a pop up when needed\) +## Next Steps * [Deploy your first application](//getting-started.md) \ No newline at end of file diff --git a/how-akkeris-works.md b/how-akkeris-works.md index 7f38444..5b20e07 100644 --- a/how-akkeris-works.md +++ b/how-akkeris-works.md @@ -1,6 +1,6 @@ # How Akkeris Works -## Table of Contents +### Table of Contents @@ -209,21 +209,36 @@ Web dyno types can listen to incoming http traffic by attaching their listener t ### Creating a website -Often its necessary for multiple different apps with different responsibilities to exist under one domain for security, and simplicity reasons. Akkeris supports the ability to create a website and route traffic on a specific path on the website \(and its subpaths\) to go to a specific app, while other apps receive traffic on a different path. This is called HTTP reverse proxying, or HTTP routing. +Often it's necessary for multiple apps with different responsibilities to exist under one domain for security, and simplicity. Akkeris supports the ability to create a website and direct traffic on a path \(and its subpaths\) to a specific app, while other apps receive traffic on a different paths. This is called HTTP reverse proxying. An app can exist in more than one site. To create a site run: ```shell -aka sites:create www.siteyouwant.com +aka sites:create www.example.com ``` Creating a site does not implicitly begin routing traffic to any app, to route the traffic run: ```shell -aka routes:create -s www.siteyouwant.com -a myapp-space / / +aka routes:create -s www.example.com -a myapp-space / / ``` -This will route all traffic on `www.siteyouwant.com` to the app `myapp-space`. Optionally you can specificy specific sub-paths you want to route and route traffic to specific sub paths on your app. +This will route all traffic on `www.example.com` to the app `myapp-space`. Optionally you can specificy sub-paths to direct traffic to a portion of your application. For example: + + +```shell +aka routes:create -s www.example.com -a myv3apiapp-space /v3/api /api +``` + +In this example all of the traffic going to https://www.siteyouwant.com/v3/api and all of its sub-paths would be rewritten to go to `/api` on the app `myv3apiapp-space`. This can be useful for managing diffferent versions of an API, hosting a UI and an API on the same domain or creating vanity domains for customers without having to manage separate deployments. + +### Protecting your application + +Applications may have requirements on who is allowed to access them over https. Akkeris can protect applications based on whether an incoming HTTP request to a site or app has a special token and whether the user is part of a role that is allowed to visit an app. JWT [HTTP filters](/architecture/filters.md) can protect apps and sites by looking for a token that has a "JWT" format. JWT HTTP Filters can be additionally set to include or exclude paths from authorization and to only allow users who are a specific "audience" (as described by the "aud" claim on the JWT token) to make requests. + +Some applications may also have more permissive needs, such as permittinng browsers to make requests to their API. CORS [HTTP filters](/architecture/filters.md) allow developers to indicate which apps, methods, headers, and origins are allowed to request their API for cross-origin requests. + +[HTTP filters](/architecture/filters.md) are first created then attached to applications (using `aka filters:create` then `aka filters:attach`) to enforce the a policy across different systems while managing it from a central location. Changes in any filters are applied during deployments. This is especially useful for organizations that have a core team that manages authorization and authentication across all apps. ## Going Global From 3db6acd369c9ae87f25431c260a4caebac5e1a64 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:17:57 -0700 Subject: [PATCH 06/27] Updates --- getting-started/prerequisites-and-installing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting-started/prerequisites-and-installing.md b/getting-started/prerequisites-and-installing.md index cf03cf1..89b01f6 100644 --- a/getting-started/prerequisites-and-installing.md +++ b/getting-started/prerequisites-and-installing.md @@ -154,4 +154,4 @@ You'll need to store your Github Personal access token in your netrc as two fact ## Next Steps -* [Deploy your first application](//getting-started.md) \ No newline at end of file +* [Deploy your first application](/getting-started.md) \ No newline at end of file From 3557435b9eaf723bf2ab8ba32e9c0acb9957b269 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:19:57 -0700 Subject: [PATCH 07/27] Updates --- getting-started/prerequisites-and-installing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/getting-started/prerequisites-and-installing.md b/getting-started/prerequisites-and-installing.md index 89b01f6..165f00a 100644 --- a/getting-started/prerequisites-and-installing.md +++ b/getting-started/prerequisites-and-installing.md @@ -154,4 +154,4 @@ You'll need to store your Github Personal access token in your netrc as two fact ## Next Steps -* [Deploy your first application](/getting-started.md) \ No newline at end of file +* [Deploy your first application](/) \ No newline at end of file From bbf7403d29631d666fd5ca95fa240dac901eeec3 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:23:41 -0700 Subject: [PATCH 08/27] Updates --- how-akkeris-works.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/how-akkeris-works.md b/how-akkeris-works.md index 5b20e07..21ba34f 100644 --- a/how-akkeris-works.md +++ b/how-akkeris-works.md @@ -236,7 +236,7 @@ In this example all of the traffic going to https://www.siteyouwant.com/v3/api a Applications may have requirements on who is allowed to access them over https. Akkeris can protect applications based on whether an incoming HTTP request to a site or app has a special token and whether the user is part of a role that is allowed to visit an app. JWT [HTTP filters](/architecture/filters.md) can protect apps and sites by looking for a token that has a "JWT" format. JWT HTTP Filters can be additionally set to include or exclude paths from authorization and to only allow users who are a specific "audience" (as described by the "aud" claim on the JWT token) to make requests. -Some applications may also have more permissive needs, such as permittinng browsers to make requests to their API. CORS [HTTP filters](/architecture/filters.md) allow developers to indicate which apps, methods, headers, and origins are allowed to request their API for cross-origin requests. +Some applications may also have more permissive needs, such as permitting browsers to make requests to their API. CORS [HTTP filters](/architecture/filters.md) allow developers to indicate which apps, methods, headers, and origins are allowed to request their API for cross-origin requests. [HTTP filters](/architecture/filters.md) are first created then attached to applications (using `aka filters:create` then `aka filters:attach`) to enforce the a policy across different systems while managing it from a central location. Changes in any filters are applied during deployments. This is especially useful for organizations that have a core team that manages authorization and authentication across all apps. From 79c8cc6120d0d6a6b1236bb802992110cae1a2c7 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:26:21 -0700 Subject: [PATCH 09/27] Updates --- how-to-extend-akkeris.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/how-to-extend-akkeris.md b/how-to-extend-akkeris.md index f2907e0..480f2f3 100644 --- a/how-to-extend-akkeris.md +++ b/how-to-extend-akkeris.md @@ -41,8 +41,8 @@ You can extend Akkeris in a variety of ways to add custom functionality you may ## Creating CI/CD Checks * [About Pipelines](/architecture/pipelines.md) -* What is a Pipeline Status Check? `beta` -* Registering a new Pipeline Status Check `beta` +* [Permitting and Protecting Pipeline Promotions with Status Checks](/architecture/pipelines.md#pipeline-status-checks-beta) +* [Creating A Pipeline Status Check](/architecture/apps-api.md#release-statuses) ## Creating App Features From 5088f2144aec4056da11f32c92cf0c5ad040ed6f Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:31:21 -0700 Subject: [PATCH 10/27] Updates --- extending-akkeris/modifying-docs.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/extending-akkeris/modifying-docs.md b/extending-akkeris/modifying-docs.md index 9156358..5819371 100644 --- a/extending-akkeris/modifying-docs.md +++ b/extending-akkeris/modifying-docs.md @@ -1 +1,12 @@ -# Modifying the docs \ No newline at end of file +# Modifying the docs + +Contributing to documentation is a great way of helping out your own source community! You can open up a new PR [on Github](https://github.com/akkeris/docs). To contribute to the docs you'll first need a [Github](https://github.com) account, and be familiar with `git` and the Terminal. + +1. Go to https://github.com/akkeris/docs +2. Ensure you are logged in to Github, if not, login. +3. Click on the "Fork" icon at the top right +4. Clone your forked version using `git clone https://github.com/[your-user-name]/docs` +5. Open a new branch `git checkout -b 'name-of-branch'` +6. Make any modifications to the documentation. We use gitbook and markdown to write in. +7. Commit and push your changes `git commit -a -m 'Your commit message' ; git push` +8. Then go back to your forked Github repository and at the top there will be a message to submit a pull request. \ No newline at end of file From 2d8b14111a1f20cfe212c09db11410d72cd1dd98 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:33:36 -0700 Subject: [PATCH 11/27] Updates --- SUMMARY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/SUMMARY.md b/SUMMARY.md index ce70d07..8f59fb3 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -31,6 +31,7 @@ * [Creating Release Statuses](/architecture/apps-api.md#release-statuses) * Networking & Websites * [Creating a Website](/architecture/sites-and-routes.md) + * [HTTP Filters](/architecture/filters.md) * [HTTP/2 Support](/networking-and-websites/http2.md) * [Application Lifecycle](/lifecycle/application.md) * [Releases](/architecture/releases.md) From 08fa47332ed91d8cff7a833e51557be9fa9b9d06 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:35:22 -0700 Subject: [PATCH 12/27] Updates --- how-to-extend-akkeris.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/how-to-extend-akkeris.md b/how-to-extend-akkeris.md index 480f2f3..1550db3 100644 --- a/how-to-extend-akkeris.md +++ b/how-to-extend-akkeris.md @@ -44,6 +44,9 @@ You can extend Akkeris in a variety of ways to add custom functionality you may * [Permitting and Protecting Pipeline Promotions with Status Checks](/architecture/pipelines.md#pipeline-status-checks-beta) * [Creating A Pipeline Status Check](/architecture/apps-api.md#release-statuses) +## Vault Integrations +* Creating Addon Credentials from Vault + ## Creating App Features * What is an Application Feature? `beta` From 8ac50cc018fefae271c6e73dda1b7f5c6fd82f9d Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:35:38 -0700 Subject: [PATCH 13/27] Updates --- how-to-extend-akkeris.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/how-to-extend-akkeris.md b/how-to-extend-akkeris.md index 1550db3..4f24dc8 100644 --- a/how-to-extend-akkeris.md +++ b/how-to-extend-akkeris.md @@ -45,12 +45,12 @@ You can extend Akkeris in a variety of ways to add custom functionality you may * [Creating A Pipeline Status Check](/architecture/apps-api.md#release-statuses) ## Vault Integrations -* Creating Addon Credentials from Vault +* Creating Addon Credentials from Vault `todo` ## Creating App Features -* What is an Application Feature? `beta` -* Creating new Application Features `beta` +* What is an Application Feature? `todo` +* Creating new Application Features `todo` ## Contributing Docs From 3a0db29c94cb4dc7709e4693fadca4b8ec550e02 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:35:58 -0700 Subject: [PATCH 14/27] Updates --- how-to-extend-akkeris.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/how-to-extend-akkeris.md b/how-to-extend-akkeris.md index 4f24dc8..038d2d3 100644 --- a/how-to-extend-akkeris.md +++ b/how-to-extend-akkeris.md @@ -38,7 +38,7 @@ You can extend Akkeris in a variety of ways to add custom functionality you may * [Using the Akkeris Apps API Tutorial](/extending-akkeris/akkeris-apps-api-tutorial.md) * [Apps API Reference](/architecture/apps-api.md) -## Creating CI/CD Checks +## Creating Pipeline and CI/CD Checks * [About Pipelines](/architecture/pipelines.md) * [Permitting and Protecting Pipeline Promotions with Status Checks](/architecture/pipelines.md#pipeline-status-checks-beta) From a9b0dec29ca7edd034bd74d8b7e6f9c4e5b11f3b Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:36:35 -0700 Subject: [PATCH 15/27] Updates --- SUMMARY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SUMMARY.md b/SUMMARY.md index 8f59fb3..ff63273 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -43,7 +43,7 @@ * Troubleshooting & Support * [Akkeris Error Codes](/support/akkeris-error-codes.md) * [R14 - Out of Memory and Java](/support/r14-out-of-memory-and-java.md) - * [Offline Applications](/support/offline-applications.md) + * [Unresponse Applications](/support/offline-applications.md) * [URL Parsing](/support/url-parsing.md) From 4592f8d6cc0687050c40bf64473b6eb77d114fa0 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:40:43 -0700 Subject: [PATCH 16/27] Updates --- support/url-parsing.md | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/support/url-parsing.md b/support/url-parsing.md index 12edaba..ec722d1 100644 --- a/support/url-parsing.md +++ b/support/url-parsing.md @@ -1,41 +1,37 @@ # URL Parsing +### Table of Contents + ## Introduction -In Akkeris the brokers will return a connection string as a URL, also known as a URI, -see [RFC3986](https://tools.ietf.org/html/rfc3986?). -If an application needs a different format most languages have modules or libraries -that can parse a standard URI. Below are examples, suggestions and references for parsing -a URI. +Brokers in akkeris return a connection string as a URL, also known as a URI (see [RFC3986](https://tools.ietf.org/html/rfc3986?)). +All languages have modules or libraries that can parse a standard URI. Below are examples, suggestions and references to assist +with connecting to addons. ## Example URI Postgresql database connection string. -DATABASE_URL="postgres://fakeuser:fakepass@dbhost.somewherein.aws.com:5432/fakedbname?sslmode=disable" +DATABASE_URL="postgres://user:pass@dbhost.example.com:5432/dbname?sslmode=disable" * scheme: postgres -* username: fakeuser -* password: fakepass -* hostname: dbhost.somewherein.aws.com +* username: user +* password: pass +* hostname: dbhost.example.com * port: 5432 -* database name: fakedbname +* database name: dbname * options: ?sslmode=disable -## Parsing examples by language - -### Node +## Parsing Examples by Language -Node has a builtin module for URL Parsing: [URL](https://nodejs.org/dist/latest-v12.x/docs/api/url.html) +### Javascript (with URL class) -```node -const url = require('url') +Modern browsers and node have a builtin module for URL Parsing: [URL](https://developer.mozilla.org/en-US/docs/Web/API/URL) +```javascript const myURL = new URL(process.env['DATABASE_URL']) - - console.log("protocol:" + myURL.protocol) console.log("host:" + myURL.host) console.log("hostname:" + myURL.hostname) @@ -45,7 +41,7 @@ console.log("search:" + myURL.search) console.log("username:" + myURL.username) ``` -### Javascript +### Javascript (without URL class) Example from [stackoverflow.com](https://stackoverflow.com/questions/45073320/regex-for-a-url-connection-string) From d70906daff6aff56e81c06f76c40ec1df4a9976d Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 24 Jan 2020 17:42:00 -0700 Subject: [PATCH 17/27] Updates --- support/url-parsing.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/support/url-parsing.md b/support/url-parsing.md index ec722d1..1a82786 100644 --- a/support/url-parsing.md +++ b/support/url-parsing.md @@ -14,7 +14,9 @@ with connecting to addons. Postgresql database connection string. +```shell DATABASE_URL="postgres://user:pass@dbhost.example.com:5432/dbname?sslmode=disable" +``` * scheme: postgres * username: user From 5662716b1d70e9614154eca720bf2cd4b66ce1a6 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Mon, 24 Feb 2020 10:55:02 -0700 Subject: [PATCH 18/27] Updateds --- architecture/pipelines.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/architecture/pipelines.md b/architecture/pipelines.md index 1451b74..2ff0f1b 100644 --- a/architecture/pipelines.md +++ b/architecture/pipelines.md @@ -11,7 +11,7 @@ A pipeline is a group of apps that share the same codebase. Each app in a pipeli * Staging * Production -A common Heroku continuous delivery workflow has the following steps: +A common Akkeris continuous delivery workflow has the following steps: 1. A branch is created in a repository and pull request is made. 2. Akkeris creates apreview app for the pull request, allowing developers to review the change. From 51986a083132f27f30309f21bb2156218491a4b3 Mon Sep 17 00:00:00 2001 From: Sam Beckett Date: Tue, 3 Mar 2020 11:19:52 -0700 Subject: [PATCH 19/27] taas docs, metric limits --- SUMMARY.md | 7 +- support/unique-metric-limiting.md | 15 ++ taas/pipeline-status-checks-with-taas.md | 151 +++++++++++++++++ taas/promoting-apps-with-taas.md | 33 ++++ taas/registering-tests.md | 83 +++++++++ taas/testing-akkeris-apps-with-taas.md | 206 +++++++++++++++++++++++ 6 files changed, 494 insertions(+), 1 deletion(-) create mode 100644 support/unique-metric-limiting.md create mode 100644 taas/pipeline-status-checks-with-taas.md create mode 100644 taas/promoting-apps-with-taas.md create mode 100644 taas/registering-tests.md create mode 100644 taas/testing-akkeris-apps-with-taas.md diff --git a/SUMMARY.md b/SUMMARY.md index ff63273..0be530f 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -45,7 +45,12 @@ * [R14 - Out of Memory and Java](/support/r14-out-of-memory-and-java.md) * [Unresponse Applications](/support/offline-applications.md) * [URL Parsing](/support/url-parsing.md) - +* TaaS + * Tutorials + * [Testing Akkeris Apps](taas/testing-akkeris-apps-with-taas.md) + * [Pipeline Status Checks](/taas/pipeline-status-checks-with-taas.md) + * [Test Registration](/taas/registering-tests.md) + * [Promoting Apps with TaaS](/taas/promoting-apps-with-taas.md) --- ## Concepts diff --git a/support/unique-metric-limiting.md b/support/unique-metric-limiting.md new file mode 100644 index 0000000..d471408 --- /dev/null +++ b/support/unique-metric-limiting.md @@ -0,0 +1,15 @@ +# Unique Metric Limits + +On occasion, you may notice a message in your logs similar to the following: + +`[web.akkeris/metrics]: Unique metrics limit exceeded. Metric discarded: [count] myMetric1234` + +This means that your application is creating too many unique metrics. It is important to note that as the total number of unique metrics increases, the performance of the underlying database sharply declines. This not only affects your app, but every Akkeris app in the cluster. + +Any new unique metric created after the limit has been reached will be dropped. Entries for existing metrics will still be added to the database. + +To avoid this issue in the future, avoid creating metrics with high amounts of variance in the name or tag (for example, request IDs, log file names, timestamps, etc). + +To remove existing metrics, please contact your friendly neighborhood Akkeris administrators. + +(For more information on high cardinality with time series databases, you can visit https://blog.timescale.com/blog/what-is-high-cardinality-how-do-time-series-databases-influxdb-timescaledb-compare/) \ No newline at end of file diff --git a/taas/pipeline-status-checks-with-taas.md b/taas/pipeline-status-checks-with-taas.md new file mode 100644 index 0000000..99013c2 --- /dev/null +++ b/taas/pipeline-status-checks-with-taas.md @@ -0,0 +1,151 @@ +# Tutorial: Pipeline Status Checks with TaaS + +## Prerequisites + +If you aren't familiar with Taas, you might want to first read the [Testing Akkeris Apps with TaaS Tutorial](testing-akkeris-apps-with-taas.md) + +We will assume for the purposes of this tutorial that you have an Akkeris app, a test suite in Akkeris, and a Taas test registered. If you don't have these things, you can follow the [Tutorial](testing-akkeris-apps-with-taas.md) to get them set up. + +Make sure your Akkeris app has been tested previously by Taas and the test passed (if you followed the tutorial, you're ready!) + +## Pipeline Status Checks Overview + +Pipeline status checks let you get more information on the status of each app in an Akkeris pipeline. You can then choose to require that an app have a certain status before it is allowed to be promoted to the next pipeline stage. + +When an app is tested with Taas, Taas will report the status of the test (pass/fail) to the associated Akkeris release. + +![Successful Release](https://user-images.githubusercontent.com/28632549/71930082-2b350700-3158-11ea-9c46-8628d3633675.png) + +That status can then be used in a pipeline for promotion control. + +## Pipeline Setup + +### Creating a Pipeline + +Let's create a pipeline so we can see how the process works. + +You can use either the UI or CLI for this, but pipelines are a lot easier to understand in the UI. Navigate to the Pipelines page and click the "plus" icon in the top right to create a new pipeline. Give it a name (e.g. "tutorial"), and click "Finish". + +### Adding Apps + +Now, let's add some apps to the pipeline. Add a new app to the Development stage by clicking the "plus" icon next to "Development". + +Search for the name of your test app and click "OK". + +![New Development App](https://user-images.githubusercontent.com/28632549/71930195-6cc5b200-3158-11ea-9787-c2073772a3d5.png) + +Great - your Taas-targeted app is now in the Development phase! + +![App In Development Stage](https://user-images.githubusercontent.com/28632549/71930250-8666f980-3158-11ea-8d6e-0718716807eb.png) + +Since you have tested your app with Taas previously, you can see that the recent release has a "Tests Passed!" status attached by Taas. + +![Development App Recent Release](https://user-images.githubusercontent.com/28632549/71930293-9b438d00-3158-11ea-8eb7-834634ffda41.png) + +Let's make a new "staging" app that we can promote our "dev" app to. You can create this app via the CLI or UI, and name it whatever you wish. + +e.g. `$ aka apps:create simplestg -s SPACE -o ORG -d "Staging app for Taas tutorial"` + +Now, let's add it to our pipeline. Click the "plus" icon next to Staging, and search for the name of your test app. + +As you can see, the Taas status check is available! Click the checkbox to enable the status check, and click OK. + +![Adding Staging App](https://user-images.githubusercontent.com/28632549/71930330-ac8c9980-3158-11ea-962b-5f5ccbaf59b1.png) + +Our pipeline is now complete! + +![Complete Pipeline](https://user-images.githubusercontent.com/28632549/71930361-ba421f00-3158-11ea-821f-2d97b4f8f19d.png) + +## Testing Status Checks + +### Successful Status + +Let's make sure our status checks work. Click the "Promote" button on your Development app and see what happens! + +![Promotion Prompt](https://user-images.githubusercontent.com/28632549/71930496-02614180-3159-11ea-9df4-3b1328063ad7.png) + +As you can see, Taas has reported a successful status, and we are allowed to promote the app. Clicking OK will promote the app to the Staging stage, and a new release will be created on that app. + +![After Promotion](https://user-images.githubusercontent.com/28632549/71930522-1147f400-3159-11ea-887e-898dad2c92c6.png) + +### Unsuccessful Status + +What if our development app failed its test? Let's find out! + +Remember that bit of code in our test suite from the tutorial that would automatically fail a test if an environment variable was set? + +```javascript +// If FAIL is set, immediately fail. +// This is useful for testing. +if (process.env.FAIL) { + process.exit(1); +} +``` + +Let's put it to use. Add the `FAIL` environment variable to your Taas test and trigger it. + +`$ aka taas:config:set tutorial-taas FAIL=true` + +`$ aka taas:tests:trigger tutorial-taas` + +Once the results roll in, you'll see that (unsurprisingly) the test failed. Taas will then report the status as "failed" in the latest release: + +![Failed Status](https://user-images.githubusercontent.com/28632549/71930539-1e64e300-3159-11ea-83f6-58be45f5bc87.png) + +Now, go ahead and try to promote your app: + +![Promotion Blocked](https://user-images.githubusercontent.com/28632549/71930558-26248780-3159-11ea-9770-bb2fe16f9a75.png) + +As you can see, promotion has been blocked due to our Taas tests failing. If you have elevated access, you can bypass the warning, but it's not recommended. + +Our status checks worked! If you remove the `FAIL` environment variable from the test and re run the test, promotion will be available again. + +`$ aka taas:config:unset tutorial-taas FAIL` + +`$ aka taas:tests:trigger tutorial-taas` + +## Automatic Promotion + +If you don't like checking if the test has passed and then manually clicking "promote", Taas can automate pipeline promotions! + +Let's edit our Taas test to enable this feature. Replace `tutorial-taas` with your Taas test name if necessary. + +`$ aka taas:tests:update tutorial-taas -p pipelinename -v [PIPELINE NAME]` + +`$ aka taas:tests:update tutorial-taas -p transitionfrom -v development:[DEV APP NAME]` + +`$ aka taas:tests:update tutorial-taas -p transitionto -v staging:[STG APP NAME]` + +## Successful Status + +Let's kick off a new successful test! + +_Hint: did you remember to remove the `FAIL` environment variable?_ + +`$ aka taas:tests:trigger tutorial-taas` + +If you have Slack notifications set up, you'll see the result of your automated promotion. + +Automatic Promotion Slack + +If you check your pipeline, you'll see that the promotion and deployment was successful. Hooray! + +## Unsuccessful Status + +Let's add that `FAIL` environment variable back in so we can see what happens when tests fail. + +`$ aka taas:config:set tutorial-taas FAIL=true` + +`$ aka taas:tests:trigger tutorial-taas` + +If you have Slack notifications set up, you'll see the result of your automated promotion there. + +Slack Promotion Failed + +As you can see, the test result was "failed", so no automatic promotion took place. If you go to the pipeline, you'll see a failed status in the Development stage, and promoting will be blocked. + +![Status Fail](https://user-images.githubusercontent.com/28632549/71930642-4eac8180-3159-11ea-98e8-449a2e0d1412.png) + +## Next Steps + +This isn't the end - you can actually chain _multiple_ Taas tests and have your entire pipeline be tested and promoted in each environment from Review to Promotion when your app is released! See [Promoting Apps with TaaS](promoting-apps-with-taas.md) for more information. \ No newline at end of file diff --git a/taas/promoting-apps-with-taas.md b/taas/promoting-apps-with-taas.md new file mode 100644 index 0000000..b10be79 --- /dev/null +++ b/taas/promoting-apps-with-taas.md @@ -0,0 +1,33 @@ +# Taas App Promotion + +## Why? + +Taas can automatically promote apps in a pipeline when a test succeeds. Multiple Taas tests can be chained together and used to automate the entire deployment process! This means a new code release can be deployed and tested in each pipeline stage with a single click. + +## How? +If each app in the pipeline is targeted by a Taas test, Taas can automatically move the app through the pipeline as each test passes. + +Consider the following Akkeris pipeline: + +| Review | Development | Staging | Production | +|------------|-------------|---------|------------| +| app-review | app-dev | app-stg | app-prd | + +We can create Taas tests for each app: + +| App | Taas Test | Promotion Setting | +|------------|-----------------|----------------------------------------------------------| +| app-review | app-review-taas | Automatic: From review:app-review To development:app-dev | +| app-dev | app-dev-taas | Automatic: From development:app-dev To staging:app-stg | +| app-stg | app-stg-taas | Automatic: From staging:app-stg To production:app-prd | +| app-prd | app-prd-taas | Manual | + +The workflow would then look like this: +1. The `app-review-taas` test will be kicked off when a new release on `app-review` is created via Github auto build. If the test is successful, Taas will promote `app-review` to `app-dev`. +2. The `app-dev-taas` test will be kicked off when a new release on `app-dev` is created via promotion from Step 1. If the test is successful, Taas will promote `app-dev` to `app-stg`. +3. The `app-stg-taas` test will be kicked off when a new release on `app-stg` is created via promotion from Step 2. If the test is successful, Taas will promote `app-stg` to `app-prd`. +4. The `app-prd-taas` test will be kicked off when a new release on `app-review` is created via promotion from Step 3. The purpose of this test would not be for app promotion, but for smoke testing. + +Each Taas test could use the same image but with different environment variables. + +If at any point in the pipeline a Taas test fails, the promotion will not occur and the new code will not make it to production. \ No newline at end of file diff --git a/taas/registering-tests.md b/taas/registering-tests.md new file mode 100644 index 0000000..f07ef7d --- /dev/null +++ b/taas/registering-tests.md @@ -0,0 +1,83 @@ +## Preparation + +- The Akkeris CLI must be installed on your machine + - Install [Node.js](https://nodejs.org/en/) and [npm](www.npmjs.com/get-npm) + - `$ npm install -g akkeris` +- If you already have the Akkeris CLI, update it: + - `$ aka update` +- Have the app's details on hand before you begin + - `$ aka apps:info -a myapp-dev` +- Install the Akkeris TaaS plugin + - `$ aka plugins:install taas` + +## Registering a New Test + +During test registration, you will be prompted for a few details: + +- ? Select an App: + - Akkeris app that will be targeted by the test +- ? Test Name: + - Name of the new test +- ? Test Space: + - Space to run the test in (normally `taas`) +- ? Is test suite an Akkeris app? (Y/N) + - IF YES, test will run the image associated with an Akkeris app. + - ? Select the test suite app: + - IF NO, test will run a user-specified image + - ? Provide image location: +- ? Override command in docker image (Y/N) + - IF YES, test will use a custom Docker command + - ? Command: + - IF NO, test will use the default command in the image +- ? Automatically promote? (Y/N) + - IF YES, test will promote target app in an Akkeris pipeline if the test succeeds + - ? Pipeline Name: + - ? Transition From: + - ? Transition To: + - IF NO, no promotion will be made (select this if you are unsure) +- ? Timeout: + - How long the test will run before timing out +- ? Start Delay: + - How long the test will wait before running after being triggered +- ? Slack Channel: + - Which Slack channel should the results of the test be posted to? +- ? Environment Variables: + - Specify any environment variables that the test should have + +Once you have decided on the details of your new test, go ahead and run the test registration command. The CLI will prompt you for the required information. +`$ aka taas:tests:register` + +## Verifying Test Information + +Once your test is created, you can verify that your test was registered and all of the details are correct: +`$ aka taas:tests` +`$ aka taas:tests:info testname` + +If you need to add additional variables: +`$ aka taas:config:set testname KEY=value` + +If you need to add secrets to the test: +`$ aka taas:secret:create testname -p planname` + +For more information on any of these commands, you can use the `--help` option: +`$ aka taas:config:set --help` + +You can also see a list of all possible taas commands: +`$ aka help taas` + +## Triggering a Test + +To start running a test: +`$ aka taas:tests:trigger testname` + +To view logs for a test: +`$ aka taas:logs testname` + +Once the test is completed, your designated Slack channel will have received the results of the test. A few helpful links are included in these results: +- Logs: link to raw log data from Akkeris +- Kibana: link to pretty and searchable log data +- Rerun: link that will re run the test +- Commit: link to the last commit on Github prior to merge +- Artifacts: any files that were uploaded to the TaaS S3 bucket during the test + +If you enabled pipeline auto-promotion, the app will be promoted according to the test settings (provided external status checks have passed). If a test is configured to run on that environment, it will automatically be triggered (see [Promoting Apps with TaaS](promoting-apps-with-taas.md)) diff --git a/taas/testing-akkeris-apps-with-taas.md b/taas/testing-akkeris-apps-with-taas.md new file mode 100644 index 0000000..3acc6fa --- /dev/null +++ b/taas/testing-akkeris-apps-with-taas.md @@ -0,0 +1,206 @@ +# Tutorial: Testing Akkeris Apps with TaaS + +This tutorial will walk you through the process of testing an app with Taas. + +We will create a test suite, configure a new Taas test, and trigger that test. + +## Prerequisites + +**Akkeris App** + +To keep the scope of this tutorial focused on Taas, we're going to assume that you have a running Akkeris app that responds to HTTP requests. If you are unsure on how to do this, see the main Akkeris docs for help. + +**Akkeris CLI** + +The Akkeris CLI must be installed on your machine. Install [Node.js](https://nodejs.org/en/) and [npm](www.npmjs.com/get-npm), then run: + +`$ npm install -g akkeris` + +**Akkeris CLI Taas Plugin** + +Install the Taas plugin for the CLI: + +`$ aka plugins:install taas` + +## Create Test Suite + +Let's create a simple test suite to test our Akkeris app. You can either follow along below, or just clone the code from [the Github repo](https://github.com/akkeris/taas-tutorial) and skip to [Deploy to Akkeris](#deploy-to-akkeris). + +### Test Suite Structure + +Create a new directory with the following files in it: + +#### index.js +This is the guts of our test suite. Essentially, it attempts to get an HTTP reponse from a URL. If the status is OK (e.g. 200), it returns 0. If it's not OK (e.g. 401), it returns 1. Pretty simple! + +```javascript +// Easy to use HTTP request library +const axios = require('axios'); + +// Get URL to target from an environment variable, using Google as a fallback +const targetURL = process.env.TARGET_URL || "https://google.com/" + +async function test() { + try { + console.log(`Testing ${targetURL}...`) + // Make an HTTP request to the target URL + await axios.get(targetURL); + console.log("Test passed!") + // If we reach this point, we got an OK response and can return 0 (success) + process.exit(0) + } catch (err) { + // The status of the response was not in the OK range (200). + if (err.response && err.response.status && (err.response.status < 200 || err.response.status > 299)) { + console.log(`Response code out of expected range: ${err.response.status}`) + // Something else bad happened... + } else { + console.log(err.message) + } + console.log('Test failed!') + // If we reach this point, we did not get an OK response and need to return 1 (failure) + process.exit(1) + } +} + +// Sleep for 5 minutes if PORT is set +// This will allow the Akkeris release to be successful +if (process.env.PORT) { + setTimeout(() => console.log('Sleepy'), 300000) +} + +// If FAIL is set, immediately fail. +// This is useful for testing. +if (process.env.FAIL) { + process.exit(1); +} + +test(); +``` + +#### package.json +This file lists our app's npm dependencies. + +```json +{ + "name": "simple-app", + "main": "index.js", + "scripts": { + "start": "node index.js" + }, + "dependencies": { + "axios": "^0.19.0" + } +} + +``` + +#### Dockerfile +This file provides instructions to Docker on how to build our app into an image. + +```dockerfile +FROM node:12-alpine +WORKDIR /src/app +COPY index.js package.json /src/app/ +RUN npm install +CMD ["npm", "start"] +``` + +#### .gitignore +This will make sure we don't check any dependency runtime files into our Git repo. + +``` +node_modules +``` + +### Deploy to Akkeris +Now we need to deploy our test suite as an Akkeris app. There's a few ways to do this, but the easiest for our purposes is to create a new Github repository and link it to a new Akkeris app. + +#### Create Git Repository +Create a new repository on Github, then initialize and add the project's structure to an local repo. Then, push it to Github. + +(If you cloned the sample code, first run `$ rm -rf .git` in the code directory) + +```shell +git init +git remote add origin https://github.com/ORG/REPO +git add Dockerfile index.js package.json +git commit -m "first commit" +git push -u origin master +``` + +Now, create an access token so Akkeris can access it (optional if admin user is authorized in the repo): +- Go to https://github.com/settings/tokens/new +- Fill out the form, making sure to select the `repo` and `admin:repo_hook` settings. Then select "Generate Token" +- Copy the new token and save it for later use + + +#### Create and Link Akkeris App +Let's use the Akkeris CLI to create a new app and link it to our Git repository. + +```shell +aka apps:create simplesuite -s SPACE -o ORG -d "Simple Taas test suite for testing Akkeris apps" +aka repo:set -a simplesuite-SPACE https://github.com/ORG/REPO -u USERNAME -t TOKEN +``` + +There is an important difference here between deploying the test suite and a regular Akkeris app - we don't actually want to have any dynos running for the test suite! Wait a minute or so for the app to be released, and scale the web dyno to 0: + +```shell +aka ps:scale -a simplesuite-SPACE web=0 +``` + +Hooray - our test suite is ready to be used in Taas! When we make changes to our test suite in Github, it will be automatically built by Akkeris and be ready to use in the next test run. + +## Taas Test Setup + +Now that we have our test suite up in Akkeris, let's create a Taas test: + +`$ akm taas:tests:register` + +This will prompt you for all the information that Taas needs in order to set up a new test. (See [Registering Tests](registering-tests.md) for more detailed information) + +Proceed through the prompts, using the following table as a guide: + +| Question | Example Answer | Notes | +| --------------------------------- | --------------------- | ------------------------------------------------------------------------------------- | +| Select an App | `testapp-default` | The name of the app that will be tested | +| Do you want to test preview apps? | `no` | Preview apps are not covered by this tutorial | +| Test Name | `tutorial` | This is what your test will be called | +| Test Space | `taas` | This is where the test suite will run, normally choose `taas` | +| Is test suite an Akkeris app? | `yes` | We've made our test suite an Akkeris app, so choose "yes"! | +| Select the test suite app | `simplesuite-SPACE` | Choose the app that you created for our test suite | +| Override command in docker image? | `no` | Command override is not covered in this tutorial | +| Automatically promote? | `no` | Pipeline promotion is not covered in this tutorial | +| Timeout | `60` | How many seconds do you want to wait before the test is considered to have timed out? | +| Start Delay | `1` | How many seconds do you want to wait before starting the test? | +| Slack Channel | `@yourslackname` | Where do you want to be notified of test results? (optional) | +| Environment Variables | `TARGET_URL=[appurl]` | Replace appurl with the URL of your Akkeris app | + +Your Taas test is now ready to roll! + +## Triggering Your Test + +To kick off your test suite, run: + +`$ akm taas:tests:trigger tutorial-taas` (replace tutorial-taas with your test name if you named it something different) + +Soon the results of test will be sent to your specified slack channel! + +Test Results + +Don't have Slack? You can use the CLI to see results: + +`$ akm taas:tests:runs tutorial-taas` + +Copy the `runid`. Then, you can get detailed information with one of these commands: + +`$ akm taas:runs:info [RUNID]` - See general information about the run + +`$ akm taas:runs:output [RUNID]` - See logs for the run + +`$ akm taas:runs:artifacts [RUNID]` - See artifacts (screenshots, Kubernetes info) for the run + +`$ akm taas:runs:rerun [RUNID]` - Redo the run + +## Further Reading + +To find out how to use Taas with pipeline status checks, check out the [TaaS Pipeline Status Checks Tutorial](pipeline-status-checks-with-taas.md) \ No newline at end of file From 6e797c9d36c8d4bfd795ccf2ca34c1a117ea1b68 Mon Sep 17 00:00:00 2001 From: Sam Beckett Date: Tue, 3 Mar 2020 15:23:15 -0700 Subject: [PATCH 20/27] add unique metric limits link --- SUMMARY.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SUMMARY.md b/SUMMARY.md index 0be530f..0e91ae3 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -45,6 +45,7 @@ * [R14 - Out of Memory and Java](/support/r14-out-of-memory-and-java.md) * [Unresponse Applications](/support/offline-applications.md) * [URL Parsing](/support/url-parsing.md) + * [Unique Metric Limits](/support/unique-metric-limiting.md) * TaaS * Tutorials * [Testing Akkeris Apps](taas/testing-akkeris-apps-with-taas.md) @@ -93,4 +94,4 @@ * [Best Practices and Guidelines](best-practices-and-guidelines.md) * [Apps API](/architecture/apps-api.md)] -* [Creating Addons](/extending-akkeris/building-addons.md) \ No newline at end of file +* [Creating Addons](/extending-akkeris/building-addons.md) From c31a7dd0e538666bd3a0ef7498f5fbe67cf906d1 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Mon, 4 May 2020 13:33:49 -0600 Subject: [PATCH 21/27] COBRA-3409 - add documentation about R15 errors --- support/akkeris-error-codes.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/support/akkeris-error-codes.md b/support/akkeris-error-codes.md index 35496f0..1a4e9e0 100644 --- a/support/akkeris-error-codes.md +++ b/support/akkeris-error-codes.md @@ -67,7 +67,7 @@ This occures when the platform encoutnered an error and due to the infrastructur ## R14 - Memory quota exceeded -A dyno requires memory in excess of its quota. If this error occurs, the dyno will page to swap space to continue running, which may cause degraded process performance. The R14 error is calculated by total memory swap, rss and cache. This may cause an application failure, a warning is emitted first. +A dyno requires memory in excess of its quota. If this error occurs, the dyno will page to swap space to continue running, which may cause degraded process performance. If swap is unavailable the application will begin to exhibit unpredictable behavior or out of memory errors. The R14 error is calculated by total memory swap, rss and cache. This may cause an application failure, a warning (as an R15 error) is emitted first. ``` @@ -75,3 +75,14 @@ A dyno requires memory in excess of its quota. If this error occurs, the dyno wi ``` +## R15 - Memory quota critical + +A dyno requires more memory and is quickly approaching its memory limit. If this occurs, the dyno will page to swap space and will continue to run. If the memory quota continues in this critical state an R14 error will be emitted and the dyno may crash or exhibit unpredictable behaviour. An R15 is emitted as a warning. + +``` +2018-04-09T16:21:58Z app-space app[web.2453604099-0lcnh]/error: R15 - Error R15 (Memory limit critical) 350MB/256MB +``` + + + + From c60ac67ac2e0d51c33b99bb6255c1d74a258ef2b Mon Sep 17 00:00:00 2001 From: Sam Beckett Date: Mon, 4 May 2020 13:55:43 -0600 Subject: [PATCH 22/27] update API links, structure. add folding plugin --- SUMMARY.md | 34 +++++++++++++++++-- _layouts/website/page.html | 2 +- architecture/addons.md | 2 +- architecture/apps-api/App-Setups.md | 1 + architecture/apps-api/Apps.md | 1 + architecture/apps-api/Audits.md | 1 + architecture/apps-api/Authentication.md | 1 + architecture/apps-api/Builds.md | 1 + architecture/apps-api/Config.md | 1 + architecture/apps-api/Dynos.md | 1 + architecture/apps-api/Features.md | 1 + architecture/apps-api/Filters.md | 1 + architecture/apps-api/Formations.md | 1 + architecture/apps-api/Invoices.md | 1 + architecture/apps-api/Log-Drains.md | 1 + architecture/apps-api/Log-Sessions.md | 1 + architecture/apps-api/Organizations.md | 1 + architecture/apps-api/Pipelines.md | 1 + architecture/apps-api/Plugins.md | 1 + architecture/apps-api/Regions.md | 1 + architecture/apps-api/Release-Statuses.md | 1 + architecture/apps-api/Releases.md | 1 + architecture/apps-api/Routes.md | 1 + architecture/apps-api/SSL-TLS-Certificates.md | 1 + .../apps-api/Services-Addons-Attachments.md | 1 + architecture/apps-api/Sites.md | 1 + architecture/apps-api/Source-Control-Hooks.md | 1 + architecture/apps-api/Spaces.md | 1 + architecture/apps-api/Stacks.md | 1 + .../apps-api/Webhook-Event-Payloads.md | 1 + architecture/apps-api/Webhooks.md | 1 + architecture/{ => apps-api}/apps-api.md | 0 architecture/dyno.md | 4 +-- architecture/log-drains.md | 2 +- architecture/pipelines.md | 2 +- architecture/preview-apps.md | 2 +- architecture/webhooks.md | 8 ++--- book.json | 3 +- .../akkeris-apps-api-tutorial.md | 8 ++--- extending-akkeris/creating-plugins.md | 8 ++--- how-akkeris-works.md | 8 ++--- how-to-extend-akkeris.md | 8 ++--- lifecycle/maintenance-mode.md | 2 +- one-click/creating.md | 2 +- 44 files changed, 90 insertions(+), 33 deletions(-) create mode 100644 architecture/apps-api/App-Setups.md create mode 100644 architecture/apps-api/Apps.md create mode 100644 architecture/apps-api/Audits.md create mode 100644 architecture/apps-api/Authentication.md create mode 100644 architecture/apps-api/Builds.md create mode 100644 architecture/apps-api/Config.md create mode 100644 architecture/apps-api/Dynos.md create mode 100644 architecture/apps-api/Features.md create mode 100644 architecture/apps-api/Filters.md create mode 100644 architecture/apps-api/Formations.md create mode 100644 architecture/apps-api/Invoices.md create mode 100644 architecture/apps-api/Log-Drains.md create mode 100644 architecture/apps-api/Log-Sessions.md create mode 100644 architecture/apps-api/Organizations.md create mode 100644 architecture/apps-api/Pipelines.md create mode 100644 architecture/apps-api/Plugins.md create mode 100644 architecture/apps-api/Regions.md create mode 100644 architecture/apps-api/Release-Statuses.md create mode 100644 architecture/apps-api/Releases.md create mode 100644 architecture/apps-api/Routes.md create mode 100644 architecture/apps-api/SSL-TLS-Certificates.md create mode 100644 architecture/apps-api/Services-Addons-Attachments.md create mode 100644 architecture/apps-api/Sites.md create mode 100644 architecture/apps-api/Source-Control-Hooks.md create mode 100644 architecture/apps-api/Spaces.md create mode 100644 architecture/apps-api/Stacks.md create mode 100644 architecture/apps-api/Webhook-Event-Payloads.md create mode 100644 architecture/apps-api/Webhooks.md rename architecture/{ => apps-api}/apps-api.md (100%) diff --git a/SUMMARY.md b/SUMMARY.md index 0e91ae3..6578af8 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -28,7 +28,7 @@ * [Creating One-Click Apps](/one-click/creating.md) * [Learning The Akkeris Apps API](/extending-akkeris/akkeris-apps-api-tutorial.md) * [Creating Addon-Services](/extending-akkeris/building-addons.md) - * [Creating Release Statuses](/architecture/apps-api.md#release-statuses) + * [Creating Release Statuses](/architecture/apps-api/apps-api.md#release-statuses) * Networking & Websites * [Creating a Website](/architecture/sites-and-routes.md) * [HTTP Filters](/architecture/filters.md) @@ -72,7 +72,35 @@ ---- ## Reference -* [Apps API](/architecture/apps-api.md)] +* [Apps API](/architecture/apps-api/apps-api.md)] + * [Apps](/architecture/apps-api/Apps.md) + * [App Setups](/architecture/apps-api/App-Setups.md) + * [Audits](/architecture/apps-api/Audits.md) + * [Authentication](/architecture/apps-api/Authentication.md) + * [Builds](/architecture/apps-api/Builds.md) + * [Config](/architecture/apps-api/Config.md) + * [Dynos](/architecture/apps-api/Dynos.md) + * [Features](/architecture/apps-api/Features.md) + * [Filters](/architecture/apps-api/Filters.md) + * [Formations](/architecture/apps-api/Formations.md) + * [Invoices](/architecture/apps-api/Invoices.md) + * [Log-Drains](/architecture/apps-api/Log-Drains.md) + * [Log-Sessions](/architecture/apps-api/Log-Sessions.md) + * [Organizations](/architecture/apps-api/Organizations.md) + * [Pipelines](/architecture/apps-api/Pipelines.md) + * [Plugins](/architecture/apps-api/Plugins.md) + * [Regions](/architecture/apps-api/Regions.md) + * [Releases](/architecture/apps-api/Releases.md) + * [Release Statuses](/architecture/apps-api/Release-Statuses.md) + * [Routes](/architecture/apps-api/Routes.md) + * [Services, Addons, & Attachments](/architecture/apps-api/Services-Addons-Attachments.md) + * [Sites](/architecture/apps-api/Sites.md) + * [Source Control Hooks](/architecture/apps-api/Source-Control-Hooks.md) + * [Spaces](/architecture/apps-api/Spaces.md) + * [SSL & TLS Certificates](/architecture/apps-api/SSL-TLS-Certificates.md) + * [Stacks](/architecture/apps-api/Stacks.md) + * [Webhooks](/architecture/apps-api/Webhooks.md) + * [Webhook Event Payloads](/architecture/apps-api/Webhook-Event-Payloads.md) --- ## Addons @@ -93,5 +121,5 @@ ## For Contributors * [Best Practices and Guidelines](best-practices-and-guidelines.md) -* [Apps API](/architecture/apps-api.md)] +* [Apps API](/architecture/apps-api/apps-api.md)] * [Creating Addons](/extending-akkeris/building-addons.md) diff --git a/_layouts/website/page.html b/_layouts/website/page.html index 409e839..ccc81df 100644 --- a/_layouts/website/page.html +++ b/_layouts/website/page.html @@ -108,7 +108,7 @@ diff --git a/architecture/addons.md b/architecture/addons.md index 6e52b57..51e7eba 100644 --- a/architecture/addons.md +++ b/architecture/addons.md @@ -25,7 +25,7 @@ Add-ons are associated with an application, much like config vars - and so the e Add-ons may be sharable, meaning they can be attached to other apps and used there as well. These types of addons typically are databases and other external resources. An example of non-sharable add-on's may include a papertrail log drain service due to the nature of the service it does not make reasonable sense to share it between apps. -An addon may be shared by using attachments. Addons can be attached to other applications through the CLI \(`aka addons:attach addon-name -a destappname-space`\) or through the [Platform Apps API](/architecture/apps-api.md) \(`POST /apps/{app}/addon-attachments`\). Add-ons may be attached across spaces so long as they have the same set of compliances on the spaces. +An addon may be shared by using attachments. Addons can be attached to other applications through the CLI \(`aka addons:attach addon-name -a destappname-space`\) or through the [Platform Apps API](/architecture/apps-api/apps-api.md) \(`POST /apps/{app}/addon-attachments`\). Add-ons may be attached across spaces so long as they have the same set of compliances on the spaces. The original app which created the addon is considered the owner of the addon. The owner of the addon is only allowed to delete the application. If any app which has the addon attached is destroyed the attached addon is preserved. If the owner app removes the addon it is detached from all subsequent attached applications then destroyed. diff --git a/architecture/apps-api/App-Setups.md b/architecture/apps-api/App-Setups.md new file mode 100644 index 0000000..5d2e44c --- /dev/null +++ b/architecture/apps-api/App-Setups.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/App-Setups.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Apps.md b/architecture/apps-api/Apps.md new file mode 100644 index 0000000..28568db --- /dev/null +++ b/architecture/apps-api/Apps.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Apps.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Audits.md b/architecture/apps-api/Audits.md new file mode 100644 index 0000000..7f8b18e --- /dev/null +++ b/architecture/apps-api/Audits.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Audits.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Authentication.md b/architecture/apps-api/Authentication.md new file mode 100644 index 0000000..a4d17d1 --- /dev/null +++ b/architecture/apps-api/Authentication.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Authentication.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Builds.md b/architecture/apps-api/Builds.md new file mode 100644 index 0000000..fee7ae3 --- /dev/null +++ b/architecture/apps-api/Builds.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Builds.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Config.md b/architecture/apps-api/Config.md new file mode 100644 index 0000000..bc4641f --- /dev/null +++ b/architecture/apps-api/Config.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Config.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Dynos.md b/architecture/apps-api/Dynos.md new file mode 100644 index 0000000..40e3a6e --- /dev/null +++ b/architecture/apps-api/Dynos.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Dynos.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Features.md b/architecture/apps-api/Features.md new file mode 100644 index 0000000..4ab60b9 --- /dev/null +++ b/architecture/apps-api/Features.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Features.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Filters.md b/architecture/apps-api/Filters.md new file mode 100644 index 0000000..2b894a0 --- /dev/null +++ b/architecture/apps-api/Filters.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Filters.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Formations.md b/architecture/apps-api/Formations.md new file mode 100644 index 0000000..1513b9e --- /dev/null +++ b/architecture/apps-api/Formations.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Formations.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Invoices.md b/architecture/apps-api/Invoices.md new file mode 100644 index 0000000..cb35053 --- /dev/null +++ b/architecture/apps-api/Invoices.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Invoices.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Log-Drains.md b/architecture/apps-api/Log-Drains.md new file mode 100644 index 0000000..47e98dd --- /dev/null +++ b/architecture/apps-api/Log-Drains.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Log-Drains.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Log-Sessions.md b/architecture/apps-api/Log-Sessions.md new file mode 100644 index 0000000..dd9067f --- /dev/null +++ b/architecture/apps-api/Log-Sessions.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Log-Sessions.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Organizations.md b/architecture/apps-api/Organizations.md new file mode 100644 index 0000000..d12d3ec --- /dev/null +++ b/architecture/apps-api/Organizations.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Organizations.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Pipelines.md b/architecture/apps-api/Pipelines.md new file mode 100644 index 0000000..e67bfcd --- /dev/null +++ b/architecture/apps-api/Pipelines.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Pipelines.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Plugins.md b/architecture/apps-api/Plugins.md new file mode 100644 index 0000000..2896586 --- /dev/null +++ b/architecture/apps-api/Plugins.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Plugins.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Regions.md b/architecture/apps-api/Regions.md new file mode 100644 index 0000000..270b188 --- /dev/null +++ b/architecture/apps-api/Regions.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Regions.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Release-Statuses.md b/architecture/apps-api/Release-Statuses.md new file mode 100644 index 0000000..37321a5 --- /dev/null +++ b/architecture/apps-api/Release-Statuses.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Release-Statuses.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Releases.md b/architecture/apps-api/Releases.md new file mode 100644 index 0000000..c53f60f --- /dev/null +++ b/architecture/apps-api/Releases.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Releases.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Routes.md b/architecture/apps-api/Routes.md new file mode 100644 index 0000000..43c92ad --- /dev/null +++ b/architecture/apps-api/Routes.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Routes.md" %} \ No newline at end of file diff --git a/architecture/apps-api/SSL-TLS-Certificates.md b/architecture/apps-api/SSL-TLS-Certificates.md new file mode 100644 index 0000000..5b5b8a6 --- /dev/null +++ b/architecture/apps-api/SSL-TLS-Certificates.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/SSL-TLS-Certificates.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Services-Addons-Attachments.md b/architecture/apps-api/Services-Addons-Attachments.md new file mode 100644 index 0000000..4a26d4e --- /dev/null +++ b/architecture/apps-api/Services-Addons-Attachments.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Services-Addons-Attachments.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Sites.md b/architecture/apps-api/Sites.md new file mode 100644 index 0000000..1bc3008 --- /dev/null +++ b/architecture/apps-api/Sites.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Sites.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Source-Control-Hooks.md b/architecture/apps-api/Source-Control-Hooks.md new file mode 100644 index 0000000..22a2163 --- /dev/null +++ b/architecture/apps-api/Source-Control-Hooks.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Source-Control-Hooks.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Spaces.md b/architecture/apps-api/Spaces.md new file mode 100644 index 0000000..b73c06b --- /dev/null +++ b/architecture/apps-api/Spaces.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Spaces.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Stacks.md b/architecture/apps-api/Stacks.md new file mode 100644 index 0000000..b47aff0 --- /dev/null +++ b/architecture/apps-api/Stacks.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Stacks.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Webhook-Event-Payloads.md b/architecture/apps-api/Webhook-Event-Payloads.md new file mode 100644 index 0000000..d623f78 --- /dev/null +++ b/architecture/apps-api/Webhook-Event-Payloads.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Webhook-Event-Payloads.md" %} \ No newline at end of file diff --git a/architecture/apps-api/Webhooks.md b/architecture/apps-api/Webhooks.md new file mode 100644 index 0000000..83ac3c2 --- /dev/null +++ b/architecture/apps-api/Webhooks.md @@ -0,0 +1 @@ +{% include "git+https://github.com/akkeris/controller-api.git/docs/Webhooks.md" %} \ No newline at end of file diff --git a/architecture/apps-api.md b/architecture/apps-api/apps-api.md similarity index 100% rename from architecture/apps-api.md rename to architecture/apps-api/apps-api.md diff --git a/architecture/dyno.md b/architecture/dyno.md index 602eea1..5a01e9f 100644 --- a/architecture/dyno.md +++ b/architecture/dyno.md @@ -16,7 +16,7 @@ Every dyno type \(and dyno\) in an application receives the exact same configura Akkeris executes applications by running the commands specified in your formation, on a dyno that's prepared and loaded with the slug \(or image\) and with all the config vars from addons or specified by the user. Think of a dyno as a light weight virtualized unix container that contains your application running in its file system. -You have control over the formation that's running via the UI, CLI or [Platform Apps API](/architecture/apps-api.md) \(the `PATCH /apps/{app}/formation` end point\). You can start new dynos or change the amount running with the `aka ps:create` and `aka ps:update` command. For example, to change the quantity of web dynos that are automatically created on the first deployment, run: +You have control over the formation that's running via the UI, CLI or [Platform Apps API](/architecture/apps-api/apps-api.md) \(the `PATCH /apps/{app}/formation` end point\). You can start new dynos or change the amount running with the `aka ps:create` and `aka ps:update` command. For example, to change the quantity of web dynos that are automatically created on the first deployment, run: ```shell aka ps:scale web=3 -a appname-space @@ -30,5 +30,5 @@ You can see what dynos are running by executing via the CLI: aka ps -a appname-space ``` -Or by fetching the [Platform Apps API](/architecture/apps-api.md) end point for dynos \(`GET /apps/{app}/dynos`\). +Or by fetching the [Platform Apps API](/architecture/apps-api/apps-api.md) end point for dynos \(`GET /apps/{app}/dynos`\). diff --git a/architecture/log-drains.md b/architecture/log-drains.md index 442c37e..3ddd92b 100644 --- a/architecture/log-drains.md +++ b/architecture/log-drains.md @@ -27,7 +27,7 @@ You can listen to logs coming off of the log stream through the Platform Apps AP ### Adding a Log Drain -A log drain can be added to an application using `aka drains:create` via the CLI or from the [Platform Apps API](/architecture/apps-api.md) \(`POST /apps/{app}/log-drains`\). A log drain should be formatted as a URL where the following schemas are supported: +A log drain can be added to an application using `aka drains:create` via the CLI or from the [Platform Apps API](/architecture/apps-api/apps-api.md) \(`POST /apps/{app}/log-drains`\). A log drain should be formatted as a URL where the following schemas are supported: * https:// * syslog:// diff --git a/architecture/pipelines.md b/architecture/pipelines.md index 2ff0f1b..93899fa 100644 --- a/architecture/pipelines.md +++ b/architecture/pipelines.md @@ -120,7 +120,7 @@ myapp-kim-dev --- ### Pipeline Status Checks `beta` -Pipeline status checks allow a third party system to report a state of `pending`, `success`, `failure` or `error` about a release through the [Platform Apps API](/architecture/apps-api.md). The third party systems check can then be required to be successful before any release is allowed to be promoted to any pipeline stage. A status check can be reported on any release, to create a new status check see the [Release Statuses](/architecture/apps-api.md#release-statuses) section of the Apps API. +Pipeline status checks allow a third party system to report a state of `pending`, `success`, `failure` or `error` about a release through the [Platform Apps API](/architecture/apps-api/apps-api.md). The third party systems check can then be required to be successful before any release is allowed to be promoted to any pipeline stage. A status check can be reported on any release, to create a new status check see the [Release Statuses](/architecture/apps-api/apps-api.md#release-statuses) section of the Apps API. #### Adding Required Status Checks diff --git a/architecture/preview-apps.md b/architecture/preview-apps.md index 7b5ec7d..8a55a80 100644 --- a/architecture/preview-apps.md +++ b/architecture/preview-apps.md @@ -49,7 +49,7 @@ When the preview app is removed the sites and routes created along side it are a ## Disabling Preview Apps -You may disable preview apps at any time using the CLI or [Platform Apps API](/architecture/apps-api.md): +You may disable preview apps at any time using the CLI or [Platform Apps API](/architecture/apps-api/apps-api.md): ``` aka features:disable preview -a [appname-space] diff --git a/architecture/webhooks.md b/architecture/webhooks.md index 27fb0bc..97f998c 100644 --- a/architecture/webhooks.md +++ b/architecture/webhooks.md @@ -46,11 +46,11 @@ Webhooks are sent whenever a relevant event occurs, first identify which event y | released | When a release succeeds and is the active release running this fires. | | crashed | If a dyno crashes this will fire. In addition if an app entirely crashes each dyno will fire as a seperate event. This will fire as well if an application fails to shutdown gracefully when a new release is deployed. | -See [Webhook API Reference](/architecture/apps-api.md#webhook-event-payloads) for a complete list of events and their HTTP request bodies. +See [Webhook API Reference](/architecture/apps-api/apps-api.md#webhook-event-payloads) for a complete list of events and their HTTP request bodies. ### Step 2. Subscribe -Using the [Apps API](/architecture/apps-api.md) or through the CLI \(`aka hooks:create`\) you can subscribe to one or more selected events on an application. For example, if you wanted to listen to build and release events: +Using the [Apps API](/architecture/apps-api/apps-api.md) or through the CLI \(`aka hooks:create`\) you can subscribe to one or more selected events on an application. For example, if you wanted to listen to build and release events: ```shell aka hooks:create --events "build release released" \ @@ -110,7 +110,7 @@ end When receiving webhooks ensure your server is available and listening to `POST` http requests at the end point specified when you created the webhook. In this example the URL where notifications and events will be sent is `https://www.example.com/my/hook`. -Depending on your event you will receive a slightly different body \(payload\). For information on exact structures of different events see the [Webhook API Reference](/architecture/apps-api.md#webhook-event-payloads). The below example is a the payload that is sent on a `release` event. +Depending on your event you will receive a slightly different body \(payload\). For information on exact structures of different events see the [Webhook API Reference](/architecture/apps-api/apps-api.md#webhook-event-payloads). The below example is a the payload that is sent on a `release` event. ``` POST /my/hook @@ -190,7 +190,7 @@ The invoked CircleCI job will contain a few extra parameters that are exposed as * `AKKERIS_APP` - The app on Akkeris that triggered the event. * `AKKERIS_EVENT_PAYLOAD` - A JSON string containing the full webhook payload for the event. -For more information on event payloads, see the [Webhook API Reference](/architecture/apps-api.md#webhook-event-payloads). +For more information on event payloads, see the [Webhook API Reference](/architecture/apps-api/apps-api.md#webhook-event-payloads). ***Example: Kicking off a Test on CircleCI*** diff --git a/book.json b/book.json index 65fa946..401aca8 100644 --- a/book.json +++ b/book.json @@ -4,7 +4,8 @@ "styled-blockquotes", "simple-page-toc", "anchorjs", - "-highlight" + "-highlight", + "chapter-fold" ], "pluginsConfig": { "term": { diff --git a/extending-akkeris/akkeris-apps-api-tutorial.md b/extending-akkeris/akkeris-apps-api-tutorial.md index 2efb750..a1feaaf 100644 --- a/extending-akkeris/akkeris-apps-api-tutorial.md +++ b/extending-akkeris/akkeris-apps-api-tutorial.md @@ -1,12 +1,12 @@ # Learning to use Akkeris Apps API -The [Apps API](/architecture/apps-api.md) allows you to extend Akkeris and provide functionality beyond what is provided out of the box. In this tutorial, we'll use a popular CLI tool `curl` to explore the Apps API. Every popular language has the ability to make these same calls programmatically, see your language to find out how to make http and https calls. +The [Apps API](/architecture/apps-api/apps-api.md) allows you to extend Akkeris and provide functionality beyond what is provided out of the box. In this tutorial, we'll use a popular CLI tool `curl` to explore the Apps API. Every popular language has the ability to make these same calls programmatically, see your language to find out how to make http and https calls. By the end of this tutorial you should be able to: 1. Make requests to the API. 2. Authenticate with the API. -2. Explore the [Apps API](/architecture/apps-api.md) reference. +2. Explore the [Apps API](/architecture/apps-api/apps-api.md) reference. ## Prerequisites @@ -270,7 +270,7 @@ You should see the response: } ``` -You'll notice a few new options we added to curl- `-X POST` tells curl to make send a http method `POST` or to create. The `-d` followed by the JSON contents are the optional (additional) information we send to Akkeris to complete the request. The new header we added with `-H 'content-type: application/json'` tells Akkeris the additional information is encoded with JSON. The key and values inside this JSON content are documented in the [Apps API](/architecture/apps-api.md) and vary depending on the request. +You'll notice a few new options we added to curl- `-X POST` tells curl to make send a http method `POST` or to create. The `-d` followed by the JSON contents are the optional (additional) information we send to Akkeris to complete the request. The new header we added with `-H 'content-type: application/json'` tells Akkeris the additional information is encoded with JSON. The key and values inside this JSON content are documented in the [Apps API](/architecture/apps-api/apps-api.md) and vary depending on the request. ***Congratulations!*** @@ -286,7 +286,7 @@ curl https://$AKKERIS_HOST/apps/monty-nice -X DELETE -H "Authorization: Bearer $ ### Next Steps -* Read through the [Apps API Reference](/architecture/apps-api.md) for other commands you can call. +* Read through the [Apps API Reference](/architecture/apps-api/apps-api.md) for other commands you can call. * Learn about [Plugins](/architecture/plugins.md), which allows you to add functionality to the `aka` CLI. * Learn about [Webhooks](/architecture/webhooks.md), this lets you listen to changes and events in Akkeris (such as releases). diff --git a/extending-akkeris/creating-plugins.md b/extending-akkeris/creating-plugins.md index 35c0ac9..1c6c6e9 100644 --- a/extending-akkeris/creating-plugins.md +++ b/extending-akkeris/creating-plugins.md @@ -295,7 +295,7 @@ Converts a date object to a friendly string relative to the current date. For ex ### Using the Platform and Apps API -The `akkeris` object provides convenience methods to retrieve, update or remove resources from the Platform [Apps API](/architecture/apps-api.md). The API allows you to make any REST based calls to this API without having to know the host or token (it automatically finds the host and handles authentication for you). +The `akkeris` object provides convenience methods to retrieve, update or remove resources from the Platform [Apps API](/architecture/apps-api/apps-api.md). The API allows you to make any REST based calls to this API without having to know the host or token (it automatically finds the host and handles authentication for you). #### Making HTTP REST API Calls @@ -329,7 +329,7 @@ Creating a resource (or using any http verb that requires a payload) can be done console.log("Created our first app via a PLUGIN!", response); ``` -For more information on what API end points you can retrieve, see the Platform [Apps API](/architecture/apps-api.md) reference. +For more information on what API end points you can retrieve, see the Platform [Apps API](/architecture/apps-api/apps-api.md) reference. ### Using Yargs @@ -378,7 +378,7 @@ Before starting this how to, you should be familiar with the following concepts: 2. Have aka installed with it connected up and logged in to Akkeris. 3. Understand Git and Git workflows. 4. Understand basic HTTP REST API concepts. -5. Have reviewed the [Apps API](/architecture/apps-api.md) reference. +5. Have reviewed the [Apps API](/architecture/apps-api/apps-api.md) reference. 6. Are comfortable with the CLI or shell. In this exercise, we'll pull a list of applications on Akkeris, filter only the spaces `foo` and `bar`, and print them out to the terminal. We'll call this plugin 'myapps'. @@ -454,7 +454,7 @@ Congratulations! You've created your first plugin. ### Next Steps * [Publish Your Plugin](/architecture/plugins.md#Publishing-and-Revising-a-Plugin) -* Read more about the [Apps API](/architecture/apps-api.md). +* Read more about the [Apps API](/architecture/apps-api/apps-api.md). * See the [Postgres Plugin](https://github.com/akkeris/cli-pg-plugin) for inspiration. diff --git a/how-akkeris-works.md b/how-akkeris-works.md index 21ba34f..ba7c2ad 100644 --- a/how-akkeris-works.md +++ b/how-akkeris-works.md @@ -26,13 +26,13 @@ While a slug \(or an image\) can be deployed via akkeris, a set of source code c An application is explicitly created and then may receive a set of source code to build, an existing image to deploy or a repository to watch for changes and subsequently build. This information can sometimes be all that Akkeris may need to know to create and run an application. To build from sources without watching a repository a URL with the source code \(in a ZIP or tar.gz format\) must be provided to it. -Applications can explicitly be created via the management UI, via the CLI \(`aka apps:create`\) or through an API end point on the [Platform Apps API](/architecture/apps-api.md) \(`POST /apps`\). +Applications can explicitly be created via the management UI, via the CLI \(`aka apps:create`\) or through an API end point on the [Platform Apps API](/architecture/apps-api/apps-api.md) \(`POST /apps`\). ### Knowing how to build it Once a set of sources are received for an application \(either from a source control system it's watching or from a zipped/tar.gz URL\), Akkeris inspects the source code for a file at the root \(e.g., very top level directory\) called a `Dockerfile.` A Dockerfile is an open source standard description of how to build and run an image. You can learn more about docker files [here](https://docs.docker.com/engine/reference/builder/). This file also provides a description of what the operating system should have installed, its dependent software and what system level characteristics the image will have to ensure a near bit-by-bit replication of the underlying operating system. -Builds can be created through the CLI \(`aka releases:create` and in previous Akkeris versions `aka builds:create`\) or through the API end point `POST /apps/{app}/builds`\) on the [Platform Apps API](/architecture/apps-api.md). +Builds can be created through the CLI \(`aka releases:create` and in previous Akkeris versions `aka builds:create`\) or through the API end point `POST /apps/{app}/builds`\) on the [Platform Apps API](/architecture/apps-api/apps-api.md). The generated slug \(or image, also known as a docker image\) is stored on a registry so that both Akkeris and users can inspect the exact bit-by-bit image running on systems. @@ -52,7 +52,7 @@ Every dyno type \(and dyno\) in an application receives the exact same configura Akkeris executes applications by running the commands specified in your formation, on a dyno that's prepared and loaded with the slug \(or image\) and with all the config vars from addons or specified by the user. Think of a dyno as a light weight virtualized unix container that contains your application running in its file system. The actual underlying mechanism that runs applications is [Docker](https://www.docker.com) and [Kubernetes](https://kubernetes.io), however the intent of Akkeris is to not necessarily bind itself to anyone backing technology, so that it may be replaced if necessary. -You have control over the formation that's running via the UI, CLI or [Platform Apps API](/architecture/apps-api.md) \(the `PATCH /apps/{app}/formation` end point\). You can start new dynos or change the amount running with the `aka ps:create` and `aka ps:update` command. For example, to change the quantity of web dynos that are automatically created on the first deployment, run: +You have control over the formation that's running via the UI, CLI or [Platform Apps API](/architecture/apps-api/apps-api.md) \(the `PATCH /apps/{app}/formation` end point\). You can start new dynos or change the amount running with the `aka ps:create` and `aka ps:update` command. For example, to change the quantity of web dynos that are automatically created on the first deployment, run: ```shell aka ps:update web -q 3 -a appname-space @@ -70,7 +70,7 @@ aka ps -a appname-space web.1380490387-x2395: running 4/4/2018, 1:29:42 PM ``` -Or by fetching the [Platform Apps API](/architecture/apps-api.md) end point for dynos \(`GET /apps/{app}/dynos`\). +Or by fetching the [Platform Apps API](/architecture/apps-api/apps-api.md) end point for dynos \(`GET /apps/{app}/dynos`\). ### Providing Safe Spaces for Applications diff --git a/how-to-extend-akkeris.md b/how-to-extend-akkeris.md index 038d2d3..64afa18 100644 --- a/how-to-extend-akkeris.md +++ b/how-to-extend-akkeris.md @@ -15,13 +15,13 @@ You can extend Akkeris in a variety of ways to add custom functionality you may * [About Webhooks](/architecture/webhooks.md) * [Webhook Tutorial](/architecture/webhooks.md#getting-started) -* [App API Webhook Reference](/architecture/apps-api.md#webhooks) +* [App API Webhook Reference](/architecture/apps-api/apps-api.md#webhooks) ## Creating a One-click App * [About One-click Apps](/one-click/creating.md) * [Creating a One-click App](/one-click/creating.md) -* [App-setups Apps API Reference](/architecture/apps-api.md#app-setup) +* [App-setups Apps API Reference](/architecture/apps-api/apps-api.md#app-setup) ## Building Add-ons @@ -36,13 +36,13 @@ You can extend Akkeris in a variety of ways to add custom functionality you may ## Apps API * [Using the Akkeris Apps API Tutorial](/extending-akkeris/akkeris-apps-api-tutorial.md) -* [Apps API Reference](/architecture/apps-api.md) +* [Apps API Reference](/architecture/apps-api/apps-api.md) ## Creating Pipeline and CI/CD Checks * [About Pipelines](/architecture/pipelines.md) * [Permitting and Protecting Pipeline Promotions with Status Checks](/architecture/pipelines.md#pipeline-status-checks-beta) -* [Creating A Pipeline Status Check](/architecture/apps-api.md#release-statuses) +* [Creating A Pipeline Status Check](/architecture/apps-api/apps-api.md#release-statuses) ## Vault Integrations * Creating Addon Credentials from Vault `todo` diff --git a/lifecycle/maintenance-mode.md b/lifecycle/maintenance-mode.md index e7a8fc1..e3b1084 100644 --- a/lifecycle/maintenance-mode.md +++ b/lifecycle/maintenance-mode.md @@ -18,7 +18,7 @@ Visitors arriving to your app will be shown: ## Usage -You can turn maintenance mode on or off using the CLI or [Platform Apps API](/architecture/apps-api.md). To enable maintenance mode, run: +You can turn maintenance mode on or off using the CLI or [Platform Apps API](/architecture/apps-api/apps-api.md). To enable maintenance mode, run: ```shell aka maintenance:on -a [appname-space] diff --git a/one-click/creating.md b/one-click/creating.md index ccd6242..ae15a75 100644 --- a/one-click/creating.md +++ b/one-click/creating.md @@ -17,7 +17,7 @@ You can create one click apps by first creating a blueprint. Generally the best ```shell aka apps:blueprint -a [appname-space] > blueprint.json ``` -You can then modify the blueprint.json file and change any of the parameters as needed. A reference for the app setups blue print can be found in the [App Setups](/architecture/apps-api.md#app-setup) section of the Platform Apps API. +You can then modify the blueprint.json file and change any of the parameters as needed. A reference for the app setups blue print can be found in the [App Setups](/architecture/apps-api/apps-api.md#app-setup) section of the Platform Apps API. Once your blueprint is to your liking you can optionally add the "name", "description" and "icon" field off the the root of the JSON object (all as strings) to provide more meta information that a user would see when setting up the app. From c63b6cf256127801f398df5930e5128a4ed33066 Mon Sep 17 00:00:00 2001 From: Sam Beckett Date: Wed, 6 May 2020 11:25:58 -0600 Subject: [PATCH 23/27] add a few summary pages --- SUMMARY.md | 13 ++++++------- getting-started/languages.md | 10 ++++++++++ networking-and-websites/networking-and-websites.md | 9 +++++++++ support/support.md | 9 +++++++++ taas/taas.md | 13 +++++++++++++ 5 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 getting-started/languages.md create mode 100644 networking-and-websites/networking-and-websites.md create mode 100644 support/support.md create mode 100644 taas/taas.md diff --git a/SUMMARY.md b/SUMMARY.md index 6578af8..430e8b7 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -4,7 +4,7 @@ ## Getting Started * [Installing](/getting-started/prerequisites-and-installing.md) - * By Language + * [By Language](/getting-started/languages.md) * [Node.js](/getting-started/nodejs.md) * [Java](/getting-started/java.md) * [Go](/getting-started/go.md) @@ -29,7 +29,7 @@ * [Learning The Akkeris Apps API](/extending-akkeris/akkeris-apps-api-tutorial.md) * [Creating Addon-Services](/extending-akkeris/building-addons.md) * [Creating Release Statuses](/architecture/apps-api/apps-api.md#release-statuses) -* Networking & Websites +* [Networking & Websites](/networking-and-websites/networking-and-websites.md) * [Creating a Website](/architecture/sites-and-routes.md) * [HTTP Filters](/architecture/filters.md) * [HTTP/2 Support](/networking-and-websites/http2.md) @@ -40,18 +40,17 @@ * [Special Config Vars](/architecture/config-vars.md#injected-runtime-config-vars) * [Managing Environments](/lifecycle/managing-multiple-environments.md) * [Maintenance Mode](/lifecycle/maintenance-mode.md) -* Troubleshooting & Support +* [Troubleshooting & Support](/support/support.md) * [Akkeris Error Codes](/support/akkeris-error-codes.md) * [R14 - Out of Memory and Java](/support/r14-out-of-memory-and-java.md) * [Unresponse Applications](/support/offline-applications.md) * [URL Parsing](/support/url-parsing.md) * [Unique Metric Limits](/support/unique-metric-limiting.md) -* TaaS - * Tutorials - * [Testing Akkeris Apps](taas/testing-akkeris-apps-with-taas.md) - * [Pipeline Status Checks](/taas/pipeline-status-checks-with-taas.md) +* [TaaS](/taas/taas.md) * [Test Registration](/taas/registering-tests.md) * [Promoting Apps with TaaS](/taas/promoting-apps-with-taas.md) + * [Tutorial - Testing Akkeris Apps](/taas/testing-akkeris-apps-with-taas.md) + * [Tutorial - Pipeline Status Checks](/taas/pipeline-status-checks-with-taas.md) --- ## Concepts diff --git a/getting-started/languages.md b/getting-started/languages.md new file mode 100644 index 0000000..659ae64 --- /dev/null +++ b/getting-started/languages.md @@ -0,0 +1,10 @@ +# Getting Started on Akkeris + +Select a programming language to get started: + +* [Node.js](/getting-started/nodejs.md) +* [Java](/getting-started/java.md) +* [Go](/getting-started/go.md) +* [Ruby](/getting-started/ruby.md) +* [Scala](/getting-started/scala.md) +* [Other Languages](/getting-started/other-languages.md) \ No newline at end of file diff --git a/networking-and-websites/networking-and-websites.md b/networking-and-websites/networking-and-websites.md new file mode 100644 index 0000000..765d136 --- /dev/null +++ b/networking-and-websites/networking-and-websites.md @@ -0,0 +1,9 @@ +# Networking and Websites + +Akkeris takes care of the nitty-gritty of managing network traffic to your app so you can focus on development. + +To learn more about how this works, you can take a look at the following articles: + +* [Creating a Website](/architecture/sites-and-routes.md) +* [HTTP Filters](/architecture/filters.md) +* [HTTP/2 Support](/networking-and-websites/http2.md) \ No newline at end of file diff --git a/support/support.md b/support/support.md new file mode 100644 index 0000000..5c4fc56 --- /dev/null +++ b/support/support.md @@ -0,0 +1,9 @@ +# Troubleshooting and Support + +Having trouble? You may find the following articles helpful: + +* [Akkeris Error Codes](/support/akkeris-error-codes.md) + * [R14 - Out of Memory and Java](/support/r14-out-of-memory-and-java.md) +* [Unresponsive Applications](/support/offline-applications.md) +* [URL Parsing](/support/url-parsing.md) +* [Unique Metric Limits](/support/unique-metric-limiting.md) \ No newline at end of file diff --git a/taas/taas.md b/taas/taas.md new file mode 100644 index 0000000..99d41a3 --- /dev/null +++ b/taas/taas.md @@ -0,0 +1,13 @@ +# TaaS + +Akkeris Testing as a Service (TaaS) gives developers a place to host and run automated testing frameworks. TaaS is a big step towards making Akkeris a fully featured CI/CD offering - with TaaS, you can commit code, run automated tests, and promote your app along a development pipeline in a single step. You can run almost any test framework of your choice, as long as it can run as a Docker image and exits with a zero (pass) or nonzero (fail). + +## Documentation + +* [Test Registration](/taas/registering-tests.md) +* [Promoting Apps with TaaS](/taas/promoting-apps-with-taas.md) + +### Tutorials + +* [Tutorial - Testing Akkeris Apps](/taas/testing-akkeris-apps-with-taas.md) +* [Tutorial - Pipeline Status Checks](/taas/pipeline-status-checks-with-taas.md) \ No newline at end of file From 7ab6be4301f67e52ab6de8de5f14806800925fc2 Mon Sep 17 00:00:00 2001 From: Sam Beckett Date: Mon, 14 Sep 2020 10:14:11 -0600 Subject: [PATCH 24/27] update platform API links --- .gitignore | 2 ++ SUMMARY.md | 2 +- architecture/addons.md | 2 +- architecture/dyno.md | 4 ++-- architecture/log-drains.md | 2 +- architecture/pipelines.md | 2 +- architecture/preview-apps.md | 2 +- architecture/webhooks.md | 8 ++++---- how-akkeris-works.md | 8 ++++---- how-to-extend-akkeris.md | 6 +++--- lifecycle/maintenance-mode.md | 2 +- one-click/creating.md | 2 +- 12 files changed, 22 insertions(+), 20 deletions(-) diff --git a/.gitignore b/.gitignore index 12c830b..c2b7f72 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,5 @@ _book/ book.pdf book.epub book.mobi + +.DS_Store \ No newline at end of file diff --git a/SUMMARY.md b/SUMMARY.md index 430e8b7..85337a5 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -28,7 +28,7 @@ * [Creating One-Click Apps](/one-click/creating.md) * [Learning The Akkeris Apps API](/extending-akkeris/akkeris-apps-api-tutorial.md) * [Creating Addon-Services](/extending-akkeris/building-addons.md) - * [Creating Release Statuses](/architecture/apps-api/apps-api.md#release-statuses) + * [Creating Release Statuses](/architecture/apps-api/Release-Statuses.md) * [Networking & Websites](/networking-and-websites/networking-and-websites.md) * [Creating a Website](/architecture/sites-and-routes.md) * [HTTP Filters](/architecture/filters.md) diff --git a/architecture/addons.md b/architecture/addons.md index 51e7eba..287e32c 100644 --- a/architecture/addons.md +++ b/architecture/addons.md @@ -25,7 +25,7 @@ Add-ons are associated with an application, much like config vars - and so the e Add-ons may be sharable, meaning they can be attached to other apps and used there as well. These types of addons typically are databases and other external resources. An example of non-sharable add-on's may include a papertrail log drain service due to the nature of the service it does not make reasonable sense to share it between apps. -An addon may be shared by using attachments. Addons can be attached to other applications through the CLI \(`aka addons:attach addon-name -a destappname-space`\) or through the [Platform Apps API](/architecture/apps-api/apps-api.md) \(`POST /apps/{app}/addon-attachments`\). Add-ons may be attached across spaces so long as they have the same set of compliances on the spaces. +An addon may be shared by using attachments. Addons can be attached to other applications through the CLI \(`aka addons:attach addon-name -a destappname-space`\) or through the [Platform Apps API](/architecture/apps-api/Services-Addons-Attachments.md) \(`POST /apps/{app}/addon-attachments`\). Add-ons may be attached across spaces so long as they have the same set of compliances on the spaces. The original app which created the addon is considered the owner of the addon. The owner of the addon is only allowed to delete the application. If any app which has the addon attached is destroyed the attached addon is preserved. If the owner app removes the addon it is detached from all subsequent attached applications then destroyed. diff --git a/architecture/dyno.md b/architecture/dyno.md index 5a01e9f..ebc9589 100644 --- a/architecture/dyno.md +++ b/architecture/dyno.md @@ -16,7 +16,7 @@ Every dyno type \(and dyno\) in an application receives the exact same configura Akkeris executes applications by running the commands specified in your formation, on a dyno that's prepared and loaded with the slug \(or image\) and with all the config vars from addons or specified by the user. Think of a dyno as a light weight virtualized unix container that contains your application running in its file system. -You have control over the formation that's running via the UI, CLI or [Platform Apps API](/architecture/apps-api/apps-api.md) \(the `PATCH /apps/{app}/formation` end point\). You can start new dynos or change the amount running with the `aka ps:create` and `aka ps:update` command. For example, to change the quantity of web dynos that are automatically created on the first deployment, run: +You have control over the formation that's running via the UI, CLI or [Platform Apps API](/architecture/apps-api/Formations.md) \(the `PATCH /apps/{app}/formation` end point\). You can start new dynos or change the amount running with the `aka ps:create` and `aka ps:update` command. For example, to change the quantity of web dynos that are automatically created on the first deployment, run: ```shell aka ps:scale web=3 -a appname-space @@ -30,5 +30,5 @@ You can see what dynos are running by executing via the CLI: aka ps -a appname-space ``` -Or by fetching the [Platform Apps API](/architecture/apps-api/apps-api.md) end point for dynos \(`GET /apps/{app}/dynos`\). +Or by fetching the [Platform Apps API](/architecture/apps-api/Dynos.md) end point for dynos \(`GET /apps/{app}/dynos`\). diff --git a/architecture/log-drains.md b/architecture/log-drains.md index 3ddd92b..a4b37d4 100644 --- a/architecture/log-drains.md +++ b/architecture/log-drains.md @@ -27,7 +27,7 @@ You can listen to logs coming off of the log stream through the Platform Apps AP ### Adding a Log Drain -A log drain can be added to an application using `aka drains:create` via the CLI or from the [Platform Apps API](/architecture/apps-api/apps-api.md) \(`POST /apps/{app}/log-drains`\). A log drain should be formatted as a URL where the following schemas are supported: +A log drain can be added to an application using `aka drains:create` via the CLI or from the [Platform Apps API](/architecture/apps-api/Log-Drains.md) \(`POST /apps/{app}/log-drains`\). A log drain should be formatted as a URL where the following schemas are supported: * https:// * syslog:// diff --git a/architecture/pipelines.md b/architecture/pipelines.md index 93899fa..2ec8aff 100644 --- a/architecture/pipelines.md +++ b/architecture/pipelines.md @@ -120,7 +120,7 @@ myapp-kim-dev --- ### Pipeline Status Checks `beta` -Pipeline status checks allow a third party system to report a state of `pending`, `success`, `failure` or `error` about a release through the [Platform Apps API](/architecture/apps-api/apps-api.md). The third party systems check can then be required to be successful before any release is allowed to be promoted to any pipeline stage. A status check can be reported on any release, to create a new status check see the [Release Statuses](/architecture/apps-api/apps-api.md#release-statuses) section of the Apps API. +Pipeline status checks allow a third party system to report a state of `pending`, `success`, `failure` or `error` about a release through the [Platform Apps API](/architecture/apps-api/Release-Statuses.md). The third party systems check can then be required to be successful before any release is allowed to be promoted to any pipeline stage. A status check can be reported on any release, to create a new status check see the [Release Statuses](/architecture/apps-api/Release-Statuses.md) section of the Apps API. #### Adding Required Status Checks diff --git a/architecture/preview-apps.md b/architecture/preview-apps.md index 8a55a80..8db716e 100644 --- a/architecture/preview-apps.md +++ b/architecture/preview-apps.md @@ -49,7 +49,7 @@ When the preview app is removed the sites and routes created along side it are a ## Disabling Preview Apps -You may disable preview apps at any time using the CLI or [Platform Apps API](/architecture/apps-api/apps-api.md): +You may disable preview apps at any time using the CLI or [Platform Apps API](/architecture/apps-api/Features.md): ``` aka features:disable preview -a [appname-space] diff --git a/architecture/webhooks.md b/architecture/webhooks.md index 97f998c..77d1de2 100644 --- a/architecture/webhooks.md +++ b/architecture/webhooks.md @@ -46,11 +46,11 @@ Webhooks are sent whenever a relevant event occurs, first identify which event y | released | When a release succeeds and is the active release running this fires. | | crashed | If a dyno crashes this will fire. In addition if an app entirely crashes each dyno will fire as a seperate event. This will fire as well if an application fails to shutdown gracefully when a new release is deployed. | -See [Webhook API Reference](/architecture/apps-api/apps-api.md#webhook-event-payloads) for a complete list of events and their HTTP request bodies. +See [Webhook API Reference](/architecture/apps-api/Webhook-Event-Payloads.md) for a complete list of events and their HTTP request bodies. ### Step 2. Subscribe -Using the [Apps API](/architecture/apps-api/apps-api.md) or through the CLI \(`aka hooks:create`\) you can subscribe to one or more selected events on an application. For example, if you wanted to listen to build and release events: +Using the [Apps API](/architecture/apps-api/Webhooks.md) or through the CLI \(`aka hooks:create`\) you can subscribe to one or more selected events on an application. For example, if you wanted to listen to build and release events: ```shell aka hooks:create --events "build release released" \ @@ -110,7 +110,7 @@ end When receiving webhooks ensure your server is available and listening to `POST` http requests at the end point specified when you created the webhook. In this example the URL where notifications and events will be sent is `https://www.example.com/my/hook`. -Depending on your event you will receive a slightly different body \(payload\). For information on exact structures of different events see the [Webhook API Reference](/architecture/apps-api/apps-api.md#webhook-event-payloads). The below example is a the payload that is sent on a `release` event. +Depending on your event you will receive a slightly different body \(payload\). For information on exact structures of different events see the [Webhook API Reference](/architecture/apps-api/Webhook-Event-Payloads.md). The below example is a the payload that is sent on a `release` event. ``` POST /my/hook @@ -190,7 +190,7 @@ The invoked CircleCI job will contain a few extra parameters that are exposed as * `AKKERIS_APP` - The app on Akkeris that triggered the event. * `AKKERIS_EVENT_PAYLOAD` - A JSON string containing the full webhook payload for the event. -For more information on event payloads, see the [Webhook API Reference](/architecture/apps-api/apps-api.md#webhook-event-payloads). +For more information on event payloads, see the [Webhook API Reference](/architecture/apps-api/Webhook-Event-Payloads.md). ***Example: Kicking off a Test on CircleCI*** diff --git a/how-akkeris-works.md b/how-akkeris-works.md index ba7c2ad..9df9841 100644 --- a/how-akkeris-works.md +++ b/how-akkeris-works.md @@ -26,13 +26,13 @@ While a slug \(or an image\) can be deployed via akkeris, a set of source code c An application is explicitly created and then may receive a set of source code to build, an existing image to deploy or a repository to watch for changes and subsequently build. This information can sometimes be all that Akkeris may need to know to create and run an application. To build from sources without watching a repository a URL with the source code \(in a ZIP or tar.gz format\) must be provided to it. -Applications can explicitly be created via the management UI, via the CLI \(`aka apps:create`\) or through an API end point on the [Platform Apps API](/architecture/apps-api/apps-api.md) \(`POST /apps`\). +Applications can explicitly be created via the management UI, via the CLI \(`aka apps:create`\) or through an API end point on the [Platform Apps API](/architecture/apps-api/Apps.md) \(`POST /apps`\). ### Knowing how to build it Once a set of sources are received for an application \(either from a source control system it's watching or from a zipped/tar.gz URL\), Akkeris inspects the source code for a file at the root \(e.g., very top level directory\) called a `Dockerfile.` A Dockerfile is an open source standard description of how to build and run an image. You can learn more about docker files [here](https://docs.docker.com/engine/reference/builder/). This file also provides a description of what the operating system should have installed, its dependent software and what system level characteristics the image will have to ensure a near bit-by-bit replication of the underlying operating system. -Builds can be created through the CLI \(`aka releases:create` and in previous Akkeris versions `aka builds:create`\) or through the API end point `POST /apps/{app}/builds`\) on the [Platform Apps API](/architecture/apps-api/apps-api.md). +Builds can be created through the CLI \(`aka releases:create` and in previous Akkeris versions `aka builds:create`\) or through the API end point `POST /apps/{app}/builds`\) on the [Platform Apps API](/architecture/apps-api/Builds.md). The generated slug \(or image, also known as a docker image\) is stored on a registry so that both Akkeris and users can inspect the exact bit-by-bit image running on systems. @@ -52,7 +52,7 @@ Every dyno type \(and dyno\) in an application receives the exact same configura Akkeris executes applications by running the commands specified in your formation, on a dyno that's prepared and loaded with the slug \(or image\) and with all the config vars from addons or specified by the user. Think of a dyno as a light weight virtualized unix container that contains your application running in its file system. The actual underlying mechanism that runs applications is [Docker](https://www.docker.com) and [Kubernetes](https://kubernetes.io), however the intent of Akkeris is to not necessarily bind itself to anyone backing technology, so that it may be replaced if necessary. -You have control over the formation that's running via the UI, CLI or [Platform Apps API](/architecture/apps-api/apps-api.md) \(the `PATCH /apps/{app}/formation` end point\). You can start new dynos or change the amount running with the `aka ps:create` and `aka ps:update` command. For example, to change the quantity of web dynos that are automatically created on the first deployment, run: +You have control over the formation that's running via the UI, CLI or [Platform Apps API](/architecture/apps-api/Formations.md) \(the `PATCH /apps/{app}/formation` end point\). You can start new dynos or change the amount running with the `aka ps:create` and `aka ps:update` command. For example, to change the quantity of web dynos that are automatically created on the first deployment, run: ```shell aka ps:update web -q 3 -a appname-space @@ -70,7 +70,7 @@ aka ps -a appname-space web.1380490387-x2395: running 4/4/2018, 1:29:42 PM ``` -Or by fetching the [Platform Apps API](/architecture/apps-api/apps-api.md) end point for dynos \(`GET /apps/{app}/dynos`\). +Or by fetching the [Platform Apps API](/architecture/apps-api/Dynos.md) end point for dynos \(`GET /apps/{app}/dynos`\). ### Providing Safe Spaces for Applications diff --git a/how-to-extend-akkeris.md b/how-to-extend-akkeris.md index 64afa18..babcb38 100644 --- a/how-to-extend-akkeris.md +++ b/how-to-extend-akkeris.md @@ -15,13 +15,13 @@ You can extend Akkeris in a variety of ways to add custom functionality you may * [About Webhooks](/architecture/webhooks.md) * [Webhook Tutorial](/architecture/webhooks.md#getting-started) -* [App API Webhook Reference](/architecture/apps-api/apps-api.md#webhooks) +* [App API Webhook Reference](/architecture/apps-api/Webhooks.md) ## Creating a One-click App * [About One-click Apps](/one-click/creating.md) * [Creating a One-click App](/one-click/creating.md) -* [App-setups Apps API Reference](/architecture/apps-api/apps-api.md#app-setup) +* [App-setups Apps API Reference](/architecture/apps-api/App-Setups.md) ## Building Add-ons @@ -42,7 +42,7 @@ You can extend Akkeris in a variety of ways to add custom functionality you may * [About Pipelines](/architecture/pipelines.md) * [Permitting and Protecting Pipeline Promotions with Status Checks](/architecture/pipelines.md#pipeline-status-checks-beta) -* [Creating A Pipeline Status Check](/architecture/apps-api/apps-api.md#release-statuses) +* [Creating A Pipeline Status Check](/architecture/apps-api/Release-Statuses.md) ## Vault Integrations * Creating Addon Credentials from Vault `todo` diff --git a/lifecycle/maintenance-mode.md b/lifecycle/maintenance-mode.md index e3b1084..2187cda 100644 --- a/lifecycle/maintenance-mode.md +++ b/lifecycle/maintenance-mode.md @@ -18,7 +18,7 @@ Visitors arriving to your app will be shown: ## Usage -You can turn maintenance mode on or off using the CLI or [Platform Apps API](/architecture/apps-api/apps-api.md). To enable maintenance mode, run: +You can turn maintenance mode on or off using the CLI or [Platform Apps API](/architecture/apps-api/Apps.md). To enable maintenance mode, run: ```shell aka maintenance:on -a [appname-space] diff --git a/one-click/creating.md b/one-click/creating.md index ae15a75..eca4fbc 100644 --- a/one-click/creating.md +++ b/one-click/creating.md @@ -17,7 +17,7 @@ You can create one click apps by first creating a blueprint. Generally the best ```shell aka apps:blueprint -a [appname-space] > blueprint.json ``` -You can then modify the blueprint.json file and change any of the parameters as needed. A reference for the app setups blue print can be found in the [App Setups](/architecture/apps-api/apps-api.md#app-setup) section of the Platform Apps API. +You can then modify the blueprint.json file and change any of the parameters as needed. A reference for the app setups blue print can be found in the [App Setups](/architecture/apps-api/App-Setups.md) section of the Platform Apps API. Once your blueprint is to your liking you can optionally add the "name", "description" and "icon" field off the the root of the JSON object (all as strings) to provide more meta information that a user would see when setting up the app. From 194f21e954a25fad6882f63f493862d57b17eb76 Mon Sep 17 00:00:00 2001 From: Sam Beckett Date: Mon, 14 Sep 2020 10:15:33 -0600 Subject: [PATCH 25/27] remove hyphen from log drains/sessions titles --- SUMMARY.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SUMMARY.md b/SUMMARY.md index 85337a5..159b1dd 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -83,8 +83,8 @@ * [Filters](/architecture/apps-api/Filters.md) * [Formations](/architecture/apps-api/Formations.md) * [Invoices](/architecture/apps-api/Invoices.md) - * [Log-Drains](/architecture/apps-api/Log-Drains.md) - * [Log-Sessions](/architecture/apps-api/Log-Sessions.md) + * [Log Drains](/architecture/apps-api/Log-Drains.md) + * [Log Sessions](/architecture/apps-api/Log-Sessions.md) * [Organizations](/architecture/apps-api/Organizations.md) * [Pipelines](/architecture/apps-api/Pipelines.md) * [Plugins](/architecture/apps-api/Plugins.md) From f88e20dd06380d6368b5d2bdedc1213747d9d025 Mon Sep 17 00:00:00 2001 From: Trevor Linton Date: Fri, 25 Sep 2020 10:55:02 -0600 Subject: [PATCH 26/27] Update memcached.md --- addons/memcached.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/memcached.md b/addons/memcached.md index 3b0276a..31e5e49 100644 --- a/addons/memcached.md +++ b/addons/memcached.md @@ -44,6 +44,10 @@ aka addons:create akkeris-memcached:[hobby-dev|standard-0|standard-1||premium-0| Once provisioned the memcached hostname and port are added as the config var `MEMCACHED_URL`. +## In-Cluster vs. Out-of-Cluster + +Standard memcached plans run in an isolated network next to your application. These instances end with the domain `.local`, memcached instances running isolated cannot be connected to outside of the applications attached to them. To administrate these (flushing cache or dumping statistics) see the `memcached` plugin below. When developing locally instead of connecting to the `MEMCACHED_URL` in an apps configuration, run memcached locally through docker by executing `docker run -p 11211:11211 memcached:latest` then set `MEMCACHED_URL=localhost:11211`. + ## Upgrading Memcached plans can be upgraded or downgraded on-demand. During the upgrade the memcached instance and any attached applications will be placed in maintenace mode. From 1f2f5e2af3425c86ada7b8960ffcf5a8e69fdff3 Mon Sep 17 00:00:00 2001 From: julietsime <69860082+julietsime@users.noreply.github.com> Date: Mon, 21 Jun 2021 14:18:18 -0400 Subject: [PATCH 27/27] Update registering-tests.md updated to have correct taas commands --- taas/registering-tests.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/taas/registering-tests.md b/taas/registering-tests.md index f07ef7d..c460f50 100644 --- a/taas/registering-tests.md +++ b/taas/registering-tests.md @@ -45,13 +45,13 @@ During test registration, you will be prompted for a few details: - Specify any environment variables that the test should have Once you have decided on the details of your new test, go ahead and run the test registration command. The CLI will prompt you for the required information. -`$ aka taas:tests:register` +`$ aka taas:register` ## Verifying Test Information Once your test is created, you can verify that your test was registered and all of the details are correct: -`$ aka taas:tests` -`$ aka taas:tests:info testname` +`$ aka taas` +`$ aka taas:info testname` If you need to add additional variables: `$ aka taas:config:set testname KEY=value` @@ -68,7 +68,7 @@ You can also see a list of all possible taas commands: ## Triggering a Test To start running a test: -`$ aka taas:tests:trigger testname` +`$ aka taas:trigger testname` To view logs for a test: `$ aka taas:logs testname`