{"id":13617824,"url":"https://github.com/nokia/CloudFlow","last_synced_at":"2025-04-14T06:35:44.389Z","repository":{"id":21995043,"uuid":"92292272","full_name":"nokia/CloudFlow","owner":"nokia","description":"A workflow visualization tool for OpenStack Mistral (https://github.com/openstack/mistral)","archived":false,"fork":false,"pushed_at":"2023-01-06T01:49:15.000Z","size":3903,"stargazers_count":90,"open_issues_count":41,"forks_count":31,"subscribers_count":11,"default_branch":"master","last_synced_at":"2024-04-13T23:55:33.686Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://yaqluator.com:8000","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nokia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-05-24T12:55:56.000Z","updated_at":"2024-02-16T12:02:45.000Z","dependencies_parsed_at":"2023-01-12T03:46:11.165Z","dependency_job_id":null,"html_url":"https://github.com/nokia/CloudFlow","commit_stats":null,"previous_names":[],"tags_count":35,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nokia%2FCloudFlow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nokia%2FCloudFlow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nokia%2FCloudFlow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nokia%2FCloudFlow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nokia","download_url":"https://codeload.github.com/nokia/CloudFlow/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248836214,"owners_count":21169367,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T20:01:48.683Z","updated_at":"2025-04-14T06:35:44.040Z","avatar_url":"https://github.com/nokia.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# CloudFlow\nA workflow visualization tool for [OpenStack Mistral](https://github.com/openstack/mistral)\n\n## Live Demo\n[See CloudFlow in action](http://yaqluator.com:8000)\n\n## Features\n* Visualize the flow of workflow executions\n* Identify the execution path of a single task in huge workflows\n* Search by any entity ID\n* Identify long-running tasks at a glance\n* Easily distinguish between simple task (an action) and a sub workflow\n  execution\n* Follow tasks with a `retry` and/or `with-items`\n* 1-click to copy task's input/output/publish/params values\n* See complete workflow definition and per task definition YAML\n* And more...\n\n## Table of Contents\n* [Requirements](#requirements)\n* [Installation](#installing-cloudflow-on-the-mistral-machine)\n* [Docker Installation](#docker-installation)\n* [Upgrading](#upgrade-cloudflow)\n* [Authentication](#authentication)\n* [Development and Building](#development)\n\n## Requirements\n\n### Mistral \u003e= Pike\nCloudFlow requires Mistral **Pike** or greater, as we rely on\nnew [runtime_context](https://docs.openstack.org/developer/mistral/developer/webapi/v2.html#tasks)\nadded to Mistral Pike.\n\n| Mistral Version  | CloudFlow Version to use                                        |\n|------------------|-----------------------------------------------------------------|\n| Stein (or newer) | Latest stable                                                   |\n| Pike - Rocky     | [0.6.4](https://github.com/nokia/CloudFlow/releases/tag/v0.6.4) |\n\n    \n## Installing CloudFlow on the Mistral machine\nCloudFlow has no dedicated backend service and passes the API calls to Mistral\nvia Proxy settings.\n\nIn the [`scripts`](scripts/) folder there are 2 configuration files: one for\nwhen using **ngnix** and one for **apache**.\n\nTo run CloudFlow on your Mistral instance:\n1. Go to [releases](https://github.com/nokia/CloudFlow/releases) tab and\n   download the latest release. Extract into a known location (i.e. `/opt`) so\n   you'll have a `/opt/CloudFlow/` folder.\n   * There will be 2 folders in there: `dist` which holds the UI application,\n     and `scripts` for the various web servers options.\n2. Copy the appropriate configuration file to the configuration directory on\n   your Mistral machine:\n   * nginx: usually: `/etc/nginx/conf.d/http/servers/`\n   * Apache2:\n      * Linux: `/etc/apache2/sites-enabled/`.\n      * Mac: `/etc/apache2/other/`. Also make sure that the environment\n        variable APACHE_LOG_DIR is set to the proper value. On Mac computers\n        it's usually `/var/log/apache2`.\n      * Note that for apache2 several modules need to be enabled. See\n           file for more info.\n3. Optionally update the path in the configuration file(s) to point to the\n  `dist` folder (i.e. `/opt/CloudFlow/dist`)\n4. Optionally update the port for which CloudFlow will be served in the browser\n  (currently: 8000)\n5. Optionally enable HTTPS in the configuration file.\n6. Restart nginx/apache.\n7. Open the browser and navigate to `http[s]://\u003cyour_mistral_ip\u003e:8000`.\n\n## Docker Installation\n\nThis image based on multi-stage build. The first layer is used to create a artifacts.\nThe second layer is the nginx alpine image.\n\n### Build docker image\n\n```bash\ndocker build -t cloud-flow .\n```\n\n### Start docker container\n\n* without SSL\n```bash\ndocker run -d --rm --net=host --name cloud-flow cloud-flow\n```\n\n* using SSL\n\nGenerate certificates, for example\n```bash\nmkdir certs\ncd certs\nsudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout nginx.key -out nginx.crt\n```\nRun container\n```bash\ndocker run --rm -d --net host --name cloud-flow \\\n       -v _absolute_path_/CloudFlow/certs:/etc/nginx/ssl:ro -e CF_SSL=ssl cloud-flow\n```\n\n### Environment variables for Docker container\n\n\n|Name|Values|Default|Description|\n|---|---|---|---|\n|CF_PORT|Any number from 1 to 65535|8000|Port of the application|\n|CF_SERVER_NAME|Names, wildcard names, or regular expressions|localhost|[Read more](https://nginx.ru/en/docs/http/server_names.html)|\n|CF_MISTRAL_URL|URL|http://127.0.0.1:8989|URL to the Mistral server|\n|CF_SSL|`ssl` or *empty value*|*empty value*|If the value equals `ssl` then server will use HTTPS connection instead HTTP|\n\n## Upgrade CloudFlow\nWhenever there is an update to CloudFlow, simply download the latest version's .tar.gz\n  and extract it in the same place.\n```bash\nwget -qO- https://github.com/nokia/CloudFlow/releases/download/\u003cversion\u003e/CloudFlow.tar.gz | tar xvz -C /opt\n```\n\n## Authentication\n### OpenID Connect\nCloudFlow supports the [OpenID Connect](http://openid.net/connect/) protocol\n(and was tested against [KeyCloak](http://www.keycloak.org/)).\n\nIf your Mistral requires authentication and uses the OpenID Connect protocol,\ncreate the following `auth.json` file under the `assets/` folder (i.e. `assets/auth.json`):\n\n```json\n{\n  \"_type\": \"openid-connect\",\n  \"issuer\": \"\u003cUrl of the Identity Provider\u003e\",\n  \"loginUrl\": \"\u003cUrl for login endpoint\u003e\",\n  \"logoutUrl\": \"\u003cUrl for logout endpoint, optional\u003e\",\n  \"clientId\": \"\u003cClient Identifier valid at the Authorization Server\u003e\"\n}\n```\n\nYou can obtain all the URLs by examining the output of `https://\u003copenid-server-ip\u003e:\u003cport\u003e/auth/realms/\u003crealm\u003e/.well-known/openid-configuration`\n\n#### Cross Domain Access Token Sharing\n\nRedirecting from different applications to the CloudFlow. \nCloudFlow supports reading `access_token` form authenticated application opened in another tab with the same browser without passing the `access_token` in the URL. \n\nThe authenticated application should allow that by adding the following: \n\nAdding [cross-domain-storage](https://github.com/MatthewLarner/cross-domain-storage) dependency in the host application: \n ```Javascript\n import createHost from 'cross-domain-storage/host';\n createHost([{\n   origin: 'CloudFlow URL',\n   allowedMethods: ['get']\n  }]);\n```\n\n### No Authentication \nIf you want to work w/o authentication, make sure your Mistral does not require authentication to perform REST API\nrequests, by setting the following in `/etc/mistral/mistral.conf`:\n\n```\n[pecan]\nauth_enable=False\n```\n\nAlso, make sure there is **no** `auth.json` file under the `assets/` directory.\n\n## Development\n* Clone this repo\n* `yarn install` (preferred) or `npm install`\n* Edit [`proxy.conf.json`](proxy.conf.json) to point your Mistral instance.\n* Edit the `auth.json` file (if needed)\n* `npm run start`\n\n## Building\n* Clone this repo\n* `yarn install` (preferred) or `npm install`\n* `npm run build`\n* The artifacts will be stored in `dist` folder.\n\n\n![CloudFlow](docs/main.png \"CloudFlow in action\")\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnokia%2FCloudFlow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnokia%2FCloudFlow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnokia%2FCloudFlow/lists"}