Compare commits

...

953 Commits

Author SHA1 Message Date
Aleksandr Melnikov
03f8f47664 Merge pull request #642 from Vafilor/fix/jupyterlab.migrations
feat: added convenience method to update workspace template manifest
2020-10-06 10:47:18 -07:00
Andrey Melnikov
c85496d216 update: added method specifically to update the manifest of a workspace template and modified recent migration to use it.
This fixes an issue where the jupyterlab migration wiped out the old description.
2020-10-06 10:28:03 -07:00
Rush Tehrani
5f6415548d Merge pull request #640 from aleksandrmelnikov/fix/core.637-dedicated.nodes.via.hostport
fix: Fixing issues with using hostPort. Removed prior logic that still relied on running nodes.
2020-10-05 15:40:26 -07:00
Aleksandr Melnikov
c641c17a8c Updating code that generates an extra container for a workspace.
- Renamed function to make it clearer what it's doing with the extra container
- Added documentation for the function
- Removed listing nodes code, since we only care if the workspace has
a nodeSelector set.
2020-10-05 14:17:00 -07:00
Aleksandr Melnikov
83a2543b13 Updating function name to reflect what it's doing. 2020-10-05 14:04:32 -07:00
Aleksandr Melnikov
e8dae0f2e9 Since we're no longer relying on running nodes, we don't need logic
relating to them.
- We can just check if a nodeSelector is set on the template.
2020-10-05 13:59:14 -07:00
Rush Tehrani
b85bf4d688 Merge pull request #638 from aleksandrmelnikov/fix/core.637-dedicated.nodes.via.hostport
fix: Replace resource requests and limits with hostPort, as a means of grabbing dedicated nodes.
2020-10-05 12:17:45 -07:00
Aleksandr Melnikov
7fe0ab2654 Tweaking names so it's more clear why they are there. 2020-10-05 11:51:04 -07:00
Aleksandr Melnikov
dfa6eb2fe6 Removing function that's no longer used. 2020-10-05 11:46:19 -07:00
Aleksandr Melnikov
cc2c51ace5 Removing resource requests and limits.
- Using hostPort on the node as a way to require dedicated nodes
for workspaces and workflows.
2020-10-05 11:46:01 -07:00
Andrey Melnikov
897462ede7 Merge pull request #636 from aleksandrmelnikov/fix/if.no.running.node.don't.try.to.set.resources
fix: Do not try to calculate resource requests and limits if the node is not running.
2020-10-02 16:25:04 -07:00
Aleksandr Melnikov
4e3c24fd89 Merge pull request #630 from Vafilor/fix/workspace.start.resource.requirements
fix: added resource requirements to start workspace
2020-10-02 16:17:15 -07:00
Aleksandr Melnikov
276e105f20 Adding documentation for function call.
- Refactoring the parameter names so they are actually usefully named.
2020-10-02 15:53:29 -07:00
Aleksandr Melnikov
656026ac84 Refactored workflow_execution resource calculation to use the new
function, to put the logic into the same place.
2020-10-02 13:08:48 -07:00
Aleksandr Melnikov
95bea11e43 Refactored the resource calculation piece into it's own function.
Added code logic to check the cpu and memory generated by the node.
- If they are empty, then skip trying to add an extra container
for workspace.
2020-10-02 13:08:29 -07:00
Andrey Melnikov
c6f65510d8 Merge pull request #635 from Vafilor/fix/remove.dependabot.from.release.notes
fix: remove dependabot[bot] from release notes
2020-10-01 22:55:31 -07:00
Andrey Melnikov
d6e279dde5 fix: remove dependabot[bot] from release notes 2020-10-01 22:52:08 -07:00
Andrey Melnikov
e99b0e943d Merge pull request #632 from onepanelio/fix/tags
fix: build docker image on tag push
2020-10-01 22:44:58 -07:00
Andrey Melnikov
22a7c31f1d fix: testing tag push 2020-10-01 22:31:26 -07:00
Andrey Melnikov
b6c0f24170 fix: added resource requirements to start workspace 2020-10-01 21:21:57 -07:00
Andrey Melnikov
9c04ee066d Merge pull request #629 from Vafilor/fix/migrations
fix: issue where more than one namespace caused migration issues
2020-10-01 13:41:35 -07:00
Andrey Melnikov
29c3e808e1 fix: issue where more than one namespace caused migration issues.
The `version` of a WorkspaceTemplate is set in an iteration, so we need to move the declaration inside the loop so the version is always reset to 0.
2020-10-01 13:29:50 -07:00
Andrey Melnikov
3ded40a477 Merge pull request #628 from Vafilor/feat/update.cvat
feat: update cvat workspace template
2020-10-01 10:23:49 -07:00
Andrey Melnikov
559d52b033 chore: docs for migration 2020-10-01 10:09:11 -07:00
Andrey Melnikov
0ea527ec0a feat: update cvat 2020-10-01 10:05:46 -07:00
Andrey Melnikov
1a67e07d20 Merge pull request #626 from Vafilor/fix/unit.tests
fix: unit tests
2020-09-30 13:01:36 -07:00
Andrey Melnikov
49b9bc4f93 fix: unit tests 2020-09-30 12:54:35 -07:00
Andrey Melnikov
4def4aa529 Merge pull request #625 from Vafilor/chore/wording.updates
chore: update name and description for vscode template so it fits in ui
2020-09-30 12:34:14 -07:00
Andrey Melnikov
5d114e1d27 chore: update name and description for vscode template 2020-09-30 12:29:58 -07:00
Andrey Melnikov
1ed3b3e740 Merge pull request #624 from Vafilor/feat/onepanelio.299-templates.filtering
feat: added workspace templates filtering to API
2020-09-30 12:13:16 -07:00
Andrey Melnikov
571de0b40e chore: Uid -> UID per code conventions 2020-09-30 12:10:44 -07:00
Andrey Melnikov
463a8eea60 feat: added workspace templates filtering 2020-09-30 11:58:42 -07:00
Andrey Melnikov
5105ad373a Merge pull request #621 from aleksandrmelnikov/feat/core.609-add.vscode.template
feat: Adding migration for VSCode to be added as a workspace template.
2020-09-30 11:57:51 -07:00
Andrey Melnikov
afa675dc28 Merge branch 'master' into feat/core.609-add.vscode.template 2020-09-30 11:54:21 -07:00
Andrey Melnikov
335301396e Merge pull request #622 from aleksandrmelnikov/feat/update.jupyterlab
feat: Adding migration to update jupyterlab workspace to include `onepanel-sdk`
2020-09-30 11:52:45 -07:00
Aleksandr Melnikov
995b1171e6 Per feedback, returning err instead of logging. 2020-09-30 11:50:51 -07:00
Aleksandr Melnikov
d497058f20 Removing code that will prevent down migration from running,
per feedback.
2020-09-30 11:49:54 -07:00
Aleksandr Melnikov
63bcd60d84 Adding migration to update jupyterlab workspace to include onepanel-sdk. 2020-09-29 15:51:57 -07:00
Aleksandr Melnikov
ecf0a82a62 Adding migration for VSCode to be added as a workspace template. 2020-09-29 15:19:53 -07:00
Andrey Melnikov
f31c998349 Merge pull request #619 from Vafilor/feat/onepanelio.597-pr.updates
feat: pull request template updates
2020-09-29 12:35:09 -07:00
Andrey Melnikov
b6e5626a19 update: split checklist into optional and required parts 2020-09-29 12:21:54 -07:00
Andrey Melnikov
77ca0939e4 update: added checklist to PR to help remind people to include unit tests, documentation, and the license of the project. 2020-09-29 12:20:58 -07:00
Andrey Melnikov
83a4238153 Merge pull request #617 from Vafilor/feat/workspace.listing
feat: workspace list filtering, sorting and statistics
2020-09-29 11:20:46 -07:00
Andrey Melnikov
77716ba56b chore: updated method docs 2020-09-29 11:17:50 -07:00
Andrey Melnikov
541747d232 fix: issue where workspace templates were not accessing correct task for generating the template 2020-09-29 11:04:12 -07:00
Andrey Melnikov
0956afdabe update: workspace listing endpoint to include a statistics report endpoint and allow filtering by phase. 2020-09-28 15:57:31 -07:00
Andrey Melnikov
8b4a70d958 feat: added support for sorting and filtering workspaces.
* Also added a LabelFilter interface
2020-09-28 12:09:16 -07:00
Rush Tehrani
91b97d9243 Merge pull request #611 from aleksandrmelnikov/feat/core.607-revert.to.resource.limits.requests
feat: Undo pod anti-affinity for scheduling nodes, use resource requests instead.
2020-09-25 14:02:02 -07:00
Aleksandr Melnikov
be62f41e20 Error should be the last type when returning multiple items. 2020-09-25 13:53:22 -07:00
Aleksandr Melnikov
5fa34f7870 Reducing code duplication with a function. 2020-09-25 12:32:56 -07:00
Aleksandr Melnikov
65f49113a8 Adding code to set the proper resource request (and limits, in case of gpu) when
a workspace is updated.
2020-09-25 12:12:13 -07:00
Andrey Melnikov
8a874ec3f2 Merge pull request #615 from Vafilor/fix/onepanelio.core.613-labels.selector
fix: issue where some workflow templates don't show up
2020-09-25 11:56:11 -07:00
Andrey Melnikov
ada6cfd413 fix: issue where no labels filter still applied a filter for workflow templates. 2020-09-25 11:51:16 -07:00
Aleksandr Melnikov
e7cef240c4 Fixing code that assigns a GPU limit for a workflow.
- This GPU assignment works for cron created workflows as well.
2020-09-25 10:38:21 -07:00
Rush Tehrani
1b7e96cab9 Merge pull request #610 from Vafilor/feat/onepanelio.core.590-workflow.columns
feat: workflow executions include workflow template uid/name
2020-09-25 10:00:58 -07:00
Aleksandr Melnikov
dca6db842c Adding back injectContainerResourceQuotas for workflows.
- This time, the node capacity is grabbed from running nodes instead
of information from configmap (which is grabbed from params.yaml)
- Added support for two different instance-type keys.
Note that GPU support does not work at this time.
- There is no ResourceName "nvidia.com/gpu" in library code, so it throws
a deref nil error.
2020-09-24 17:28:54 -07:00
Andrey Melnikov
f7770618ca update: added parameter to control listing of system workflows 2020-09-24 12:32:35 -07:00
Aleksandr Melnikov
bafd371e11 Moved the code for generating the resources request for a workspace, into
it's own function.
2020-09-24 11:54:17 -07:00
Aleksandr Melnikov
274a1c2e84 Putting back the resource requests extraContainer and supporting logic for workspaces.
- Note that 90% of capacity that can be allocated, is used.
2020-09-24 11:04:47 -07:00
Aleksandr Melnikov
77812419d2 Removing pod anti-affinity injection from workflows.
- Workspaces end up calling workflows. This has to be removed
as part of switching back to resource requests.
2020-09-24 11:03:37 -07:00
Andrey Melnikov
6fa123b122 feat: added explicit nulls sorting for workflow execution columns. Idea is to treat null as an empty/zero value. So in asc, it is first. 2020-09-23 19:13:53 -07:00
Andrey Melnikov
b1d0ab1d59 update: added workflow template name and uid to select of workflow executions 2020-09-23 16:20:38 -07:00
Andrey Melnikov
0d5cd95ccb Merge pull request #602 from onepanelio/fix/onepanelio.core.601-workflowtemplate.bug
fix: workflow template labels persistence
2020-09-22 11:46:29 -07:00
Andrey Melnikov
9d7172c920 fix: issue where workflow template labels did not persist to the version upon creation 2020-09-22 11:38:49 -07:00
Aleksandr Melnikov
d04c17eee1 Merge pull request #600 from onepanelio/feat/onepanelio.core.599-jupyter.lab.description
feat: add description to jupyterlab workspace template
2020-09-22 11:11:26 -07:00
Andrey Melnikov
78269c2b2c fix: double comment 2020-09-22 11:08:59 -07:00
Andrey Melnikov
3e17318512 chore: documentation for migration 2020-09-22 10:54:34 -07:00
Andrey Melnikov
011fcc590e feat: add description to jupyterlab workspace template 2020-09-22 10:48:01 -07:00
Rush Tehrani
c45231c106 Merge pull request #585 from aleksandrmelnikov/feat/core.583-workflows.use.pod.anti.affinity
feat: Updated Workflows, and Cron created Workflows, to ensure they get their own pod by using Pod AntiAffinity. This replaces resource limits and/or requests.
2020-09-21 16:20:13 -07:00
Aleksandr Melnikov
9ec45e4f34 Formatting feedback and fix. 2020-09-21 16:12:53 -07:00
Aleksandr Melnikov
48e2050e97 Adjusting code so that we don't need the nodePoolLabel to figure
out the selected Node.
- The nodePoolLabel can change with the params.yaml and different
k8s versions.
2020-09-18 16:34:07 -07:00
Andrey Melnikov
478b9a1c76 Merge pull request #589 from onepanelio/feat/onepanelio.core.469-namespace.dashboard
feat: workflow filtering and sorting updates
2020-09-18 16:02:53 -07:00
Aleksandr Melnikov
d42f88e04c Adding flag to decide when to add pod affinity.
- This avoids adding it every time the loop finds a nodeSelector that's
not nil in a template
2020-09-18 15:53:00 -07:00
Aleksandr Melnikov
6dd7c0ac70 Adjusting the pod anti-affinity per feedback.
- The pod anti-affinity should be set for a template that has a nodeSelector
value (not nil).
- If the template does not have a nodeSelector, we do nothing.
2020-09-18 15:51:48 -07:00
Aleksandr Melnikov
31076bc70d Adding systemConfig to function.
- Also added error return
2020-09-18 15:50:28 -07:00
Andrey Melnikov
7bbb57ca09 update: SortOrder -> Order since package name is Sort. 2020-09-18 14:25:11 -07:00
Andrey Melnikov
7b404ff0b6 fix: issue where workflow statistics report may have null for last executed. 2020-09-18 12:47:24 -07:00
Aleksandr Melnikov
aaf20b4ab6 Updating code to use the returned wf. 2020-09-17 17:43:40 -07:00
Aleksandr Melnikov
3e87376feb Updating cron_workflow to actually ensure a singular node for
the cron created workflows.
2020-09-17 17:42:49 -07:00
Aleksandr Melnikov
7bc1056bc6 Updating function to return the updated workflow. 2020-09-17 17:42:23 -07:00
Aleksandr Melnikov
880e8ba082 Removing prior code that injected resource requests and limits
to workflows.
2020-09-17 17:08:06 -07:00
Aleksandr Melnikov
ec634b66ca Adding function to ensure a workflow gets a dedicated node for all the
templates it executes.
- Note that workflows executed by cron are also affected.
2020-09-17 17:06:20 -07:00
Rush Tehrani
15fc40a3e9 Merge pull request #582 from aleksandrmelnikov/feat/core.581-pod.anti.affinity.to.schedule
feat: Ensure workspaces get a node to themselves with pod anti-affinity.
2020-09-17 15:02:52 -07:00
Rush Tehrani
96747f1dc0 Merge pull request #584 from rushtehrani/master
docs: Additional quick start videos
2020-09-17 14:58:07 -07:00
Rush Tehrani
b7395a1ffa Add quick start videos 2020-09-17 14:54:16 -07:00
Rush Tehrani
a5f34b4f3b Update README.md 2020-09-17 14:53:39 -07:00
Aleksandr Melnikov
a28b5101fd Renaming import alias per feedback. 2020-09-17 14:53:09 -07:00
Aleksandr Melnikov
688302c58e Adding comments per Codacy feedback. 2020-09-17 10:08:39 -07:00
Aleksandr Melnikov
49e19eb135 Merge branch 'master' into feat/core.581-pod.anti.affinity.to.schedule 2020-09-17 09:21:04 -07:00
Andrey Melnikov
0a676dff6f Merge branch 'feat/onepanelio.core.469-namespace.dashboard' of github.com:onepanelio/core into feat/onepanelio.core.469-namespace.dashboard 2020-09-16 19:38:03 -07:00
Andrey Melnikov
d524c3cb66 update: fixed issue where GetWorkflowExecutionStatisticsForNamespace included workspace workflows (is_system = true). Added support for filtering by phase. 2020-09-16 19:37:10 -07:00
Andrey Melnikov
a9953683a9 feat: added endpoint to get the workflow execution statistics for a namespace 2020-09-16 19:37:10 -07:00
Andrey Melnikov
d4d4884e5b feat: initial pagination updates 2020-09-16 18:26:51 -07:00
Andrey Melnikov
d29290945c update: fixed issue where GetWorkflowExecutionStatisticsForNamespace included workspace workflows (is_system = true). Added support for filtering by phase. 2020-09-16 18:18:25 -07:00
Aleksandr Melnikov
3343f2f74b Changing the affinity label key per feedback. 2020-09-16 17:26:00 -07:00
Aleksandr Melnikov
837291a52a Implementing pod antiAffinity, so that a node will have only one
workspace scheduled on it.
2020-09-16 17:23:50 -07:00
Andrey Melnikov
122593fdbe feat: added endpoint to get the workflow execution statistics for a namespace 2020-09-16 15:19:47 -07:00
Andrey Melnikov
cd40edb16a feat: initial pagination updates 2020-09-16 11:28:32 -07:00
Rush Tehrani
b27ca42e42 Merge pull request #579 from onepanelio/revert-readme
Revert FAQ change
2020-09-15 17:26:13 -07:00
Rush Tehrani
3af4273541 Revert FAQ change 2020-09-15 17:25:57 -07:00
Donald Scott
197fb06f4c Added an FAQ skeleton for everyone's review and updates
Please add, remove, update, FAQs...
2020-09-15 17:11:59 -07:00
Aleksandr Melnikov
0b6a6e0af3 Fixing the search location of the nodeSelector. 2020-09-15 16:57:50 -07:00
Aleksandr Melnikov
ba3c2e22a9 Adding support for amd gpus. 2020-09-15 16:57:35 -07:00
Andrey Melnikov
5955876c49 Merge pull request #576 from onepanelio/fix/unit.tests
fix: unit tests
2020-09-15 14:02:46 -07:00
Andrey Melnikov
767643a51a fix: issue where omitted visibility is now public and not empty for manifest parameters 2020-09-15 13:59:05 -07:00
Andrey Melnikov
5100efdd2d fix: issue where labels table was attempted to be removed even though it no longer exists 2020-09-15 13:58:42 -07:00
Andrey Melnikov
a5e358ea61 Merge pull request #575 from onepanelio/test/github.actions
Test/GitHub.actions
2020-09-15 13:40:47 -07:00
Andrey Melnikov
a3ef3d410a fix: push dev image only on master branch 2020-09-15 13:35:53 -07:00
Andrey Melnikov
c270283c42 fix: build docker image depends on testing 2020-09-15 13:26:07 -07:00
Aleksandr Melnikov
2093b565eb Adding code to pull the capacity that can be allocated for the selected
node.
We then request 90% of this capacity, so the node schedules properly.

Gotcha: Note that this requires the node to be already running.
If there are no nodes running and have to be scaled up, our code
cannot get the capacity information for that node at this time.
2020-09-15 12:54:13 -07:00
Andrey Melnikov
0b4b5c8050 test: on all push 2020-09-15 12:31:00 -07:00
Andrey Melnikov
1781e2774d test: unit test then docker image build 2020-09-15 12:28:47 -07:00
Rush Tehrani
d87e6e49db Merge pull request #574 from rushtehrani/master
docs: Update build status badge
2020-09-14 19:35:08 -07:00
Rush Tehrani
a1c58477bd Update build status badge 2020-09-14 19:22:40 -07:00
Andrey Melnikov
f90b45437a Merge pull request #573 from onepanelio/fix/github.actions.dev
fix: for master push, release a new dev image only
2020-09-14 17:50:55 -07:00
Andrey Melnikov
85fb89862b fix: for master push, release a new dev image only 2020-09-14 17:50:17 -07:00
Andrey Melnikov
c30f48811d Merge pull request #569 from onepanelio/onepanelio/core.365-retry
feat: added retry last action support for workspaces
2020-09-14 15:46:33 -07:00
Andrey Melnikov
0170252659 fix: api version to 0.13.0 2020-09-14 15:41:06 -07:00
Rush Tehrani
498eed6aca Merge pull request #570 from rushtehrani/master
docs: Update README
2020-09-11 17:46:15 -07:00
Rush Tehrani
e01842c922 Update README.md 2020-09-11 16:05:48 -07:00
Andrey Melnikov
8f12351761 clean: removed debugging comment 2020-09-11 13:11:19 -07:00
Rush Tehrani
a22bdcc6f5 Update README.md 2020-09-11 12:24:05 -07:00
Rush Tehrani
766815da1f Update README.md 2020-09-11 12:23:08 -07:00
Aleksandr Melnikov
a84d74d256 Fixing the constant used for injecting the extra container. 2020-09-10 22:50:37 -07:00
Aleksandr Melnikov
6e6b70aeb7 Adding more constants. 2020-09-10 22:50:25 -07:00
Aleksandr Melnikov
a78138c562 Adding nvidia resource example.
- Note that the request and limit are both necessary.
2020-09-10 15:53:28 -07:00
Aleksandr Melnikov
6167d5ef65 Using a constant instead of a hard-coded string. 2020-09-10 15:53:05 -07:00
Aleksandr Melnikov
ce52f9914e Adding constants for WorkspaceTemplate. 2020-09-10 15:52:54 -07:00
Aleksandr Melnikov
ed54cb9a3f Adding proof of concept resource request to Workspace template.
- An extra container is added to a given workspace.
This container has the resource requests assigned to it.

Note that the container sleeps forever in a while-loop, so
that the workspace notes it's ready.
- If the container does not sleep, it goes into a crash loop of restarting.
The container exits successfully, and gets restarted.
2020-09-10 13:48:31 -07:00
Andrey Melnikov
fc7ef5ffac feat: added retry last action support for workspaces and new failure states 2020-09-10 12:30:18 -07:00
Andrey Melnikov
1c16a5e743 Merge pull request #568 from onepanelio/fix/github.actions.v2
Merge pull request #565 from onepanelio/fix/github.actions
2020-09-08 14:19:55 -07:00
Andrey Melnikov
9b25fd4190 Merge pull request #565 from onepanelio/fix/github.actions
fix: changed workflows since master branch is now development
2020-09-08 14:18:13 -07:00
Rush Tehrani
076422e8ac Merge pull request #567 from onepanelio/dev
chore: dev > master
2020-09-08 14:11:08 -07:00
Andrey Melnikov
5464dc71ac Merge pull request #566 from onepanelio/revert-565-fix/github.actions
Revert "fix: changed workflows since master branch is now development"
2020-09-08 14:05:02 -07:00
Andrey Melnikov
3a0af4c727 Revert "fix: changed workflows since master branch is now development" 2020-09-08 14:04:28 -07:00
Andrey Melnikov
f4879a4228 Merge pull request #565 from onepanelio/fix/github.actions
fix: changed workflows since master branch is now development
2020-09-08 14:04:04 -07:00
Andrey Melnikov
4135b86928 update: changed workflows since master branch is now development 2020-09-08 13:58:37 -07:00
rushtehrani
ac51146dbc add more features to README 2020-09-08 11:12:26 -07:00
rushtehrani
575dbc1507 add features 2020-09-08 11:12:08 -07:00
rushtehrani
8810b2c226 update README 2020-09-08 11:11:40 -07:00
rushtehrani
95cc0c3622 update README and build name 2020-09-08 11:10:57 -07:00
rushtehrani
48a68083dc chore: move util/sql to pkg/util/sql 2020-09-08 11:10:05 -07:00
Aleksandr Melnikov
029469e031 Changing the secret "key" value.
- Otherwise, the workflow can't get access to GCS bucket.
2020-09-08 11:10:05 -07:00
Andrey Melnikov
c2d665ac8b feat: upgraded cvat template with new filesyncer changes 2020-09-08 11:10:05 -07:00
Rush Tehrani
0fff409d0f Merge pull request #563 from onepanelio/docs/update-readme
docs: Update README
2020-09-08 11:07:18 -07:00
rushtehrani
abf301093e Update some README sections 2020-09-07 15:02:13 -07:00
rushtehrani
91b79a1d33 Add note about CPU/GPU nodes to README 2020-09-05 19:59:35 -07:00
rushtehrani
c92781b5c8 Add note about CPU/GPU nodes to README 2020-09-04 15:50:21 -07:00
Rush Tehrani
858c299604 Merge pull request #559 from onepanelio/docs/update-readme
docs: Update README
2020-09-04 12:26:55 -07:00
rushtehrani
94a91fc543 fix typo and grammar 2020-09-04 12:21:50 -07:00
Rush Tehrani
18a7c3fa99 Merge pull request #562 from onepanelio/dsdon10-patch-2
docs: Update README.md
2020-09-04 12:01:58 -07:00
Donald Scott
06fe267366 Update README.md 2020-09-04 11:59:53 -07:00
Rush Tehrani
35e4d1fc5b Merge pull request #561 from inohmonton99/docs/update-readme
docs: Update README.md
2020-09-04 11:57:14 -07:00
Rush Tehrani
b54e464c4a Merge branch 'docs/update-readme' into docs/update-readme 2020-09-04 11:57:01 -07:00
Inoh Francis Monton
735baac10d Update README.md 2020-09-05 02:54:38 +08:00
Rush Tehrani
edd1d474b1 Merge pull request #560 from onepanelio/dsdon10-patch-2
docs: Update README.md
2020-09-04 11:53:07 -07:00
Donald Scott
150da5654b Update README.md 2020-09-04 11:51:29 -07:00
Donald Scott
ee67c8713b Update README.md 2020-09-04 11:47:20 -07:00
Rush Tehrani
4a16b4e031 Update README.md 2020-09-04 11:46:14 -07:00
Savan Visalpara
0e3626b25a update text in README 2020-09-04 13:29:25 -05:00
rushtehrani
597a03ffc2 fix README typo 2020-09-04 10:58:02 -07:00
rushtehrani
88595d6b4c add additional sections to README 2020-09-04 10:37:44 -07:00
rushtehrani
f1bbd0e884 update template engine text in README 2020-09-03 16:23:51 -07:00
rushtehrani
4ee679cf9f update README 2020-09-03 15:49:58 -07:00
Rush Tehrani
26b6e045de Merge pull request #557 from onepanelio/docs/update-readme
docs: Update README
2020-09-02 11:56:03 -07:00
rushtehrani
4a3a754585 update README 2020-09-02 11:50:40 -07:00
Rush Tehrani
4543c84170 Merge pull request #556 from onepanelio/docs/update-readme
docs: Update README
2020-09-02 11:45:10 -07:00
rushtehrani
b2a70c46d3 fix md table 2020-09-02 11:35:39 -07:00
rushtehrani
3ede228aa9 fix typos 2020-09-02 11:20:56 -07:00
rushtehrani
4a67aa103f update community section 2020-09-02 11:18:18 -07:00
rushtehrani
4129466236 fix typo 2020-09-01 19:58:29 -07:00
rushtehrani
79b3ed6a49 update contributing section 2020-09-01 19:40:19 -07:00
rushtehrani
853c50dea2 add note about TensorBoard 2020-09-01 16:46:43 -07:00
rushtehrani
f23aa928d8 add more features to README 2020-09-01 16:38:54 -07:00
rushtehrani
a1872b8554 add features 2020-09-01 12:36:55 -07:00
Rush Tehrani
99c42034b7 Merge pull request #520 from onepanelio/chore/move-sql-util
chore: move util/sql to pkg/util/sql
2020-09-01 08:29:51 -07:00
Rush Tehrani
5e5f6bd51b Merge pull request #548 from onepanelio/fix/workflows.fail.using.gcs
fix: Updating code that injects the location of the serviceAccountToken if Google Cloud Storage is used.
2020-09-01 08:29:10 -07:00
rushtehrani
a33c18c479 update README 2020-08-31 17:10:06 -07:00
rushtehrani
e882d4270f update README and build name 2020-08-31 15:48:42 -07:00
Rush Tehrani
86fc90cd6b Merge pull request #550 from onepanelio/feat/migraitons.updates.dev
feat: upgraded cvat template with new filesyncer changes
2020-08-26 19:17:49 -07:00
Andrey Melnikov
4a93177b5c feat: upgraded cvat template with new filesyncer changes 2020-08-26 19:08:48 -07:00
Aleksandr Melnikov
7239e6620b Changing the secret "key" value.
- Otherwise, the workflow can't get access to GCS bucket.
2020-08-26 13:50:47 -07:00
Andrey Melnikov
cbecaf6fa1 Merge pull request #546 from onepanelio/dev
feat: update master with latest release changes 0.12.0
2020-08-25 16:33:45 -07:00
Rush Tehrani
de7f060c81 Merge pull request #537 from onepanelio/feat/core.415-jupyter.lab.workspace
feat: Added migration for new Jupyterlab Workspace, 1.0.1
2020-08-25 16:30:07 -07:00
Rush Tehrani
c723a3270f Remove TensorBoard, it can be run in the notebook 2020-08-25 16:29:38 -07:00
Rush Tehrani
24bb7cb0a5 Merge pull request #545 from onepanelio/feat/cvat.update
fix: cvat to 0.12.0_cvat.1.0.0
2020-08-25 15:56:56 -07:00
Andrey Melnikov
a51d4b662e update: documentation 2020-08-25 15:49:04 -07:00
Andrey Melnikov
6e72b550b1 update: cvat to 0.12.0_cvat.1.0.0 2020-08-25 15:47:41 -07:00
Aleksandr Melnikov
1f95b87699 Using a fixed image. 2020-08-25 15:36:09 -07:00
Rush Tehrani
8258c5f19b Merge pull request #544 from onepanelio/fix/fix.regression
fix: Fixing code that was removed during a merge and caused a regression.
2020-08-25 15:19:10 -07:00
Aleksandr Melnikov
e61341c50a Fixing merge removed code. 2020-08-25 15:13:02 -07:00
Rush Tehrani
8c0a763404 Merge pull request #542 from onepanelio/fix/update.migrations.to.support.more.than.s3
fix: Adding support for different bucket storages in the db migrations
2020-08-25 14:45:20 -07:00
Aleksandr Melnikov
76bc226a2e Merge branch 'dev' into fix/update.migrations.to.support.more.than.s3 2020-08-25 14:25:06 -07:00
Andrey Melnikov
e1dd4b8ed1 Merge pull request #543 from onepanelio/fix/migrations.namespaces
fix: issue where migrations crashed with multiple namespaces
2020-08-25 12:50:00 -07:00
Aleksandr Melnikov
1e3b9ca278 Merge branch 'dev' into feat/core.415-jupyter.lab.workspace 2020-08-25 12:46:42 -07:00
Andrey Melnikov
cde5b54830 fix: issue where workspace templates were changed during update, resulting in crash if more than one namespace attempted updates. 2020-08-25 12:45:11 -07:00
Aleksandr Melnikov
d2adb109e1 Adding comment for function. 2020-08-25 11:32:33 -07:00
Aleksandr Melnikov
6eac7f2c74 Adding support for different bucket storages.
- Updating various migrations
- Adding helper function
2020-08-25 10:55:43 -07:00
Andrey Melnikov
9e4eb59cec Merge pull request #538 from onepanelio/feat/update.migrations
feat: updated migrations for cvat, tf od training, maskrcnn
2020-08-24 11:43:10 -07:00
Andrey Melnikov
0ccd871e54 update: templates 2020-08-24 11:08:20 -07:00
Andrey Melnikov
4bb205257a fix: tf-object detection training template 2020-08-24 10:46:52 -07:00
Andrey Melnikov
bbbf1c0d6a chore: docs for latest migrations 2020-08-24 10:29:26 -07:00
Andrey Melnikov
f9b23a7d2a feat: updated migrations for cvat, tf object detection training, maskrcnn 2020-08-24 10:24:56 -07:00
Rush Tehrani
53c88c8390 Fix postExecutionWorkflow 2020-08-24 10:22:24 -07:00
Aleksandr Melnikov
b7e4281eeb Adding migration for new jupyterlab workspace. 2020-08-21 16:46:19 -07:00
Andrey Melnikov
f533ce01b3 Merge pull request #527 from onepanelio/fix/permissions.messages
feat: permissions issues are now more detailed in API responses
2020-08-21 12:54:03 -07:00
Andrey Melnikov
abba7b5476 Merge pull request #530 from onepanelio/fix/migration.template
fix: issue where migration crashed
2020-08-20 13:21:07 -07:00
Andrey Melnikov
96861e19d3 fix: issue where migration crashed because a workflow template did not yet exist 2020-08-20 12:56:52 -07:00
Aleksandr Melnikov
f797e93821 Merge pull request #528 from onepanelio/fix/tfod-workflow-name
fix: Update TF object detection workflow name
2020-08-19 12:44:50 -07:00
Rush Tehrani
e5586fcf76 fix: Update TF object detection workflow name 2020-08-19 12:38:01 -07:00
Andrey Melnikov
93d1b4a2c0 update: permissions issues are now more detailed 2020-08-19 11:00:40 -07:00
Andrey Melnikov
df1421c6c4 Merge pull request #524 from onepanelio/fix/workspace.core.ip
fix: extra import
2020-08-17 16:25:14 -07:00
Andrey Melnikov
cfbd92b65f fix: extra import 2020-08-17 16:22:23 -07:00
Rush Tehrani
bd5bea5f3a Merge pull request #523 from onepanelio/fix/workspace.core.ip
fix: update core pod host to use name instead of static value
2020-08-17 16:17:49 -07:00
Andrey Melnikov
5d3345ded2 update: removed port since default is 80 2020-08-17 16:17:10 -07:00
Andrey Melnikov
0274785f72 fix: removed port environment variable as it is no longer needed since host is not using an environment variable 2020-08-17 16:14:30 -07:00
Andrey Melnikov
bcec3c13fd fix: update core pod host to use string instead of environment variable which evaluates to a static ip 2020-08-17 16:07:47 -07:00
rushtehrani
62b3e64df5 chore: move util/sql to pkg/util/sql 2020-08-17 10:09:24 -07:00
Andrey Melnikov
7c6708849f Merge pull request #517 from onepanelio/fix/tfod-template
fix: Update TFOD migration
2020-08-17 10:02:32 -07:00
Rush Tehrani
811f86633a Remove num of classes hint as that is in the docs 2020-08-15 17:31:18 -07:00
Rush Tehrani
4ed14f9baf Update TFOD migration 2020-08-15 16:57:51 -07:00
Andrey Melnikov
c0ad80a185 Merge pull request #514 from onepanelio/fix/migrations.issues
fix: migrations to include latest cvat image and descriptions
2020-08-14 16:41:50 -07:00
Andrey Melnikov
9e694f1c34 chore: documentation for migrations 2020-08-14 16:38:02 -07:00
Andrey Melnikov
4e92586024 update: migrations to include latest cvat and add descriptions 2020-08-14 16:30:57 -07:00
Andrey Melnikov
b62271ddba fix: migrations missing labels 2020-08-14 15:52:29 -07:00
Andrey Melnikov
d1a119b6de fix: issue with migration crashing 2020-08-14 15:43:07 -07:00
Andrey Melnikov
5a66ef2673 Merge pull request #500 from onepanelio/feat/onepanelio.core.386-migrations.update
feat: Update migrations for maskRCNN, tf od, and cvat
2020-08-14 14:36:21 -07:00
Andrey Melnikov
eabd391180 update: api to 0.12.0-rc.0 2020-08-14 14:35:36 -07:00
Andrey Melnikov
0736c92804 Merge branch 'dev' into feat/onepanelio.core.386-migrations.update 2020-08-14 14:34:20 -07:00
Andrey Melnikov
93551f12ee update: migration templates 2020-08-14 14:27:59 -07:00
Andrey Melnikov
9cb3002cee Merge pull request #512 from onepanelio/feat/add.default.visibility
feat: make default visibility public for parameters
2020-08-14 11:10:25 -07:00
Andrey Melnikov
eb9d798021 feat: make default visibility public for parameters 2020-08-14 10:58:06 -07:00
Andrey Melnikov
a31082d9a1 Merge pull request #510 from onepanelio/bug/auth.crash
fix: issue where auth would sometimes crash
2020-08-13 18:21:37 -07:00
Andrey Melnikov
865f3fa827 fix: issue where auth would sometimes crash 2020-08-13 18:18:43 -07:00
Andrey Melnikov
072cbf24e3 Merge pull request #506 from onepanelio/bug/onepanelio.core.505-panic
fix: issue where creating a workspace with no matching template caused a panic
2020-08-13 14:55:52 -07:00
Andrey Melnikov
90ce50a9ac fix: issue where creating a workspace with no template caused a panic 2020-08-13 14:51:38 -07:00
Andrey Melnikov
00806b9baf Merge pull request #502 from onepanelio/feat/support-script-templates
feat: Support script templates in Workflow
2020-08-13 10:25:53 -07:00
rushtehrani
ce805bfa20 feat: Support script templates in Workflow 2020-08-12 22:31:42 -07:00
Andrey Melnikov
1431b4344b update: added migrations to
* create maskrcnn workflow template
* update tf_od workflow template
* updated cvat workspace template
2020-08-12 11:51:37 -07:00
Andrey Melnikov
9558473f2c feat: handled edge case where auth pieces might be less than 2. 2020-08-12 10:36:25 -07:00
Andrey Melnikov
bc7ce21fb6 chore: update api swagger version to 0.12.0b5. 2020-08-12 10:36:05 -07:00
Andrey Melnikov
e222af5564 Merge pull request #498 from onepanelio/feat/onepanelio.core.470-workspace.template.description.and.labels
feat: added description to workspace templates
2020-08-12 10:21:04 -07:00
Andrey Melnikov
2abe166904 Merge pull request #496 from onepanelio/fix/skip-params-for-sys-volumes
fix: Skip generation volume size parameters for system volumes
2020-08-11 10:14:31 -07:00
Andrey Melnikov
4b4cccbd74 Merge pull request #486 from onepanelio/feat/remove-nvidia-smi-mount
chore: Remove nvidia-smi mount
2020-08-11 10:10:57 -07:00
Andrey Melnikov
eb06f0ada3 Merge pull request #497 from onepanelio/fix/labels.count
fix: bug with counting workflow templates with labels query
2020-08-10 20:09:42 -07:00
Andrey Melnikov
6b74d0c61b fix: issue where counting workflow templates didn't work without the old labels table 2020-08-10 20:06:58 -07:00
Aleksandr Melnikov
d41dad0074 Merge pull request #493 from onepanelio/feat/onepanelio.labels.upgrade
feat: upgrade label structure to support querying with multiple labels
2020-08-10 17:01:19 -07:00
rushtehrani
34f440587f skip param generation for system volumes 2020-08-10 16:14:59 -07:00
Aleksandr Melnikov
70a4fc9eb8 Merge pull request #491 from onepanelio/fix/onepanelio.core-458.workflow.template.name.error
fix: add more useful error message when workflow template name is too long
2020-08-10 15:40:03 -07:00
Andrey Melnikov
cd7f4cb5d7 feat: added description to workspace templates 2020-08-10 15:06:38 -07:00
Andrey Melnikov
6a681e6693 chore: documented JSONLabels and ReplaceLabelsUsingKnownID 2020-08-10 13:01:19 -07:00
Andrey Melnikov
036e417a56 fix: go migration that used old label method. It is no longer needed apart from backwards compatibility support. 2020-08-10 12:00:21 -07:00
Andrey Melnikov
879932c4b5 update: migration to migrate old labels to new labels and roll back 2020-08-10 11:35:42 -07:00
Andrey Melnikov
3c3a514983 update: updated logic to filter workflow templates by labels. It now supports AND so you can filter by multiple labels 2020-08-09 21:04:50 -07:00
Andrey Melnikov
8586639a6c update: cron workflows to use new labels 2020-08-09 16:15:05 -07:00
Andrey Melnikov
55eeb90e2a update: workspace labels during creation, listing, and getting to use new method 2020-08-09 13:57:33 -07:00
Andrey Melnikov
c81c2d7672 update: fixed issues where workspace template version labels were not being correctly set/got. Also updated generic server endpoints with new logic 2020-08-09 13:45:24 -07:00
Andrey Melnikov
2f5720aefc fix: migration for labels - added workspace templates labels 2020-08-09 13:43:50 -07:00
Andrey Melnikov
f02e7791f7 update: updated labels for workflow templates and their versions 2020-08-08 15:56:17 -07:00
Andrey Melnikov
8dc22ff9bc chore: added more descriptive error message when workflow template name is too long 2020-08-07 15:41:27 -07:00
Andrey Melnikov
6edca5731b update: change reader to use bufio for buffered reading 2020-08-07 15:15:25 -07:00
Andrey Melnikov
63bdb69968 fix: issue where scanner could not handle long lines while reading logs 2020-08-07 15:10:55 -07:00
rushtehrani
b2e887c1c9 remove nvidia-smi mount 2020-08-06 14:18:21 -07:00
Andrey Melnikov
88d23a5ec5 Merge pull request #483 from onepanelio/fix/workspace.namespace
fix: issue with migrations failing to run
2020-08-05 14:24:32 -07:00
Andrey Melnikov
97ac5892ab fix: issue where workspaceTemplate namespace was not set before setting service environment variables
These were called from migrations
2020-08-05 14:18:58 -07:00
Andrey Melnikov
18a8164b8e Merge pull request #482 from onepanelio/fix/parameter.display.name
fix: issue where parameter display name was not being parsed correctly
2020-08-05 12:50:11 -07:00
Andrey Melnikov
2d5db5baa1 fix: issue where parameter display name was not being parsed correctly 2020-08-05 12:44:28 -07:00
Andrey Melnikov
c30196f267 Merge pull request #479 from onepanelio/feat/onepanelio.core-476.service.environment.vars
fix: incorrect url generated for service environment variables
2020-08-05 11:06:35 -07:00
Andrey Melnikov
7af2e5b1db update: rename files component -> service 2020-08-05 11:00:32 -07:00
Andrey Melnikov
5e4bbaaf9b fix: issue where updating a workspace template did not correctly update services env vars 2020-08-05 10:59:54 -07:00
Andrey Melnikov
e826167aa5 Merge pull request #477 from onepanelio/feat/onepanelio.core-476.service.environment.vars
feat: added service environment variables to be mounted into workspaces
2020-08-04 15:43:24 -07:00
Andrey Melnikov
6863fd8d99 feat: added service environment variables to be mounted into workspaces 2020-08-04 15:30:55 -07:00
Andrey Melnikov
aed10dc1c9 Merge pull request #475 from onepanelio/fix/core.414-large.artifact.download.crashes.dev
fix: issue where downloading artifact files from a workflow over 10 MB failed
2020-08-04 11:16:32 -07:00
Andrey Melnikov
20c23cfb8e Merge pull request #474 from onepanelio/fix/onepanelio.core.473-fix.workflow.bug
fix: issue where running a workflow execution again failed
2020-08-04 10:47:22 -07:00
Aleksandr Melnikov
4cdb39f934 Updating the max server / client send and receive message size. 2020-08-04 10:46:43 -07:00
Aleksandr Melnikov
10204a8896 Addiing octet-stream to api.proto. 2020-08-04 10:43:08 -07:00
Andrey Melnikov
3e6a48ba1e fix: issue where running a workflow execution again failed. 2020-08-04 10:40:18 -07:00
Andrey Melnikov
aeaa447beb Revert "poc: Using a custom type for labels backed by JSONB"
This reverts commit 023713da32.
2020-08-03 15:26:08 -07:00
Andrey Melnikov
023713da32 poc: Using a custom type for labels backed by JSONB 2020-08-03 15:25:18 -07:00
Aleksandr Melnikov
8a58fb9705 Merge pull request #464 from onepanelio/fix/onepanel.core.463-workflow.template.error
fix: workflow template visibility gave incorrect error
2020-07-31 11:41:26 -07:00
Andrey Melnikov
54d5420838 fix: issue where workflow template parameters error did not correctly propagate back to the client 2020-07-31 11:22:09 -07:00
Andrey Melnikov
ebfcf1fb31 Merge pull request #462 from onepanelio/feat/onepanelio.core.450-refactor.parameters.parsing
chore: simplify logic for parsing parameters from cron workflow manifests
2020-07-31 11:12:28 -07:00
Aleksandr Melnikov
10fb88639c Merge pull request #461 from onepanelio/feat/onepanelio.core.440-parameter.visibility
fix: restricted parameter visibility to not allow any random value
2020-07-31 10:25:08 -07:00
Andrey Melnikov
b020efb16f update: GetParametersFromWorkflowSpec to use yaml unmarshaling 2020-07-30 22:33:00 -07:00
Andrey Melnikov
85e876b723 update: restricted parameter visibility to one of four values
* public
* protected
* internal
* private

Also did a minor cleanup to parameter conversion from v1 to api
2020-07-30 19:01:52 -07:00
Aleksandr Melnikov
080c667b05 Merge pull request #457 from onepanelio/feat/onepanelio.core.440-parameter.visibility
feat: add visibility field to parameters
2020-07-30 13:39:07 -07:00
Andrey Melnikov
fc89727b80 feat: added visibility to parameters 2020-07-30 12:52:03 -07:00
Andrey Melnikov
9b90391892 Merge pull request #448 from onepanelio/bug/db.connection.leak
fix: database connection leak
2020-07-30 11:13:25 -07:00
Andrey Melnikov
e99e66590a fix: fixed issue where ParseParametersFromManifest did not correctly parse integers 2020-07-30 10:58:34 -07:00
Andrey Melnikov
a8f287b197 update: when formatting parameters for API response, if the value is nil, allow it.
Although this technically shouldn't happen, it will help in debugging and preventing crashes.
2020-07-29 22:33:55 -07:00
Andrey Melnikov
7e63fa28d0 fix: issue where nil param values caused dereference errors 2020-07-29 22:27:53 -07:00
Andrey Melnikov
7e41f5e538 fix: issue where db connections were not being closed in go migrations or when configmap changes were detected 2020-07-29 17:43:40 -07:00
Andrey Melnikov
77080ff173 Merge pull request #447 from onepanelio/chore/protoc.updates
chore: update api docs
2020-07-29 16:43:01 -07:00
Andrey Melnikov
8ca18d5fc5 update: regenerate api 2020-07-29 16:40:26 -07:00
Andrey Melnikov
4b7d7a1932 Merge pull request #421 from onepanelio/feat/components
feat: add components API
2020-07-29 16:37:27 -07:00
Aleksandr Melnikov
e244b8e625 Merge pull request #437 from onepanelio/feat/onepanelio.core.391-create.workflow.link
feat: add workflow execution metadata fields
2020-07-29 16:34:15 -07:00
Andrey Melnikov
819c57bed1 Merge pull request #443 from onepanelio/feat/core.387-merge
feat: Adding "parameters" to workflow template API response.
2020-07-29 15:51:04 -07:00
Aleksandr Melnikov
eeaad9c03b Putting back a function lost to merge. 2020-07-29 15:45:29 -07:00
Aleksandr Melnikov
6ca2977662 Adding a comment. 2020-07-29 15:35:35 -07:00
Aleksandr Melnikov
6dd0225e17 Generated proto files. 2020-07-29 15:06:46 -07:00
Aleksandr Melnikov
a26c83988b Fixing functions from merge. 2020-07-29 15:06:37 -07:00
Aleksandr Melnikov
80ed85a4cb Fixing an issue with parameters being null for insert.
- This can happen when editing a workflow template in the UI and hitting
save.
2020-07-29 15:06:26 -07:00
Aleksandr Melnikov
e0f8118241 Merge branch 'dev' into feat/core.387-merge 2020-07-29 14:46:22 -07:00
Andrey Melnikov
da1ca6eece update: rename components to services 2020-07-29 14:21:14 -07:00
Aleksandr Melnikov
b239ca1e6f Merge pull request #439 from onepanelio/feat/onepanelio.core.434-filter.workflow.templates.by.label
feat: add API support to filter workflow templates by a label
2020-07-29 14:15:13 -07:00
Aleksandr Melnikov
b2bef450e1 Merge branch 'dev' into feat/onepanelio.core.434-filter.workflow.templates.by.label 2020-07-29 13:10:05 -07:00
Andrey Melnikov
08442a796f Merge pull request #427 from onepanelio/feat/namespace-config-injector
feat: Mount namespace config for system containers
2020-07-29 12:44:21 -07:00
Aleksandr Melnikov
206e6a48cd Simplifying function calls per feedback. 2020-07-29 12:02:16 -07:00
Aleksandr Melnikov
276708d83c Adding and fixing comments. 2020-07-29 11:52:03 -07:00
Aleksandr Melnikov
9c8299d89c Renaming function per feedback. 2020-07-29 11:24:30 -07:00
Aleksandr Melnikov
828e44ab7d Updating function names per feedback.
- Do not expose DB functions.
2020-07-29 11:19:58 -07:00
Aleksandr Melnikov
98a45f927f Adding wtv.ID <= 0 check, per feedback.
Simplifying the returned err.
2020-07-29 11:19:35 -07:00
Aleksandr Melnikov
c97737773e Removing unnecessary type-cast 2020-07-29 11:15:19 -07:00
Aleksandr Melnikov
57f228ec2c Removing fields that should not be changed. 2020-07-29 11:14:12 -07:00
Aleksandr Melnikov
f421ba4ab8 Simplifying variable initializing. 2020-07-29 11:14:04 -07:00
Aleksandr Melnikov
6d9a575789 Simplifying migration that updates parameters.
- Directly retrieving all the WorkflowTemplateVersions from the database
and updating them, instead of going through namespaces, workflow templates,
then the versions.
2020-07-29 10:45:27 -07:00
Aleksandr Melnikov
0a6ea236c7 Adding functions to select all WorkflowTemplateVersions from the
database without filtering.
2020-07-29 10:44:22 -07:00
Aleksandr Melnikov
fa2a351da3 Removing namespace parameter since updating the database entry does
not require a namespace filter.
2020-07-29 10:42:42 -07:00
Aleksandr Melnikov
7ff17a5aae Refactoring database code.
- This ensures the transaction commits.
2020-07-29 10:15:37 -07:00
Aleksandr Melnikov
8d8472f52d Casting parameters to string. 2020-07-29 10:14:38 -07:00
Andrey Melnikov
12d3e84943 chore: documentation to meet codacy requirements 2020-07-28 22:54:02 -07:00
Andrey Melnikov
6f65f291d5 update: added migration for workflow template labels 2020-07-28 20:52:16 -07:00
Andrey Melnikov
ac5a394366 update: added utility to go migrations to find out if it has been run before as a sql migration 2020-07-28 20:52:02 -07:00
Andrey Melnikov
5b0fc82acf update: added new method to workflow templates to list all of them, which we need for certain migrations. 2020-07-28 20:50:58 -07:00
Andrey Melnikov
39c9511578 update: pagination with new methods to aid in starting a pagination and advancing it. 2020-07-28 20:50:17 -07:00
Andrey Melnikov
5d221f6140 update: added migration to update workflow template labels 2020-07-28 20:07:36 -07:00
Andrey Melnikov
da8cb2859a feat: added support for filtering workflow templates by a single label.
When a workflow template is created, or a new version is created, we now stores the labels for it as the latest labels. This makes it easier to filter based on labels.
2020-07-28 16:57:43 -07:00
Andrey Melnikov
5009a2643f fix: issue with label parsing where empty string did not return nil 2020-07-28 16:55:08 -07:00
Aleksandr Melnikov
e0ec2e5783 Fixing the version used.
- Otherwise, templates are not found consistently.
2020-07-28 16:17:31 -07:00
Andrey Melnikov
11d198a2db feat: Added API support for filtering workflow templates by labels. Logic not yet implemented. 2020-07-28 16:14:35 -07:00
Aleksandr Melnikov
9ab76e78fb Removing previous ParseParametersFromMAnifest.
- Instead, retrieving the WorkflowTemplateVersion from the database,
and using it's params for the WorkflowTemplate's
2020-07-28 15:07:52 -07:00
Aleksandr Melnikov
859a3d21c9 Adding code to Unmarshal the Parameters after DB query. 2020-07-28 15:07:17 -07:00
Aleksandr Melnikov
512bb04be5 Adding []byte field to struct.
- So we can load the JSONB data from the database.
2020-07-28 15:06:53 -07:00
Aleksandr Melnikov
00c22974a9 Updating WorkflowTemplateVersionColumns to also return "parameters"
column.
2020-07-28 15:06:31 -07:00
Aleksandr Melnikov
2bb66545e8 Fixing pagination.
- Results may be less than pageSize.
Changed to paginate only if there are over 0 results.
2020-07-28 11:56:20 -07:00
Andrey Melnikov
b0ec3194b6 fix: workflow execution uid = name now, we should not be returning the k8s uid. 2020-07-28 11:53:49 -07:00
Andrey Melnikov
81e3a7f299 fix: wrong namespace variable passed in 2020-07-28 11:53:27 -07:00
Aleksandr Melnikov
a913c69b71 Fixing the while loop condition.
Adding code to paginate through results.
2020-07-28 11:44:43 -07:00
Aleksandr Melnikov
16c04a9906 Adding code to load WorkflowTemplateVersionsDB. 2020-07-28 11:43:16 -07:00
Aleksandr Melnikov
013b41f102 Removing validateWorkflowTemplate because WorkflowTemplate is not
loaded from the database.
2020-07-28 11:42:57 -07:00
Aleksandr Melnikov
4d5f02c815 Converting parameters to JSON for database operations. 2020-07-28 11:42:16 -07:00
Aleksandr Melnikov
c1a22cd330 Adding migration to db.go 2020-07-28 11:41:29 -07:00
Andrey Melnikov
25049535e3 feat: Added generator for web routes. Added url for workflow executions. 2020-07-28 11:12:19 -07:00
Aleksandr Melnikov
2f8735c6d0 Added migration to go through current workflow_template_versions
and generate the "parameters" column values for each.
2020-07-27 17:41:41 -07:00
Aleksandr Melnikov
276f084fab Added SQL migration to add "parameters" column to workflow_template_versions
table.
2020-07-27 17:41:18 -07:00
Aleksandr Melnikov
8e9e51fc5e Added exposed function to update a WorkflowTemplateVersion in the database. 2020-07-27 17:41:00 -07:00
Aleksandr Melnikov
f9838a4614 Adding Parameters to WorkflowTemplateVersion struct. 2020-07-27 17:40:22 -07:00
Aleksandr Melnikov
36a5d26b4e Adding work-around functions for listWorkflowTemplateVersions and
ListWorkflowTemplateVersions.
2020-07-27 17:39:38 -07:00
Aleksandr Melnikov
e12cdafac2 Adding function to update a workflow_template_version row in the database. 2020-07-27 17:39:02 -07:00
Aleksandr Melnikov
e851a35b4e Fixing database connection string. 2020-07-27 12:07:34 -07:00
Aleksandr Melnikov
d0a83ffddd Adding the rest of the proto updated files. 2020-07-27 12:07:34 -07:00
Aleksandr Melnikov
29710519a1 Fixing the Parameter parsing from Manifest.
- Using specific function to achieve same functionality
Removing the for-loop because it caused duplicate values.
Wrong:
```json
  "parameters": [
    {
      "type": null,
      "required": null,
      "name": "source",
      "options": null,
      "hint": null,
      "value": "name: command\norder: 1\nvalue: python mnist/main.py --epochs=5\n",
      "display_name": null
    },
    {
      "type": null,
      "required": null,
      "name": "command",
      "options": null,
      "hint": null,
      "value": "name: command\norder: 1\nvalue: python mnist/main.py --epochs=5\n",
      "display_name": null
    }
```
Right:
```json
  "parameters": [
    {
      "options": [],
      "name": "source",
      "value": "https://github.com/onepanelio/tensorflow-examples.git",
      "type": "",
      "displayName": "",
      "hint": "",
      "required": false
    },
    {
      "options": [],
      "name": "command",
      "value": "python mnist/main.py --epochs=5",
      "type": "",
      "displayName": "",
      "hint": "",
      "required": false
    }
```
2020-07-27 12:07:33 -07:00
Aleksandr Melnikov
c05ac10c64 Adding Parameters to workflow template getWorkflowTemplate. 2020-07-27 12:07:33 -07:00
Aleksandr Melnikov
43a9c22d40 Adding Parameters to WorkflowTemplate to proto. 2020-07-27 12:07:32 -07:00
rushtehrani
2eec349af9 add Workspace volume params last 2020-07-26 22:53:37 -07:00
rushtehrani
f81cdc03f7 change hint and displayName for CVAT arg 2020-07-26 22:28:22 -07:00
rushtehrani
1276e82fb0 enable filesyncer support out of the box for CVAT 2020-07-26 21:56:13 -07:00
rushtehrani
8bfcb87e91 update CVAT workspace template to use new filesyncer 2020-07-24 22:29:49 -07:00
rushtehrani
30e25192c7 mount namespace config for system containers 2020-07-24 21:59:39 -07:00
Rush Tehrani
cb4a229984 Merge pull request #425 from onepanelio/fix/changing.secretAccountKey.key.to.be.consistent
fix: Use consistent naming convention for GCS artifactRepository secret key
2020-07-24 12:15:44 -07:00
Aleksandr Melnikov
c3f76f971c Removing comments. 2020-07-24 12:08:41 -07:00
Aleksandr Melnikov
dc27fd3319 Changing serviceAccountKey to be more consistent with other secret
keys.
2020-07-24 12:08:36 -07:00
rushtehrani
0a8744656c remove redeclared package 2020-07-24 11:51:49 -07:00
Rush Tehrani
1910a47a21 Merge pull request #423 from onepanelio/fix/putting.yaml.lib.back.for.nodepool.options
fix: Regression fix; We need the specific sigs.k8s.io/yaml library
2020-07-24 11:22:26 -07:00
Aleksandr Melnikov
e3fd781cd3 Merge branch 'dev' into fix/putting.yaml.lib.back.for.nodepool.options 2020-07-24 11:21:06 -07:00
Rush Tehrani
5eff42fb2c Merge pull request #422 from onepanelio/fix/adding.yaml.annotation.to.prevent.empty.keys
fix: Adding omitempty to prevent the keys from showing up in onepanel
2020-07-24 11:13:44 -07:00
Aleksandr Melnikov
3067c62a7f Regression fix; We need the specific sigs.k8s.io/yaml library
to properly unmarshal nodePoolOptions from params.yaml.
2020-07-23 21:09:37 -07:00
Aleksandr Melnikov
adb7f0b74a Adding omitempty to prevent the keys from showing up in onepanel
configmap, if they are not filled.
- Adding explicit yaml conversion for serviceAccountJSON, otherwise
"omitempty" shows in the configmap.
2020-07-23 20:45:37 -07:00
Andrey Melnikov
6753ead9f8 doc: component type 2020-07-23 20:10:35 -07:00
Andrey Melnikov
146411c370 feat: added components API 2020-07-23 19:57:18 -07:00
Rush Tehrani
bdc3d99fed Merge pull request #400 from onepanelio/feat/core.331-support.gcs.artifact.repository
feat: core.331 support.gcs.artifact.repository
2020-07-23 13:11:58 -07:00
Aleksandr Melnikov
aa6725fbc9 Another comment adjustment. 2020-07-22 17:00:14 -07:00
Aleksandr Melnikov
8da35695de Another comments adjustment. 2020-07-22 16:57:19 -07:00
Aleksandr Melnikov
fc7cdb5681 Another comments adjustment. 2020-07-22 16:46:14 -07:00
Aleksandr Melnikov
7bbeba544d Fixing comments per Codacy. 2020-07-22 16:37:55 -07:00
Aleksandr Melnikov
5b7f5c9724 Codacy feedback for comments. 2020-07-22 16:30:23 -07:00
Aleksandr Melnikov
1effb919d6 Per Codacy,
- Adding comments
- Refactoring variables names
- Fixing return variable order
2020-07-22 16:23:24 -07:00
Aleksandr Melnikov
7f6f58884a Per discussion, combining Config structs into Provider. 2020-07-22 16:01:33 -07:00
Aleksandr Melnikov
16274dd946 Moving some attributes form S3Config to S3Provider. 2020-07-22 15:32:38 -07:00
Aleksandr Melnikov
cebb412175 Removing extra yaml from import. 2020-07-22 15:31:58 -07:00
Aleksandr Melnikov
5dbb2104ce Merge branch 'dev' into feat/core.331-support.gcs.artifact.repository 2020-07-22 14:03:10 -07:00
Andrey Melnikov
2232d4e946 Merge pull request #417 from onepanelio/feat/onepanel.auth.header
feat: onepanel-auth-token header for authentication
2020-07-21 15:03:33 -07:00
Andrey Melnikov
e66c095500 update: added reserved workspace names 2020-07-21 14:37:51 -07:00
Andrey Melnikov
7af3c9dd7c feat: allowed onepanel-auth-token header to provide authentication token.
Updated server to make that key not require a grpc-gateway prefix.
2020-07-20 20:52:36 -07:00
Rush Tehrani
b01c0c41a8 Merge pull request #412 from onepanelio/fix/onepanelio.core.407-workspaces.missing.node.pools
fix: goose binary errors
2020-07-14 19:14:04 -07:00
Andrey Melnikov
59d0c95307 fix: extra run of goose up 2020-07-14 19:11:30 -07:00
Andrey Melnikov
d319d41929 fix: goose command since the package structure changed, we need to update it to reference the go migrations package. Further, we need to update the logic to run both migrations of sql and go. 2020-07-14 19:00:52 -07:00
Andrey Melnikov
9435404701 fix: filepath separator to include windows support. 2020-07-14 19:00:05 -07:00
Rush Tehrani
b6b8652829 Merge pull request #410 from onepanelio/fix/onepanelio.core.407-workspaces.missing.node.pools
fix: get workspaces now returns up-to-date node pool options
2020-07-14 18:39:22 -07:00
Andrey Melnikov
5073cbdff1 fix: issue where changing configmap crashed goose because migrations were re-added 2020-07-14 18:31:21 -07:00
Andrey Melnikov
0b77438d57 clean: drop nil initialization from var pointer as it is the default value. 2020-07-14 15:16:15 -07:00
Andrey Melnikov
59e7d58503 fix: get workspaces now returns up-to-date node pool options 2020-07-14 15:09:06 -07:00
Aleksandr Melnikov
fa96d6ef66 Merge branch 'dev' into feat/core.331-support.gcs.artifact.repository 2020-07-14 14:06:47 -07:00
Aleksandr Melnikov
6c0d3fe598 Refactored GCS client creation.
Added GetObject function to be consistent with S3 functionality.
Note
- pkg/client.go, line 88 passes in the JSON.
If ArtifactRepositoryGCSCondig was imported inside gcs.NewClient
code, an import cycle would be created.
2020-07-14 14:05:31 -07:00
Aleksandr Melnikov
b0361cdc6c Instead of passing the secret values into the configmap, pass
the secret reference and secret key.
2020-07-13 17:37:29 -07:00
Aleksandr Melnikov
e526505365 Fixing the Key to look for inside the secret. 2020-07-13 17:01:07 -07:00
Aleksandr Melnikov
993ce397aa Removing todo, verified Name is correct. 2020-07-13 16:02:14 -07:00
Aleksandr Melnikov
7a8df485ad Removing completed todos. 2020-07-10 17:53:33 -07:00
Aleksandr Melnikov
7936eac98d Adding a way to store the location of the secret and the secret key to use.
Adding another field to struct, which will store the ServiceAccountJSON.
- This will be generated by the API and used by the API for the GCS client.
2020-07-10 17:53:25 -07:00
Aleksandr Melnikov
94ae9071aa Adding exit condition to for true when iterating through bucket files. 2020-07-10 17:19:03 -07:00
Aleksandr Melnikov
8b6d10d112 Updating GCS MarshalToYaml
- Do not write the value of ServiceAccount to Config Map. This
exposes credentials.
- Properly write the reference the argo expects. The reference
points to the secret that contains the credentials.
2020-07-10 17:19:03 -07:00
Aleksandr Melnikov
a94ae526ca Merge pull request #393 from onepanelio/feat/provider-specific-config
feat: Add support for ResourceRequirements in node pools
2020-07-10 11:35:30 -07:00
Aleksandr Melnikov
8e2b1ab106 Merge branch 'dev' into feat/core.331-support.gcs.artifact.repository 2020-07-09 18:09:50 -07:00
Aleksandr Melnikov
e83e5d495e Injecting GCS configuration into ArtifactRepository. 2020-07-09 18:02:18 -07:00
Aleksandr Melnikov
0f5cf7be4d Fixing shadowed err. 2020-07-09 16:30:11 -07:00
Aleksandr Melnikov
7295ba36b3 Putting pack a required package. 2020-07-09 16:30:00 -07:00
rushtehrani
a8958b0136 move migration to correct folder 2020-07-09 15:35:06 -07:00
rushtehrani
69a6a72303 add missing methods after conflict resolution 2020-07-09 14:36:24 -07:00
Rush Tehrani
92f2be7cac Merge branch 'dev' into feat/provider-specific-config 2020-07-09 14:18:49 -07:00
Rush Tehrani
46f4465103 Merge pull request #374 from onepanelio/test/docker.database
feat: setup unit tests with database
2020-07-09 14:17:41 -07:00
rushtehrani
ca45e29dd5 remove unused file 2020-07-09 14:06:38 -07:00
rushtehrani
dfd892d6f1 update func names to match new convention 2020-07-09 13:50:42 -07:00
rushtehrani
c1d123ec2c use run-tests for all tests 2020-07-09 13:43:28 -07:00
rushtehrani
7c2001f5ac Merge branch 'test/docker.database' of https://github.com/onepanelio/core into test/docker.database 2020-07-09 12:45:23 -07:00
rushtehrani
aff166fb40 change test names to match new convention 2020-07-09 12:45:16 -07:00
Andrey Melnikov
40759738ae fix: took up the messages if a go migration was already ran as it was printed after the goose message, which was a bit confusing. 2020-07-09 12:27:44 -07:00
Andrey Melnikov
a0454cdfc3 fix: backwards compatibility for previous go migrations. Don't run them if they were ran earlier in the goose_db_version db table. 2020-07-09 12:23:38 -07:00
Rush Tehrani
41d3d7be34 Merge pull request #399 from onepanelio/fix/new-cvat-template
fix: Update CVAT template to Comment out filesyncer to avoid crashing
2020-07-09 11:46:31 -07:00
rushtehrani
4dc60c2113 update cvat template 2020-07-09 11:43:25 -07:00
Rush Tehrani
3cf11eaa58 Merge pull request #398 from onepanelio/revert-394-fix/cvat-template
Revert "fix: Comment out filesyncer to avoid CVAT template crashing"
2020-07-09 11:33:01 -07:00
Rush Tehrani
3b605545b1 Revert "fix: Comment out filesyncer to avoid CVAT template crashing" 2020-07-09 11:32:16 -07:00
Rush Tehrani
eef3309080 Merge pull request #394 from onepanelio/fix/cvat-template
fix: Comment out filesyncer to avoid CVAT template crashing
2020-07-09 11:27:11 -07:00
Aleksandr Melnikov
4e3eaae1f6 Updating ListFiles to support GCS. 2020-07-09 10:55:37 -07:00
rushtehrani
2ddab18a59 rename function 2020-07-08 17:50:16 -07:00
Aleksandr Melnikov
6727b00b05 Updating GetArtifact to support GCS. 2020-07-08 14:00:51 -07:00
Aleksandr Melnikov
81c05f9954 Adding error check. 2020-07-08 14:00:20 -07:00
Aleksandr Melnikov
ac5bf65ae9 Added GCS support for Metrics retrieval. 2020-07-08 13:36:59 -07:00
Aleksandr Melnikov
66431a21eb Added code to get the log object from GCS.
Added switch statement for GCS versus S3.
2020-07-08 13:17:07 -07:00
Aleksandr Melnikov
8d662d6ce0 Adding FormatKey function for GCS Config. 2020-07-08 13:16:42 -07:00
Aleksandr Melnikov
ad16285fd4 Fixing typo.
Adding explicit error checking for opts.SetRange.
2020-07-08 12:53:12 -07:00
Aleksandr Melnikov
f024889ca8 Implementing switch statement since we have s3 and gcs storage now.
- GCS has necessary credentials in serviceAccount as json
2020-07-08 12:52:55 -07:00
Aleksandr Melnikov
d7df089d31 When grabbing artifactRepository from config, check if
S3 or GCS are set.
- If not, throw an error.
2020-07-08 12:52:11 -07:00
Aleksandr Melnikov
2cd3f76299 Adding GetGCSClient function.
- Returns client that can interact with google cloud storage.
2020-07-08 12:51:45 -07:00
Aleksandr Melnikov
965e8dda92 Adding Google library for Google Cloud Storage. 2020-07-08 11:33:47 -07:00
Aleksandr Melnikov
c13c868143 Adding GCS structs for Artifact Repository configuration.
- These will be unmarshalled into via CLI from params.yaml.
- Added helper function, MarshalToYaml.
2020-07-06 21:56:39 -07:00
Aleksandr Melnikov
e2f94e937c Adding function to output the CLI required YAML for manifests.
- Adding helper structs and tags
2020-07-06 17:07:14 -07:00
Aleksandr Melnikov
df74766a66 Adding yaml tags for unmarshalling into the struct. 2020-07-06 17:06:40 -07:00
Aleksandr Melnikov
30305f42e1 Adding Yaml V3. 2020-07-06 17:04:12 -07:00
rushtehrani
41b2f322da update cvat version 2020-07-04 23:13:39 -07:00
rushtehrani
946ab11dab fix: comment out filesyncer and reference docs 2020-07-04 15:28:33 -07:00
rushtehrani
886e39244e add comments to exported structs and methods 2020-07-03 11:43:52 -07:00
rushtehrani
7ce8d9cdfa support workflow params for resource injection 2020-07-03 11:38:04 -07:00
rushtehrani
2868ab69c9 add resources requests and limits to nodePoolOptions 2020-07-02 22:29:05 -07:00
rushtehrani
18428c4e82 add nvidia-smi in case of aks 2020-07-02 19:19:27 -07:00
Andrey Melnikov
df3dba4e2e test: Added basic test for CreateWorkspace (capital) 2020-07-02 16:45:52 -07:00
Andrey Melnikov
d097cdfefe clean: removed UpdateWorkflowTemplateVersion as it did nothing and should not be used.
#breaking-change
2020-07-02 16:45:34 -07:00
rushtehrani
cee49e67f4 add ONEPANEL_PROVIDER env var 2020-07-02 16:44:22 -07:00
Andrey Melnikov
640c7b54f5 test: fixed issue where Updating the workspace status did not correctly detect a not-found condition and added tests for it. 2020-07-02 16:22:23 -07:00
Andrey Melnikov
655020b54b clean: removed unnecessary generation of uid in "injectWorkspaceSystemParameters" function.
Updated time tests to compare against time.Time{} because nanosecond difference comparison doesn't always work.
2020-07-02 15:46:46 -07:00
Andrey Melnikov
5117c8b34e tests: separated out logic to convert workspace status to a field map and added tests for it 2020-07-02 15:41:54 -07:00
Andrey Melnikov
045912fe5c tests: added more tests surround workspace templates and workspaces 2020-07-02 13:21:11 -07:00
Andrey Melnikov
3673b3da59 tests: added more tests for workspace templates 2020-07-02 12:19:39 -07:00
Andrey Melnikov
d7db598cc6 clean: removed unused methods 2020-07-02 12:19:15 -07:00
Andrey Melnikov
f3a2856d65 fix: codacy issues 2020-07-02 11:20:18 -07:00
Andrey Melnikov
f1045710a0 update: refactored creating a workflow execution 2020-07-02 11:17:31 -07:00
Andrey Melnikov
ed621633df update: updated tests to have method calls for particular cases. Added more tests. 2020-07-01 16:07:20 -07:00
Andrey Melnikov
c5d1ec9b1f fix: go migrations since they would still occur in the order of creation timestamp. Manually initializing them fixes this issue. 2020-07-01 16:06:18 -07:00
Andrey Melnikov
5c225b405d clean: reworked creating a workflow template and version to consolidate logic 2020-06-30 13:05:28 -07:00
Andrey Melnikov
bd5ec0e7c2 fix: updated versions to use a bigint to store nanosecond precision.
updated code to reflect this change and migrated it over.
2020-06-30 11:42:07 -07:00
Andrey Melnikov
176fcc3008 update: recreate issue with workflow template versions being created one after another 2020-06-30 10:59:32 -07:00
Andrey Melnikov
945b3bc2e5 fix: moved migration into appropriate folder 2020-06-30 10:50:35 -07:00
Andrey Melnikov
1bdd6a7eda Merge branch 'test/docker.database' of github.com:onepanelio/core into test/docker.database 2020-06-30 10:50:05 -07:00
Andrey Melnikov
f78ae63afa clean: added method to SysConfig to return database connection information 2020-06-30 10:49:22 -07:00
Andrey Melnikov
114f290cde docs: documented some workflow execution methods 2020-06-30 10:49:22 -07:00
Andrey Melnikov
1a15df4999 fix: testing commit for db connection 2020-06-30 10:49:22 -07:00
Andrey Melnikov
f9f6d75be8 fix: remove extraneous character 2020-06-30 10:49:22 -07:00
Andrey Melnikov
782617a3e9 clean: clean up code for cron workflows 2020-06-30 10:49:22 -07:00
Andrey Melnikov
0ec109da2b fix: how we get argo mock. 2020-06-30 10:49:22 -07:00
Andrey Melnikov
b8b9ff2543 clean: capitalization of names and added WorkflowTemplate uid generator method to encapsulate the behavior 2020-06-30 10:49:22 -07:00
Andrey Melnikov
0b54bd1c43 test: added tests for workflow executions and creating workflow templates 2020-06-30 10:49:22 -07:00
Andrey Melnikov
cb27809665 fix: dynamic database service name in testing 2020-06-30 10:49:22 -07:00
Andrey Melnikov
252e53a793 feat: added flag to database service for testing 2020-06-30 10:49:22 -07:00
Andrey Melnikov
05fc2b1422 fix: inconsistent testing variables and github action variables 2020-06-30 10:49:22 -07:00
Andrey Melnikov
839b9ac2e3 clean: removed custom configmap/secret setting as providing the objects to k8s mock will have them be automatically loaded. 2020-06-30 10:49:22 -07:00
Andrey Melnikov
2091485345 feat: added basic unit testing. Also separated migrations to separate sql and go migrations. This makes it easier to unit test where we just need sql migrations. 2020-06-30 10:49:22 -07:00
Andrey Melnikov
0ffa3aee32 Merge pull request #383 from onepanelio/dev
fix: migration issue (into master)
2020-06-29 22:21:52 -07:00
Andrey Melnikov
a5cc3cf38a Merge pull request #382 from onepanelio/fix/migration
fix: migration issue where workflow name clashed because of unix time…
2020-06-29 22:20:37 -07:00
Andrey Melnikov
4bad6b8858 fix: migration issue where workflow name clashed because of unix timestamp 2020-06-29 22:17:36 -07:00
Andrey Melnikov
35982bf85a Merge pull request #381 from onepanelio/dev
feat: v0.11.0
2020-06-29 11:08:18 -07:00
Andrey Melnikov
f1b31c7d3d Merge pull request #380 from onepanelio/feat/onepanelio.core-376.update.cvat.template
feat: cvat template
2020-06-29 10:56:59 -07:00
Andrey Melnikov
ec2f9b3ecd clean: added method to SysConfig to return database connection information 2020-06-26 17:35:24 -07:00
Andrey Melnikov
a2c11050fc docs: documented some workflow execution methods 2020-06-26 17:26:11 -07:00
Andrey Melnikov
b3f9c44482 fix: testing commit for db connection 2020-06-26 17:25:45 -07:00
Andrey Melnikov
8aa10c9630 fix: remove extraneous character 2020-06-26 17:17:33 -07:00
Andrey Melnikov
6c8f6cee5b clean: clean up code for cron workflows 2020-06-26 17:15:01 -07:00
Andrey Melnikov
60bfe4e02a fix: how we get argo mock. 2020-06-26 17:14:31 -07:00
Andrey Melnikov
9e022b24f7 clean: capitalization of names and added WorkflowTemplate uid generator method to encapsulate the behavior 2020-06-26 16:14:07 -07:00
Andrey Melnikov
be63c412be test: added tests for workflow executions and creating workflow templates 2020-06-26 16:11:57 -07:00
Andrey Melnikov
df582292b7 fix: document the up and down migration for codacy. 2020-06-26 12:18:25 -07:00
Andrey Melnikov
636f7cc72f update: migration to update cvat 2020-06-26 12:09:09 -07:00
Andrey Melnikov
b8912d4f4a update: return error if there is one. 2020-06-26 12:08:58 -07:00
Andrey Melnikov
2b8c2b4589 fix: more descriptive error when yaml conversion fails 2020-06-26 12:08:46 -07:00
Rush Tehrani
c98d1d5614 Merge pull request #379 from onepanelio/fix/onepanelio.core-378.workspace.name.formatting
fix: updated workspace name regex to allow spaces and uppercase letters
2020-06-26 10:31:11 -07:00
Andrey Melnikov
88f6ba2fb8 clean: cleaned up workspace name tests to be easier and clearer 2020-06-26 10:28:02 -07:00
Andrey Melnikov
71ce7289fd fix: updated workspace name regex to allow spaces and uppercase letters 2020-06-26 09:27:39 -07:00
Andrey Melnikov
62f53ee605 fix: dynamic database service name in testing 2020-06-25 16:51:18 -07:00
Andrey Melnikov
81241b0cc9 feat: added flag to database service for testing 2020-06-25 16:48:22 -07:00
Andrey Melnikov
90602b8f87 fix: inconsistent testing variables and github action variables 2020-06-25 16:34:42 -07:00
Andrey Melnikov
ff2e948623 clean: removed custom configmap/secret setting as providing the objects to k8s mock will have them be automatically loaded. 2020-06-25 16:30:10 -07:00
Andrey Melnikov
a831ed164d feat: added basic unit testing. Also separated migrations to separate sql and go migrations. This makes it easier to unit test where we just need sql migrations. 2020-06-25 16:27:33 -07:00
Andrey Melnikov
22bcd5f838 Merge pull request #372 from onepanelio/fix/grpc-status
fix: return correct gRPC code
2020-06-24 12:26:02 -07:00
Andrey Melnikov
21ab9cab01 fix: workspace name regex
600s was valid, but it shouldn't be due to other constraints. The s matches.
2020-06-24 12:21:56 -07:00
rushtehrani
2daf7f8c72 add comments to GRPCStatus method 2020-06-24 11:25:03 -07:00
rushtehrani
3d1382ba17 fix: return correct gRPC code 2020-06-24 11:20:27 -07:00
Rush Tehrani
51a76523d3 Merge pull request #369 from onepanelio/feat/onepanelio.core-362.api.return.node.pools
feat: added endpoint to list node pools
2020-06-23 19:25:08 -07:00
rushtehrani
6b08cd3233 allow access to basic config settings to all logged in user 2020-06-23 19:20:57 -07:00
Andrey Melnikov
2a499f228a update: removed GetValueOrEmpty method since map access does the exact same thing.
Removed more sensitive data from config response
2020-06-23 19:11:12 -07:00
Andrey Melnikov
2c0279eba1 Merge pull request #371 from onepanelio/fix/workspace-template-message
fix:  workspace template message
2020-06-23 18:05:44 -07:00
Andrey Melnikov
cc7ec322b3 docs: ConfigServer 2020-06-23 17:56:46 -07:00
rushtehrani
882901facb se => e 2020-06-23 17:55:48 -07:00
rushtehrani
c59c3f2492 StatusError => UserError and added Go doc comments 2020-06-23 17:52:55 -07:00
Andrey Melnikov
3384564c42 update: Separate config server 2020-06-23 17:52:39 -07:00
rushtehrani
e22056876e add new error type and override workspace template validation messages 2020-06-23 17:42:51 -07:00
rushtehrani
b7bd16610c fix: show correct parameter error for workspace templates 2020-06-23 17:00:14 -07:00
Rush Tehrani
fe5a071b61 Merge pull request #370 from onepanelio/fix/onepanelio.core.361-workspace.names.validation
fix: validate workspace names
2020-06-23 16:33:32 -07:00
Andrey Melnikov
50e6e83a16 update: updated the way we validate workspace name 2020-06-23 15:27:29 -07:00
Andrey Melnikov
bd49e64b78 update: workspace names are now validated to ensure they are okay as subdomains 2020-06-23 12:14:16 -07:00
Andrey Melnikov
90003fa2d9 doc: added missing doc for ListNodePools server method 2020-06-23 11:04:38 -07:00
Andrey Melnikov
1440a660ef feat: added endpoint to list node pools 2020-06-23 11:01:15 -07:00
Rush Tehrani
925d278163 Merge pull request #364 from onepanelio/feat/runtime-params
feat: runtime params
2020-06-22 14:35:36 -07:00
Andrey Melnikov
5a13be299f fix: code cleanup 2020-06-22 13:51:34 -07:00
Andrey Melnikov
3d5dcb632a docs: for various types and some variable name updates per go conventions 2020-06-22 13:43:17 -07:00
Andrey Melnikov
5620bfb3fb docs: workflow_template_types 2020-06-22 12:45:13 -07:00
Andrey Melnikov
dea5eeda3b clean: WorkflowTemplateVersionId -> WorkflowTemplateVersionID 2020-06-22 12:29:26 -07:00
Andrey Melnikov
1cf4dd6658 docs: label_types 2020-06-22 12:25:54 -07:00
Andrey Melnikov
d079d5bad8 docs: file_types 2020-06-22 12:24:27 -07:00
Andrey Melnikov
0d738fe2ad doc: documentation updates 2020-06-22 12:21:30 -07:00
Andrey Melnikov
8cf8436afc fix: issue where archiving workspace template was breaking because it attempted to do so for every version, but there was no logical difference since it used the template 2020-06-22 12:11:55 -07:00
Andrey Melnikov
ab9627f249 docs: added more docs 2020-06-22 11:32:33 -07:00
Andrey Melnikov
a0197e0883 fix: issue where workspace template versions did not correctly mark latest as latest 2020-06-22 11:32:18 -07:00
Andrey Melnikov
97c5e2da6f fix: issue where listing cron workflows failed 2020-06-22 11:11:53 -07:00
rushtehrani
817ec61bdf fix workspace termination 2020-06-21 13:27:12 -07:00
rushtehrani
c56a1c0e96 inject runtime params into Argo workflow as well 2020-06-21 11:08:45 -07:00
rushtehrani
441722a8ba runtime params with only arguments.parameters changes 2020-06-21 01:03:41 -07:00
rushtehrani
ec32dc825c fix nodepool issue 2020-06-20 13:18:52 -07:00
Andrey Melnikov
9f5b12da69 update: moved sqlutil to util/sql 2020-06-20 13:18:52 -07:00
Andrey Melnikov
1526194e71 clean: CronWorkflow logic since label options are now a map and not a pointer to a map. 2020-06-20 13:18:52 -07:00
Andrey Melnikov
017c3ca899 update: CreateWorkflowExecution now takes in a WorkflowTemplate so it can be more easily configured. Workspaces do this by injecting runtime variables. 2020-06-20 13:18:52 -07:00
Andrey Melnikov
7887f3a4ef feat: added Getx method to db wrapper to more easily interact with squirrel. 2020-06-20 13:18:52 -07:00
Andrey Melnikov
d209423100 clean:
* updated method names to fit go conventions of uppercase. Db -> DB
* updated some method calls to use updated column select functions to remove extraneous empty string
* updated methods to use new label function that does nothing if no labels are passed in, this simplifies the code.
* updated some methods to use new Selectx function, reducing code in caller.
2020-06-20 13:18:52 -07:00
Andrey Melnikov
1e3a5d4faf clean: Updated DB to be a struct with convenience functions for getting data. 2020-06-20 13:18:52 -07:00
Andrey Melnikov
f6a7d3ec58 clean: created separate package for sql utils, and put in an updated FormatColumnSelect in there. Also added tests.
This update makes alias optional, so you don't need to provide an empty string as an argument. It also removes extraColumns as an argument as that is easily managed by squirrel.
2020-06-20 13:18:52 -07:00
Andrey Melnikov
ef9c185977 Merge pull request #359 from onepanelio/feat/workspace-crd
feat: Authorize against Workspace CRD
2020-06-19 10:29:28 -07:00
rushtehrani
c7184d133e check auth by uid in workspace get request 2020-06-18 19:35:35 -07:00
rushtehrani
ec2ad1a9be fix param 2020-06-18 19:35:35 -07:00
rushtehrani
640d4f6e9f add Workspace CRD auth check and creation 2020-06-18 19:35:35 -07:00
Rush Tehrani
027a93f044 Merge pull request #357 from onepanelio/fix/params
fix: reference to parameters can now be defined as `workspace.parameters`
2020-06-18 19:34:47 -07:00
Rush Tehrani
5fe3ef9213 Merge pull request #352 from onepanelio/feat/onepanelio.core-348.system.updates
feat: runtime variables and system config change reload
2020-06-18 19:31:41 -07:00
Andrey Melnikov
49c1c6a0cd fix: issue where getting workspace did not have the runtime parameters 2020-06-18 15:23:25 -07:00
Andrey Melnikov
ce9fd4bf52 update: config updates and related usage updates. 2020-06-18 15:22:27 -07:00
Andrey Melnikov
e1ade14d6c Merge branch 'feat/onepanelio.core-348.system.updates' of github.com:onepanelio/core into feat/onepanelio.core-348.system.updates 2020-06-18 12:41:01 -07:00
Andrey Melnikov
d823a951fb fix: fixed issue where channels were not working for restarting server. 2020-06-18 12:40:36 -07:00
Andrey Melnikov
9e236aafb2 test: locks instead of channels 2020-06-18 12:40:36 -07:00
Andrey Melnikov
aaf6d31847 fix: issue where watch was started multiple times. 2020-06-18 12:40:36 -07:00
Andrey Melnikov
efffe1f070 fix: added missing migration 2020-06-18 12:40:36 -07:00
Andrey Melnikov
6fe23c7ed8 clean: code cleanup and minor documentation 2020-06-18 12:40:09 -07:00
Andrey Melnikov
8684e44632 update: added logic to inject runtime variables in Workspace templates 2020-06-18 12:40:08 -07:00
Andrey Melnikov
8c8d4e237a fix: removed db reference to workspace url 2020-06-18 12:36:20 -07:00
Andrey Melnikov
0e2eb1580e fix: removed reference to workspace.url 2020-06-18 12:36:20 -07:00
Andrey Melnikov
72d6892276 update: workspace url is no longer stored in db but is auto generated as it depends on config. 2020-06-18 12:36:20 -07:00
Andrey Melnikov
24348647a8 poc: proof of concept for a server that detects configmap changes and updates the server accordingly. 2020-06-18 12:36:20 -07:00
Andrey Melnikov
d736e773ca Merge pull request #356 from onepanelio/fix/onepanelio.core.355-migrations.crash
fix: migrations crash
2020-06-18 12:32:28 -07:00
Andrey Melnikov
fddf2d6a81 fix: fixed issue where channels were not working for restarting server. 2020-06-18 11:55:01 -07:00
Andrey Melnikov
7df9ac6240 test: locks instead of channels 2020-06-17 19:56:37 -07:00
Rush Tehrani
7ddd6873ea Merge branch 'feat/onepanelio.core-348.system.updates' into fix/params 2020-06-17 17:27:47 -07:00
Andrey Melnikov
63011e1ab4 fix: issue where watch was started multiple times. 2020-06-17 15:01:44 -07:00
Andrey Melnikov
b6c67dd774 fix: added missing volume 2020-06-17 12:58:59 -07:00
Andrey Melnikov
c91efc7a60 fix: added missing migration 2020-06-17 12:27:07 -07:00
Andrey Melnikov
b6b8d624d1 fix: removed constraint on workflow template migration for uid.
This fixes an issue where the go migrations to add templates crashed because the current code assumes uid no longer exists for workflow template versions, but at that point in time, it still does.
2020-06-17 11:41:22 -07:00
rushtehrani
504c4bf597 workspaceSpec => spec 2020-06-16 21:32:56 -07:00
rushtehrani
f19d3b4e53 allow user to use {{workspace.parameters}} in workspace template 2020-06-16 21:26:14 -07:00
Andrey Melnikov
c657a004f0 fix: removed references to workflow template version uid as it is not needed and currently causing a crash with migrations as it is set to the timestamp, which is limited to second precision 2020-06-16 20:06:24 -07:00
Andrey Melnikov
3253aac814 fix: issue where the wrong workflow template was being logged 2020-06-16 19:47:44 -07:00
Andrey Melnikov
57502417ad fix: migrations return the error instead of crashing. This allows goose to perform any logic it needs to respond. 2020-06-16 19:47:29 -07:00
Andrey Melnikov
56777b48c3 fix: parameter name 2020-06-16 10:47:48 -07:00
Andrey Melnikov
3074622046 Merge branch 'dev' into feat/onepanelio.core-348.system.updates 2020-06-16 10:46:27 -07:00
Andrey Melnikov
ba72b1435f clean: code cleanup and minor documentation 2020-06-16 10:30:37 -07:00
Andrey Melnikov
d56b728995 update: added logic to inject runtime variables in Workspace templates 2020-06-15 18:42:47 -07:00
Aleksandr Melnikov
d213fda778 Merge pull request #351 from onepanelio/fix/shared-memory
fix: Shared memory in Workspaces
2020-06-15 17:12:38 -07:00
Andrey Melnikov
a983e26b92 fix: removed db reference to workspace url 2020-06-15 14:06:51 -07:00
Andrey Melnikov
9f6a1be08e fix: removed reference to workspace.url 2020-06-15 14:06:06 -07:00
Andrey Melnikov
9c356dfd8b update: workspace url is no longer stored in db but is auto generated as it depends on config. 2020-06-15 13:56:22 -07:00
rushtehrani
814b289024 fix shared memory issues in Workspaces 2020-06-12 18:55:21 -07:00
Andrey Melnikov
ee9cf10667 Merge pull request #350 from onepanelio/feat/volume-claims
feat: Allow users to define their own VolumeClaimTemplates
2020-06-12 10:44:36 -07:00
rushtehrani
5b69516867 skip parameters for volumes that have storage set 2020-06-11 22:23:39 -07:00
rushtehrani
0c28cc1576 rename field 2020-06-11 21:06:10 -07:00
rushtehrani
7cddeb9311 feat: Custom volume claim templates 2020-06-11 20:59:29 -07:00
Andrey Melnikov
64a078f4d6 poc: proof of concept for a server that detects configmap changes and updates the server accordingly. 2020-06-11 20:19:48 -07:00
rushtehrani
3f4d84398b += 1 => ++ 2020-06-11 12:23:06 -07:00
rushtehrani
5ecd8ca185 order contributors by number of contributions 2020-06-11 12:08:30 -07:00
rushtehrani
73e7cda6f1 fix contributor sorting 2020-06-11 11:16:17 -07:00
Rush Tehrani
9af50d36b3 Merge pull request #346 from onepanelio/feat/authorization.updates
feat: Centralize authorization to one endpoint
2020-06-10 23:02:03 -07:00
Andrey Melnikov
0e9ec72527 update: error variable names to just err for simplicity 2020-06-10 22:56:24 -07:00
Andrey Melnikov
b8191f6b1f Merge remote-tracking branch 'origin/feat/onepanelio.core.266-is.authorized.changes' into feat/authorization.updates 2020-06-10 22:44:51 -07:00
Andrey Melnikov
5f6b995564 chore: added comments to some modified methods 2020-06-10 22:38:32 -07:00
Andrey Melnikov
beb867eb22 Merge remote-tracking branch 'origin/feat/onepanelio.core.266-is.authorized.changes' into feat/onepanelio.core.266-is.authorized.changes 2020-06-10 15:25:48 -07:00
Andrey Melnikov
cd8298b654 fix: config missing for goose 2020-06-10 15:25:34 -07:00
rushtehrani
c4d9c8b9a8 check != nil first 2020-06-10 14:34:50 -07:00
Andrey Melnikov
6e1a3729f2 fix: wrong config 2020-06-10 14:26:26 -07:00
Andrey Melnikov
483c79abb3 update: cache system config for entire application and not just per request 2020-06-10 14:19:33 -07:00
Andrey Melnikov
79d5babfcb update: IsAuthorized request to only be POST since the additional HEAD binding didn't work. Also updated the request to get data from headers if nothing is in body. 2020-06-10 10:44:33 -07:00
Aleksandr Melnikov
322265dce2 Merge pull request #339 from onepanelio/chore/release-cmd
chore: update release command
2020-06-09 11:53:49 -07:00
Aleksandr Melnikov
3079bbf0be Adding code to print the error. 2020-06-09 11:22:14 -07:00
Andrey Melnikov
78a9b845a8 Merge pull request #343 from onepanelio/refactor/correct-context-name
refactor: clean up client code
2020-06-09 10:31:34 -07:00
rushtehrani
40eb461541 update Windows installation info 2020-06-08 23:37:23 -07:00
rushtehrani
3c03bd5d6c list changelog items in asc order 2020-06-08 16:15:01 -07:00
rushtehrani
ddd529f9bf allow for all conventional commit prefixes 2020-06-08 16:05:55 -07:00
rushtehrani
4c4d01ed09 use non-string context key 2020-06-08 15:43:31 -07:00
rushtehrani
601541ebbf always use ClientContextKey 2020-06-08 15:32:21 -07:00
rushtehrani
5f6bda8838 refactor: clean up client code 2020-06-08 15:25:02 -07:00
Andrey Melnikov
c226ff8419 update: removed code specific to x-original-auth based on changes upcoming to structure.
* Auth token will always be present unless you are validating an auth token.
2020-06-08 14:44:28 -07:00
Andrey Melnikov
8cd3cc5836 update: cache system config 2020-06-08 14:03:59 -07:00
Andrey Melnikov
27203d4d7f docs: for AuthServer 2020-06-08 11:59:00 -07:00
Rush Tehrani
ecadd189a2 Create issue_label_bot.yaml 2020-06-07 12:33:05 -07:00
rushtehrani
be4ce07b7c gen-release-md structs should not be exported 2020-06-06 19:15:27 -07:00
rushtehrani
a30b46dff9 print contributor names in alphabetical order 2020-06-06 14:44:19 -07:00
rushtehrani
295a3b9484 update instructions 2020-06-06 14:33:57 -07:00
rushtehrani
c9ee8f301e handle 403 status code 2020-06-06 14:11:14 -07:00
rushtehrani
a8a97d608e update release command 2020-06-06 14:03:29 -07:00
Andrey Melnikov
77a457ae01 fix: wrong group permissions 2020-06-05 16:03:14 -07:00
Andrey Melnikov
88955d4e15 fix: issue where request data did not come through to api 2020-06-05 16:03:05 -07:00
Rush Tehrani
b68de30418 Merge pull request #321 from onepanelio/dev
chore: dev > master  (v0.10.0)
2020-06-05 13:06:29 -07:00
Rush Tehrani
facbed59bc Merge pull request #335 from onepanelio/feat/core.288-add.pytorch.tensorflow.workspace.template.migrations
feat: Adding Pytorch and Tensorflow to workflow templates, as runnable workflow executions.
2020-06-05 12:56:08 -07:00
rushtehrani
71781426e0 template name changes + comments on metrics 2020-06-05 12:55:36 -07:00
Aleksandr Melnikov
f48e749721 Adding comments. 2020-06-05 12:34:04 -07:00
Aleksandr Melnikov
56f87f39d6 Using the right archive function for workflow templates. 2020-06-05 12:07:42 -07:00
Aleksandr Melnikov
334642c091 Commenting out more slack related code. 2020-06-05 12:07:42 -07:00
Aleksandr Melnikov
4cd5e619a5 Initial code of adding templates, up and down code. 2020-06-05 12:07:42 -07:00
Aleksandr Melnikov
b3a0365447 Adding placeholder migration files. 2020-06-05 12:07:42 -07:00
Rush Tehrani
dedc295441 Update LICENSE 2020-06-04 19:50:39 -07:00
rushtehrani
07d6c1cc4b update gen-release-md command 2020-06-04 19:17:30 -07:00
Rush Tehrani
38becdd251 Merge pull request #330 from onepanelio/fix/docker.build.breaking
fix: fix docker build
2020-06-04 18:33:05 -07:00
Rush Tehrani
2108691f68 Update PULL_REQUEST_TEMPLATE.md 2020-06-04 18:26:20 -07:00
Aleksandr Melnikov
3c2786ed6d Updating paths in README under cmd dir. 2020-06-04 18:05:31 -07:00
Aleksandr Melnikov
3378899c5c Adding explanation to contributing. 2020-06-04 18:05:13 -07:00
Aleksandr Melnikov
1efd66d010 Updating path in Dockerfile. 2020-06-04 18:04:31 -07:00
Aleksandr Melnikov
4895d48e11 Moving commands into their own folders. 2020-06-04 18:04:14 -07:00
Rush Tehrani
df7ce2f752 Merge pull request #328 from onepanelio/chore/update-commands
chore: update gen-release-md command and README
2020-06-04 16:36:52 -07:00
Rush Tehrani
0262a9ec90 Update PULL_REQUEST_TEMPLATE.md 2020-06-04 16:01:17 -07:00
Rush Tehrani
c6c8e80516 Delete badge.yaml 2020-06-04 15:54:12 -07:00
rushtehrani
f20a7a2b14 fix README headings 2020-06-04 15:52:39 -07:00
rushtehrani
327c73f22a chore: update gen-release-md command and README 2020-06-04 15:47:00 -07:00
Rush Tehrani
b3e7ed5941 Merge pull request #326 from onepanelio/fix/slack-yaml
fix: Slack notify YAML indentation
2020-06-04 15:24:42 -07:00
Rush Tehrani
9381dd0a85 Update badge.yaml 2020-06-04 14:52:37 -07:00
Andrey Melnikov
e2f027dd61 update: centralized authorization logic for workspace actions into one IsAuthorized endpoint 2020-06-04 14:01:07 -07:00
Rush Tehrani
b6f7118a43 Create badge.yaml 2020-06-04 12:56:27 -07:00
Rush Tehrani
f7b941f8a0 Update PULL_REQUEST_TEMPLATE.md 2020-06-04 12:52:45 -07:00
rushtehrani
9996bfbbc3 fix: Slack notify YAML indentation 2020-06-04 11:41:46 -07:00
Aleksandr Melnikov
574301df07 Merge pull request #323 from onepanelio/fix/code.refactor
fix: Fixing function name.
2020-06-04 10:22:28 -07:00
rushtehrani
6834f660d7 fix: use correct method name 2020-06-04 10:00:56 -07:00
Aleksandr Melnikov
e8e37cd8ea Fixing function name. 2020-06-04 09:59:28 -07:00
Rush Tehrani
a47bbe949b Merge pull request #286 from onepanelio/feat/add.cvat.migration.template
feat: add cvat migration template
2020-06-04 09:51:02 -07:00
Aleksandr Melnikov
7c72a36e8b Fixing parameter to fix convention. 2020-06-04 09:12:16 -07:00
Aleksandr Melnikov
8d4989d2db Commenting more functions per codacy. 2020-06-04 09:08:37 -07:00
Aleksandr Melnikov
2de59c22cf Fixing "Id" in function name. 2020-06-04 09:05:13 -07:00
Aleksandr Melnikov
d23ce9b6a9 Documenting package migration. 2020-06-04 09:04:42 -07:00
Aleksandr Melnikov
02f3904d6a Documenting cvat migrations. 2020-06-04 08:52:21 -07:00
rushtehrani
883b7bee30 clean up migrations 2020-06-03 18:27:17 -07:00
Aleksandr Melnikov
ff7aa917f7 Removing column that does not exist. 2020-06-03 16:57:22 -07:00
Rush Tehrani
e00a54c24e Create semantic.yml 2020-06-03 16:04:19 -07:00
Aleksandr Melnikov
183296ff63 Merge pull request #312 from onepanelio/chore/gen-release-md-script
chore: generate release MD script
2020-06-03 13:31:58 -07:00
Aleksandr Melnikov
9d23b111b6 Marking goose up/down errors as fatal.
- Migrations should not go on if there is an error
2020-06-03 12:47:34 -07:00
Aleksandr Melnikov
8b26a84162 Updated ArchiveWorkspaceTemplate.
- Fixed various error message responses
- Added code to grab the WorkspaceTemplate versions
Then, code will run through these versions and grab workspaces that use
that version.
Then, code will try to Archive those workspaces (delete k8s resources,
archive database entries).
Finally, code cleans up the related WorkflowTemplate.
- Updated method docs
2020-06-03 12:46:33 -07:00
Andrey Melnikov
9d3150ccd3 Merge pull request #309 from onepanelio/fix/sys-param-priority
fix: sys param priority
2020-06-03 10:56:43 -07:00
rushtehrani
6460fefbd8 append user defined parameters after sys params 2020-06-02 22:31:52 -07:00
Rush Tehrani
7a9aa28210 Merge pull request #310 from onepanelio/feat/onepanelio.core.147-workflow.executions.template.version
feat: workflow template created at is selected when listing workflow executions
2020-06-02 19:10:36 -07:00
rushtehrani
1c085d8794 chore: Generate release MD script 2020-06-02 19:01:51 -07:00
Aleksandr Melnikov
1055b228a1 Re-arranged the code that archives the workspace template.
- This code was re-arranged to focus on archiving the k8s components
first, then the database.
- Also, workspace components are archived first,
because they rely on the workflow templates being present.
If workflow template is archived first, then the clean-up
can't resume to run again if some error is thrown.
This arrangement will ensure that if an error occurs during clean-up,
it can be re-run without throwing an error of missing prerequisite data.
- Removed an early return statement, which prevented the rest
of the clean-up
- Added extra code to not return an error if no workflow templates
are found in the database. This is to ensure k8s cleanup can continue.
2020-06-02 17:09:54 -07:00
Aleksandr Melnikov
05ad9ca2cc Added code to handle a case where there are no workspaces returned.
- This is if there are no workspaces in the database.
2020-06-02 17:06:15 -07:00
Aleksandr Melnikov
0f5d27a60d Fixing an issue with Down migrations.
- The passed in name was not converted to the UID format, so the code
could never find the relevant data.
2020-06-02 17:05:36 -07:00
Aleksandr Melnikov
1390d4d235 Updating error reporting to always return the source error.
- If extra errors, add them as text.
2020-06-02 16:18:55 -07:00
Aleksandr Melnikov
bf37713371 Migration fails silently because the insert statement lacked "uid" value. 2020-06-02 16:18:37 -07:00
Andrey Melnikov
88b20d878d update: workflow template created at is selected when listing workflow executions 2020-06-02 15:23:47 -07:00
rushtehrani
8d29cd0c5c remove extra space 2020-06-02 14:32:34 -07:00
rushtehrani
dafaadd80a fix kind 2020-06-02 14:26:10 -07:00
rushtehrani
4f036468b0 add PR template 2020-06-02 14:14:45 -07:00
Rush Tehrani
8df966fcee Create PULL_REQUEST_TEMPLATE.md 2020-06-02 14:10:45 -07:00
Andrey Melnikov
6d8ac266a3 chore: created new dev branch to phase out develop. Updated the workflow to push develop branch 2020-06-02 10:33:53 -07:00
Aleksandr Melnikov
6e9ffed843 Adding custom goose binary to dockerfile.
- This will add the goose command with the ".go" migration files.
This is needed to run goose down commands.
goose.go is needed to generate an executable.
2020-06-01 21:30:41 -07:00
Rush Tehrani
20777ed3ce Merge pull request #306 from onepanelio/feat/onepanelio.core.294-last.modified.at
update: Workflow Template now gets a modifiedAt date, and total versi…
2020-06-01 16:40:16 -07:00
Andrey Melnikov
fa68d2bef4 update: Workflow Template now gets a modifiedAt date, and total version count, from the the Get endpoint. 2020-06-01 16:09:35 -07:00
Andrey Melnikov
2726ec8d82 Merge pull request #298 from onepanelio/fix/workspace-update
fix: workspace update waits for correct success condition
2020-06-01 15:28:28 -07:00
Aleksandr Melnikov
a9df73e63a Merge pull request #281 from onepanelio/chore/fix-version
fix: version and names
2020-06-01 12:55:30 -07:00
Rush Tehrani
b8ca62efda Merge pull request #305 from onepanelio/fix/onepanelio.core.304-labels.listing.order
Fix/onepanelio.core.304 labels.listing.order
2020-06-01 12:43:57 -07:00
Andrey Melnikov
afd1b65dc5 fix: issue where labels were not sorted in any order when returned in API 2020-06-01 12:36:34 -07:00
Rush Tehrani
b7f298035d Merge pull request #303 from onepanelio/fix/onepanelio.core.296-workflow.template.count.wrong
fix: issue where workflow template count included system workflow tem…
2020-06-01 11:49:32 -07:00
Andrey Melnikov
90733b5daa fix: issue where workflow template count included system workflow templates. 2020-06-01 11:35:16 -07:00
Aleksandr Melnikov
35aef3819f Changing migrations to use ArchiveWorkspaceTemplate.
Ref: https://github.com/onepanelio/core/pull/286#discussion_r432901056
2020-06-01 10:59:47 -07:00
rushtehrani
bbe5593b52 add version flag to make api 2020-06-01 10:22:48 -07:00
rushtehrani
7911ff02cc check successCondition of statefulset at creation time as well 2020-05-31 23:27:40 -07:00
rushtehrani
f1ecb595b4 fixes workspace update success condition 2020-05-31 22:47:17 -07:00
rushtehrani
010052de3a update cvat images 2020-05-30 18:12:16 -07:00
rushtehrani
56856caa8a update name and rebase 2020-05-30 18:10:47 -07:00
Aleksandr Melnikov
3d3c9d6a66 Removing sleep command.
- Per testing, a migration error does not happen with an Azure deployment.
2020-05-30 18:05:49 -07:00
Aleksandr Melnikov
159d1819b0 Adding migration for CVAT Workspace Template. 2020-05-30 18:05:49 -07:00
Rush Tehrani
5597e14985 Merge pull request #260 from onepanelio/feature/add.jupyter.lab.to.workspace.templates
feature: added migration with jupyterlab
2020-05-30 18:03:54 -07:00
rushtehrani
7b570f861e fix db connection 2020-05-30 17:59:02 -07:00
Rush Tehrani
c6c2079226 Merge pull request #295 from onepanelio/fix/onepanelio.core.292-workspace.labels.fail
fix: issue where workspace labels did not take into account archived …
2020-05-30 15:53:31 -07:00
Andrey Melnikov
b9d5f24f37 fix: issue where workspace labels did not take into account archived ones. 2020-05-29 21:21:38 -07:00
Rush Tehrani
738d3a0050 Merge pull request #290 from onepanelio/feat/onepanelio.core.282-key.format
update: hard-coded artifacts key format with the new config.
2020-05-29 13:22:33 -07:00
Andrey Melnikov
64f6afc730 fix: replace KeyFormat placeholders with the actual value. 2020-05-29 11:43:13 -07:00
Andrey Melnikov
04bc8f2e12 update: hard-coded artifacts key format with the new config. 2020-05-29 11:27:08 -07:00
Rush Tehrani
67f4634ae0 Merge pull request #284 from onepanelio/fix/onepanelio.core.264-post.execution.workflow.optional
fix: added a default post execution workflow if there wasn't one alre…
2020-05-29 10:05:38 -07:00
Andrey Melnikov
271b1ed563 update: removed default PostExecution and only add the post execution if it exists in the setup 2020-05-28 16:53:16 -07:00
Rush Tehrani
b7c6d33c9e Merge pull request #283 from onepanelio/fix/onepanelio.core.277-sys.send.exit.status
fix: set workspaces dags to be FailFast: false so that even if anothe…
2020-05-28 16:23:55 -07:00
Andrey Melnikov
a138413c5f update: exit handler no longer depends on other exit handlers. This fixes an issue where the user's custom exit handler could crash, leaving ours not executed. 2020-05-28 16:14:16 -07:00
Andrey Melnikov
ca1c672f0d fix: added a default post execution workflow if there wasn't one already. 2020-05-28 13:26:15 -07:00
Andrey Melnikov
b41ddcdc2c fix: set workspaces dags to be FailFast: false so that even if another part of the dag fails, the sys-exit will not. 2020-05-28 12:28:51 -07:00
Andrey Melnikov
48f543b9f6 Merge pull request #280 from onepanelio/fix/onepanelio.278-list.workspace.labels
fix: added labels to list workspace method
2020-05-28 10:23:37 -07:00
Rush Tehrani
e41eb4a087 Merge pull request #269 from onepanelio/feat/core.254-workflow.counts
fix: update archive code to list all the template versions.
2020-05-28 10:17:41 -07:00
rushtehrani
73535da7fa make API 2020-05-28 10:09:08 -07:00
rushtehrani
84ddd0d0da correct API version and name 2020-05-28 10:08:25 -07:00
rushtehrani
7600f79776 update README 2020-05-28 10:08:25 -07:00
Andrey Melnikov
2164b644e6 update: removed snapshot from develop branch for GithubActions 2020-05-28 10:08:25 -07:00
Andrey Melnikov
29e1550446 fix: added labels to list workspace method 2020-05-27 22:44:39 -07:00
Aleksandr Melnikov
f2d8165016 Updating archive code to list all the template versions.
- Iterate through each version and grab the related WorkflowExecutions,
then archive them.
2020-05-26 22:09:25 -07:00
Andrey Melnikov
e8c17a04ee feature: added migration with jupyter lab 2020-05-26 10:45:56 -07:00
Rush Tehrani
cfd9bc6f43 Add badge 2020-05-25 13:38:05 -07:00
Rush Tehrani
3ee8497cac Merge pull request #258 from onepanelio/develop
dev > master
2020-05-25 13:37:08 -07:00
Rush Tehrani
58a7019b24 Merge pull request #257 from onepanelio/chore/readme-gh-actions
update README
2020-05-25 13:36:41 -07:00
rushtehrani
212f70cbb5 update README 2020-05-25 13:35:31 -07:00
Andrey Melnikov
18e2c4e411 update: removed snapshot from develop branch for GithubActions 2020-05-25 09:55:19 -07:00
Rush Tehrani
afb7af1bbe Merge pull request #253 from onepanelio/develop
dev > master
2020-05-24 15:44:34 -07:00
Rush Tehrani
9c072f5b46 Merge pull request #250 from onepanelio/fix/onepanelio.core.237-template.tables.archived.not.null
Fix/onepanelio.core.237 template.tables.archived.not.null
2020-05-24 14:31:38 -07:00
Andrey Melnikov
3403efa18c update: renamed migrations to snake case so they are consistent with others. 2020-05-24 11:55:40 -07:00
Andrey Melnikov
d53dbe1097 fix: added migration to set workflow and workspace templates is_archived column to not nullable and default false. 2020-05-24 11:55:19 -07:00
Rush Tehrani
6005f55d63 Merge pull request #247 from onepanelio/feat/update.cron.delete
fix: cron workflows now return UID and the delete endpoint doesn't ha…
2020-05-22 21:01:29 -07:00
Aleksandr Melnikov
9b1ee3fbb7 Merge pull request #248 from onepanelio/fix/wft-versions
fix wtf version display and create issue
2020-05-22 20:55:03 -07:00
rushtehrani
0a80eeede4 fix wtf version displaying and create issue 2020-05-22 20:49:51 -07:00
Andrey Melnikov
9acd4cf6d3 fix: cron workflows now return UID and the delete endpoint doesn't have the terminate suffix.
Also updated Authorized endpoint to not have same path as IsValidToken
2020-05-22 20:25:05 -07:00
Rush Tehrani
8ba2f9f6a1 Merge pull request #246 from onepanelio/fix/delete.scheduled.cron
Fixed TerminateCronWorkflow
2020-05-22 20:22:45 -07:00
Andrey Melnikov
037e735b6b Merge pull request #245 from onepanelio/fix/workspace-validation
fix workspace name validation
2020-05-22 19:55:54 -07:00
rushtehrani
076078601d only allow workspace templates to be deleted if workspace is terminated 2020-05-22 19:52:41 -07:00
rushtehrani
06ada8ff95 use uid in host 2020-05-22 19:38:58 -07:00
Aleksandr Melnikov
b712ba676a Fixed TerminateCronWorkflow
- Code will clean up any WorkflowExecutions, including those in progress.
Code then cleans up the scheduled cron workflow, archiving it in the database.
2020-05-22 19:20:31 -07:00
rushtehrani
9f00c87d9c fix workspace name validation 2020-05-22 19:07:59 -07:00
Rush Tehrani
5f697b22f9 Merge pull request #242 from onepanelio/fix/increase-uid-size
increase column size to 63 for cron workflows and workflow executions
2020-05-22 17:55:54 -07:00
rushtehrani
7ff3ad0c98 uid => name in down migration 2020-05-22 17:32:19 -07:00
rushtehrani
3ebd7ab245 increase column size to 63 for cron workflows and workflo executions 2020-05-22 17:26:58 -07:00
Andrey Melnikov
2d3f51bf27 Merge pull request #241 from onepanelio/feat/core.171-rebase.develop.3
refactored workspace template archive changes.
2020-05-22 17:17:02 -07:00
Andrey Melnikov
0eaa2b5ea2 fix: added is_archived = false to getting a workspace template, otherwise we get non-archived versions and a crash. 2020-05-22 16:44:47 -07:00
Andrey Melnikov
6bc28c4e72 fix: getting workspace template by name ignores archived ones 2020-05-22 16:27:35 -07:00
Andrey Melnikov
2bc8f684c7 refactored workspace template archive changes. 2020-05-22 16:07:50 -07:00
Rush Tehrani
b57ffe8f71 Merge pull request #226 from onepanelio/feat/core.171-archiving.workflow.template.clean.up
Feat/core.171 archiving.workflow.template.clean.up
2020-05-22 16:01:41 -07:00
rushtehrani
617806011c move getCronWorkflowColumns to types.go 2020-05-22 16:01:17 -07:00
Aleksandr Melnikov
e405ccdf04 Removing unused functions. 2020-05-22 15:57:00 -07:00
Aleksandr Melnikov
cd4f429559 Merge branch 'develop' into feat/core.171-archiving.workflow.template.clean.up 2020-05-22 15:44:01 -07:00
Aleksandr Melnikov
f555584fc8 Per https://github.com/onepanelio/core/pull/226/files#r429475185
This method ended up being equal to the one mentioned.
2020-05-22 15:42:25 -07:00
Aleksandr Melnikov
f4743d3790 Making method not public.
Per https://github.com/onepanelio/core/pull/226#discussion_r429473764
2020-05-22 15:35:26 -07:00
Aleksandr Melnikov
7ec544550b Refactored per https://github.com/onepanelio/core/pull/226#discussion_r428964039. 2020-05-22 15:28:59 -07:00
Aleksandr Melnikov
472c50b9d7 Fixing update statement.
- sq has an issue with placeholders.
2020-05-22 15:22:32 -07:00
Aleksandr Melnikov
bd38568e6b Fixing "is_archived" not being set on insert, which had unintentional
consequences for displaying data in UI.
2020-05-22 15:22:14 -07:00
Aleksandr Melnikov
b94aaa8778 Refactoring
- Adding a helper method
https://github.com/onepanelio/core/pull/226#discussion_r428965941
2020-05-22 14:49:01 -07:00
Aleksandr Melnikov
a2521e90f2 Refactoring workflow template archive code.
- Some notes from https://github.com/onepanelio/core/pull/226#discussion_r428964510
Removing archiveWorkflowTemplate, replacing with direct db code.
- Abstraction doesn't help much
Removing DeleteWorkflowTemplateK8S
- Similarly, this abstraction doesn't help. Using direct code
where method was used.
2020-05-22 14:39:39 -07:00
Aleksandr Melnikov
4cdef38325 Refactoring CronWorkflow pkg
- Terminate function will focus on deleting data
- Archive will delete k8s but archive db data
Removing DB and K8s specific methods
- Per code guidelines, these do not add anything by abstracting them away.
2020-05-22 14:30:30 -07:00
Aleksandr Melnikov
16b3f37b1d Refactoring per feedback.
- https://github.com/onepanelio/core/pull/226#discussion_r429046881
Removing helper methods that are not saving code.
- This also fixes k8s / db methods that were exposed from the package.
Instead, using an ArchiveWorkflowExecution function to achieve
the same functionality.
2020-05-22 13:44:00 -07:00
Aleksandr Melnikov
375ef146f3 Removing unused function.
- Referenced: https://github.com/onepanelio/core/pull/226#discussion_r429026779
2020-05-22 12:53:40 -07:00
Aleksandr Melnikov
b91a82ece8 Refactored is_archived columns to be not null, default false.
Fixed the migration down.
2020-05-22 12:43:33 -07:00
Aleksandr Melnikov
bc1236fef3 Updated cron workflow and workflow execution select queries.
- Exclude "is_archived" rows.
2020-05-22 11:59:43 -07:00
Aleksandr Melnikov
d4fbd71d55 Updating workflow execution selection to not return archived executions. 2020-05-21 22:37:50 -07:00
Aleksandr Melnikov
123e8830bf Moving the workflow template clean-up to the end.
- This way, if some part of the process fails, it can be re-run again
for testing.
2020-05-21 22:33:34 -07:00
Aleksandr Melnikov
e8c28175f5 Fixing queries not executing. 2020-05-21 22:33:12 -07:00
Aleksandr Melnikov
860dc7398c Updating function names per feedback. 2020-05-21 22:20:00 -07:00
Aleksandr Melnikov
1a9ce9870d Refactoring DB queries related to archiving.
- Using Squirrel RunWith instead of ToSql.
2020-05-21 22:19:26 -07:00
Rush Tehrani
d273037954 Merge pull request #236 from onepanelio/fix/onepanelio.core.234-workflow.details.issues
Fix/onepanelio.core.234 workflow.details.issues
2020-05-21 16:07:28 -07:00
Andrey Melnikov
6d494a9643 update: added omitempty to json serialization of Parameters so they don't show empty values in the DB parameters. 2020-05-21 15:24:54 -07:00
Aleksandr Melnikov
e6d30407c9 Adding "is_archived" column to cron workflows and workflow executions. 2020-05-21 15:20:08 -07:00
Andrey Melnikov
ea5d4d56fb update: Updated GetWorkflowExecution request to also get information for the workflow template, since we query for it anyway. 2020-05-21 15:13:26 -07:00
Aleksandr Melnikov
92b3b2ae23 Adding index to cron workflows
- uid and namespace
2020-05-21 14:55:52 -07:00
Aleksandr Melnikov
92b9aba0d1 Adding namespace to cron workflow related code. 2020-05-21 12:47:42 -07:00
Aleksandr Melnikov
eed930c7f6 Adding namespace to Cron Workflow.
- Proto files
2020-05-21 12:45:10 -07:00
Aleksandr Melnikov
eb13274243 Added migration to add namespace column to cron workflows
#CORE-227
2020-05-21 12:19:30 -07:00
Rush Tehrani
a15e9fb3d3 Merge pull request #231 from onepanelio/feat/no-compression
feat: don't compress artifacts by default
2020-05-21 10:38:46 -07:00
rushtehrani
79aa54c0c1 don't compress artifacts by default 2020-05-21 08:35:13 -07:00
Aleksandr Melnikov
68ffbb1d93 Refactoring raw SQL to use squirrel. 2020-05-20 15:53:12 -07:00
Aleksandr Melnikov
b79cfa019f Added code to clean up Workflow Executions.
- Removes db and k8s entries.
2020-05-20 14:59:01 -07:00
Aleksandr Melnikov
819f48efde Added code to clean up CronWorkflows when a template is archived.
- Code iterates through all the related CronWorkflows
Deletes their workflowExecutions from k8s and db
Deletes the CronWorkflow from k8s and db
2020-05-20 14:28:05 -07:00
Aleksandr Melnikov
381fba4c8f Refactoring TerminateCronWorkflow into separate methods.
- Need these methods for archiving
2020-05-20 14:18:59 -07:00
Andrey Melnikov
1daca92c3e Merge pull request #215 from onepanelio/feat/archive.workspace.templates
Feat/archive.workspace.templates
2020-05-20 13:36:01 -07:00
Aleksandr Melnikov
81566969c7 Merge pull request #223 from onepanelio/feat/ns-scoped-artifact-config
feat: ns scoped artifact config
2020-05-20 13:32:19 -07:00
Rush Tehrani
af98871c0f Merge pull request #220 from onepanelio/fix/crashing.workflow.execution.watch
fix: fixed an issue where workflow watch crashed and closed web…
2020-05-20 13:30:36 -07:00
Andrey Melnikov
60e85c76e5 Merge pull request #224 from onepanelio/feat/core.214.errors
fix: added more detailed error message for 409 workspace template to …
2020-05-20 12:30:31 -07:00
Andrey Melnikov
d4f849073c fix: added more detailed error message for 409 workspace template to distinguish between archived workspace taking the name, or another template.
Also changed IsArchived to be a bool type instead of string for workspace template type, as that's what it is in the database.
2020-05-20 12:29:28 -07:00
rushtehrani
6d0260a623 get artifactRepository config separately 2020-05-20 12:15:53 -07:00
Aleksandr Melnikov
37350f78fb Added DeleteWorkflowTemplate function. 2020-05-20 12:01:14 -07:00
Andrey Melnikov
f3deea797b update: reworked watching workflow execution to keep watching until the workflow is done or failed. 2020-05-20 11:23:03 -07:00
Aleksandr Melnikov
adf117d56b Adding notes about utils and pkg directories. 2020-05-20 09:50:50 -07:00
Andrey Melnikov
dc1972a808 fix: (WIP) fixed an issue where workflow watch crashed and closed websocket, despite the workflow still running. 2020-05-19 20:59:05 -07:00
rushtehrani
609f24fcb2 update documentation 2020-05-19 18:03:58 -07:00
rushtehrani
933e1fa6fd add json tags for proper marshalling 2020-05-19 17:53:58 -07:00
rushtehrani
a7d075e7c7 use correct http method 2020-05-19 17:40:22 -07:00
rushtehrani
2df35cb27e add workflow status webhook 2020-05-19 17:33:02 -07:00
Aleksandr Melnikov
a46864a38f Ran into a case where the index being created already exists.
- Minor formatting
2020-05-19 15:13:53 -07:00
Aleksandr Melnikov
0aced56569 Added checking for existence of constraints.
- Since this is run on start-up and not in production, we're fine
2020-05-19 15:13:27 -07:00
rushtehrani
227d9c0d4e move functions to respective types 2020-05-19 14:57:41 -07:00
Andrey Melnikov
e0096f9be6 documentation: for ArchiveWorkspaceTemplate 2020-05-19 13:57:44 -07:00
Andrey Melnikov
4f8a92c7a4 fix: added case where a workspace is terminating - a workspace can be archived if all of it's workspaces are terminating. 2020-05-19 13:54:01 -07:00
Andrey Melnikov
21baabd634 update: check if workspace template has running workspaces before archiving it. 2020-05-19 13:47:38 -07:00
rushtehrani
260dd334f6 update api + remove unused import 2020-05-19 12:57:37 -07:00
Andrey Melnikov
9deee0cc8c Merge pull request #213 from onepanelio/feat/resource-env-vars
feat: resource env vars
2020-05-19 12:43:55 -07:00
rushtehrani
8540bb82b7 add comment to function + named return value 2020-05-19 12:40:22 -07:00
rushtehrani
ac8c622769 remove length check since range will not iterate on 0 length slices 2020-05-19 12:31:15 -07:00
Rush Tehrani
e75170d468 Merge pull request #205 from onepanelio/fix/labels
fix: remove label uid and fix migration
2020-05-19 11:38:48 -07:00
Andrey Melnikov
2c9dbf52b3 feature: Added ArchiveWorkspaceTemplate endpoint.
update: listing workspace templates ignores archived ones now.
2020-05-19 11:27:19 -07:00
rushtehrani
679d7e50b5 add resource env vars 2020-05-18 22:10:44 -07:00
rushtehrani
3f5108121b remove unused methods 2020-05-18 21:43:02 -07:00
rushtehrani
8ddab20769 append artifact repository to outputs as well if only key is provided 2020-05-18 19:49:18 -07:00
Andrey Melnikov
afda5003e7 fix: issue where workspace labels were not persisting on creation 2020-05-18 19:19:16 -07:00
Rush Tehrani
ac229239fa Merge pull request #210 from onepanelio/feat/core.208-expose.isauthorized
Feat/core.208 expose.isauthorized
2020-05-18 18:20:45 -07:00
rushtehrani
7c5f79ac60 add conditional uq index 2020-05-18 17:21:37 -07:00
Aleksandr Melnikov
abea64f05f Merge pull request #209 from onepanelio/feat/input-artifacts-config
feat: update namespace config structure
2020-05-18 16:53:51 -07:00
Andrey Melnikov
72fbff18cd fix: issue where workflow template labels did not work 2020-05-18 16:38:17 -07:00
rushtehrani
674c4f81e5 inject default artifact repository 2020-05-18 15:48:38 -07:00
Aleksandr Melnikov
e2d286356f Updating isAuthorized function name to isValidToken
- Simplified the returned values to just err.
- Updating related code
2020-05-18 14:17:38 -07:00
Aleksandr Melnikov
8f94318944 Renaming err2. 2020-05-18 14:03:58 -07:00
Aleksandr Melnikov
e0cca02a3a Added IsAuthorized function to AuthServer
- Put a helper function into isAuthorized.
2020-05-18 13:49:31 -07:00
Aleksandr Melnikov
2b67724e35 Adding IsAuthorized endpoint. 2020-05-18 13:49:27 -07:00
Andrey Melnikov
66760c5f44 fix: issue where labels were not editable for workspaces. 2020-05-18 13:09:02 -07:00
Andrey Melnikov
756010958d fix: GetWorkflowExecution now gets the same columns as List.
Also minor cleanup with method calls.
2020-05-18 12:47:04 -07:00
rushtehrani
cf7d52bb19 namespace config updates 2020-05-18 12:34:05 -07:00
Andrey Melnikov
14af381877 fix: issue where cloning a workflow by uid didn't work. 2020-05-17 14:03:23 -07:00
Andrey Melnikov
f8d7ec73ba fix: deleting labels and getting labels for workflow execution
* Fixed issue where ReplaceLabels did not work when no labels were passed in (a delete essentially)
* Updated workflow execution to also get the labels
* Removed unusued GetResourceIdBuilder method.
2020-05-17 13:25:08 -07:00
Andrey Melnikov
b9ccacc2ea fix: issue where workspace template labels were not working. 2020-05-16 17:37:47 -07:00
Aleksandr Melnikov
a19ae1c1c3 Merge pull request #206 from onepanelio/fix/cron
fix: cron workflow execution
2020-05-15 15:26:40 -07:00
rushtehrani
094503174c remove uid from workspace_template_versions 2020-05-15 13:41:56 -07:00
rushtehrani
1eb25e1b67 fix migrations 2020-05-15 13:27:02 -07:00
rushtehrani
fb09fb621d fix migrations 2020-05-15 13:11:04 -07:00
Andrey Melnikov
feeb42a038 fix: workflow_execution returns a pointer to workflow with get method, so type cast needs to reflect this. 2020-05-15 12:38:13 -07:00
rushtehrani
655bb3c15f don't generate UUID 2020-05-15 12:31:19 -07:00
rushtehrani
96a969fbdb remove label uid and fix migration 2020-05-15 11:25:45 -07:00
Rush Tehrani
84c19a231c Merge pull request #204 from onepanelio/feature/workspace.adjustments
Feature/workspace.adjustments
2020-05-14 20:45:04 -07:00
Rush Tehrani
c075719165 Merge pull request #201 from onepanelio/feat/combined
uid + env var changes
2020-05-14 20:41:15 -07:00
Andrey Melnikov
bad6fe47ec comment: added a comment explaining why we get templateParameters for workspace 2020-05-14 20:37:57 -07:00
rushtehrani
662f353512 update WorkflowExecutionStatisticReport struct 2020-05-14 20:19:20 -07:00
Andrey Melnikov
1595594dc8 fix: added back function that went missing. 2020-05-14 19:18:55 -07:00
rushtehrani
7eac879f40 gen with 3.11.4 version of protoc 2020-05-14 17:20:13 -07:00
Aleksandr Melnikov
56314a0850 Updating pb files. 2020-05-14 17:13:57 -07:00
Aleksandr Melnikov
62c8f5dcb2 Adding support for terminated workflow executions.
- When terminating, adding started_at and finished_at timestamps
Updated workflow_template.proto to return the count of terminated executions.
- Updating supporting code
2020-05-14 17:13:44 -07:00
Andrey Melnikov
21099b7627 update: Added template parameters to a workspace.
This is so we can get the options from a workflow template version, since the parameters for a workspace do not store options.
2020-05-14 16:45:48 -07:00
rushtehrani
61704062ba fix template version update uid 2020-05-14 15:57:44 -07:00
rushtehrani
f530a7fac2 fix workflowTemplate and version uid 2020-05-14 15:46:58 -07:00
Aleksandr Melnikov
076917278b Consolidated UID generation for WorkflowTemplate and WorkspaceTemplate 2020-05-14 15:04:49 -07:00
Aleksandr Melnikov
6a27719167 Updating TerminateWorkflowExecution to not remove the DB workflow entry.
- This keeps the Workflow in the UI list.
2020-05-14 13:47:10 -07:00
Andrey Melnikov
c9438a344b revert: undid storing the options as those can be obtained from the workflow template version. 2020-05-14 11:27:17 -07:00
Andrey Melnikov
9723f5685a update: store workspace parameter options in db 2020-05-14 11:19:55 -07:00
rushtehrani
195a332281 remove unused code 2020-05-14 10:45:38 -07:00
rushtehrani
4aeee1f2ac update api gen 2020-05-14 10:34:04 -07:00
Aleksandr Melnikov
9e48c3b406 Updating name generated to use onepanel uid generation. 2020-05-14 10:31:33 -07:00
Aleksandr Melnikov
3c0a138642 Adding development notes on how to develop core with minikube.
- Added disclaimer about minikube and driver VMWare.
2020-05-14 10:31:33 -07:00
Aleksandr Melnikov
fc10444656 Updating name to uid in cron_workflow and related code. 2020-05-14 10:31:33 -07:00
Aleksandr Melnikov
20151d5108 Adding generated proto files. 2020-05-14 10:31:33 -07:00
Aleksandr Melnikov
bcc72e2567 Changing name to uid for cron_workflow proto requests. 2020-05-14 10:31:33 -07:00
Aleksandr Melnikov
735b10c025 Refactored name to uid. 2020-05-14 10:31:33 -07:00
Aleksandr Melnikov
460b7c0604 Putting UID back as part of the WorkflowExecution response. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
a400d64c81 Revert "Removing uid parameter from WorkflowExecution message."
This reverts commit d9e6c3195a3990dd363b79d9e834a220d6cf499d.

Per discussion, name is okay to return as part of the response.
- It will not be set by user for workflows
2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
c414673b13 Adding generated pb.go files. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
70e38c99c9 Removing uid parameter from WorkflowExecution message. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
b41c2ea848 Changed name to uid for CloneWorkflowExecution.
- Added supporting changes
2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
c1ce0ad17b Changed name to uid for WatchWorkflowExecution. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
2048b7a4eb Using Onepanel UID generator. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
d308761f27 Changed name to uid for GetWorkflowExecution. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
8f257ca73e Removing UID as a value returned by the API request.
- This value is not managed by the user in the UI
- It may impact the UI code, to be determined
2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
452bbfe258 Changing "name" into "uid" for Workflow Execution paths.
- WIP, updates to Core API code remaining.
2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
4ad388e892 Adding import. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
b89a31323d Fixing error message.
- This is specific to us because of how we combine uid and namespace to create the subdomain.
2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
18a795f129 Using GenerateUID to clean up the names. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
184bb1247d Removing sys-uid appending.
- Workflow generates the name on creation. We're continuing to use
workflow.name.
2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
5e86a0e2aa Removing unused namespace parameter. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
2daa821cfb Removing label.WorkflowUid from label, for workflow execution. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
4bf928531a Fixing method name to fit go convention, per feedback. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
f437c9f0f9 Renaming function name per feedback.
- This is a onepanel uid.
2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
c7bd017725 Fixing error information. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
1420248489 Removing un-used function. 2020-05-14 10:29:55 -07:00
Aleksandr Melnikov
998d6bcca4 Removing injected "sys-uid" since we're injecting it before createWorkflow is called. 2020-05-14 10:29:08 -07:00
Aleksandr Melnikov
f7d20e9d54 Exiting loop once param found. 2020-05-14 10:27:15 -07:00
Aleksandr Melnikov
263f963a4c Using parameters instead of labels. 2020-05-14 10:27:15 -07:00
Aleksandr Melnikov
6111abd740 Adding sys-uid to CreateWorkflowExecution.
- Appending if it does not exist
2020-05-14 10:27:15 -07:00
Aleksandr Melnikov
2a88ff8234 Changing length check. 2020-05-14 10:27:15 -07:00
Aleksandr Melnikov
68e7b6b10f Refactoring uid and namespace to be a maximum length of 30.
- 60 altogether
The reason is we use <uid>--<ns>.<domain> for workspace urls.
- The maximum length for the subdomain is 63, per k8s restriction.
These changes will result in a subdomain max of 62 (including the --).
2020-05-14 10:27:15 -07:00
Aleksandr Melnikov
6ce6991156 Changing uid varchar length. 2020-05-14 10:27:15 -07:00
Aleksandr Melnikov
55db5f2708 Adding util function to generate k8s compatible uids (to be used
for k8s name).
2020-05-14 10:27:15 -07:00
Aleksandr Melnikov
963dd9adcc Refactoring migrations.
- uid is now 63 chars long, to fit k8s requirement
- Updating unique indices to use uid and namespace
2020-05-14 10:27:15 -07:00
rushtehrani
e5f5b8d183 fix typo 2020-05-14 01:05:49 -07:00
rushtehrani
c121116b9d move envfrom to util 2020-05-14 00:33:46 -07:00
rushtehrani
dd9e64ccf6 fix envvar mount issue 2020-05-13 23:35:30 -07:00
rushtehrani
5fe29d5f58 add precedence to env vars 2020-05-13 23:05:09 -07:00
rushtehrani
3edbc809de use EnvFrom for mounting env vars in workflows 2020-05-13 21:53:33 -07:00
rushtehrani
fd3dcdec9c fix constant name 2020-05-13 21:34:07 -07:00
rushtehrani
c7caeeb70a add env var to workspace 2020-05-13 21:30:52 -07:00
Rush Tehrani
089a49f8c3 Merge pull request #199 from onepanelio/feature/workspace.adjustments
fix: workspace count did not exclude terminated workspaces.
2020-05-13 12:55:37 -07:00
Andrey Melnikov
b5e5cbf2c6 fix: workspace count did not exclude terminated workspaces. 2020-05-13 12:38:52 -07:00
Andrey Melnikov
e2bc242657 Merge pull request #198 from onepanelio/feat/workspaces
feat: workspace updates
2020-05-13 11:48:52 -07:00
rushtehrani
23a70de39b exclude terminated workspaces from list 2020-05-12 19:54:51 -07:00
rushtehrani
dac2029969 update workspace params 2020-05-12 19:41:32 -07:00
rushtehrani
356459a011 started => launching 2020-05-12 18:17:37 -07:00
Rush Tehrani
a92cd13ffb Merge pull request #197 from onepanelio/feat/url.updates
Feat/url.updates
2020-05-12 16:41:49 -07:00
rushtehrani
7ef68ade48 workspace update 2020-05-12 16:04:35 -07:00
Andrey Melnikov
1c48a9a954 update: Get Workspace to use column select methods.
This adds in workspace template name among other columns.
2020-05-12 15:55:38 -07:00
Andrey Melnikov
99a5d24279 fix: issue where paginationw was not being applied to workspace template query 2020-05-12 10:46:57 -07:00
Andrey Melnikov
5621477465 update: updated logic to get protocol for workspaces to be based off onepanel api url 2020-05-12 10:35:20 -07:00
Rush Tehrani
7772a20482 Merge pull request #196 from onepanelio/feature/workspace.path
fix: issue where url was not selected for workspaces.
2020-05-11 19:16:11 -07:00
Andrey Melnikov
5fdaf16c47 fix: issue where url was not selected for workspaces. 2020-05-11 19:07:31 -07:00
Rush Tehrani
b1559ddf23 Merge pull request #195 from onepanelio/feature/workspace.path
feature: added path for workspaces
2020-05-11 18:51:45 -07:00
Andrey Melnikov
799330b50a fix: typo for inserting workspaces 2020-05-11 18:07:55 -07:00
Andrey Melnikov
4d4d5a23b1 update: rename path -> url 2020-05-11 17:52:20 -07:00
Andrey Melnikov
d11a2c8aa5 fix: added http prefix for path. We automatically redirect to https, so that should handle that case. 2020-05-11 16:56:48 -07:00
Andrey Melnikov
effd641bc7 feature: added path for workspaces 2020-05-11 16:48:48 -07:00
Andrey Melnikov
9e2f065d5d Merge pull request #194 from onepanelio/fix/circular-assignment
remove circular assignment
2020-05-11 16:42:17 -07:00
rushtehrani
43e3a1a97b remove circular assignment 2020-05-11 16:40:44 -07:00
Andrey Melnikov
4be301eb46 fix: sys-host was not being changed with mapping values. 2020-05-11 15:25:39 -07:00
Rush Tehrani
e85561a651 Merge pull request #193 from onepanelio/feature/workspace.api.updates
Feature/workspace.api.updates
2020-05-11 14:15:50 -07:00
Rush Tehrani
35bca23f4d Merge pull request #192 from onepanelio/feat/workspaces
feat: workspace update using uid + curl node with retries
2020-05-11 14:15:24 -07:00
Andrey Melnikov
1f9d68c382 Merge branch 'feat/simplify.create.workflow.execution' into feature/workspace.api.updates 2020-05-11 13:45:09 -07:00
Andrey Melnikov
9600794c38 update: List Workspaces request to include the workspace template information. 2020-05-11 12:18:31 -07:00
rushtehrani
6c785ed2a6 add is_system to workflow_templates for sys workflows 2020-05-10 20:42:33 -07:00
rushtehrani
1a387f6c72 get the correct version of workspace template 2020-05-10 13:30:20 -07:00
rushtehrani
1b4e16a168 update is_latest when a new workspace template version is added 2020-05-09 20:37:43 -07:00
rushtehrani
90804b77be change update workspace to use uid 2020-05-09 20:26:24 -07:00
Rush Tehrani
b4fc0b024e Merge pull request #191 from onepanelio/feat/simplify.create.workflow.execution
Feat/simplify.create.workflow.execution
2020-05-09 19:11:49 -07:00
Andrey Melnikov
9b8d3e83a9 update: swagger with recent workspace status changes. 2020-05-09 19:08:08 -07:00
rushtehrani
572a20a308 add retries to curl command 2020-05-09 18:52:01 -07:00
Andrey Melnikov
3a9e84c4a5 update: select columns for workspace status. 2020-05-09 18:31:26 -07:00
Andrey Melnikov
d611a8ca0c update: removed fields from workspace that are already in status. 2020-05-09 18:05:08 -07:00
Andrey Melnikov
df7c38de32 update: injectParameters to detect existing parameters by name and override them. 2020-05-08 20:47:50 -07:00
Andrey Melnikov
4543d381ce fix: verb for getting a workspace create -> get 2020-05-08 20:41:16 -07:00
Andrey Melnikov
383e915fa3 update: added labels and workspace type 2020-05-08 20:38:41 -07:00
Andrey Melnikov
5fc913fa7a Merge branch 'feat/simplify.create.workflow.execution' of github.com:onepanelio/core into feat/simplify.create.workflow.execution 2020-05-08 20:38:07 -07:00
Andrey Melnikov
1b30721a05 update: api definition and more fields for workspace. 2020-05-08 20:33:13 -07:00
Andrey Melnikov
8bfbf561a5 update: api definition and more fields for workspace. 2020-05-08 20:16:13 -07:00
Rush Tehrani
2aca938df8 Merge pull request #190 from onepanelio/feat/workspaces
feat: additional workspace fixes and actions
2020-05-08 18:45:12 -07:00
rushtehrani
14c6c6b8a7 resume workspace 2020-05-08 18:43:22 -07:00
rushtehrani
f472b9263e fix issue with workspace creation 2020-05-08 17:57:42 -07:00
Rush Tehrani
a0196f433f Merge pull request #189 from onepanelio/feat/workspaces
feat: use uid in workspaces
2020-05-08 16:21:33 -07:00
rushtehrani
cc7cd1201b check for existing workspace on creation 2020-05-08 16:21:00 -07:00
rushtehrani
de9947defa change namespace and uid to 30 characters each 2020-05-08 15:53:30 -07:00
rushtehrani
841c3bc635 use sys-uid instead of sys-name 2020-05-08 15:10:30 -07:00
rushtehrani
5659975fb9 generate UID based on name 2020-05-08 14:26:10 -07:00
Rush Tehrani
61763f7eaf Merge pull request #188 from onepanelio/feature/simplify.workflow.executions
update: Workflow Execution body into a separate message
2020-05-08 14:25:05 -07:00
Andrey Melnikov
e339e698d0 update: Workflow Execution body into a separate message 2020-05-08 13:25:58 -07:00
Rush Tehrani
79d02f2b5c Merge pull request #185 from onepanelio/feature/simplify.workflow.executions
update: simplified create workflow execution
2020-05-08 13:12:24 -07:00
Rush Tehrani
e7483535f8 Merge pull request #187 from onepanelio/revert-183-feat/simplify.create.workflow.execution
Revert "update: simplified request for creating a workflow execution."
2020-05-08 13:11:37 -07:00
Rush Tehrani
3a8e170e73 Revert "update: simplified request for creating a workflow execution." 2020-05-08 13:11:13 -07:00
Rush Tehrani
828315ef94 Merge pull request #183 from onepanelio/feat/simplify.create.workflow.execution
update: simplified request for creating a workflow execution.
2020-05-08 13:05:40 -07:00
Andrey Melnikov
6e9105a742 update: simplified create workflow execution 2020-05-08 11:21:39 -07:00
Andrey Melnikov
97f9b78efa update: workspaces with labels and simplified use of parameters. 2020-05-08 11:02:42 -07:00
Andrey Melnikov
af6b053147 update: removed inner body from create workflow request. 2020-05-08 09:38:16 -07:00
Rush Tehrani
1480a8da8c Merge pull request #184 from onepanelio/feat/core.124-add.envoy.filter
feat: add envoy filter
2020-05-07 16:32:40 -07:00
Rush Tehrani
a1d74dff42 Merge pull request #176 from onepanelio/feat/core.124-add.envoy.filter
Feat/core.124 add.envoy.filter
2020-05-07 16:31:40 -07:00
Andrey Melnikov
5859da5520 update: simplified request for creating a workflow execution. 2020-05-07 13:36:16 -07:00
Rush Tehrani
473bc9d27a Merge branch 'master' into feat/core.124-add.envoy.filter 2020-05-07 10:29:49 -07:00
Aleksandr Melnikov
49451b5008 Per feedback, using the new auth code logic.
Also, using "apps" instead of "apps/v1"
2020-05-06 14:10:09 -07:00
Aleksandr Melnikov
fae40730ae Fixing the IsAuthorized value checking.
- IsAuthorized would return nil for err, but allowed was false.
The code returned "empty, err", which was "empty, nil".
So nothing was blocked.
- Using status.Error to properly return a 403.
2020-05-04 16:21:17 -07:00
Aleksandr Melnikov
7616a5ff92 Handling an issue if the user is logging in for the first time,
or if they logged out.
- EnvoyFilter would prevent the user from getting to the login page.
Or any page at all, because the "authorization" header would be missing.
Or, the cookie "auth-token".
2020-05-04 16:20:07 -07:00
175 changed files with 20300 additions and 4706 deletions

27
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,27 @@
<!-- Thanks for sending a pull request! Here are some tips for you:
1. Please read our contributor guidelines: https://docs.onepanel.ai/docs/getting-started/contributing
2. Prefix the title of this PR with `feat:`, `fix:`, `docs:` or `chore:`, example: `feat: added great feature`
3. If this PR is a feature or enhancement, then create an issue (https://github.com/onepanelio/core/issues) first.
-->
**What this PR does**:
**Which issue(s) this PR fixes**:
<!--
*Automatically closes linked issue when PR is merged.
Usage: `Fixes onepanelio/core#<issue-number>`
-->
Fixes onepanelio/core#
**Special notes for your reviewer**:
**Checklist**
Please check if applies
- [ ] I have added/updated relevant unit tests
- [ ] I have added/updated relevant documentation
Required
- [ ] I accept to release these changes under the Apache 2.0 License

4
.github/issue_label_bot.yaml vendored Normal file
View File

@@ -0,0 +1,4 @@
label-alias:
bug: 'kind/bug'
feature_request: 'kind/enhancement'
question: 'kind/question'

1
.github/semantic.yml vendored Normal file
View File

@@ -0,0 +1 @@
titleOnly: true

38
.github/workflows/push_dev_branch.yaml vendored Normal file
View File

@@ -0,0 +1,38 @@
name: Publish dev docker image
on:
push:
branches:
- master
jobs:
test-code-job:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:12.3
env:
POSTGRES_DB: onepanel
POSTGRES_USER: admin
POSTGRES_PASSWORD: tester
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@master
- name: Run testing code
uses: cedrickring/golang-action@1.5.2
with:
args: go test github.com/onepanelio/core/pkg -db=postgres
build:
needs: test-code-job
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Publish to Registry
uses: elgohr/Publish-Docker-Github-Action@master
with:
name: onepanel/core
tags: "dev"
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}

View File

@@ -1,17 +0,0 @@
name: Publish develop docker image
on:
push:
branches:
- develop
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Publish to Registry
uses: elgohr/Publish-Docker-Github-Action@master
with:
name: onepanel/core
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
snapshot: true

View File

@@ -1,32 +1,24 @@
name: Bump version and create tag
name: Publish docker image on tag push
on:
push:
branches:
- master
tags:
- '*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Bump version and push tag
id: version_bump
uses: anothrNick/github-tag-action@1.17.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
WITH_V: true
DEFAULT_BUMP: 'minor'
- name: Alias New tag to VERSION
run: echo "::set-env name=VERSION::${{ steps.version_bump.outputs.new_tag }}"
- uses: olegtarasov/get-tag@v2
id: tagName
- name: Publish to Registry
uses: elgohr/Publish-Docker-Github-Action@master
with:
name: onepanel/core
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}
buildargs: VERSION
tags: ${{ steps.version_bump.outputs.new_tag }}, latest
tags: "${{ env.GIT_TAG_NAME }}"
- name: Set Slack Message
run: echo "::set-env name=SLACK_MESSAGE::Version $VERSION. Docker Tag onepanel/core:$VERSION"
run: echo "::set-env name=SLACK_MESSAGE::Tag $GIT_TAG_NAME. Docker Tag onepanel/core:$GIT_TAG_NAME"
- name: Notify Slack Channels
uses: rtCamp/action-slack-notify@v2.0.0
env:
@@ -35,5 +27,3 @@ jobs:
SLACK_TITLE: New Core Version
SLACK_USERNAME: opBot
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}

View File

@@ -21,7 +21,7 @@ Install gRPC:
go get -u google.golang.org/grpc
```
Download pre-compiled binaries for your platform(protoc-<version>-<platform>.zip) from here: https://github.com/google/protobuf/releases
Download pre-compiled binaries for your platform (protoc-<version>-<platform>.zip) from here: https://github.com/google/protobuf/releases
On macOS or Linux:
@@ -49,5 +49,128 @@ Make sure that your `$GOBIN` is in your `$PATH`.
Generate Go and Swagger APIs:
```bash
make api
make api version=1.0.0
```
## Minikube Debugging and Development
It is possible to access host resources with minikube.
- This means you can run core and core-ui on your machine, and have minikube
execute API calls to your machine.
NOTE:
- Do not use host access with Minikube and VMWare. This has been shown not to work
in our testing.
If you have a work-around, feel free to let us know.
To make this work, some setup is needed.
- Minikube started with driver=virtualbox
Get your Minikube ssh IP
https://minikube.sigs.k8s.io/docs/handbook/host-access/
```shell script
minikube ssh "route -n | grep ^0.0.0.0 | awk '{ print \$2 }'"
```
Example output:
```shell script
10.0.2.2
```
When running core api, add these ENV variables.
```shell script
ONEPANEL_CORE_SERVICE_HOST=10.0.2.2 # IP you just got
ONEPANEL_CORE_SERVICE_PORT=8888 # HTTP Port set in main.go
```
DB Access
- You will need to change the Postgres service from ClusterIP to NodePort
Run
```shell script
minikube service list
```
Look at Postgres, you'll see something like this:
```shell script
$ minikube service list
|----------------------|----------------------------------------|--------------------|--------------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|----------------------|----------------------------------------|--------------------|--------------------------------|
| application-system | application-controller-manager-service | No node port |
| default | kubernetes | No node port |
| kube-system | kube-dns | No node port |
| kubernetes-dashboard | dashboard-metrics-scraper | No node port |
| kubernetes-dashboard | kubernetes-dashboard | No node port |
| onepanel | onepanel-core | http/8888 | http://192.168.99.101:32000 |
| | | grpc/8887 | http://192.168.99.101:32001 |
| onepanel | onepanel-core-ui | http/80 | http://192.168.99.101:32002 |
| onepanel | postgres | 5432 | http://192.168.99.101:31975 |
|----------------------|----------------------------------------|--------------------|--------------------------------|
```
Grab `http://192.168.99.101:31975`
Use this in main.go for the following lines:
```shell script
databaseDataSourceName := fmt.Sprintf("port=31975 host=%v user=%v password=%v dbname=%v sslmode=disable",
"192.168.99.101", config["databaseUsername"], config["databasePassword"], config["databaseName"])
```
This should connect your developing core to the minikube db.
After this, build main.go and run the executable.
- Or use your IDE equivalent
## Code Structure & Organization
### `utils` dir
```shell script
utils/*.go
```
Utils are intended to stand-alone.
- They do not track state
- They are meant to mutate metadata
Do not add onepanel specific code in here.
- Such as "Client"
```shell script
pkg/*.go
```
Code here has to be package friendly.
- Meaning, you can pull the code out into it's own package as needed
That's why you see
```shell script
workspace_template.go
workspace_template_test.go
workspace_template_types.go
```
These can be pulled out into their own package or into a new v2 directory if needed.
You can add
- kubernetes specific operations
- database specific operations
- types
### `cmd` dir
Each source file here is assumed to result in an executable.
- Hence the `package main` at the top of each
Place each source file into it's own folder.
Example source file name: `flush_cache.go`
- Dir structure: `cmd/flush-cache/flush_cache.go`
To avoid errors like this during docker build
```text
# github.com/onepanelio/core/cmd
cmd/goose.go:22:6: main redeclared in this block
previous declaration at cmd/gen-release-md.go:136:6
github.com/onepanelio/core
```
Caused by
```dockerfile
RUN go install -v ./...
```

View File

@@ -5,11 +5,13 @@ COPY . .
RUN go get -d -v ./...
RUN go install -v ./...
RUN go get -u github.com/pressly/goose/cmd/goose
RUN go build -o /go/bin/goose ./cmd/goose/goose.go
FROM golang:1.13.10
COPY --from=builder /go/bin/core .
COPY --from=builder /go/src/db ./db
COPY --from=builder /go/bin/goose .
EXPOSE 8888
EXPOSE 8887

View File

@@ -1,3 +1,5 @@
Copyright 2020 Onepanel, Inc. All rights reserved.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

View File

@@ -1,9 +1,17 @@
COMMIT_HASH=$(shell git rev-parse --short HEAD)
.PHONY: init
init:
ifndef version
$(error version is undefined)
endif
jq:
cat api/apidocs.swagger.json \
| jq 'walk( if type == "object" then with_entries( .key |= sub( "api\\."; "") ) else . end )' \
| jq 'walk( if type == "string" then gsub( "api\\."; "") else . end )' \
| jq '.info.version = "$(version)"' \
> api/api.swagger.json
rm api/apidocs.swagger.json
@@ -16,7 +24,7 @@ protoc:
--grpc-gateway_out=logtostderr=true,allow_delete_body=true:api \
--swagger_out=allow_merge=true,fqn_for_swagger_name=true,allow_delete_body=true,logtostderr=true,simple_operation_ids=true:api
api: protoc jq
api: init protoc jq
docker-build:
docker build -t onepanel-core .
@@ -26,3 +34,8 @@ docker-push:
docker push onepanel/core:$(COMMIT_HASH)
docker: docker-build docker-push
run-tests:
docker run --rm --name test-onepanel-postgres -p 5432:5432 -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=tester -e POSTGRES_DB=onepanel -d postgres:12.3
go test github.com/onepanelio/core/pkg -count=1 ||:
docker stop test-onepanel-postgres

107
README.md
View File

@@ -1,10 +1,107 @@
# Onepanel
<img width="240px" src="img/logo.png">
Welcome to Onepanel! This is the main repository for the API and also where you can submit bugs and enhancement requests.
![build](https://img.shields.io/github/workflow/status/onepanelio/core/Publish%20dev%20docker%20image/master?color=01579b)
![code](https://img.shields.io/codacy/grade/d060fc4d1ac64b85b78f85c691ead86a?color=01579b)
[![release](https://img.shields.io/github/v/release/onepanelio/core?color=01579b)](https://github.com/onepanelio/core/releases)
[![sdk](https://img.shields.io/pypi/v/onepanel-sdk?color=01579b&label=sdk)](https://pypi.org/project/onepanel-sdk/)
[![docs](https://img.shields.io/github/v/release/onepanelio/core?color=01579b&label=docs)](https://docs.onepanel.io)
[![issues](https://img.shields.io/github/issues-raw/onepanelio/core?color=01579b&label=issues)](https://github.com/onepanelio/core/issues)
[![chat](https://img.shields.io/badge/support-slack-01579b)](https://onepanel-ce.slack.com/join/shared_invite/zt-eyjnwec0-nLaHhjif9Y~gA05KuX6AUg#/)
[![license](https://img.shields.io/github/license/onepanelio/core?color=01579b)](https://opensource.org/licenses/Apache-2.0)
## Getting started
See our [deployment guide](https://onepanelio.github.io/core-docs/docs/deployment/overview) to get started.
Production scale, Kubernetes-native vision AI platform, with fully integrated components for model building, automated labeling, data processing and model training pipelines.
## Why Onepanel?
- End-to-end workflow and infrastructure automation for production scale vision AI
- Automatic resource management and on-demand scaling of CPU and GPU nodes
- Easily scale your data processing and training pipelines to multiple nodes
- Collaborate on all your deep learning tools and workflows through a unified web interface and SDKs
- Scalability, flexibility and resiliency of Kubernetes without the deployment and configuration complexities
## Features
<table>
<tr>
<td width="50%" align="center">
<h3>Image and video annotation with automatic annotation</h3>
<img width="100%" src="img/auto-annotation.gif">
<p>
Annotate images and video with automatic annotation of bounding boxes and polygon masks, integrated with training pipelines to iteratively improve models for pre-annotation and inference
</p>
</td>
<td width="50%" align="center">
<h3>JupyterLab with TensorFlow, PyTorch and GPU support</h3>
<img width="100%" src="img/jupyterlab.gif">
<p>
JupyterLab configured with extensions for debugging, Git/GitHub, notebook diffing and TensorBoard and support for Conda, OpenCV, Tensorflow and PyTorch with GPU and <a href="https://github.com/onepanelio/templates/tree/master/workspaces/jupyterlab">much more</a>
</p>
</td>
</tr>
<tr>
<td width="50%" align="center">
<h3>Auto scaling, distributed and parallel data processing and training pipelines</h3>
<img width="100%" src="img/pipelines.gif">
<p>
Build fully reproducible, distributed and parallel data processing and training pipelines with real-time logs and output snapshots
</p>
</td>
<td width="50%" align="center">
<h3>Version controlled pipelines and environments as code</h3>
<img width="100%" src="img/tools.gif">
<p>
Bring your own IDEs, annotation tools and pipelines with a version controlled YAML and Docker based template engine
</p>
</td>
</tr>
</table>
- Track and visualize model metrics and experiments with TensorBoard or bring your own experiment tracking tools.
- Access and share tools like AirSim, Carla, Gazebo or OpenAI Gym through your browser with VNC enabled workspaces.
- Extend Onepanel with powerful REST APIs and SDKs to further automate your pipelines and environments.
- Workflows, environments and infrastructure are all defined as code and version controlled, making them reproducible and portable.
- Powered by Kubernetes so you can deploy anywhere Kubernetes can run.
## Quick start
See [quick start guide](https://docs.onepanel.ai/docs/getting-started/quickstart) to get started with the platform of your choice.
### Quick start videos
[Getting started with Microsoft Azure](https://youtu.be/CQBIYfBk3Zk)\
[Getting started with Amazon EKS](https://youtu.be/Ipdd8f6D6IM)\
[Getting started with Google GKE](https://youtu.be/pZRO63SnQ8A)
## Community
See [documentation](https://docs.onepanel.ai) to get started or for more detailed operational and user guides.
To submit a feature request, report a bug or documentation issue, please open a GitHub [pull request](https://github.com/onepanelio/core/pulls) or [issue](https://github.com/onepanelio/core/issues).
For help, questions, release announcements and contribution discussions, join us on [Slack](https://join.slack.com/t/onepanel-ce/shared_invite/zt-eyjnwec0-nLaHhjif9Y~gA05KuX6AUg).
## Contributing
See our [contribution guide](https://onepanelio.github.io/core-docs/docs/getting-started/contributing) to get started.
Onepanel is modular and consists of the following repositories:
[Core API](https://github.com/onepanelio/core/) (this repository) - Code base for backend (Go)\
[Core UI](https://github.com/onepanelio/core-ui/) - Code base for UI (Angular + TypeScript)\
[CLI](https://github.com/onepanelio/cli/) - Code base for Go CLI for installation and management (Go)\
[Manifests](https://github.com/onepanelio/core-ui/) - Kustomize manifests used by CLI for installation and management (YAML)\
[Python SDK](https://github.com/onepanelio/python-sdk/) - Python SDK code and documentation\
[Templates](https://github.com/onepanelio/templates) - Various Workspace, Workflow, Task and Sidecar Templates\
[Documentation](https://github.com/onepanelio/core-docs/) - The repository for documentation site\
[API Documentation](https://github.com/onepanelio/core-api-docs/) - API documentation if you choose to use the API directly
See `CONTRIBUTING.md` in each repository for development guidelines. Also, see [contribution guide](https://docs.onepanel.ai/docs/getting-started/contributing) for additional guidelines.
## Acknowledgments
Onepanel seamlessly integrates the following excellent open source projects. We are grateful for the support these communities provide and do our best to contribute back as much as possible.
[Argo](https://github.com/argoproj/argo)\
[CVAT](https://github.com/opencv/cvat)\
[JupyterLab](https://github.com/jupyterlab/jupyterlab)
## License
Onepanel is licensed under [Apache 2.0](https://github.com/onepanelio/core/blob/master/LICENSE).
## Need a managed solution?
Visit our [website](https://www.onepanel.io/) for more information about our managed offerings.

View File

@@ -31,25 +31,25 @@ var file_api_proto_rawDesc = []byte{
0x0a, 0x09, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69,
0x1a, 0x2c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61,
0x67, 0x67, 0x65, 0x72, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e,
0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x42, 0x8b,
0x02, 0x92, 0x41, 0x87, 0x02, 0x12, 0x74, 0x0a, 0x0d, 0x4f, 0x6e, 0x65, 0x70, 0x61, 0x6e, 0x65,
0x6c, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x19, 0x4f, 0x6e, 0x65, 0x70, 0x61, 0x6e, 0x65, 0x6c,
0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x41, 0x50,
0x49, 0x22, 0x3b, 0x0a, 0x15, 0x4f, 0x6e, 0x65, 0x70, 0x61, 0x6e, 0x65, 0x6c, 0x20, 0x43, 0x6f,
0x72, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x22, 0x68, 0x74, 0x74, 0x70,
0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f,
0x6e, 0x65, 0x70, 0x61, 0x6e, 0x65, 0x6c, 0x69, 0x6f, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x32, 0x0b,
0x31, 0x2e, 0x30, 0x2e, 0x30, 0x2d, 0x62, 0x65, 0x74, 0x61, 0x31, 0x1a, 0x0e, 0x6c, 0x6f, 0x63,
0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x38, 0x38, 0x38, 0x38, 0x2a, 0x02, 0x01, 0x02, 0x32,
0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f,
0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6a,
0x73, 0x6f, 0x6e, 0x5a, 0x49, 0x0a, 0x47, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12,
0x3d, 0x08, 0x02, 0x12, 0x28, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69,
0x78, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x1a, 0x0d, 0x61,
0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x62, 0x0c,
0x0a, 0x0a, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x00, 0x62, 0x06, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x33,
0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x42, 0x89,
0x02, 0x92, 0x41, 0x85, 0x02, 0x12, 0x58, 0x0a, 0x08, 0x4f, 0x6e, 0x65, 0x70, 0x61, 0x6e, 0x65,
0x6c, 0x12, 0x0c, 0x4f, 0x6e, 0x65, 0x70, 0x61, 0x6e, 0x65, 0x6c, 0x20, 0x41, 0x50, 0x49, 0x22,
0x36, 0x0a, 0x10, 0x4f, 0x6e, 0x65, 0x70, 0x61, 0x6e, 0x65, 0x6c, 0x20, 0x70, 0x72, 0x6f, 0x6a,
0x65, 0x63, 0x74, 0x12, 0x22, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74,
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x6e, 0x65, 0x70, 0x61, 0x6e, 0x65, 0x6c,
0x69, 0x6f, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x32, 0x06, 0x30, 0x2e, 0x31, 0x30, 0x2e, 0x30, 0x1a,
0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x3a, 0x38, 0x38, 0x38, 0x38, 0x2a,
0x02, 0x01, 0x02, 0x32, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x3a, 0x18, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x2d, 0x73, 0x74, 0x72, 0x65, 0x61,
0x6d, 0x5a, 0x49, 0x0a, 0x47, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x3d, 0x08,
0x02, 0x12, 0x28, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x20, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2c, 0x20, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65,
0x64, 0x20, 0x62, 0x79, 0x20, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x1a, 0x0d, 0x61, 0x75, 0x74,
0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x02, 0x62, 0x0c, 0x0a, 0x0a,
0x0a, 0x06, 0x42, 0x65, 0x61, 0x72, 0x65, 0x72, 0x12, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x33,
}
var file_api_proto_goTypes = []interface{}{}

View File

@@ -6,11 +6,11 @@ import "protoc-gen-swagger/options/annotations.proto";
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = {
info: {
title: "Onepanel Core";
description: "Onepanel Core project API";
version: "1.0.0-beta1";
title: "Onepanel";
description: "Onepanel API";
version: "0.10.0";
contact: {
name: "Onepanel Core project";
name: "Onepanel project";
url: "https://github.com/onepanelio/core";
};
};
@@ -19,6 +19,7 @@ option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = {
schemes: HTTPS;
consumes: "application/json";
produces: "application/json";
produces: "application/octet-stream";
security_definitions: {
security: {
key: "Bearer";

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,7 @@ package api
import (
context "context"
proto "github.com/golang/protobuf/proto"
empty "github.com/golang/protobuf/ptypes/empty"
_ "github.com/golang/protobuf/ptypes/empty"
_ "google.golang.org/genproto/googleapis/api/annotations"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
@@ -31,6 +31,179 @@ const (
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type IsAuthorized struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Verb string `protobuf:"bytes,2,opt,name=verb,proto3" json:"verb,omitempty"`
Group string `protobuf:"bytes,3,opt,name=group,proto3" json:"group,omitempty"`
Resource string `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"`
ResourceName string `protobuf:"bytes,5,opt,name=resourceName,proto3" json:"resourceName,omitempty"`
}
func (x *IsAuthorized) Reset() {
*x = IsAuthorized{}
if protoimpl.UnsafeEnabled {
mi := &file_auth_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IsAuthorized) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IsAuthorized) ProtoMessage() {}
func (x *IsAuthorized) ProtoReflect() protoreflect.Message {
mi := &file_auth_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IsAuthorized.ProtoReflect.Descriptor instead.
func (*IsAuthorized) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{0}
}
func (x *IsAuthorized) GetNamespace() string {
if x != nil {
return x.Namespace
}
return ""
}
func (x *IsAuthorized) GetVerb() string {
if x != nil {
return x.Verb
}
return ""
}
func (x *IsAuthorized) GetGroup() string {
if x != nil {
return x.Group
}
return ""
}
func (x *IsAuthorized) GetResource() string {
if x != nil {
return x.Resource
}
return ""
}
func (x *IsAuthorized) GetResourceName() string {
if x != nil {
return x.ResourceName
}
return ""
}
type IsAuthorizedRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
IsAuthorized *IsAuthorized `protobuf:"bytes,1,opt,name=isAuthorized,proto3" json:"isAuthorized,omitempty"`
}
func (x *IsAuthorizedRequest) Reset() {
*x = IsAuthorizedRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_auth_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IsAuthorizedRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IsAuthorizedRequest) ProtoMessage() {}
func (x *IsAuthorizedRequest) ProtoReflect() protoreflect.Message {
mi := &file_auth_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IsAuthorizedRequest.ProtoReflect.Descriptor instead.
func (*IsAuthorizedRequest) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{1}
}
func (x *IsAuthorizedRequest) GetIsAuthorized() *IsAuthorized {
if x != nil {
return x.IsAuthorized
}
return nil
}
type IsAuthorizedResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Authorized bool `protobuf:"varint,1,opt,name=authorized,proto3" json:"authorized,omitempty"`
}
func (x *IsAuthorizedResponse) Reset() {
*x = IsAuthorizedResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_auth_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IsAuthorizedResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IsAuthorizedResponse) ProtoMessage() {}
func (x *IsAuthorizedResponse) ProtoReflect() protoreflect.Message {
mi := &file_auth_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IsAuthorizedResponse.ProtoReflect.Descriptor instead.
func (*IsAuthorizedResponse) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{2}
}
func (x *IsAuthorizedResponse) GetAuthorized() bool {
if x != nil {
return x.Authorized
}
return false
}
type TokenWrapper struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -42,7 +215,7 @@ type TokenWrapper struct {
func (x *TokenWrapper) Reset() {
*x = TokenWrapper{}
if protoimpl.UnsafeEnabled {
mi := &file_auth_proto_msgTypes[0]
mi := &file_auth_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -55,7 +228,7 @@ func (x *TokenWrapper) String() string {
func (*TokenWrapper) ProtoMessage() {}
func (x *TokenWrapper) ProtoReflect() protoreflect.Message {
mi := &file_auth_proto_msgTypes[0]
mi := &file_auth_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -68,7 +241,7 @@ func (x *TokenWrapper) ProtoReflect() protoreflect.Message {
// Deprecated: Use TokenWrapper.ProtoReflect.Descriptor instead.
func (*TokenWrapper) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{0}
return file_auth_proto_rawDescGZIP(), []int{3}
}
func (x *TokenWrapper) GetToken() string {
@@ -89,7 +262,7 @@ type IsValidTokenRequest struct {
func (x *IsValidTokenRequest) Reset() {
*x = IsValidTokenRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_auth_proto_msgTypes[1]
mi := &file_auth_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -102,7 +275,7 @@ func (x *IsValidTokenRequest) String() string {
func (*IsValidTokenRequest) ProtoMessage() {}
func (x *IsValidTokenRequest) ProtoReflect() protoreflect.Message {
mi := &file_auth_proto_msgTypes[1]
mi := &file_auth_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -115,7 +288,7 @@ func (x *IsValidTokenRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use IsValidTokenRequest.ProtoReflect.Descriptor instead.
func (*IsValidTokenRequest) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{1}
return file_auth_proto_rawDescGZIP(), []int{4}
}
func (x *IsValidTokenRequest) GetToken() *TokenWrapper {
@@ -130,13 +303,13 @@ type IsValidTokenResponse struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"`
}
func (x *IsValidTokenResponse) Reset() {
*x = IsValidTokenResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_auth_proto_msgTypes[2]
mi := &file_auth_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -149,7 +322,7 @@ func (x *IsValidTokenResponse) String() string {
func (*IsValidTokenResponse) ProtoMessage() {}
func (x *IsValidTokenResponse) ProtoReflect() protoreflect.Message {
mi := &file_auth_proto_msgTypes[2]
mi := &file_auth_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -162,7 +335,7 @@ func (x *IsValidTokenResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use IsValidTokenResponse.ProtoReflect.Descriptor instead.
func (*IsValidTokenResponse) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{2}
return file_auth_proto_rawDescGZIP(), []int{5}
}
func (x *IsValidTokenResponse) GetDomain() string {
@@ -172,77 +345,6 @@ func (x *IsValidTokenResponse) GetDomain() string {
return ""
}
type IsWorkspaceAuthenticatedRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FQDN string `protobuf:"bytes,1,opt,name=FQDN,proto3" json:"FQDN,omitempty"`
XOriginalMethod string `protobuf:"bytes,2,opt,name=XOriginalMethod,proto3" json:"XOriginalMethod,omitempty"`
XOriginalAuthority string `protobuf:"bytes,3,opt,name=XOriginalAuthority,proto3" json:"XOriginalAuthority,omitempty"`
XOriginalUri string `protobuf:"bytes,4,opt,name=XOriginalUri,proto3" json:"XOriginalUri,omitempty"`
}
func (x *IsWorkspaceAuthenticatedRequest) Reset() {
*x = IsWorkspaceAuthenticatedRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_auth_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IsWorkspaceAuthenticatedRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IsWorkspaceAuthenticatedRequest) ProtoMessage() {}
func (x *IsWorkspaceAuthenticatedRequest) ProtoReflect() protoreflect.Message {
mi := &file_auth_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IsWorkspaceAuthenticatedRequest.ProtoReflect.Descriptor instead.
func (*IsWorkspaceAuthenticatedRequest) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{3}
}
func (x *IsWorkspaceAuthenticatedRequest) GetFQDN() string {
if x != nil {
return x.FQDN
}
return ""
}
func (x *IsWorkspaceAuthenticatedRequest) GetXOriginalMethod() string {
if x != nil {
return x.XOriginalMethod
}
return ""
}
func (x *IsWorkspaceAuthenticatedRequest) GetXOriginalAuthority() string {
if x != nil {
return x.XOriginalAuthority
}
return ""
}
func (x *IsWorkspaceAuthenticatedRequest) GetXOriginalUri() string {
if x != nil {
return x.XOriginalUri
}
return ""
}
var File_auth_proto protoreflect.FileDescriptor
var file_auth_proto_rawDesc = []byte{
@@ -250,45 +352,50 @@ var file_auth_proto_rawDesc = []byte{
0x69, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e,
0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x24, 0x0a, 0x0c,
0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05,
0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b,
0x65, 0x6e, 0x22, 0x3e, 0x0a, 0x13, 0x49, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x6f, 0x6b,
0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x74, 0x6f, 0x6b,
0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54,
0x6f, 0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x52, 0x05, 0x74, 0x6f, 0x6b,
0x65, 0x6e, 0x22, 0x2e, 0x0a, 0x14, 0x49, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x6f, 0x6b,
0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f,
0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61,
0x69, 0x6e, 0x22, 0xb3, 0x01, 0x0a, 0x1f, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61,
0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x46, 0x51, 0x44, 0x4e, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x46, 0x51, 0x44, 0x4e, 0x12, 0x28, 0x0a, 0x0f, 0x58, 0x4f,
0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0f, 0x58, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x4d, 0x65,
0x74, 0x68, 0x6f, 0x64, 0x12, 0x2e, 0x0a, 0x12, 0x58, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61,
0x6c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
0x52, 0x12, 0x58, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x74, 0x68, 0x6f,
0x72, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x58, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61,
0x6c, 0x55, 0x72, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x58, 0x4f, 0x72, 0x69,
0x67, 0x69, 0x6e, 0x61, 0x6c, 0x55, 0x72, 0x69, 0x32, 0x80, 0x02, 0x0a, 0x0b, 0x41, 0x75, 0x74,
0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x0c, 0x49, 0x73, 0x56, 0x61,
0x6c, 0x69, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49,
0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64,
0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x18, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62,
0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3a,
0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x82, 0x01, 0x0a, 0x18, 0x49, 0x73, 0x57, 0x6f, 0x72,
0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61,
0x74, 0x65, 0x64, 0x12, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b,
0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74,
0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74,
0x79, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x42, 0x20, 0x0a, 0x04, 0x48, 0x45, 0x41,
0x44, 0x12, 0x18, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31,
0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x96, 0x01, 0x0a,
0x0c, 0x49, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x1c, 0x0a,
0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x76,
0x65, 0x72, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12,
0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d,
0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x4c, 0x0a, 0x13, 0x49, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f,
0x72, 0x69, 0x7a, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x0c,
0x69, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f,
0x72, 0x69, 0x7a, 0x65, 0x64, 0x52, 0x0c, 0x69, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69,
0x7a, 0x65, 0x64, 0x22, 0x36, 0x0a, 0x14, 0x49, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69,
0x7a, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61,
0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
0x0a, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0c, 0x54,
0x6f, 0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x74,
0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65,
0x6e, 0x22, 0x3e, 0x0a, 0x13, 0x49, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x6f, 0x6b, 0x65,
0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65,
0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x6f,
0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65,
0x6e, 0x22, 0x2e, 0x0a, 0x14, 0x49, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x6f, 0x6b, 0x65,
0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d,
0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69,
0x6e, 0x32, 0xea, 0x01, 0x0a, 0x0b, 0x41, 0x75, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x12, 0x6c, 0x0a, 0x0c, 0x49, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x6f, 0x6b, 0x65,
0x6e, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x54,
0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x49, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x22, 0x18,
0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x75,
0x74, 0x68, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x3a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12,
0x6d, 0x0a, 0x0c, 0x49, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x12,
0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x49, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a,
0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x49, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x12, 0x2f, 0x61,
0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68,
0x3a, 0x0c, 0x69, 0x73, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -303,25 +410,27 @@ func file_auth_proto_rawDescGZIP() []byte {
return file_auth_proto_rawDescData
}
var file_auth_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_auth_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
var file_auth_proto_goTypes = []interface{}{
(*TokenWrapper)(nil), // 0: api.TokenWrapper
(*IsValidTokenRequest)(nil), // 1: api.IsValidTokenRequest
(*IsValidTokenResponse)(nil), // 2: api.IsValidTokenResponse
(*IsWorkspaceAuthenticatedRequest)(nil), // 3: api.IsWorkspaceAuthenticatedRequest
(*empty.Empty)(nil), // 4: google.protobuf.Empty
(*IsAuthorized)(nil), // 0: api.IsAuthorized
(*IsAuthorizedRequest)(nil), // 1: api.IsAuthorizedRequest
(*IsAuthorizedResponse)(nil), // 2: api.IsAuthorizedResponse
(*TokenWrapper)(nil), // 3: api.TokenWrapper
(*IsValidTokenRequest)(nil), // 4: api.IsValidTokenRequest
(*IsValidTokenResponse)(nil), // 5: api.IsValidTokenResponse
}
var file_auth_proto_depIdxs = []int32{
0, // 0: api.IsValidTokenRequest.token:type_name -> api.TokenWrapper
1, // 1: api.AuthService.IsValidToken:input_type -> api.IsValidTokenRequest
3, // 2: api.AuthService.IsWorkspaceAuthenticated:input_type -> api.IsWorkspaceAuthenticatedRequest
2, // 3: api.AuthService.IsValidToken:output_type -> api.IsValidTokenResponse
4, // 4: api.AuthService.IsWorkspaceAuthenticated:output_type -> google.protobuf.Empty
3, // [3:5] is the sub-list for method output_type
1, // [1:3] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
0, // 0: api.IsAuthorizedRequest.isAuthorized:type_name -> api.IsAuthorized
3, // 1: api.IsValidTokenRequest.token:type_name -> api.TokenWrapper
4, // 2: api.AuthService.IsValidToken:input_type -> api.IsValidTokenRequest
1, // 3: api.AuthService.IsAuthorized:input_type -> api.IsAuthorizedRequest
5, // 4: api.AuthService.IsValidToken:output_type -> api.IsValidTokenResponse
2, // 5: api.AuthService.IsAuthorized:output_type -> api.IsAuthorizedResponse
4, // [4:6] is the sub-list for method output_type
2, // [2:4] is the sub-list for method input_type
2, // [2:2] is the sub-list for extension type_name
2, // [2:2] is the sub-list for extension extendee
0, // [0:2] is the sub-list for field type_name
}
func init() { file_auth_proto_init() }
@@ -331,7 +440,7 @@ func file_auth_proto_init() {
}
if !protoimpl.UnsafeEnabled {
file_auth_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TokenWrapper); i {
switch v := v.(*IsAuthorized); i {
case 0:
return &v.state
case 1:
@@ -343,7 +452,7 @@ func file_auth_proto_init() {
}
}
file_auth_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IsValidTokenRequest); i {
switch v := v.(*IsAuthorizedRequest); i {
case 0:
return &v.state
case 1:
@@ -355,7 +464,7 @@ func file_auth_proto_init() {
}
}
file_auth_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IsValidTokenResponse); i {
switch v := v.(*IsAuthorizedResponse); i {
case 0:
return &v.state
case 1:
@@ -367,7 +476,31 @@ func file_auth_proto_init() {
}
}
file_auth_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IsWorkspaceAuthenticatedRequest); i {
switch v := v.(*TokenWrapper); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_auth_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IsValidTokenRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_auth_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IsValidTokenResponse); i {
case 0:
return &v.state
case 1:
@@ -385,7 +518,7 @@ func file_auth_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_auth_proto_rawDesc,
NumEnums: 0,
NumMessages: 4,
NumMessages: 6,
NumExtensions: 0,
NumServices: 1,
},
@@ -412,7 +545,7 @@ const _ = grpc.SupportPackageIsVersion6
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type AuthServiceClient interface {
IsValidToken(ctx context.Context, in *IsValidTokenRequest, opts ...grpc.CallOption) (*IsValidTokenResponse, error)
IsWorkspaceAuthenticated(ctx context.Context, in *IsWorkspaceAuthenticatedRequest, opts ...grpc.CallOption) (*empty.Empty, error)
IsAuthorized(ctx context.Context, in *IsAuthorizedRequest, opts ...grpc.CallOption) (*IsAuthorizedResponse, error)
}
type authServiceClient struct {
@@ -432,9 +565,9 @@ func (c *authServiceClient) IsValidToken(ctx context.Context, in *IsValidTokenRe
return out, nil
}
func (c *authServiceClient) IsWorkspaceAuthenticated(ctx context.Context, in *IsWorkspaceAuthenticatedRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
out := new(empty.Empty)
err := c.cc.Invoke(ctx, "/api.AuthService/IsWorkspaceAuthenticated", in, out, opts...)
func (c *authServiceClient) IsAuthorized(ctx context.Context, in *IsAuthorizedRequest, opts ...grpc.CallOption) (*IsAuthorizedResponse, error) {
out := new(IsAuthorizedResponse)
err := c.cc.Invoke(ctx, "/api.AuthService/IsAuthorized", in, out, opts...)
if err != nil {
return nil, err
}
@@ -444,7 +577,7 @@ func (c *authServiceClient) IsWorkspaceAuthenticated(ctx context.Context, in *Is
// AuthServiceServer is the server API for AuthService service.
type AuthServiceServer interface {
IsValidToken(context.Context, *IsValidTokenRequest) (*IsValidTokenResponse, error)
IsWorkspaceAuthenticated(context.Context, *IsWorkspaceAuthenticatedRequest) (*empty.Empty, error)
IsAuthorized(context.Context, *IsAuthorizedRequest) (*IsAuthorizedResponse, error)
}
// UnimplementedAuthServiceServer can be embedded to have forward compatible implementations.
@@ -454,8 +587,8 @@ type UnimplementedAuthServiceServer struct {
func (*UnimplementedAuthServiceServer) IsValidToken(context.Context, *IsValidTokenRequest) (*IsValidTokenResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method IsValidToken not implemented")
}
func (*UnimplementedAuthServiceServer) IsWorkspaceAuthenticated(context.Context, *IsWorkspaceAuthenticatedRequest) (*empty.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method IsWorkspaceAuthenticated not implemented")
func (*UnimplementedAuthServiceServer) IsAuthorized(context.Context, *IsAuthorizedRequest) (*IsAuthorizedResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method IsAuthorized not implemented")
}
func RegisterAuthServiceServer(s *grpc.Server, srv AuthServiceServer) {
@@ -480,20 +613,20 @@ func _AuthService_IsValidToken_Handler(srv interface{}, ctx context.Context, dec
return interceptor(ctx, in, info, handler)
}
func _AuthService_IsWorkspaceAuthenticated_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(IsWorkspaceAuthenticatedRequest)
func _AuthService_IsAuthorized_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(IsAuthorizedRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(AuthServiceServer).IsWorkspaceAuthenticated(ctx, in)
return srv.(AuthServiceServer).IsAuthorized(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.AuthService/IsWorkspaceAuthenticated",
FullMethod: "/api.AuthService/IsAuthorized",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AuthServiceServer).IsWorkspaceAuthenticated(ctx, req.(*IsWorkspaceAuthenticatedRequest))
return srv.(AuthServiceServer).IsAuthorized(ctx, req.(*IsAuthorizedRequest))
}
return interceptor(ctx, in, info, handler)
}
@@ -507,8 +640,8 @@ var _AuthService_serviceDesc = grpc.ServiceDesc{
Handler: _AuthService_IsValidToken_Handler,
},
{
MethodName: "IsWorkspaceAuthenticated",
Handler: _AuthService_IsWorkspaceAuthenticated_Handler,
MethodName: "IsAuthorized",
Handler: _AuthService_IsAuthorized_Handler,
},
},
Streams: []grpc.StreamDesc{},

View File

@@ -65,35 +65,36 @@ func local_request_AuthService_IsValidToken_0(ctx context.Context, marshaler run
}
var (
filter_AuthService_IsWorkspaceAuthenticated_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_AuthService_IsWorkspaceAuthenticated_0(ctx context.Context, marshaler runtime.Marshaler, client AuthServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq IsWorkspaceAuthenticatedRequest
func request_AuthService_IsAuthorized_0(ctx context.Context, marshaler runtime.Marshaler, client AuthServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq IsAuthorizedRequest
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AuthService_IsWorkspaceAuthenticated_0); err != nil {
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.IsAuthorized); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.IsWorkspaceAuthenticated(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
msg, err := client.IsAuthorized(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_AuthService_IsWorkspaceAuthenticated_0(ctx context.Context, marshaler runtime.Marshaler, server AuthServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq IsWorkspaceAuthenticatedRequest
func local_request_AuthService_IsAuthorized_0(ctx context.Context, marshaler runtime.Marshaler, server AuthServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq IsAuthorizedRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_AuthService_IsWorkspaceAuthenticated_0); err != nil {
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.IsAuthorized); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.IsWorkspaceAuthenticated(ctx, &protoReq)
msg, err := server.IsAuthorized(ctx, &protoReq)
return msg, metadata, err
}
@@ -123,7 +124,7 @@ func RegisterAuthServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
})
mux.Handle("HEAD", pattern_AuthService_IsWorkspaceAuthenticated_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
mux.Handle("POST", pattern_AuthService_IsAuthorized_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
@@ -132,14 +133,14 @@ func RegisterAuthServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_AuthService_IsWorkspaceAuthenticated_0(rctx, inboundMarshaler, server, req, pathParams)
resp, md, err := local_request_AuthService_IsAuthorized_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_AuthService_IsWorkspaceAuthenticated_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_AuthService_IsAuthorized_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@@ -204,7 +205,7 @@ func RegisterAuthServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
})
mux.Handle("HEAD", pattern_AuthService_IsWorkspaceAuthenticated_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
mux.Handle("POST", pattern_AuthService_IsAuthorized_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
@@ -213,14 +214,14 @@ func RegisterAuthServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_AuthService_IsWorkspaceAuthenticated_0(rctx, inboundMarshaler, client, req, pathParams)
resp, md, err := request_AuthService_IsAuthorized_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_AuthService_IsWorkspaceAuthenticated_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_AuthService_IsAuthorized_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@@ -230,11 +231,11 @@ func RegisterAuthServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
var (
pattern_AuthService_IsValidToken_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"apis", "v1beta1", "auth", "token"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_AuthService_IsWorkspaceAuthenticated_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"apis", "v1beta1", "auth", "token"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_AuthService_IsAuthorized_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"apis", "v1beta1", "auth"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_AuthService_IsValidToken_0 = runtime.ForwardResponseMessage
forward_AuthService_IsWorkspaceAuthenticated_0 = runtime.ForwardResponseMessage
forward_AuthService_IsAuthorized_0 = runtime.ForwardResponseMessage
)

View File

@@ -13,16 +13,30 @@ service AuthService {
};
}
rpc IsWorkspaceAuthenticated(IsWorkspaceAuthenticatedRequest) returns (google.protobuf.Empty) {
rpc IsAuthorized(IsAuthorizedRequest) returns (IsAuthorizedResponse) {
option (google.api.http) = {
custom: {
kind: "HEAD"
path: "/apis/v1beta1/auth/token"
}
post: "/apis/v1beta1/auth"
body: "isAuthorized"
};
}
}
message IsAuthorized {
string namespace = 1;
string verb = 2;
string group = 3;
string resource = 4;
string resourceName = 5;
}
message IsAuthorizedRequest {
IsAuthorized isAuthorized = 1;
}
message IsAuthorizedResponse {
bool authorized = 1;
}
message TokenWrapper {
string token = 1;
}
@@ -32,12 +46,5 @@ message IsValidTokenRequest {
}
message IsValidTokenResponse {
string domain = 2;
}
message IsWorkspaceAuthenticatedRequest {
string FQDN = 1;
string XOriginalMethod = 2;
string XOriginalAuthority = 3;
string XOriginalUri = 4;
string domain = 1;
}

View File

@@ -36,7 +36,8 @@ type Parameter struct {
DisplayName string `protobuf:"bytes,4,opt,name=displayName,proto3" json:"displayName,omitempty"`
Hint string `protobuf:"bytes,5,opt,name=hint,proto3" json:"hint,omitempty"`
Required bool `protobuf:"varint,6,opt,name=required,proto3" json:"required,omitempty"`
Options []*ParameterOption `protobuf:"bytes,7,rep,name=options,proto3" json:"options,omitempty"`
Visibility string `protobuf:"bytes,7,opt,name=visibility,proto3" json:"visibility,omitempty"`
Options []*ParameterOption `protobuf:"bytes,8,rep,name=options,proto3" json:"options,omitempty"`
}
func (x *Parameter) Reset() {
@@ -113,6 +114,13 @@ func (x *Parameter) GetRequired() bool {
return false
}
func (x *Parameter) GetVisibility() string {
if x != nil {
return x.Visibility
}
return ""
}
func (x *Parameter) GetOptions() []*ParameterOption {
if x != nil {
return x.Options
@@ -179,7 +187,7 @@ var File_common_proto protoreflect.FileDescriptor
var file_common_proto_rawDesc = []byte{
0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03,
0x61, 0x70, 0x69, 0x22, 0xcb, 0x01, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
0x61, 0x70, 0x69, 0x22, 0xeb, 0x01, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74,
@@ -189,7 +197,9 @@ var file_common_proto_rawDesc = []byte{
0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
0x04, 0x68, 0x69, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65,
0x64, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03,
0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18,
0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74,
0x79, 0x12, 0x2e, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
0x65, 0x72, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x22, 0x3b, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4f, 0x70,

View File

@@ -9,8 +9,9 @@ message Parameter {
string displayName = 4;
string hint = 5;
bool required = 6;
string visibility = 7;
repeated ParameterOption options = 7;
repeated ParameterOption options = 8;
}
message ParameterOption {

422
api/config.pb.go Normal file
View File

@@ -0,0 +1,422 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.22.0
// protoc v3.11.4
// source: config.proto
package api
import (
context "context"
proto "github.com/golang/protobuf/proto"
empty "github.com/golang/protobuf/ptypes/empty"
_ "google.golang.org/genproto/googleapis/api/annotations"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type GetConfigResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ApiUrl string `protobuf:"bytes,1,opt,name=apiUrl,proto3" json:"apiUrl,omitempty"`
Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
Fqdn string `protobuf:"bytes,3,opt,name=fqdn,proto3" json:"fqdn,omitempty"`
NodePool *NodePool `protobuf:"bytes,4,opt,name=nodePool,proto3" json:"nodePool,omitempty"`
}
func (x *GetConfigResponse) Reset() {
*x = GetConfigResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetConfigResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetConfigResponse) ProtoMessage() {}
func (x *GetConfigResponse) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetConfigResponse.ProtoReflect.Descriptor instead.
func (*GetConfigResponse) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{0}
}
func (x *GetConfigResponse) GetApiUrl() string {
if x != nil {
return x.ApiUrl
}
return ""
}
func (x *GetConfigResponse) GetDomain() string {
if x != nil {
return x.Domain
}
return ""
}
func (x *GetConfigResponse) GetFqdn() string {
if x != nil {
return x.Fqdn
}
return ""
}
func (x *GetConfigResponse) GetNodePool() *NodePool {
if x != nil {
return x.NodePool
}
return nil
}
type NodePoolOption struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
}
func (x *NodePoolOption) Reset() {
*x = NodePoolOption{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *NodePoolOption) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*NodePoolOption) ProtoMessage() {}
func (x *NodePoolOption) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use NodePoolOption.ProtoReflect.Descriptor instead.
func (*NodePoolOption) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{1}
}
func (x *NodePoolOption) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *NodePoolOption) GetValue() string {
if x != nil {
return x.Value
}
return ""
}
type NodePool struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Label string `protobuf:"bytes,1,opt,name=label,proto3" json:"label,omitempty"`
Options []*NodePoolOption `protobuf:"bytes,2,rep,name=options,proto3" json:"options,omitempty"`
}
func (x *NodePool) Reset() {
*x = NodePool{}
if protoimpl.UnsafeEnabled {
mi := &file_config_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *NodePool) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*NodePool) ProtoMessage() {}
func (x *NodePool) ProtoReflect() protoreflect.Message {
mi := &file_config_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use NodePool.ProtoReflect.Descriptor instead.
func (*NodePool) Descriptor() ([]byte, []int) {
return file_config_proto_rawDescGZIP(), []int{2}
}
func (x *NodePool) GetLabel() string {
if x != nil {
return x.Label
}
return ""
}
func (x *NodePool) GetOptions() []*NodePoolOption {
if x != nil {
return x.Options
}
return nil
}
var File_config_proto protoreflect.FileDescriptor
var file_config_proto_rawDesc = []byte{
0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03,
0x61, 0x70, 0x69, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f,
0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x82,
0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x70, 0x69, 0x55, 0x72, 0x6c, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x70, 0x69, 0x55, 0x72, 0x6c, 0x12, 0x16, 0x0a, 0x06,
0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f,
0x6d, 0x61, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x03, 0x20, 0x01,
0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x12, 0x29, 0x0a, 0x08, 0x6e, 0x6f, 0x64, 0x65,
0x50, 0x6f, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x50,
0x6f, 0x6f, 0x6c, 0x22, 0x3a, 0x0a, 0x0e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x4f,
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22,
0x4f, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x6c,
0x61, 0x62, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65,
0x6c, 0x12, 0x2d, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x6f,
0x6c, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
0x32, 0x6a, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x12, 0x59, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74,
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x62, 0x06, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x33,
}
var (
file_config_proto_rawDescOnce sync.Once
file_config_proto_rawDescData = file_config_proto_rawDesc
)
func file_config_proto_rawDescGZIP() []byte {
file_config_proto_rawDescOnce.Do(func() {
file_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_config_proto_rawDescData)
})
return file_config_proto_rawDescData
}
var file_config_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
var file_config_proto_goTypes = []interface{}{
(*GetConfigResponse)(nil), // 0: api.GetConfigResponse
(*NodePoolOption)(nil), // 1: api.NodePoolOption
(*NodePool)(nil), // 2: api.NodePool
(*empty.Empty)(nil), // 3: google.protobuf.Empty
}
var file_config_proto_depIdxs = []int32{
2, // 0: api.GetConfigResponse.nodePool:type_name -> api.NodePool
1, // 1: api.NodePool.options:type_name -> api.NodePoolOption
3, // 2: api.ConfigService.GetConfig:input_type -> google.protobuf.Empty
0, // 3: api.ConfigService.GetConfig:output_type -> api.GetConfigResponse
3, // [3:4] is the sub-list for method output_type
2, // [2:3] is the sub-list for method input_type
2, // [2:2] is the sub-list for extension type_name
2, // [2:2] is the sub-list for extension extendee
0, // [0:2] is the sub-list for field type_name
}
func init() { file_config_proto_init() }
func file_config_proto_init() {
if File_config_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetConfigResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*NodePoolOption); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*NodePool); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_config_proto_rawDesc,
NumEnums: 0,
NumMessages: 3,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_config_proto_goTypes,
DependencyIndexes: file_config_proto_depIdxs,
MessageInfos: file_config_proto_msgTypes,
}.Build()
File_config_proto = out.File
file_config_proto_rawDesc = nil
file_config_proto_goTypes = nil
file_config_proto_depIdxs = nil
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion6
// ConfigServiceClient is the client API for ConfigService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type ConfigServiceClient interface {
GetConfig(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetConfigResponse, error)
}
type configServiceClient struct {
cc grpc.ClientConnInterface
}
func NewConfigServiceClient(cc grpc.ClientConnInterface) ConfigServiceClient {
return &configServiceClient{cc}
}
func (c *configServiceClient) GetConfig(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetConfigResponse, error) {
out := new(GetConfigResponse)
err := c.cc.Invoke(ctx, "/api.ConfigService/GetConfig", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// ConfigServiceServer is the server API for ConfigService service.
type ConfigServiceServer interface {
GetConfig(context.Context, *empty.Empty) (*GetConfigResponse, error)
}
// UnimplementedConfigServiceServer can be embedded to have forward compatible implementations.
type UnimplementedConfigServiceServer struct {
}
func (*UnimplementedConfigServiceServer) GetConfig(context.Context, *empty.Empty) (*GetConfigResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetConfig not implemented")
}
func RegisterConfigServiceServer(s *grpc.Server, srv ConfigServiceServer) {
s.RegisterService(&_ConfigService_serviceDesc, srv)
}
func _ConfigService_GetConfig_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(empty.Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ConfigServiceServer).GetConfig(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.ConfigService/GetConfig",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ConfigServiceServer).GetConfig(ctx, req.(*empty.Empty))
}
return interceptor(ctx, in, info, handler)
}
var _ConfigService_serviceDesc = grpc.ServiceDesc{
ServiceName: "api.ConfigService",
HandlerType: (*ConfigServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "GetConfig",
Handler: _ConfigService_GetConfig_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "config.proto",
}

148
api/config.pb.gw.go Normal file
View File

@@ -0,0 +1,148 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: config.proto
/*
Package api is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package api
import (
"context"
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/golang/protobuf/ptypes/empty"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_ConfigService_GetConfig_0(ctx context.Context, marshaler runtime.Marshaler, client ConfigServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq empty.Empty
var metadata runtime.ServerMetadata
msg, err := client.GetConfig(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_ConfigService_GetConfig_0(ctx context.Context, marshaler runtime.Marshaler, server ConfigServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq empty.Empty
var metadata runtime.ServerMetadata
msg, err := server.GetConfig(ctx, &protoReq)
return msg, metadata, err
}
// RegisterConfigServiceHandlerServer registers the http handlers for service ConfigService to "mux".
// UnaryRPC :call ConfigServiceServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterConfigServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ConfigServiceServer) error {
mux.Handle("GET", pattern_ConfigService_GetConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_ConfigService_GetConfig_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_ConfigService_GetConfig_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterConfigServiceHandlerFromEndpoint is same as RegisterConfigServiceHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterConfigServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.Dial(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterConfigServiceHandler(ctx, mux, conn)
}
// RegisterConfigServiceHandler registers the http handlers for service ConfigService to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterConfigServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterConfigServiceHandlerClient(ctx, mux, NewConfigServiceClient(conn))
}
// RegisterConfigServiceHandlerClient registers the http handlers for service ConfigService
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ConfigServiceClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ConfigServiceClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "ConfigServiceClient" to call the correct interceptors.
func RegisterConfigServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ConfigServiceClient) error {
mux.Handle("GET", pattern_ConfigService_GetConfig_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_ConfigService_GetConfig_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_ConfigService_GetConfig_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_ConfigService_GetConfig_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"apis", "v1beta1", "config"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_ConfigService_GetConfig_0 = runtime.ForwardResponseMessage
)

31
api/config.proto Normal file
View File

@@ -0,0 +1,31 @@
syntax = "proto3";
package api;
import "google/api/annotations.proto";
import "google/protobuf/empty.proto";
service ConfigService {
rpc GetConfig (google.protobuf.Empty) returns (GetConfigResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/config"
};
}
}
message GetConfigResponse {
string apiUrl = 1;
string domain = 2;
string fqdn = 3;
NodePool nodePool = 4;
}
message NodePoolOption {
string name = 1;
string value = 2;
}
message NodePool {
string label = 1;
repeated NodePoolOption options = 2;
}

View File

@@ -37,9 +37,11 @@ type CronWorkflow struct {
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Manifest string `protobuf:"bytes,2,opt,name=manifest,proto3" json:"manifest,omitempty"`
WorkflowExecution *WorkflowExecution `protobuf:"bytes,3,opt,name=workflowExecution,proto3" json:"workflowExecution,omitempty"`
Labels []*KeyValue `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty"`
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"`
Manifest string `protobuf:"bytes,3,opt,name=manifest,proto3" json:"manifest,omitempty"`
WorkflowExecution *WorkflowExecution `protobuf:"bytes,4,opt,name=workflowExecution,proto3" json:"workflowExecution,omitempty"`
Labels []*KeyValue `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty"`
Namespace string `protobuf:"bytes,6,opt,name=namespace,proto3" json:"namespace,omitempty"`
}
func (x *CronWorkflow) Reset() {
@@ -81,6 +83,13 @@ func (x *CronWorkflow) GetName() string {
return ""
}
func (x *CronWorkflow) GetUid() string {
if x != nil {
return x.Uid
}
return ""
}
func (x *CronWorkflow) GetManifest() string {
if x != nil {
return x.Manifest
@@ -102,6 +111,13 @@ func (x *CronWorkflow) GetLabels() []*KeyValue {
return nil
}
func (x *CronWorkflow) GetNamespace() string {
if x != nil {
return x.Namespace
}
return ""
}
type CreateCronWorkflowRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -163,7 +179,7 @@ type GetCronWorkflowRequest struct {
unknownFields protoimpl.UnknownFields
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"`
}
func (x *GetCronWorkflowRequest) Reset() {
@@ -205,9 +221,9 @@ func (x *GetCronWorkflowRequest) GetNamespace() string {
return ""
}
func (x *GetCronWorkflowRequest) GetName() string {
func (x *GetCronWorkflowRequest) GetUid() string {
if x != nil {
return x.Name
return x.Uid
}
return ""
}
@@ -218,7 +234,7 @@ type UpdateCronWorkflowRequest struct {
unknownFields protoimpl.UnknownFields
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"`
CronWorkflow *CronWorkflow `protobuf:"bytes,3,opt,name=cronWorkflow,proto3" json:"cronWorkflow,omitempty"`
}
@@ -261,9 +277,9 @@ func (x *UpdateCronWorkflowRequest) GetNamespace() string {
return ""
}
func (x *UpdateCronWorkflowRequest) GetName() string {
func (x *UpdateCronWorkflowRequest) GetUid() string {
if x != nil {
return x.Name
return x.Uid
}
return ""
}
@@ -275,17 +291,17 @@ func (x *UpdateCronWorkflowRequest) GetCronWorkflow() *CronWorkflow {
return nil
}
type TerminateCronWorkflowRequest struct {
type DeleteCronWorkflowRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"`
}
func (x *TerminateCronWorkflowRequest) Reset() {
*x = TerminateCronWorkflowRequest{}
func (x *DeleteCronWorkflowRequest) Reset() {
*x = DeleteCronWorkflowRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_cron_workflow_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -293,13 +309,13 @@ func (x *TerminateCronWorkflowRequest) Reset() {
}
}
func (x *TerminateCronWorkflowRequest) String() string {
func (x *DeleteCronWorkflowRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TerminateCronWorkflowRequest) ProtoMessage() {}
func (*DeleteCronWorkflowRequest) ProtoMessage() {}
func (x *TerminateCronWorkflowRequest) ProtoReflect() protoreflect.Message {
func (x *DeleteCronWorkflowRequest) ProtoReflect() protoreflect.Message {
mi := &file_cron_workflow_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@@ -311,21 +327,21 @@ func (x *TerminateCronWorkflowRequest) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
// Deprecated: Use TerminateCronWorkflowRequest.ProtoReflect.Descriptor instead.
func (*TerminateCronWorkflowRequest) Descriptor() ([]byte, []int) {
// Deprecated: Use DeleteCronWorkflowRequest.ProtoReflect.Descriptor instead.
func (*DeleteCronWorkflowRequest) Descriptor() ([]byte, []int) {
return file_cron_workflow_proto_rawDescGZIP(), []int{4}
}
func (x *TerminateCronWorkflowRequest) GetNamespace() string {
func (x *DeleteCronWorkflowRequest) GetNamespace() string {
if x != nil {
return x.Namespace
}
return ""
}
func (x *TerminateCronWorkflowRequest) GetName() string {
func (x *DeleteCronWorkflowRequest) GetUid() string {
if x != nil {
return x.Name
return x.Uid
}
return ""
}
@@ -490,17 +506,20 @@ var file_cron_workflow_proto_rawDesc = []byte{
0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x22, 0xab, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x74, 0x6f, 0x22, 0xdb, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x6e, 0x69, 0x66,
0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x6e, 0x69, 0x66,
0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45,
0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x65,
0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x06, 0x6c, 0x61, 0x62,
0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73,
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x6e,
0x69, 0x66, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x6e,
0x69, 0x66, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45,
0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x06, 0x6c,
0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65,
0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
0x22, 0x70, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a,
0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
@@ -508,96 +527,94 @@ var file_cron_workflow_proto_rawDesc = []byte{
0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x52, 0x0c, 0x63, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x22, 0x4a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72,
0x6f, 0x77, 0x22, 0x48, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09,
0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x84,
0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09,
0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35,
0x0a, 0x0c, 0x63, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x57,
0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x0c, 0x63, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x50, 0x0a, 0x1c, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61,
0x74, 0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x9d, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74,
0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
0x65, 0x12, 0x34, 0x0a, 0x16, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53,
0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53,
0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74,
0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01,
0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x37, 0x0a, 0x0d, 0x63,
0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x03,
0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x0d, 0x63, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01,
0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x67, 0x65,
0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1e,
0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01,
0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x8c,
0x06, 0x0a, 0x13, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74,
0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69,
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x82, 0x01, 0x0a,
0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61,
0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e,
0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x35, 0x0a, 0x0c, 0x63, 0x72,
0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x52, 0x0c, 0x63, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x22, 0x4b, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57,
0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03,
0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x9d,
0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61,
0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e,
0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x77, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61,
0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a,
0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61,
0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0xb4,
0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x12, 0x37, 0x0a, 0x0d, 0x63, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x0d, 0x63, 0x72,
0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70,
0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12,
0x14, 0x0a, 0x05, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f,
0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c,
0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0xf9, 0x05, 0x0a, 0x13, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x86, 0x01,
0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x57,
0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x22,
0x27, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b,
0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x5f,
0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x3a, 0x0c, 0x63, 0x72, 0x6f, 0x6e, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x8c, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74,
0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1e, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f,
0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
0x22, 0x3d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x22, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f,
0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x1a, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f,
0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
0x63, 0x65, 0x7d, 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x3a, 0x0c, 0x63, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12,
0x8d, 0x01, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64,
0x61, 0x74, 0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x6f,
0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x3e, 0x1a, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31,
0x77, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x0c, 0x63, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x78, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x72, 0x6f, 0x6e,
0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47,
0x65, 0x74, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x6f, 0x6e,
0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f,
0x12, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f,
0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x72, 0x6f, 0x6e,
0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x12,
0xc8, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x73, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74,
0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72,
0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x22, 0x75, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6f, 0x12, 0x28, 0x2f, 0x61, 0x70,
0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x73, 0x5a, 0x43, 0x12, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76,
0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
0x65, 0x7d, 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x84, 0x01, 0x0a, 0x12, 0x44,
0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x12, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72,
0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x30, 0x2a, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31,
0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x72, 0x6f,
0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65,
0x7d, 0x3a, 0x0c, 0x63, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12,
0x79, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x72, 0x6f, 0x6e,
0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, 0x61, 0x70, 0x69,
0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73,
0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xc8, 0x01, 0x0a, 0x11, 0x4c,
0x69, 0x73, 0x74, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x6f, 0x6e, 0x57,
0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x75,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6f, 0x12, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
0x7d, 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73,
0x5a, 0x43, 0x12, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61,
0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x72,
0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x2f, 0x7b, 0x77, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f,
0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x15, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e,
0x61, 0x74, 0x65, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x12,
0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43,
0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x3b, 0x2a, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61,
0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x72,
0x6f, 0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x2f, 0x7b, 0x6e, 0x61,
0x6d, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x62, 0x06, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6e, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64,
0x7d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -614,16 +631,16 @@ func file_cron_workflow_proto_rawDescGZIP() []byte {
var file_cron_workflow_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
var file_cron_workflow_proto_goTypes = []interface{}{
(*CronWorkflow)(nil), // 0: api.CronWorkflow
(*CreateCronWorkflowRequest)(nil), // 1: api.CreateCronWorkflowRequest
(*GetCronWorkflowRequest)(nil), // 2: api.GetCronWorkflowRequest
(*UpdateCronWorkflowRequest)(nil), // 3: api.UpdateCronWorkflowRequest
(*TerminateCronWorkflowRequest)(nil), // 4: api.TerminateCronWorkflowRequest
(*ListCronWorkflowRequest)(nil), // 5: api.ListCronWorkflowRequest
(*ListCronWorkflowsResponse)(nil), // 6: api.ListCronWorkflowsResponse
(*WorkflowExecution)(nil), // 7: api.WorkflowExecution
(*KeyValue)(nil), // 8: api.KeyValue
(*empty.Empty)(nil), // 9: google.protobuf.Empty
(*CronWorkflow)(nil), // 0: api.CronWorkflow
(*CreateCronWorkflowRequest)(nil), // 1: api.CreateCronWorkflowRequest
(*GetCronWorkflowRequest)(nil), // 2: api.GetCronWorkflowRequest
(*UpdateCronWorkflowRequest)(nil), // 3: api.UpdateCronWorkflowRequest
(*DeleteCronWorkflowRequest)(nil), // 4: api.DeleteCronWorkflowRequest
(*ListCronWorkflowRequest)(nil), // 5: api.ListCronWorkflowRequest
(*ListCronWorkflowsResponse)(nil), // 6: api.ListCronWorkflowsResponse
(*WorkflowExecution)(nil), // 7: api.WorkflowExecution
(*KeyValue)(nil), // 8: api.KeyValue
(*empty.Empty)(nil), // 9: google.protobuf.Empty
}
var file_cron_workflow_proto_depIdxs = []int32{
7, // 0: api.CronWorkflow.workflowExecution:type_name -> api.WorkflowExecution
@@ -635,12 +652,12 @@ var file_cron_workflow_proto_depIdxs = []int32{
3, // 6: api.CronWorkflowService.UpdateCronWorkflow:input_type -> api.UpdateCronWorkflowRequest
2, // 7: api.CronWorkflowService.GetCronWorkflow:input_type -> api.GetCronWorkflowRequest
5, // 8: api.CronWorkflowService.ListCronWorkflows:input_type -> api.ListCronWorkflowRequest
4, // 9: api.CronWorkflowService.TerminateCronWorkflow:input_type -> api.TerminateCronWorkflowRequest
4, // 9: api.CronWorkflowService.DeleteCronWorkflow:input_type -> api.DeleteCronWorkflowRequest
0, // 10: api.CronWorkflowService.CreateCronWorkflow:output_type -> api.CronWorkflow
0, // 11: api.CronWorkflowService.UpdateCronWorkflow:output_type -> api.CronWorkflow
0, // 12: api.CronWorkflowService.GetCronWorkflow:output_type -> api.CronWorkflow
6, // 13: api.CronWorkflowService.ListCronWorkflows:output_type -> api.ListCronWorkflowsResponse
9, // 14: api.CronWorkflowService.TerminateCronWorkflow:output_type -> google.protobuf.Empty
9, // 14: api.CronWorkflowService.DeleteCronWorkflow:output_type -> google.protobuf.Empty
10, // [10:15] is the sub-list for method output_type
5, // [5:10] is the sub-list for method input_type
5, // [5:5] is the sub-list for extension type_name
@@ -705,7 +722,7 @@ func file_cron_workflow_proto_init() {
}
}
file_cron_workflow_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*TerminateCronWorkflowRequest); i {
switch v := v.(*DeleteCronWorkflowRequest); i {
case 0:
return &v.state
case 1:
@@ -777,7 +794,7 @@ type CronWorkflowServiceClient interface {
UpdateCronWorkflow(ctx context.Context, in *UpdateCronWorkflowRequest, opts ...grpc.CallOption) (*CronWorkflow, error)
GetCronWorkflow(ctx context.Context, in *GetCronWorkflowRequest, opts ...grpc.CallOption) (*CronWorkflow, error)
ListCronWorkflows(ctx context.Context, in *ListCronWorkflowRequest, opts ...grpc.CallOption) (*ListCronWorkflowsResponse, error)
TerminateCronWorkflow(ctx context.Context, in *TerminateCronWorkflowRequest, opts ...grpc.CallOption) (*empty.Empty, error)
DeleteCronWorkflow(ctx context.Context, in *DeleteCronWorkflowRequest, opts ...grpc.CallOption) (*empty.Empty, error)
}
type cronWorkflowServiceClient struct {
@@ -824,9 +841,9 @@ func (c *cronWorkflowServiceClient) ListCronWorkflows(ctx context.Context, in *L
return out, nil
}
func (c *cronWorkflowServiceClient) TerminateCronWorkflow(ctx context.Context, in *TerminateCronWorkflowRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
func (c *cronWorkflowServiceClient) DeleteCronWorkflow(ctx context.Context, in *DeleteCronWorkflowRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
out := new(empty.Empty)
err := c.cc.Invoke(ctx, "/api.CronWorkflowService/TerminateCronWorkflow", in, out, opts...)
err := c.cc.Invoke(ctx, "/api.CronWorkflowService/DeleteCronWorkflow", in, out, opts...)
if err != nil {
return nil, err
}
@@ -839,7 +856,7 @@ type CronWorkflowServiceServer interface {
UpdateCronWorkflow(context.Context, *UpdateCronWorkflowRequest) (*CronWorkflow, error)
GetCronWorkflow(context.Context, *GetCronWorkflowRequest) (*CronWorkflow, error)
ListCronWorkflows(context.Context, *ListCronWorkflowRequest) (*ListCronWorkflowsResponse, error)
TerminateCronWorkflow(context.Context, *TerminateCronWorkflowRequest) (*empty.Empty, error)
DeleteCronWorkflow(context.Context, *DeleteCronWorkflowRequest) (*empty.Empty, error)
}
// UnimplementedCronWorkflowServiceServer can be embedded to have forward compatible implementations.
@@ -858,8 +875,8 @@ func (*UnimplementedCronWorkflowServiceServer) GetCronWorkflow(context.Context,
func (*UnimplementedCronWorkflowServiceServer) ListCronWorkflows(context.Context, *ListCronWorkflowRequest) (*ListCronWorkflowsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListCronWorkflows not implemented")
}
func (*UnimplementedCronWorkflowServiceServer) TerminateCronWorkflow(context.Context, *TerminateCronWorkflowRequest) (*empty.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method TerminateCronWorkflow not implemented")
func (*UnimplementedCronWorkflowServiceServer) DeleteCronWorkflow(context.Context, *DeleteCronWorkflowRequest) (*empty.Empty, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteCronWorkflow not implemented")
}
func RegisterCronWorkflowServiceServer(s *grpc.Server, srv CronWorkflowServiceServer) {
@@ -938,20 +955,20 @@ func _CronWorkflowService_ListCronWorkflows_Handler(srv interface{}, ctx context
return interceptor(ctx, in, info, handler)
}
func _CronWorkflowService_TerminateCronWorkflow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(TerminateCronWorkflowRequest)
func _CronWorkflowService_DeleteCronWorkflow_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DeleteCronWorkflowRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(CronWorkflowServiceServer).TerminateCronWorkflow(ctx, in)
return srv.(CronWorkflowServiceServer).DeleteCronWorkflow(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.CronWorkflowService/TerminateCronWorkflow",
FullMethod: "/api.CronWorkflowService/DeleteCronWorkflow",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(CronWorkflowServiceServer).TerminateCronWorkflow(ctx, req.(*TerminateCronWorkflowRequest))
return srv.(CronWorkflowServiceServer).DeleteCronWorkflow(ctx, req.(*DeleteCronWorkflowRequest))
}
return interceptor(ctx, in, info, handler)
}
@@ -977,8 +994,8 @@ var _CronWorkflowService_serviceDesc = grpc.ServiceDesc{
Handler: _CronWorkflowService_ListCronWorkflows_Handler,
},
{
MethodName: "TerminateCronWorkflow",
Handler: _CronWorkflowService_TerminateCronWorkflow_Handler,
MethodName: "DeleteCronWorkflow",
Handler: _CronWorkflowService_DeleteCronWorkflow_Handler,
},
},
Streams: []grpc.StreamDesc{},

View File

@@ -131,15 +131,15 @@ func request_CronWorkflowService_UpdateCronWorkflow_0(ctx context.Context, marsh
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.UpdateCronWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@@ -177,15 +177,15 @@ func local_request_CronWorkflowService_UpdateCronWorkflow_0(ctx context.Context,
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.UpdateCronWorkflow(ctx, &protoReq)
@@ -215,15 +215,15 @@ func request_CronWorkflowService_GetCronWorkflow_0(ctx context.Context, marshale
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.GetCronWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@@ -253,15 +253,15 @@ func local_request_CronWorkflowService_GetCronWorkflow_0(ctx context.Context, ma
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.GetCronWorkflow(ctx, &protoReq)
@@ -429,8 +429,8 @@ func local_request_CronWorkflowService_ListCronWorkflows_1(ctx context.Context,
}
func request_CronWorkflowService_TerminateCronWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, client CronWorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq TerminateCronWorkflowRequest
func request_CronWorkflowService_DeleteCronWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, client CronWorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq DeleteCronWorkflowRequest
var metadata runtime.ServerMetadata
var (
@@ -451,24 +451,24 @@ func request_CronWorkflowService_TerminateCronWorkflow_0(ctx context.Context, ma
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.TerminateCronWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
msg, err := client.DeleteCronWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_CronWorkflowService_TerminateCronWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, server CronWorkflowServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq TerminateCronWorkflowRequest
func local_request_CronWorkflowService_DeleteCronWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, server CronWorkflowServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq DeleteCronWorkflowRequest
var metadata runtime.ServerMetadata
var (
@@ -489,18 +489,18 @@ func local_request_CronWorkflowService_TerminateCronWorkflow_0(ctx context.Conte
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.TerminateCronWorkflow(ctx, &protoReq)
msg, err := server.DeleteCronWorkflow(ctx, &protoReq)
return msg, metadata, err
}
@@ -610,7 +610,7 @@ func RegisterCronWorkflowServiceHandlerServer(ctx context.Context, mux *runtime.
})
mux.Handle("DELETE", pattern_CronWorkflowService_TerminateCronWorkflow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
mux.Handle("DELETE", pattern_CronWorkflowService_DeleteCronWorkflow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
@@ -619,14 +619,14 @@ func RegisterCronWorkflowServiceHandlerServer(ctx context.Context, mux *runtime.
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_CronWorkflowService_TerminateCronWorkflow_0(rctx, inboundMarshaler, server, req, pathParams)
resp, md, err := local_request_CronWorkflowService_DeleteCronWorkflow_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_CronWorkflowService_TerminateCronWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_CronWorkflowService_DeleteCronWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@@ -771,7 +771,7 @@ func RegisterCronWorkflowServiceHandlerClient(ctx context.Context, mux *runtime.
})
mux.Handle("DELETE", pattern_CronWorkflowService_TerminateCronWorkflow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
mux.Handle("DELETE", pattern_CronWorkflowService_DeleteCronWorkflow_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
@@ -780,14 +780,14 @@ func RegisterCronWorkflowServiceHandlerClient(ctx context.Context, mux *runtime.
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_CronWorkflowService_TerminateCronWorkflow_0(rctx, inboundMarshaler, client, req, pathParams)
resp, md, err := request_CronWorkflowService_DeleteCronWorkflow_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_CronWorkflowService_TerminateCronWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_CronWorkflowService_DeleteCronWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@@ -797,15 +797,15 @@ func RegisterCronWorkflowServiceHandlerClient(ctx context.Context, mux *runtime.
var (
pattern_CronWorkflowService_CreateCronWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"apis", "v1beta1", "namespace", "cron_workflow"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_CronWorkflowService_UpdateCronWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "cron_workflow", "name"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_CronWorkflowService_UpdateCronWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "cron_workflow", "uid"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_CronWorkflowService_GetCronWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "cron_workflow", "name"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_CronWorkflowService_GetCronWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "cron_workflow", "uid"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_CronWorkflowService_ListCronWorkflows_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"apis", "v1beta1", "namespace", "cron_workflows"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_CronWorkflowService_ListCronWorkflows_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "cron_workflows", "workflow_template_name"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_CronWorkflowService_TerminateCronWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "cron_workflows", "name", "terminate"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_CronWorkflowService_DeleteCronWorkflow_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "cron_workflows", "uid"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
@@ -819,5 +819,5 @@ var (
forward_CronWorkflowService_ListCronWorkflows_1 = runtime.ForwardResponseMessage
forward_CronWorkflowService_TerminateCronWorkflow_0 = runtime.ForwardResponseMessage
forward_CronWorkflowService_DeleteCronWorkflow_0 = runtime.ForwardResponseMessage
)

View File

@@ -17,14 +17,14 @@ service CronWorkflowService {
rpc UpdateCronWorkflow(UpdateCronWorkflowRequest) returns (CronWorkflow) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/cron_workflow/{name}"
put: "/apis/v1beta1/{namespace}/cron_workflow/{uid}"
body: "cronWorkflow"
};
}
rpc GetCronWorkflow(GetCronWorkflowRequest) returns (CronWorkflow) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/cron_workflow/{name}"
get: "/apis/v1beta1/{namespace}/cron_workflow/{uid}"
};
}
@@ -37,20 +37,22 @@ service CronWorkflowService {
};
}
rpc TerminateCronWorkflow (TerminateCronWorkflowRequest) returns (google.protobuf.Empty) {
rpc DeleteCronWorkflow (DeleteCronWorkflowRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/apis/v1beta1/{namespace}/cron_workflows/{name}/terminate"
delete: "/apis/v1beta1/{namespace}/cron_workflows/{uid}"
};
}
}
message CronWorkflow {
string name = 1;
string manifest = 2;
string uid = 2;
string manifest = 3;
WorkflowExecution workflowExecution = 3;
WorkflowExecution workflowExecution = 4;
repeated KeyValue labels = 4;
repeated KeyValue labels = 5;
string namespace = 6;
}
message CreateCronWorkflowRequest {
@@ -60,18 +62,18 @@ message CreateCronWorkflowRequest {
message GetCronWorkflowRequest {
string namespace = 1;
string name = 2;
string uid = 2;
}
message UpdateCronWorkflowRequest {
string namespace = 1 ;
string name = 2;
string uid = 2;
CronWorkflow cronWorkflow = 3;
}
message TerminateCronWorkflowRequest {
message DeleteCronWorkflowRequest {
string namespace = 1;
string name = 2;
string uid = 2;
}
message ListCronWorkflowRequest {

557
api/services.pb.go Normal file
View File

@@ -0,0 +1,557 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.22.0
// protoc v3.11.4
// source: services.proto
package api
import (
context "context"
proto "github.com/golang/protobuf/proto"
_ "github.com/golang/protobuf/ptypes/empty"
_ "google.golang.org/genproto/googleapis/api/annotations"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
type Service struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"`
}
func (x *Service) Reset() {
*x = Service{}
if protoimpl.UnsafeEnabled {
mi := &file_services_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Service) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Service) ProtoMessage() {}
func (x *Service) ProtoReflect() protoreflect.Message {
mi := &file_services_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Service.ProtoReflect.Descriptor instead.
func (*Service) Descriptor() ([]byte, []int) {
return file_services_proto_rawDescGZIP(), []int{0}
}
func (x *Service) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Service) GetUrl() string {
if x != nil {
return x.Url
}
return ""
}
type GetServiceRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
}
func (x *GetServiceRequest) Reset() {
*x = GetServiceRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_services_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetServiceRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetServiceRequest) ProtoMessage() {}
func (x *GetServiceRequest) ProtoReflect() protoreflect.Message {
mi := &file_services_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GetServiceRequest.ProtoReflect.Descriptor instead.
func (*GetServiceRequest) Descriptor() ([]byte, []int) {
return file_services_proto_rawDescGZIP(), []int{1}
}
func (x *GetServiceRequest) GetNamespace() string {
if x != nil {
return x.Namespace
}
return ""
}
func (x *GetServiceRequest) GetName() string {
if x != nil {
return x.Name
}
return ""
}
type ListServicesRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
PageSize int32 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"`
}
func (x *ListServicesRequest) Reset() {
*x = ListServicesRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_services_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListServicesRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListServicesRequest) ProtoMessage() {}
func (x *ListServicesRequest) ProtoReflect() protoreflect.Message {
mi := &file_services_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListServicesRequest.ProtoReflect.Descriptor instead.
func (*ListServicesRequest) Descriptor() ([]byte, []int) {
return file_services_proto_rawDescGZIP(), []int{2}
}
func (x *ListServicesRequest) GetNamespace() string {
if x != nil {
return x.Namespace
}
return ""
}
func (x *ListServicesRequest) GetPageSize() int32 {
if x != nil {
return x.PageSize
}
return 0
}
func (x *ListServicesRequest) GetPage() int32 {
if x != nil {
return x.Page
}
return 0
}
type ListServicesResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"`
Services []*Service `protobuf:"bytes,2,rep,name=services,proto3" json:"services,omitempty"`
Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"`
Pages int32 `protobuf:"varint,4,opt,name=pages,proto3" json:"pages,omitempty"`
TotalCount int32 `protobuf:"varint,5,opt,name=totalCount,proto3" json:"totalCount,omitempty"`
}
func (x *ListServicesResponse) Reset() {
*x = ListServicesResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_services_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListServicesResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListServicesResponse) ProtoMessage() {}
func (x *ListServicesResponse) ProtoReflect() protoreflect.Message {
mi := &file_services_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListServicesResponse.ProtoReflect.Descriptor instead.
func (*ListServicesResponse) Descriptor() ([]byte, []int) {
return file_services_proto_rawDescGZIP(), []int{3}
}
func (x *ListServicesResponse) GetCount() int32 {
if x != nil {
return x.Count
}
return 0
}
func (x *ListServicesResponse) GetServices() []*Service {
if x != nil {
return x.Services
}
return nil
}
func (x *ListServicesResponse) GetPage() int32 {
if x != nil {
return x.Page
}
return 0
}
func (x *ListServicesResponse) GetPages() int32 {
if x != nil {
return x.Pages
}
return 0
}
func (x *ListServicesResponse) GetTotalCount() int32 {
if x != nil {
return x.TotalCount
}
return 0
}
var File_services_proto protoreflect.FileDescriptor
var file_services_proto_rawDesc = []byte{
0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70,
0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x22, 0x2f, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72,
0x6c, 0x22, 0x45, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x63, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74,
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a,
0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0xa0, 0x01,
0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18,
0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x08,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x08, 0x73, 0x65,
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03,
0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61,
0x67, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x67, 0x65, 0x73,
0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05,
0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74,
0x32, 0xe6, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76,
0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x12, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69,
0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12,
0x28, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b,
0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69,
0x63, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6e, 0x0a, 0x0c, 0x4c, 0x69, 0x73,
0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65,
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
0x7d, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x33,
}
var (
file_services_proto_rawDescOnce sync.Once
file_services_proto_rawDescData = file_services_proto_rawDesc
)
func file_services_proto_rawDescGZIP() []byte {
file_services_proto_rawDescOnce.Do(func() {
file_services_proto_rawDescData = protoimpl.X.CompressGZIP(file_services_proto_rawDescData)
})
return file_services_proto_rawDescData
}
var file_services_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_services_proto_goTypes = []interface{}{
(*Service)(nil), // 0: api.Service
(*GetServiceRequest)(nil), // 1: api.GetServiceRequest
(*ListServicesRequest)(nil), // 2: api.ListServicesRequest
(*ListServicesResponse)(nil), // 3: api.ListServicesResponse
}
var file_services_proto_depIdxs = []int32{
0, // 0: api.ListServicesResponse.services:type_name -> api.Service
1, // 1: api.ServiceService.GetService:input_type -> api.GetServiceRequest
2, // 2: api.ServiceService.ListServices:input_type -> api.ListServicesRequest
0, // 3: api.ServiceService.GetService:output_type -> api.Service
3, // 4: api.ServiceService.ListServices:output_type -> api.ListServicesResponse
3, // [3:5] is the sub-list for method output_type
1, // [1:3] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
}
func init() { file_services_proto_init() }
func file_services_proto_init() {
if File_services_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_services_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Service); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_services_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetServiceRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_services_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListServicesRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_services_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListServicesResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_services_proto_rawDesc,
NumEnums: 0,
NumMessages: 4,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_services_proto_goTypes,
DependencyIndexes: file_services_proto_depIdxs,
MessageInfos: file_services_proto_msgTypes,
}.Build()
File_services_proto = out.File
file_services_proto_rawDesc = nil
file_services_proto_goTypes = nil
file_services_proto_depIdxs = nil
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion6
// ServiceServiceClient is the client API for ServiceService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type ServiceServiceClient interface {
GetService(ctx context.Context, in *GetServiceRequest, opts ...grpc.CallOption) (*Service, error)
ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error)
}
type serviceServiceClient struct {
cc grpc.ClientConnInterface
}
func NewServiceServiceClient(cc grpc.ClientConnInterface) ServiceServiceClient {
return &serviceServiceClient{cc}
}
func (c *serviceServiceClient) GetService(ctx context.Context, in *GetServiceRequest, opts ...grpc.CallOption) (*Service, error) {
out := new(Service)
err := c.cc.Invoke(ctx, "/api.ServiceService/GetService", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *serviceServiceClient) ListServices(ctx context.Context, in *ListServicesRequest, opts ...grpc.CallOption) (*ListServicesResponse, error) {
out := new(ListServicesResponse)
err := c.cc.Invoke(ctx, "/api.ServiceService/ListServices", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// ServiceServiceServer is the server API for ServiceService service.
type ServiceServiceServer interface {
GetService(context.Context, *GetServiceRequest) (*Service, error)
ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error)
}
// UnimplementedServiceServiceServer can be embedded to have forward compatible implementations.
type UnimplementedServiceServiceServer struct {
}
func (*UnimplementedServiceServiceServer) GetService(context.Context, *GetServiceRequest) (*Service, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetService not implemented")
}
func (*UnimplementedServiceServiceServer) ListServices(context.Context, *ListServicesRequest) (*ListServicesResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListServices not implemented")
}
func RegisterServiceServiceServer(s *grpc.Server, srv ServiceServiceServer) {
s.RegisterService(&_ServiceService_serviceDesc, srv)
}
func _ServiceService_GetService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetServiceRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ServiceServiceServer).GetService(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.ServiceService/GetService",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ServiceServiceServer).GetService(ctx, req.(*GetServiceRequest))
}
return interceptor(ctx, in, info, handler)
}
func _ServiceService_ListServices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListServicesRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ServiceServiceServer).ListServices(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.ServiceService/ListServices",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ServiceServiceServer).ListServices(ctx, req.(*ListServicesRequest))
}
return interceptor(ctx, in, info, handler)
}
var _ServiceService_serviceDesc = grpc.ServiceDesc{
ServiceName: "api.ServiceService",
HandlerType: (*ServiceServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "GetService",
Handler: _ServiceService_GetService_Handler,
},
{
MethodName: "ListServices",
Handler: _ServiceService_ListServices_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "services.proto",
}

318
api/services.pb.gw.go Normal file
View File

@@ -0,0 +1,318 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: services.proto
/*
Package api is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package api
import (
"context"
"io"
"net/http"
"github.com/golang/protobuf/descriptor"
"github.com/golang/protobuf/proto"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
"github.com/grpc-ecosystem/grpc-gateway/utilities"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/grpclog"
"google.golang.org/grpc/status"
)
// Suppress "imported and not used" errors
var _ codes.Code
var _ io.Reader
var _ status.Status
var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_ServiceService_GetService_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetServiceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
}
protoReq.Name, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
}
msg, err := client.GetService(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_ServiceService_GetService_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetServiceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
}
protoReq.Name, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
}
msg, err := server.GetService(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_ServiceService_ListServices_0 = &utilities.DoubleArray{Encoding: map[string]int{"namespace": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
)
func request_ServiceService_ListServices_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListServicesRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_ServiceService_ListServices_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ListServices(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_ServiceService_ListServices_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListServicesRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_ServiceService_ListServices_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListServices(ctx, &protoReq)
return msg, metadata, err
}
// RegisterServiceServiceHandlerServer registers the http handlers for service ServiceService to "mux".
// UnaryRPC :call ServiceServiceServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterServiceServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ServiceServiceServer) error {
mux.Handle("GET", pattern_ServiceService_GetService_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_ServiceService_GetService_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_ServiceService_GetService_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_ServiceService_ListServices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_ServiceService_ListServices_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_ServiceService_ListServices_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterServiceServiceHandlerFromEndpoint is same as RegisterServiceServiceHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterServiceServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) {
conn, err := grpc.Dial(endpoint, opts...)
if err != nil {
return err
}
defer func() {
if err != nil {
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
return
}
go func() {
<-ctx.Done()
if cerr := conn.Close(); cerr != nil {
grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr)
}
}()
}()
return RegisterServiceServiceHandler(ctx, mux, conn)
}
// RegisterServiceServiceHandler registers the http handlers for service ServiceService to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterServiceServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterServiceServiceHandlerClient(ctx, mux, NewServiceServiceClient(conn))
}
// RegisterServiceServiceHandlerClient registers the http handlers for service ServiceService
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ServiceServiceClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ServiceServiceClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "ServiceServiceClient" to call the correct interceptors.
func RegisterServiceServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ServiceServiceClient) error {
mux.Handle("GET", pattern_ServiceService_GetService_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_ServiceService_GetService_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_ServiceService_GetService_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_ServiceService_ListServices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_ServiceService_ListServices_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_ServiceService_ListServices_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_ServiceService_GetService_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "service", "name"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_ServiceService_ListServices_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"apis", "v1beta1", "namespace", "service"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_ServiceService_GetService_0 = runtime.ForwardResponseMessage
forward_ServiceService_ListServices_0 = runtime.ForwardResponseMessage
)

44
api/services.proto Normal file
View File

@@ -0,0 +1,44 @@
syntax = "proto3";
package api;
import "google/api/annotations.proto";
import "google/protobuf/empty.proto";
service ServiceService {
rpc GetService(GetServiceRequest) returns (Service) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/service/{name}"
};
}
rpc ListServices(ListServicesRequest) returns (ListServicesResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/service"
};
}
}
message Service {
string name = 1;
string url = 2;
}
message GetServiceRequest {
string namespace = 1;
string name = 2;
}
message ListServicesRequest {
string namespace = 1;
int32 pageSize = 2;
int32 page = 3;
}
message ListServicesResponse {
int32 count = 1;
repeated Service services = 2;
int32 page = 3;
int32 pages = 4;
int32 totalCount = 5;
}

File diff suppressed because it is too large Load Diff

View File

@@ -39,7 +39,7 @@ func request_WorkflowService_CreateWorkflowExecution_0(ctx context.Context, mars
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.WorkflowExecution); err != nil && err != io.EOF {
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@@ -74,7 +74,7 @@ func local_request_WorkflowService_CreateWorkflowExecution_0(ctx context.Context
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.WorkflowExecution); err != nil && err != io.EOF {
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@@ -123,15 +123,15 @@ func request_WorkflowService_CloneWorkflowExecution_0(ctx context.Context, marsh
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.CloneWorkflowExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@@ -161,15 +161,15 @@ func local_request_WorkflowService_CloneWorkflowExecution_0(ctx context.Context,
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.CloneWorkflowExecution(ctx, &protoReq)
@@ -177,6 +177,60 @@ func local_request_WorkflowService_CloneWorkflowExecution_0(ctx context.Context,
}
func request_WorkflowService_GetWorkflowExecutionStatisticsForNamespace_0(ctx context.Context, marshaler runtime.Marshaler, client WorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetWorkflowExecutionStatisticsForNamespaceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
msg, err := client.GetWorkflowExecutionStatisticsForNamespace(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkflowService_GetWorkflowExecutionStatisticsForNamespace_0(ctx context.Context, marshaler runtime.Marshaler, server WorkflowServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetWorkflowExecutionStatisticsForNamespaceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
msg, err := server.GetWorkflowExecutionStatisticsForNamespace(ctx, &protoReq)
return msg, metadata, err
}
func request_WorkflowService_GetWorkflowExecution_0(ctx context.Context, marshaler runtime.Marshaler, client WorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetWorkflowExecutionRequest
var metadata runtime.ServerMetadata
@@ -199,15 +253,15 @@ func request_WorkflowService_GetWorkflowExecution_0(ctx context.Context, marshal
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.GetWorkflowExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@@ -237,15 +291,15 @@ func local_request_WorkflowService_GetWorkflowExecution_0(ctx context.Context, m
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.GetWorkflowExecution(ctx, &protoReq)
@@ -344,15 +398,15 @@ func request_WorkflowService_WatchWorkflowExecution_0(ctx context.Context, marsh
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
stream, err := client.WatchWorkflowExecution(ctx, &protoReq)
@@ -390,15 +444,15 @@ func request_WorkflowService_GetWorkflowExecutionLogs_0(ctx context.Context, mar
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
val, ok = pathParams["podName"]
@@ -458,15 +512,15 @@ func request_WorkflowService_GetWorkflowExecutionMetrics_0(ctx context.Context,
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
val, ok = pathParams["podName"]
@@ -507,15 +561,15 @@ func local_request_WorkflowService_GetWorkflowExecutionMetrics_0(ctx context.Con
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
val, ok = pathParams["podName"]
@@ -556,15 +610,15 @@ func request_WorkflowService_ResubmitWorkflowExecution_0(ctx context.Context, ma
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.ResubmitWorkflowExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@@ -594,15 +648,15 @@ func local_request_WorkflowService_ResubmitWorkflowExecution_0(ctx context.Conte
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.ResubmitWorkflowExecution(ctx, &protoReq)
@@ -632,15 +686,15 @@ func request_WorkflowService_TerminateWorkflowExecution_0(ctx context.Context, m
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.TerminateWorkflowExecution(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@@ -670,15 +724,15 @@ func local_request_WorkflowService_TerminateWorkflowExecution_0(ctx context.Cont
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.TerminateWorkflowExecution(ctx, &protoReq)
@@ -708,15 +762,15 @@ func request_WorkflowService_GetArtifact_0(ctx context.Context, marshaler runtim
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
val, ok = pathParams["key"]
@@ -757,15 +811,15 @@ func local_request_WorkflowService_GetArtifact_0(ctx context.Context, marshaler
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
val, ok = pathParams["key"]
@@ -806,15 +860,15 @@ func request_WorkflowService_ListFiles_0(ctx context.Context, marshaler runtime.
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
val, ok = pathParams["path"]
@@ -855,15 +909,15 @@ func local_request_WorkflowService_ListFiles_0(ctx context.Context, marshaler ru
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
val, ok = pathParams["path"]
@@ -912,15 +966,15 @@ func request_WorkflowService_AddWorkflowExecutionStatistics_0(ctx context.Contex
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.AddWorkflowExecutionStatistics(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@@ -958,15 +1012,15 @@ func local_request_WorkflowService_AddWorkflowExecutionStatistics_0(ctx context.
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.AddWorkflowExecutionStatistics(ctx, &protoReq)
@@ -1004,15 +1058,15 @@ func request_WorkflowService_CronStartWorkflowExecutionStatistic_0(ctx context.C
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.CronStartWorkflowExecutionStatistic(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@@ -1050,15 +1104,15 @@ func local_request_WorkflowService_CronStartWorkflowExecutionStatistic_0(ctx con
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.CronStartWorkflowExecutionStatistic(ctx, &protoReq)
@@ -1066,6 +1120,98 @@ func local_request_WorkflowService_CronStartWorkflowExecutionStatistic_0(ctx con
}
func request_WorkflowService_UpdateWorkflowExecutionStatus_0(ctx context.Context, marshaler runtime.Marshaler, client WorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UpdateWorkflowExecutionStatusRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Status); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.UpdateWorkflowExecutionStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkflowService_UpdateWorkflowExecutionStatus_0(ctx context.Context, marshaler runtime.Marshaler, server WorkflowServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UpdateWorkflowExecutionStatusRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Status); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.UpdateWorkflowExecutionStatus(ctx, &protoReq)
return msg, metadata, err
}
// RegisterWorkflowServiceHandlerServer registers the http handlers for service WorkflowService to "mux".
// UnaryRPC :call WorkflowServiceServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
@@ -1111,6 +1257,26 @@ func RegisterWorkflowServiceHandlerServer(ctx context.Context, mux *runtime.Serv
})
mux.Handle("GET", pattern_WorkflowService_GetWorkflowExecutionStatisticsForNamespace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WorkflowService_GetWorkflowExecutionStatisticsForNamespace_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkflowService_GetWorkflowExecutionStatisticsForNamespace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WorkflowService_GetWorkflowExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -1305,6 +1471,26 @@ func RegisterWorkflowServiceHandlerServer(ctx context.Context, mux *runtime.Serv
})
mux.Handle("PUT", pattern_WorkflowService_UpdateWorkflowExecutionStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WorkflowService_UpdateWorkflowExecutionStatus_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkflowService_UpdateWorkflowExecutionStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
@@ -1386,6 +1572,26 @@ func RegisterWorkflowServiceHandlerClient(ctx context.Context, mux *runtime.Serv
})
mux.Handle("GET", pattern_WorkflowService_GetWorkflowExecutionStatisticsForNamespace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WorkflowService_GetWorkflowExecutionStatisticsForNamespace_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkflowService_GetWorkflowExecutionStatisticsForNamespace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WorkflowService_GetWorkflowExecution_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -1606,35 +1812,59 @@ func RegisterWorkflowServiceHandlerClient(ctx context.Context, mux *runtime.Serv
})
mux.Handle("PUT", pattern_WorkflowService_UpdateWorkflowExecutionStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WorkflowService_UpdateWorkflowExecutionStatus_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkflowService_UpdateWorkflowExecutionStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_WorkflowService_CreateWorkflowExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"apis", "v1beta1", "namespace", "workflow_executions"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_CloneWorkflowExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "name"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_CloneWorkflowExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "uid"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_GetWorkflowExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "name"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_GetWorkflowExecutionStatisticsForNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "statistics"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_GetWorkflowExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "uid"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_ListWorkflowExecutions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"apis", "v1beta1", "namespace", "workflow_executions"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_WatchWorkflowExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "name", "watch"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_WatchWorkflowExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "uid", "watch"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_GetWorkflowExecutionLogs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8, 2, 9}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "name", "pods", "podName", "containers", "containerName", "logs"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_GetWorkflowExecutionLogs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7, 1, 0, 4, 1, 5, 8, 2, 9}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "uid", "pods", "podName", "containers", "containerName", "logs"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_GetWorkflowExecutionMetrics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "name", "pods", "podName", "metrics"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_GetWorkflowExecutionMetrics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "uid", "pods", "podName", "metrics"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_ResubmitWorkflowExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "name", "resubmit"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_ResubmitWorkflowExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "uid", "resubmit"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_TerminateWorkflowExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "name", "terminate"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_TerminateWorkflowExecution_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "uid", "terminate"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_GetArtifact_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 3, 0, 4, 1, 5, 6}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "name", "artifacts", "key"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_GetArtifact_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 3, 0, 4, 1, 5, 6}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "uid", "artifacts", "key"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_ListFiles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 3, 0, 4, 1, 5, 6}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "name", "files", "path"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_ListFiles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 3, 0, 4, 1, 5, 6}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "uid", "files", "path"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_AddWorkflowExecutionStatistics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "name", "statistics"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_AddWorkflowExecutionStatistics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "uid", "statistics"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_CronStartWorkflowExecutionStatistic_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "name", "cron_start_statistics"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_CronStartWorkflowExecutionStatistic_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "uid", "cron_start_statistics"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowService_UpdateWorkflowExecutionStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workflow_executions", "uid", "status"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
@@ -1642,6 +1872,8 @@ var (
forward_WorkflowService_CloneWorkflowExecution_0 = runtime.ForwardResponseMessage
forward_WorkflowService_GetWorkflowExecutionStatisticsForNamespace_0 = runtime.ForwardResponseMessage
forward_WorkflowService_GetWorkflowExecution_0 = runtime.ForwardResponseMessage
forward_WorkflowService_ListWorkflowExecutions_0 = runtime.ForwardResponseMessage
@@ -1663,4 +1895,6 @@ var (
forward_WorkflowService_AddWorkflowExecutionStatistics_0 = runtime.ForwardResponseMessage
forward_WorkflowService_CronStartWorkflowExecutionStatistic_0 = runtime.ForwardResponseMessage
forward_WorkflowService_UpdateWorkflowExecutionStatus_0 = runtime.ForwardResponseMessage
)

View File

@@ -14,20 +14,26 @@ service WorkflowService {
rpc CreateWorkflowExecution (CreateWorkflowExecutionRequest) returns (WorkflowExecution) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/workflow_executions"
body: "workflowExecution"
body: "body"
};
}
// Clone a Workflow. This is the same as running it again.
rpc CloneWorkflowExecution (CloneWorkflowExecutionRequest) returns (WorkflowExecution) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/workflow_executions/{name}"
post: "/apis/v1beta1/{namespace}/workflow_executions/{uid}"
};
}
rpc GetWorkflowExecutionStatisticsForNamespace (GetWorkflowExecutionStatisticsForNamespaceRequest) returns (GetWorkflowExecutionStatisticsForNamespaceResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_executions/statistics"
};
}
rpc GetWorkflowExecution (GetWorkflowExecutionRequest) returns (WorkflowExecution) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_executions/{name}"
get: "/apis/v1beta1/{namespace}/workflow_executions/{uid}"
};
}
@@ -39,108 +45,123 @@ service WorkflowService {
rpc WatchWorkflowExecution (WatchWorkflowExecutionRequest) returns (stream WorkflowExecution) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_executions/{name}/watch"
get: "/apis/v1beta1/{namespace}/workflow_executions/{uid}/watch"
};
}
rpc GetWorkflowExecutionLogs (GetWorkflowExecutionLogsRequest) returns (stream LogEntry) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_executions/{name}/pods/{podName}/containers/{containerName}/logs"
get: "/apis/v1beta1/{namespace}/workflow_executions/{uid}/pods/{podName}/containers/{containerName}/logs"
};
}
rpc GetWorkflowExecutionMetrics (GetWorkflowExecutionMetricsRequest) returns (GetWorkflowExecutionMetricsResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_executions/{name}/pods/{podName}/metrics"
get: "/apis/v1beta1/{namespace}/workflow_executions/{uid}/pods/{podName}/metrics"
};
}
rpc ResubmitWorkflowExecution (ResubmitWorkflowExecutionRequest) returns (WorkflowExecution) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workflow_executions/{name}/resubmit"
put: "/apis/v1beta1/{namespace}/workflow_executions/{uid}/resubmit"
};
}
rpc TerminateWorkflowExecution (TerminateWorkflowExecutionRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workflow_executions/{name}/terminate"
put: "/apis/v1beta1/{namespace}/workflow_executions/{uid}/terminate"
};
}
rpc GetArtifact (GetArtifactRequest) returns (ArtifactResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_executions/{name}/artifacts/{key=**}"
get: "/apis/v1beta1/{namespace}/workflow_executions/{uid}/artifacts/{key=**}"
};
}
rpc ListFiles (ListFilesRequest) returns (ListFilesResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_executions/{name}/files/{path=**}"
get: "/apis/v1beta1/{namespace}/workflow_executions/{uid}/files/{path=**}"
};
}
rpc AddWorkflowExecutionStatistics (AddWorkflowExecutionStatisticRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/workflow_executions/{name}/statistics"
post: "/apis/v1beta1/{namespace}/workflow_executions/{uid}/statistics"
body: "statistics"
};
}
rpc CronStartWorkflowExecutionStatistic (CronStartWorkflowExecutionStatisticRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/workflow_executions/{name}/cron_start_statistics"
post: "/apis/v1beta1/{namespace}/workflow_executions/{uid}/cron_start_statistics"
body: "statistics"
};
}
rpc UpdateWorkflowExecutionStatus (UpdateWorkflowExecutionStatusRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workflow_executions/{uid}/status"
body: "status"
};
}
}
message CreateWorkflowExecutionRequest {
message CreateWorkflowExecutionBody {
string workflowTemplateUid = 2;
int64 workflowTemplateVersion = 3;
repeated Parameter parameters = 4;
repeated KeyValue labels = 5;
}
message CreateWorkflowExecutionRequest {
string namespace = 1;
WorkflowExecution workflowExecution = 2;
CreateWorkflowExecutionBody body = 2;
}
message CloneWorkflowExecutionRequest {
string namespace = 1;
string name = 2;
string uid = 2;
}
message GetWorkflowExecutionRequest {
string namespace = 1;
string name = 2;
string uid = 2;
}
message GetArtifactRequest {
string namespace = 1;
string name = 2;
string uid = 2;
string key = 3;
}
message WatchWorkflowExecutionRequest {
string namespace = 1;
string name = 2;
string uid = 2;
}
message ResubmitWorkflowExecutionRequest {
string namespace = 1;
string name = 2;
string uid = 2;
}
message TerminateWorkflowExecutionRequest {
string namespace = 1;
string name = 2;
string uid = 2;
}
message GetWorkflowExecutionLogsRequest {
string namespace = 1;
string name = 2;
string uid = 2;
string podName = 3;
string containerName = 4;
}
message GetWorkflowExecutionMetricsRequest {
string namespace = 1;
string name = 2;
string uid = 2;
string podName = 3;
}
@@ -154,6 +175,10 @@ message ListWorkflowExecutionsRequest {
string workflowTemplateVersion = 3;
int32 pageSize = 4;
int32 page = 5;
string order = 6;
string labels = 7;
string phase = 8;
bool includeSystem = 9;
}
message ListWorkflowExecutionsResponse {
@@ -169,6 +194,10 @@ message LogEntry {
string content = 2;
}
message WorkflowExecutionMetadata {
string url = 1;
}
message WorkflowExecution {
string createdAt = 1;
string uid = 2;
@@ -183,6 +212,8 @@ message WorkflowExecution {
WorkflowTemplate workflowTemplate = 9;
repeated KeyValue labels = 10;
WorkflowExecutionMetadata metadata = 11;
}
message ArtifactResponse {
@@ -201,7 +232,7 @@ message File {
message ListFilesRequest {
string namespace = 1;
string name = 2;
string uid = 2;
string path = 3;
}
@@ -217,12 +248,30 @@ message Statistics {
message AddWorkflowExecutionStatisticRequest {
string namespace = 1;
string name = 2;
string uid = 2;
Statistics statistics = 3;
}
message CronStartWorkflowExecutionStatisticRequest {
string namespace = 1;
string name = 2;
string uid = 2;
Statistics statistics = 3;
}
message WorkflowExecutionStatus {
string phase = 1;
}
message UpdateWorkflowExecutionStatusRequest {
string namespace = 1;
string uid = 2;
WorkflowExecutionStatus status = 3;
}
message GetWorkflowExecutionStatisticsForNamespaceRequest {
string namespace = 1;
}
message GetWorkflowExecutionStatisticsForNamespaceResponse {
WorkflowExecutionStatisticReport stats = 1;
}

View File

@@ -392,6 +392,7 @@ type ListWorkflowTemplatesRequest struct {
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
PageSize int32 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"`
Labels string `protobuf:"bytes,4,opt,name=labels,proto3" json:"labels,omitempty"`
}
func (x *ListWorkflowTemplatesRequest) Reset() {
@@ -447,6 +448,13 @@ func (x *ListWorkflowTemplatesRequest) GetPage() int32 {
return 0
}
func (x *ListWorkflowTemplatesRequest) GetLabels() string {
if x != nil {
return x.Labels
}
return ""
}
type ListWorkflowTemplatesResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -638,6 +646,7 @@ type WorkflowExecutionStatisticReport struct {
Running int32 `protobuf:"varint,3,opt,name=running,proto3" json:"running,omitempty"`
Completed int32 `protobuf:"varint,4,opt,name=completed,proto3" json:"completed,omitempty"`
Failed int32 `protobuf:"varint,5,opt,name=failed,proto3" json:"failed,omitempty"`
Terminated int32 `protobuf:"varint,6,opt,name=terminated,proto3" json:"terminated,omitempty"`
}
func (x *WorkflowExecutionStatisticReport) Reset() {
@@ -707,6 +716,13 @@ func (x *WorkflowExecutionStatisticReport) GetFailed() int32 {
return 0
}
func (x *WorkflowExecutionStatisticReport) GetTerminated() int32 {
if x != nil {
return x.Terminated
}
return 0
}
type CronWorkflowStatisticsReport struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -760,16 +776,18 @@ type WorkflowTemplate struct {
unknownFields protoimpl.UnknownFields
CreatedAt string `protobuf:"bytes,1,opt,name=createdAt,proto3" json:"createdAt,omitempty"`
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"`
Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
Version int64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"`
Versions int64 `protobuf:"varint,5,opt,name=versions,proto3" json:"versions,omitempty"`
Manifest string `protobuf:"bytes,6,opt,name=manifest,proto3" json:"manifest,omitempty"`
IsLatest bool `protobuf:"varint,7,opt,name=isLatest,proto3" json:"isLatest,omitempty"`
IsArchived bool `protobuf:"varint,8,opt,name=isArchived,proto3" json:"isArchived,omitempty"`
Labels []*KeyValue `protobuf:"bytes,9,rep,name=labels,proto3" json:"labels,omitempty"`
Stats *WorkflowExecutionStatisticReport `protobuf:"bytes,10,opt,name=stats,proto3" json:"stats,omitempty"`
CronStats *CronWorkflowStatisticsReport `protobuf:"bytes,11,opt,name=cronStats,proto3" json:"cronStats,omitempty"`
ModifiedAt string `protobuf:"bytes,2,opt,name=modifiedAt,proto3" json:"modifiedAt,omitempty"`
Uid string `protobuf:"bytes,3,opt,name=uid,proto3" json:"uid,omitempty"`
Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"`
Version int64 `protobuf:"varint,5,opt,name=version,proto3" json:"version,omitempty"`
Versions int64 `protobuf:"varint,6,opt,name=versions,proto3" json:"versions,omitempty"`
Manifest string `protobuf:"bytes,7,opt,name=manifest,proto3" json:"manifest,omitempty"`
IsLatest bool `protobuf:"varint,8,opt,name=isLatest,proto3" json:"isLatest,omitempty"`
IsArchived bool `protobuf:"varint,9,opt,name=isArchived,proto3" json:"isArchived,omitempty"`
Labels []*KeyValue `protobuf:"bytes,10,rep,name=labels,proto3" json:"labels,omitempty"`
Stats *WorkflowExecutionStatisticReport `protobuf:"bytes,11,opt,name=stats,proto3" json:"stats,omitempty"`
CronStats *CronWorkflowStatisticsReport `protobuf:"bytes,12,opt,name=cronStats,proto3" json:"cronStats,omitempty"`
Parameters []*Parameter `protobuf:"bytes,13,rep,name=parameters,proto3" json:"parameters,omitempty"`
}
func (x *WorkflowTemplate) Reset() {
@@ -811,6 +829,13 @@ func (x *WorkflowTemplate) GetCreatedAt() string {
return ""
}
func (x *WorkflowTemplate) GetModifiedAt() string {
if x != nil {
return x.ModifiedAt
}
return ""
}
func (x *WorkflowTemplate) GetUid() string {
if x != nil {
return x.Uid
@@ -881,6 +906,13 @@ func (x *WorkflowTemplate) GetCronStats() *CronWorkflowStatisticsReport {
return nil
}
func (x *WorkflowTemplate) GetParameters() []*Parameter {
if x != nil {
return x.Parameters
}
return nil
}
type GetWorkflowTemplateLabelsRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -951,228 +983,223 @@ var file_workflow_template_proto_rawDesc = []byte{
0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x61, 0x70, 0x69, 0x1a, 0x1c,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x6c, 0x61,
0x62, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x80, 0x01, 0x0a, 0x1d, 0x43, 0x72,
0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e,
0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x10, 0x77, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x87, 0x01, 0x0a,
0x24, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
0x61, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x66, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x75, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x7c,
0x0a, 0x1c, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03,
0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x12,
0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20,
0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x55, 0x0a, 0x23,
0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75,
0x62, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x80, 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61,
0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d,
0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61,
0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x87, 0x01, 0x0a, 0x24, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
0x75, 0x69, 0x64, 0x22, 0x81, 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73,
0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x12, 0x43, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, 0x6c, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x57,
0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a,
0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52,
0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0xc4, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x43, 0x0a,
0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57,
0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52,
0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05,
0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18,
0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a,
0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05,
0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x50, 0x0a, 0x1e,
0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03,
0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x64,
0x0a, 0x1f, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x12, 0x41, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x22, 0xac, 0x01, 0x0a, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73,
0x74, 0x69, 0x63, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74,
0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12,
0x22, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75,
0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x03,
0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a,
0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05,
0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66,
0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x66, 0x61, 0x69,
0x6c, 0x65, 0x64, 0x22, 0x34, 0x0a, 0x1c, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x70,
0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01,
0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0x89, 0x03, 0x0a, 0x10, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x1c,
0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x10, 0x0a, 0x03,
0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x12,
0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20,
0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08,
0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08,
0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x6e, 0x69,
0x66, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x6e, 0x69,
0x66, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74,
0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74,
0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x08,
0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64,
0x12, 0x25, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73,
0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74,
0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x73,
0x74, 0x61, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x63, 0x72, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74,
0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72,
0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73,
0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x09, 0x63, 0x72, 0x6f, 0x6e,
0x53, 0x74, 0x61, 0x74, 0x73, 0x22, 0x6e, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4c, 0x61, 0x62, 0x65,
0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d,
0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61,
0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76,
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65,
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0xa3, 0x0c, 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x12, 0x9b, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x22,
0x2c, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b,
0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x3a, 0x10, 0x77,
0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12,
0xe5, 0x01, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
0x6e, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65,
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x22, 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7b, 0x1a, 0x67, 0x2f, 0x61,
0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d,
0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x64,
0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x76, 0x65, 0x72,
0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x3a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0xc2, 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61,
0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x22, 0x66, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x22, 0x4c, 0x2f, 0x61,
0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d,
0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x64,
0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x10, 0x77, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0xd3, 0x01, 0x0a,
0x13, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x83, 0x01, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x7d, 0x12, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62,
0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d,
0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x47, 0x12, 0x45, 0x2f, 0x61, 0x70,
0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f,
0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x2f,
0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
0x6e, 0x7d, 0x12, 0xb8, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69,
0x6f, 0x6e, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65,
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d,
0x12, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f,
0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b,
0x75, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x94, 0x01,
0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69,
0x6c, 0x61, 0x74, 0x65, 0x22, 0x66, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75,
0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x7c, 0x0a, 0x1c,
0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09,
0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69,
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04,
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x55, 0x0a, 0x23, 0x4c, 0x69,
0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31,
0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69,
0x64, 0x22, 0x81, 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f,
0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x12, 0x43, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65,
0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04,
0x70, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04,
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0xc4, 0x01, 0x0a,
0x1d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14,
0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63,
0x6f, 0x75, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a,
0x05, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61,
0x67, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e,
0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f,
0x75, 0x6e, 0x74, 0x22, 0x50, 0x0a, 0x1e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x64, 0x0a, 0x1f, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65,
0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0xcc, 0x01, 0x0a, 0x20,
0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f,
0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74,
0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x78,
0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x61,
0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75,
0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x75, 0x6e,
0x6e, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74,
0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01,
0x28, 0x05, 0x52, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x65,
0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a,
0x74, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x64, 0x22, 0x34, 0x0a, 0x1c, 0x43, 0x72,
0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73,
0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f,
0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c,
0x22, 0xd9, 0x03, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
0x41, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65,
0x64, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x41,
0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65,
0x64, 0x41, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72,
0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73,
0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18,
0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12,
0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69,
0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69,
0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x41, 0x72, 0x63,
0x68, 0x69, 0x76, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x41,
0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c,
0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4b, 0x65,
0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3b,
0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x45, 0x78, 0x65, 0x63,
0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x65,
0x70, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x09, 0x63,
0x72, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x70, 0x6f, 0x72,
0x74, 0x52, 0x09, 0x63, 0x72, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x0a,
0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72,
0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x6e, 0x0a, 0x20,
0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12,
0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61,
0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, 0xbb, 0x0a, 0x0a,
0x17, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x9b, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65,
0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x46,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x22, 0x2c, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x73, 0x12, 0xe9, 0x01, 0x0a, 0x15, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x21,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77,
0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x95, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x8e, 0x01, 0x12, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61,
0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73,
0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x2f, 0x7b, 0x6e, 0x61,
0x6d, 0x65, 0x7d, 0x5a, 0x4b, 0x12, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62,
0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d,
0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x2f,
0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x7d,
0x12, 0xa8, 0x01, 0x0a, 0x17, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b,
0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57,
0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x1a,
0x3a, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b,
0x61, 0x74, 0x65, 0x73, 0x3a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0xc2, 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74,
0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43,
0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x22, 0x66, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x22, 0x4c, 0x2f, 0x61, 0x70,
0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f,
0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x75, 0x69, 0x64, 0x7d,
0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0xd3, 0x01, 0x0a, 0x13,
0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x12, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x83, 0x01, 0x82, 0xd3,
0xe4, 0x93, 0x02, 0x7d, 0x12, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65,
0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f,
0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x5a, 0x47, 0x12, 0x45, 0x2f, 0x61, 0x70, 0x69,
0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73,
0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x76,
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
0x7d, 0x12, 0xb8, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
0x6e, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72,
0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12,
0x3b, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b,
0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75,
0x69, 0x64, 0x7d, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x94, 0x01, 0x0a,
0x15, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73,
0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x2c, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62,
0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d,
0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x73, 0x12, 0xe9, 0x01, 0x0a, 0x15, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x6f, 0x6e, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x95, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8e,
0x01, 0x12, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31,
0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f,
0x7b, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d,
0x65, 0x7d, 0x5a, 0x4b, 0x12, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65,
0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f,
0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x6f, 0x6e, 0x65, 0x2f, 0x7b,
0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x7b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x12,
0xa8, 0x01, 0x0a, 0x17, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f,
0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x1a, 0x3a,
0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e,
0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c,
0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69,
0x64, 0x7d, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x33,
}
var (
@@ -1204,6 +1231,7 @@ var file_workflow_template_proto_goTypes = []interface{}{
(*WorkflowTemplate)(nil), // 12: api.WorkflowTemplate
(*GetWorkflowTemplateLabelsRequest)(nil), // 13: api.GetWorkflowTemplateLabelsRequest
(*KeyValue)(nil), // 14: api.KeyValue
(*Parameter)(nil), // 15: api.Parameter
}
var file_workflow_template_proto_depIdxs = []int32{
12, // 0: api.CreateWorkflowTemplateRequest.workflowTemplate:type_name -> api.WorkflowTemplate
@@ -1214,8 +1242,8 @@ var file_workflow_template_proto_depIdxs = []int32{
14, // 5: api.WorkflowTemplate.labels:type_name -> api.KeyValue
10, // 6: api.WorkflowTemplate.stats:type_name -> api.WorkflowExecutionStatisticReport
11, // 7: api.WorkflowTemplate.cronStats:type_name -> api.CronWorkflowStatisticsReport
0, // 8: api.WorkflowTemplateService.CreateWorkflowTemplate:input_type -> api.CreateWorkflowTemplateRequest
1, // 9: api.WorkflowTemplateService.UpdateWorkflowTemplateVersion:input_type -> api.UpdateWorkflowTemplateVersionRequest
15, // 8: api.WorkflowTemplate.parameters:type_name -> api.Parameter
0, // 9: api.WorkflowTemplateService.CreateWorkflowTemplate:input_type -> api.CreateWorkflowTemplateRequest
0, // 10: api.WorkflowTemplateService.CreateWorkflowTemplateVersion:input_type -> api.CreateWorkflowTemplateRequest
2, // 11: api.WorkflowTemplateService.GetWorkflowTemplate:input_type -> api.GetWorkflowTemplateRequest
4, // 12: api.WorkflowTemplateService.ListWorkflowTemplateVersions:input_type -> api.ListWorkflowTemplateVersionsRequest
@@ -1223,18 +1251,17 @@ var file_workflow_template_proto_depIdxs = []int32{
3, // 14: api.WorkflowTemplateService.CloneWorkflowTemplate:input_type -> api.CloneWorkflowTemplateRequest
8, // 15: api.WorkflowTemplateService.ArchiveWorkflowTemplate:input_type -> api.ArchiveWorkflowTemplateRequest
12, // 16: api.WorkflowTemplateService.CreateWorkflowTemplate:output_type -> api.WorkflowTemplate
12, // 17: api.WorkflowTemplateService.UpdateWorkflowTemplateVersion:output_type -> api.WorkflowTemplate
12, // 18: api.WorkflowTemplateService.CreateWorkflowTemplateVersion:output_type -> api.WorkflowTemplate
12, // 19: api.WorkflowTemplateService.GetWorkflowTemplate:output_type -> api.WorkflowTemplate
5, // 20: api.WorkflowTemplateService.ListWorkflowTemplateVersions:output_type -> api.ListWorkflowTemplateVersionsResponse
7, // 21: api.WorkflowTemplateService.ListWorkflowTemplates:output_type -> api.ListWorkflowTemplatesResponse
12, // 22: api.WorkflowTemplateService.CloneWorkflowTemplate:output_type -> api.WorkflowTemplate
9, // 23: api.WorkflowTemplateService.ArchiveWorkflowTemplate:output_type -> api.ArchiveWorkflowTemplateResponse
16, // [16:24] is the sub-list for method output_type
8, // [8:16] is the sub-list for method input_type
8, // [8:8] is the sub-list for extension type_name
8, // [8:8] is the sub-list for extension extendee
0, // [0:8] is the sub-list for field type_name
12, // 17: api.WorkflowTemplateService.CreateWorkflowTemplateVersion:output_type -> api.WorkflowTemplate
12, // 18: api.WorkflowTemplateService.GetWorkflowTemplate:output_type -> api.WorkflowTemplate
5, // 19: api.WorkflowTemplateService.ListWorkflowTemplateVersions:output_type -> api.ListWorkflowTemplateVersionsResponse
7, // 20: api.WorkflowTemplateService.ListWorkflowTemplates:output_type -> api.ListWorkflowTemplatesResponse
12, // 21: api.WorkflowTemplateService.CloneWorkflowTemplate:output_type -> api.WorkflowTemplate
9, // 22: api.WorkflowTemplateService.ArchiveWorkflowTemplate:output_type -> api.ArchiveWorkflowTemplateResponse
16, // [16:23] is the sub-list for method output_type
9, // [9:16] is the sub-list for method input_type
9, // [9:9] is the sub-list for extension type_name
9, // [9:9] is the sub-list for extension extendee
0, // [0:9] is the sub-list for field type_name
}
func init() { file_workflow_template_proto_init() }
@@ -1243,6 +1270,7 @@ func file_workflow_template_proto_init() {
return
}
file_label_proto_init()
file_common_proto_init()
if !protoimpl.UnsafeEnabled {
file_workflow_template_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CreateWorkflowTemplateRequest); i {
@@ -1446,7 +1474,6 @@ const _ = grpc.SupportPackageIsVersion6
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type WorkflowTemplateServiceClient interface {
CreateWorkflowTemplate(ctx context.Context, in *CreateWorkflowTemplateRequest, opts ...grpc.CallOption) (*WorkflowTemplate, error)
UpdateWorkflowTemplateVersion(ctx context.Context, in *UpdateWorkflowTemplateVersionRequest, opts ...grpc.CallOption) (*WorkflowTemplate, error)
CreateWorkflowTemplateVersion(ctx context.Context, in *CreateWorkflowTemplateRequest, opts ...grpc.CallOption) (*WorkflowTemplate, error)
GetWorkflowTemplate(ctx context.Context, in *GetWorkflowTemplateRequest, opts ...grpc.CallOption) (*WorkflowTemplate, error)
ListWorkflowTemplateVersions(ctx context.Context, in *ListWorkflowTemplateVersionsRequest, opts ...grpc.CallOption) (*ListWorkflowTemplateVersionsResponse, error)
@@ -1472,15 +1499,6 @@ func (c *workflowTemplateServiceClient) CreateWorkflowTemplate(ctx context.Conte
return out, nil
}
func (c *workflowTemplateServiceClient) UpdateWorkflowTemplateVersion(ctx context.Context, in *UpdateWorkflowTemplateVersionRequest, opts ...grpc.CallOption) (*WorkflowTemplate, error) {
out := new(WorkflowTemplate)
err := c.cc.Invoke(ctx, "/api.WorkflowTemplateService/UpdateWorkflowTemplateVersion", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *workflowTemplateServiceClient) CreateWorkflowTemplateVersion(ctx context.Context, in *CreateWorkflowTemplateRequest, opts ...grpc.CallOption) (*WorkflowTemplate, error) {
out := new(WorkflowTemplate)
err := c.cc.Invoke(ctx, "/api.WorkflowTemplateService/CreateWorkflowTemplateVersion", in, out, opts...)
@@ -1538,7 +1556,6 @@ func (c *workflowTemplateServiceClient) ArchiveWorkflowTemplate(ctx context.Cont
// WorkflowTemplateServiceServer is the server API for WorkflowTemplateService service.
type WorkflowTemplateServiceServer interface {
CreateWorkflowTemplate(context.Context, *CreateWorkflowTemplateRequest) (*WorkflowTemplate, error)
UpdateWorkflowTemplateVersion(context.Context, *UpdateWorkflowTemplateVersionRequest) (*WorkflowTemplate, error)
CreateWorkflowTemplateVersion(context.Context, *CreateWorkflowTemplateRequest) (*WorkflowTemplate, error)
GetWorkflowTemplate(context.Context, *GetWorkflowTemplateRequest) (*WorkflowTemplate, error)
ListWorkflowTemplateVersions(context.Context, *ListWorkflowTemplateVersionsRequest) (*ListWorkflowTemplateVersionsResponse, error)
@@ -1554,9 +1571,6 @@ type UnimplementedWorkflowTemplateServiceServer struct {
func (*UnimplementedWorkflowTemplateServiceServer) CreateWorkflowTemplate(context.Context, *CreateWorkflowTemplateRequest) (*WorkflowTemplate, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateWorkflowTemplate not implemented")
}
func (*UnimplementedWorkflowTemplateServiceServer) UpdateWorkflowTemplateVersion(context.Context, *UpdateWorkflowTemplateVersionRequest) (*WorkflowTemplate, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateWorkflowTemplateVersion not implemented")
}
func (*UnimplementedWorkflowTemplateServiceServer) CreateWorkflowTemplateVersion(context.Context, *CreateWorkflowTemplateRequest) (*WorkflowTemplate, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateWorkflowTemplateVersion not implemented")
}
@@ -1598,24 +1612,6 @@ func _WorkflowTemplateService_CreateWorkflowTemplate_Handler(srv interface{}, ct
return interceptor(ctx, in, info, handler)
}
func _WorkflowTemplateService_UpdateWorkflowTemplateVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(UpdateWorkflowTemplateVersionRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(WorkflowTemplateServiceServer).UpdateWorkflowTemplateVersion(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.WorkflowTemplateService/UpdateWorkflowTemplateVersion",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(WorkflowTemplateServiceServer).UpdateWorkflowTemplateVersion(ctx, req.(*UpdateWorkflowTemplateVersionRequest))
}
return interceptor(ctx, in, info, handler)
}
func _WorkflowTemplateService_CreateWorkflowTemplateVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CreateWorkflowTemplateRequest)
if err := dec(in); err != nil {
@@ -1732,10 +1728,6 @@ var _WorkflowTemplateService_serviceDesc = grpc.ServiceDesc{
MethodName: "CreateWorkflowTemplate",
Handler: _WorkflowTemplateService_CreateWorkflowTemplate_Handler,
},
{
MethodName: "UpdateWorkflowTemplateVersion",
Handler: _WorkflowTemplateService_UpdateWorkflowTemplateVersion_Handler,
},
{
MethodName: "CreateWorkflowTemplateVersion",
Handler: _WorkflowTemplateService_CreateWorkflowTemplateVersion_Handler,

View File

@@ -101,120 +101,6 @@ func local_request_WorkflowTemplateService_CreateWorkflowTemplate_0(ctx context.
}
func request_WorkflowTemplateService_UpdateWorkflowTemplateVersion_0(ctx context.Context, marshaler runtime.Marshaler, client WorkflowTemplateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UpdateWorkflowTemplateVersionRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.WorkflowTemplate); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["workflowTemplate.uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflowTemplate.uid")
}
err = runtime.PopulateFieldFromPath(&protoReq, "workflowTemplate.uid", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflowTemplate.uid", err)
}
val, ok = pathParams["workflowTemplate.version"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflowTemplate.version")
}
err = runtime.PopulateFieldFromPath(&protoReq, "workflowTemplate.version", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflowTemplate.version", err)
}
msg, err := client.UpdateWorkflowTemplateVersion(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkflowTemplateService_UpdateWorkflowTemplateVersion_0(ctx context.Context, marshaler runtime.Marshaler, server WorkflowTemplateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UpdateWorkflowTemplateVersionRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.WorkflowTemplate); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["workflowTemplate.uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflowTemplate.uid")
}
err = runtime.PopulateFieldFromPath(&protoReq, "workflowTemplate.uid", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflowTemplate.uid", err)
}
val, ok = pathParams["workflowTemplate.version"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflowTemplate.version")
}
err = runtime.PopulateFieldFromPath(&protoReq, "workflowTemplate.version", val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflowTemplate.version", err)
}
msg, err := server.UpdateWorkflowTemplateVersion(ctx, &protoReq)
return msg, metadata, err
}
func request_WorkflowTemplateService_CreateWorkflowTemplateVersion_0(ctx context.Context, marshaler runtime.Marshaler, client WorkflowTemplateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq CreateWorkflowTemplateRequest
var metadata runtime.ServerMetadata
@@ -975,26 +861,6 @@ func RegisterWorkflowTemplateServiceHandlerServer(ctx context.Context, mux *runt
})
mux.Handle("PUT", pattern_WorkflowTemplateService_UpdateWorkflowTemplateVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WorkflowTemplateService_UpdateWorkflowTemplateVersion_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkflowTemplateService_UpdateWorkflowTemplateVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WorkflowTemplateService_CreateWorkflowTemplateVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -1216,26 +1082,6 @@ func RegisterWorkflowTemplateServiceHandlerClient(ctx context.Context, mux *runt
})
mux.Handle("PUT", pattern_WorkflowTemplateService_UpdateWorkflowTemplateVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WorkflowTemplateService_UpdateWorkflowTemplateVersion_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkflowTemplateService_UpdateWorkflowTemplateVersion_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WorkflowTemplateService_CreateWorkflowTemplateVersion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -1402,8 +1248,6 @@ func RegisterWorkflowTemplateServiceHandlerClient(ctx context.Context, mux *runt
var (
pattern_WorkflowTemplateService_CreateWorkflowTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"apis", "v1beta1", "namespace", "workflow_templates"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowTemplateService_UpdateWorkflowTemplateVersion_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"apis", "v1beta1", "namespace", "workflow_templates", "workflowTemplate.uid", "versions", "workflowTemplate.version"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowTemplateService_CreateWorkflowTemplateVersion_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workflow_templates", "workflowTemplate.uid", "versions"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkflowTemplateService_GetWorkflowTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "workflow_templates", "uid"}, "", runtime.AssumeColonVerbOpt(true)))
@@ -1424,8 +1268,6 @@ var (
var (
forward_WorkflowTemplateService_CreateWorkflowTemplate_0 = runtime.ForwardResponseMessage
forward_WorkflowTemplateService_UpdateWorkflowTemplateVersion_0 = runtime.ForwardResponseMessage
forward_WorkflowTemplateService_CreateWorkflowTemplateVersion_0 = runtime.ForwardResponseMessage
forward_WorkflowTemplateService_GetWorkflowTemplate_0 = runtime.ForwardResponseMessage

View File

@@ -4,6 +4,7 @@ package api;
import "google/api/annotations.proto";
import "label.proto";
import "common.proto";
service WorkflowTemplateService {
rpc CreateWorkflowTemplate (CreateWorkflowTemplateRequest) returns (WorkflowTemplate) {
@@ -13,13 +14,6 @@ service WorkflowTemplateService {
};
}
rpc UpdateWorkflowTemplateVersion (UpdateWorkflowTemplateVersionRequest) returns (WorkflowTemplate) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workflow_templates/{workflowTemplate.uid}/versions/{workflowTemplate.version}"
body: "workflowTemplate"
};
}
rpc CreateWorkflowTemplateVersion (CreateWorkflowTemplateRequest) returns (WorkflowTemplate) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/workflow_templates/{workflowTemplate.uid}/versions"
@@ -101,6 +95,8 @@ message ListWorkflowTemplatesRequest {
string namespace = 1;
int32 pageSize = 2;
int32 page = 3;
string labels = 4;
}
message ListWorkflowTemplatesResponse {
@@ -126,6 +122,7 @@ message WorkflowExecutionStatisticReport {
int32 running = 3;
int32 completed = 4;
int32 failed = 5;
int32 terminated = 6;
}
message CronWorkflowStatisticsReport {
@@ -134,18 +131,19 @@ message CronWorkflowStatisticsReport {
message WorkflowTemplate {
string createdAt = 1;
string uid = 2;
string name = 3;
int64 version = 4;
int64 versions = 5;
string manifest = 6;
bool isLatest = 7;
bool isArchived = 8;
repeated KeyValue labels = 9;
WorkflowExecutionStatisticReport stats = 10;
CronWorkflowStatisticsReport cronStats = 11;
string modifiedAt = 2;
string uid = 3;
string name = 4;
int64 version = 5;
int64 versions = 6;
string manifest = 7;
bool isLatest = 8;
bool isArchived = 9;
repeated KeyValue labels = 10;
WorkflowExecutionStatisticReport stats = 11;
CronWorkflowStatisticsReport cronStats = 12;
repeated Parameter parameters = 13;
}
message GetWorkflowTemplateLabelsRequest {

File diff suppressed because it is too large Load Diff

View File

@@ -39,7 +39,7 @@ func request_WorkspaceService_CreateWorkspace_0(ctx context.Context, marshaler r
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Workspace); err != nil && err != io.EOF {
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@@ -74,7 +74,7 @@ func local_request_WorkspaceService_CreateWorkspace_0(ctx context.Context, marsh
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Workspace); err != nil && err != io.EOF {
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
@@ -101,6 +101,136 @@ func local_request_WorkspaceService_CreateWorkspace_0(ctx context.Context, marsh
}
func request_WorkspaceService_GetWorkspaceStatisticsForNamespace_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetWorkspaceStatisticsForNamespaceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
msg, err := client.GetWorkspaceStatisticsForNamespace(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkspaceService_GetWorkspaceStatisticsForNamespace_0(ctx context.Context, marshaler runtime.Marshaler, server WorkspaceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetWorkspaceStatisticsForNamespaceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
msg, err := server.GetWorkspaceStatisticsForNamespace(ctx, &protoReq)
return msg, metadata, err
}
func request_WorkspaceService_GetWorkspace_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetWorkspaceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.GetWorkspace(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkspaceService_GetWorkspace_0(ctx context.Context, marshaler runtime.Marshaler, server WorkspaceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetWorkspaceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.GetWorkspace(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_WorkspaceService_ListWorkspaces_0 = &utilities.DoubleArray{Encoding: map[string]int{"namespace": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
)
@@ -262,6 +392,98 @@ func local_request_WorkspaceService_UpdateWorkspaceStatus_0(ctx context.Context,
}
func request_WorkspaceService_UpdateWorkspace_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UpdateWorkspaceRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.UpdateWorkspace(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkspaceService_UpdateWorkspace_0(ctx context.Context, marshaler runtime.Marshaler, server WorkspaceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UpdateWorkspaceRequest
var metadata runtime.ServerMetadata
newReader, berr := utilities.IOReaderFactory(req.Body)
if berr != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr)
}
if err := marshaler.NewDecoder(newReader()).Decode(&protoReq.Body); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.UpdateWorkspace(ctx, &protoReq)
return msg, metadata, err
}
func request_WorkspaceService_PauseWorkspace_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq PauseWorkspaceRequest
var metadata runtime.ServerMetadata
@@ -338,6 +560,82 @@ func local_request_WorkspaceService_PauseWorkspace_0(ctx context.Context, marsha
}
func request_WorkspaceService_ResumeWorkspace_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ResumeWorkspaceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.ResumeWorkspace(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkspaceService_ResumeWorkspace_0(ctx context.Context, marshaler runtime.Marshaler, server WorkspaceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ResumeWorkspaceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.ResumeWorkspace(ctx, &protoReq)
return msg, metadata, err
}
func request_WorkspaceService_DeleteWorkspace_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq DeleteWorkspaceRequest
var metadata runtime.ServerMetadata
@@ -414,6 +712,82 @@ func local_request_WorkspaceService_DeleteWorkspace_0(ctx context.Context, marsh
}
func request_WorkspaceService_RetryLastWorkspaceAction_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq RetryActionWorkspaceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.RetryLastWorkspaceAction(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkspaceService_RetryLastWorkspaceAction_0(ctx context.Context, marshaler runtime.Marshaler, server WorkspaceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq RetryActionWorkspaceRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.RetryLastWorkspaceAction(ctx, &protoReq)
return msg, metadata, err
}
// RegisterWorkspaceServiceHandlerServer registers the http handlers for service WorkspaceService to "mux".
// UnaryRPC :call WorkspaceServiceServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
@@ -439,6 +813,46 @@ func RegisterWorkspaceServiceHandlerServer(ctx context.Context, mux *runtime.Ser
})
mux.Handle("GET", pattern_WorkspaceService_GetWorkspaceStatisticsForNamespace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WorkspaceService_GetWorkspaceStatisticsForNamespace_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkspaceService_GetWorkspaceStatisticsForNamespace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WorkspaceService_GetWorkspace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WorkspaceService_GetWorkspace_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkspaceService_GetWorkspace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WorkspaceService_ListWorkspaces_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -479,6 +893,26 @@ func RegisterWorkspaceServiceHandlerServer(ctx context.Context, mux *runtime.Ser
})
mux.Handle("PUT", pattern_WorkspaceService_UpdateWorkspace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WorkspaceService_UpdateWorkspace_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkspaceService_UpdateWorkspace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("PUT", pattern_WorkspaceService_PauseWorkspace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -499,6 +933,26 @@ func RegisterWorkspaceServiceHandlerServer(ctx context.Context, mux *runtime.Ser
})
mux.Handle("PUT", pattern_WorkspaceService_ResumeWorkspace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WorkspaceService_ResumeWorkspace_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkspaceService_ResumeWorkspace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("DELETE", pattern_WorkspaceService_DeleteWorkspace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -519,6 +973,26 @@ func RegisterWorkspaceServiceHandlerServer(ctx context.Context, mux *runtime.Ser
})
mux.Handle("PUT", pattern_WorkspaceService_RetryLastWorkspaceAction_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WorkspaceService_RetryLastWorkspaceAction_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkspaceService_RetryLastWorkspaceAction_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
@@ -580,6 +1054,46 @@ func RegisterWorkspaceServiceHandlerClient(ctx context.Context, mux *runtime.Ser
})
mux.Handle("GET", pattern_WorkspaceService_GetWorkspaceStatisticsForNamespace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WorkspaceService_GetWorkspaceStatisticsForNamespace_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkspaceService_GetWorkspaceStatisticsForNamespace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WorkspaceService_GetWorkspace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WorkspaceService_GetWorkspace_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkspaceService_GetWorkspace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WorkspaceService_ListWorkspaces_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -620,6 +1134,26 @@ func RegisterWorkspaceServiceHandlerClient(ctx context.Context, mux *runtime.Ser
})
mux.Handle("PUT", pattern_WorkspaceService_UpdateWorkspace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WorkspaceService_UpdateWorkspace_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkspaceService_UpdateWorkspace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("PUT", pattern_WorkspaceService_PauseWorkspace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -640,6 +1174,26 @@ func RegisterWorkspaceServiceHandlerClient(ctx context.Context, mux *runtime.Ser
})
mux.Handle("PUT", pattern_WorkspaceService_ResumeWorkspace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WorkspaceService_ResumeWorkspace_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkspaceService_ResumeWorkspace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("DELETE", pattern_WorkspaceService_DeleteWorkspace_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -660,29 +1214,69 @@ func RegisterWorkspaceServiceHandlerClient(ctx context.Context, mux *runtime.Ser
})
mux.Handle("PUT", pattern_WorkspaceService_RetryLastWorkspaceAction_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WorkspaceService_RetryLastWorkspaceAction_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkspaceService_RetryLastWorkspaceAction_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_WorkspaceService_CreateWorkspace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"apis", "v1beta1", "namespace", "workspaces"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceService_GetWorkspaceStatisticsForNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"apis", "v1beta1", "namespace", "workspace", "statistics"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceService_GetWorkspace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "workspaces", "uid"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceService_ListWorkspaces_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"apis", "v1beta1", "namespace", "workspaces"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceService_UpdateWorkspaceStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workspaces", "uid", "status"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceService_UpdateWorkspace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "workspaces", "uid"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceService_PauseWorkspace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workspaces", "uid", "pause"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceService_ResumeWorkspace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workspaces", "uid", "resume"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceService_DeleteWorkspace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "workspaces", "uid"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceService_RetryLastWorkspaceAction_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workspaces", "uid", "retry"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_WorkspaceService_CreateWorkspace_0 = runtime.ForwardResponseMessage
forward_WorkspaceService_GetWorkspaceStatisticsForNamespace_0 = runtime.ForwardResponseMessage
forward_WorkspaceService_GetWorkspace_0 = runtime.ForwardResponseMessage
forward_WorkspaceService_ListWorkspaces_0 = runtime.ForwardResponseMessage
forward_WorkspaceService_UpdateWorkspaceStatus_0 = runtime.ForwardResponseMessage
forward_WorkspaceService_UpdateWorkspace_0 = runtime.ForwardResponseMessage
forward_WorkspaceService_PauseWorkspace_0 = runtime.ForwardResponseMessage
forward_WorkspaceService_ResumeWorkspace_0 = runtime.ForwardResponseMessage
forward_WorkspaceService_DeleteWorkspace_0 = runtime.ForwardResponseMessage
forward_WorkspaceService_RetryLastWorkspaceAction_0 = runtime.ForwardResponseMessage
)

View File

@@ -12,7 +12,19 @@ service WorkspaceService {
rpc CreateWorkspace (CreateWorkspaceRequest) returns (Workspace) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/workspaces"
body: "workspace"
body: "body"
};
}
rpc GetWorkspaceStatisticsForNamespace (GetWorkspaceStatisticsForNamespaceRequest) returns (GetWorkspaceStatisticsForNamespaceResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workspace/statistics"
};
}
rpc GetWorkspace (GetWorkspaceRequest) returns (Workspace) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workspaces/{uid}"
};
}
@@ -29,17 +41,36 @@ service WorkspaceService {
};
}
rpc UpdateWorkspace (UpdateWorkspaceRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workspaces/{uid}"
body: "body"
};
}
rpc PauseWorkspace (PauseWorkspaceRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workspaces/{uid}/pause"
};
}
rpc ResumeWorkspace (ResumeWorkspaceRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workspaces/{uid}/resume"
};
}
rpc DeleteWorkspace (DeleteWorkspaceRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/apis/v1beta1/{namespace}/workspaces/{uid}"
};
}
rpc RetryLastWorkspaceAction (RetryActionWorkspaceRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workspaces/{uid}/retry"
};
}
}
message Workspace {
@@ -51,6 +82,8 @@ message Workspace {
WorkspaceTemplate workspaceTemplate = 6;
WorkspaceStatus status = 7;
repeated KeyValue labels = 8;
string url = 9;
repeated Parameter templateParameters = 10;
}
message WorkspaceStatus {
@@ -60,9 +93,23 @@ message WorkspaceStatus {
string terminatedAt = 4;
}
message CreateWorkspaceBody {
string workspaceTemplateUid = 1;
int64 workspaceTemplateVersion = 2;
repeated Parameter parameters = 3;
repeated KeyValue labels = 4;
}
message CreateWorkspaceRequest {
string namespace = 1;
Workspace workspace = 2;
CreateWorkspaceBody body = 2;
}
message GetWorkspaceRequest {
string namespace = 1;
string uid = 2;
}
message UpdateWorkspaceStatusRequest {
@@ -71,10 +118,24 @@ message UpdateWorkspaceStatusRequest {
WorkspaceStatus status = 3;
}
message UpdateWorkspaceBody {
repeated Parameter parameters = 1;
repeated KeyValue labels = 2;
}
message UpdateWorkspaceRequest {
string namespace = 1;
string uid = 2;
UpdateWorkspaceBody body = 3;
}
message ListWorkspaceRequest {
string namespace = 1;
int32 pageSize = 2;
int32 page = 3;
string order = 4;
string labels = 5;
string phase = 6;
}
message ListWorkspaceResponse {
@@ -90,7 +151,43 @@ message PauseWorkspaceRequest {
string uid = 2;
}
message ResumeWorkspaceRequest {
string namespace = 1;
string uid = 2;
}
message DeleteWorkspaceRequest {
string namespace = 1;
string uid = 2;
}
message RetryActionWorkspaceRequest {
string namespace = 1;
string uid = 2;
}
message WorkspaceStatisticReport {
int32 total = 1;
string lastCreated = 2;
int32 launching = 3;
int32 running = 4;
int32 updating = 5;
int32 pausing = 6;
int32 paused = 7;
int32 terminating = 8;
int32 terminated = 9;
int32 failedToPause = 10;
int32 failedToResume = 11;
int32 failedToTerminate = 12;
int32 failedToLaunch = 13;
int32 failedToUpdate = 14;
int32 failed = 15;
}
message GetWorkspaceStatisticsForNamespaceRequest {
string namespace = 1;
}
message GetWorkspaceStatisticsForNamespaceResponse {
WorkspaceStatisticReport stats = 1;
}

View File

@@ -43,6 +43,9 @@ type WorkspaceTemplate struct {
IsLatest bool `protobuf:"varint,5,opt,name=isLatest,proto3" json:"isLatest,omitempty"`
CreatedAt string `protobuf:"bytes,6,opt,name=createdAt,proto3" json:"createdAt,omitempty"`
WorkflowTemplate *WorkflowTemplate `protobuf:"bytes,7,opt,name=workflowTemplate,proto3" json:"workflowTemplate,omitempty"`
Labels []*KeyValue `protobuf:"bytes,8,rep,name=labels,proto3" json:"labels,omitempty"`
IsArchived bool `protobuf:"varint,9,opt,name=isArchived,proto3" json:"isArchived,omitempty"`
Description string `protobuf:"bytes,10,opt,name=description,proto3" json:"description,omitempty"`
}
func (x *WorkspaceTemplate) Reset() {
@@ -126,6 +129,27 @@ func (x *WorkspaceTemplate) GetWorkflowTemplate() *WorkflowTemplate {
return nil
}
func (x *WorkspaceTemplate) GetLabels() []*KeyValue {
if x != nil {
return x.Labels
}
return nil
}
func (x *WorkspaceTemplate) GetIsArchived() bool {
if x != nil {
return x.IsArchived
}
return false
}
func (x *WorkspaceTemplate) GetDescription() string {
if x != nil {
return x.Description
}
return ""
}
type GenerateWorkspaceTemplateWorkflowTemplateRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -250,7 +274,7 @@ type UpdateWorkspaceTemplateRequest struct {
unknownFields protoimpl.UnknownFields
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"`
WorkspaceTemplate *WorkspaceTemplate `protobuf:"bytes,3,opt,name=workspaceTemplate,proto3" json:"workspaceTemplate,omitempty"`
}
@@ -293,9 +317,9 @@ func (x *UpdateWorkspaceTemplateRequest) GetNamespace() string {
return ""
}
func (x *UpdateWorkspaceTemplateRequest) GetName() string {
func (x *UpdateWorkspaceTemplateRequest) GetUid() string {
if x != nil {
return x.Name
return x.Uid
}
return ""
}
@@ -370,6 +394,61 @@ func (x *GetWorkspaceTemplateRequest) GetVersion() int64 {
return 0
}
type ArchiveWorkspaceTemplateRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"`
}
func (x *ArchiveWorkspaceTemplateRequest) Reset() {
*x = ArchiveWorkspaceTemplateRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_workspace_template_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ArchiveWorkspaceTemplateRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ArchiveWorkspaceTemplateRequest) ProtoMessage() {}
func (x *ArchiveWorkspaceTemplateRequest) ProtoReflect() protoreflect.Message {
mi := &file_workspace_template_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ArchiveWorkspaceTemplateRequest.ProtoReflect.Descriptor instead.
func (*ArchiveWorkspaceTemplateRequest) Descriptor() ([]byte, []int) {
return file_workspace_template_proto_rawDescGZIP(), []int{5}
}
func (x *ArchiveWorkspaceTemplateRequest) GetNamespace() string {
if x != nil {
return x.Namespace
}
return ""
}
func (x *ArchiveWorkspaceTemplateRequest) GetUid() string {
if x != nil {
return x.Uid
}
return ""
}
type ListWorkspaceTemplatesRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -378,12 +457,15 @@ type ListWorkspaceTemplatesRequest struct {
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
PageSize int32 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"`
Order string `protobuf:"bytes,4,opt,name=order,proto3" json:"order,omitempty"`
Labels string `protobuf:"bytes,5,opt,name=labels,proto3" json:"labels,omitempty"`
Uid string `protobuf:"bytes,6,opt,name=uid,proto3" json:"uid,omitempty"`
}
func (x *ListWorkspaceTemplatesRequest) Reset() {
*x = ListWorkspaceTemplatesRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_workspace_template_proto_msgTypes[5]
mi := &file_workspace_template_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -396,7 +478,7 @@ func (x *ListWorkspaceTemplatesRequest) String() string {
func (*ListWorkspaceTemplatesRequest) ProtoMessage() {}
func (x *ListWorkspaceTemplatesRequest) ProtoReflect() protoreflect.Message {
mi := &file_workspace_template_proto_msgTypes[5]
mi := &file_workspace_template_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -409,7 +491,7 @@ func (x *ListWorkspaceTemplatesRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListWorkspaceTemplatesRequest.ProtoReflect.Descriptor instead.
func (*ListWorkspaceTemplatesRequest) Descriptor() ([]byte, []int) {
return file_workspace_template_proto_rawDescGZIP(), []int{5}
return file_workspace_template_proto_rawDescGZIP(), []int{6}
}
func (x *ListWorkspaceTemplatesRequest) GetNamespace() string {
@@ -433,6 +515,27 @@ func (x *ListWorkspaceTemplatesRequest) GetPage() int32 {
return 0
}
func (x *ListWorkspaceTemplatesRequest) GetOrder() string {
if x != nil {
return x.Order
}
return ""
}
func (x *ListWorkspaceTemplatesRequest) GetLabels() string {
if x != nil {
return x.Labels
}
return ""
}
func (x *ListWorkspaceTemplatesRequest) GetUid() string {
if x != nil {
return x.Uid
}
return ""
}
type ListWorkspaceTemplatesResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -448,7 +551,7 @@ type ListWorkspaceTemplatesResponse struct {
func (x *ListWorkspaceTemplatesResponse) Reset() {
*x = ListWorkspaceTemplatesResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_workspace_template_proto_msgTypes[6]
mi := &file_workspace_template_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -461,7 +564,7 @@ func (x *ListWorkspaceTemplatesResponse) String() string {
func (*ListWorkspaceTemplatesResponse) ProtoMessage() {}
func (x *ListWorkspaceTemplatesResponse) ProtoReflect() protoreflect.Message {
mi := &file_workspace_template_proto_msgTypes[6]
mi := &file_workspace_template_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -474,7 +577,7 @@ func (x *ListWorkspaceTemplatesResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListWorkspaceTemplatesResponse.ProtoReflect.Descriptor instead.
func (*ListWorkspaceTemplatesResponse) Descriptor() ([]byte, []int) {
return file_workspace_template_proto_rawDescGZIP(), []int{6}
return file_workspace_template_proto_rawDescGZIP(), []int{7}
}
func (x *ListWorkspaceTemplatesResponse) GetCount() int32 {
@@ -524,7 +627,7 @@ type ListWorkspaceTemplateVersionsRequest struct {
func (x *ListWorkspaceTemplateVersionsRequest) Reset() {
*x = ListWorkspaceTemplateVersionsRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_workspace_template_proto_msgTypes[7]
mi := &file_workspace_template_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -537,7 +640,7 @@ func (x *ListWorkspaceTemplateVersionsRequest) String() string {
func (*ListWorkspaceTemplateVersionsRequest) ProtoMessage() {}
func (x *ListWorkspaceTemplateVersionsRequest) ProtoReflect() protoreflect.Message {
mi := &file_workspace_template_proto_msgTypes[7]
mi := &file_workspace_template_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -550,7 +653,7 @@ func (x *ListWorkspaceTemplateVersionsRequest) ProtoReflect() protoreflect.Messa
// Deprecated: Use ListWorkspaceTemplateVersionsRequest.ProtoReflect.Descriptor instead.
func (*ListWorkspaceTemplateVersionsRequest) Descriptor() ([]byte, []int) {
return file_workspace_template_proto_rawDescGZIP(), []int{7}
return file_workspace_template_proto_rawDescGZIP(), []int{8}
}
func (x *ListWorkspaceTemplateVersionsRequest) GetNamespace() string {
@@ -579,7 +682,7 @@ type ListWorkspaceTemplateVersionsResponse struct {
func (x *ListWorkspaceTemplateVersionsResponse) Reset() {
*x = ListWorkspaceTemplateVersionsResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_workspace_template_proto_msgTypes[8]
mi := &file_workspace_template_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -592,7 +695,7 @@ func (x *ListWorkspaceTemplateVersionsResponse) String() string {
func (*ListWorkspaceTemplateVersionsResponse) ProtoMessage() {}
func (x *ListWorkspaceTemplateVersionsResponse) ProtoReflect() protoreflect.Message {
mi := &file_workspace_template_proto_msgTypes[8]
mi := &file_workspace_template_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -605,7 +708,7 @@ func (x *ListWorkspaceTemplateVersionsResponse) ProtoReflect() protoreflect.Mess
// Deprecated: Use ListWorkspaceTemplateVersionsResponse.ProtoReflect.Descriptor instead.
func (*ListWorkspaceTemplateVersionsResponse) Descriptor() ([]byte, []int) {
return file_workspace_template_proto_rawDescGZIP(), []int{8}
return file_workspace_template_proto_rawDescGZIP(), []int{9}
}
func (x *ListWorkspaceTemplateVersionsResponse) GetCount() int32 {
@@ -632,158 +735,185 @@ var file_workspace_template_proto_rawDesc = []byte{
0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x22, 0xec, 0x01, 0x0a, 0x11, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e,
0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x6e,
0x69, 0x66, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x6e,
0x69, 0x66, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73,
0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73,
0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x06,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12,
0x41, 0x0a, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x22, 0xa8, 0x01, 0x0a, 0x30, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57,
0x6f, 0x74, 0x6f, 0x1a, 0x0b, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x22, 0xd5, 0x02, 0x0a, 0x11, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07,
0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76,
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65,
0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65,
0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x05,
0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x1c,
0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x41, 0x0a, 0x10,
0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x10, 0x77,
0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12,
0x25, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x0d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06,
0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x73, 0x41, 0x72, 0x63, 0x68,
0x69, 0x76, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x41, 0x72,
0x63, 0x68, 0x69, 0x76, 0x65, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73,
0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa8, 0x01, 0x0a, 0x30, 0x47, 0x65, 0x6e,
0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a,
0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75,
0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x44, 0x0a,
0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57,
0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x44, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73,
0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61,
0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b,
0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x84, 0x01,
0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x44,
0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x22, 0x98, 0x01, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57,
0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x22, 0x84, 0x01, 0x0a, 0x1e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f,
0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
0x70, 0x61, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61,
0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x1e, 0x55,
0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a,
0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75,
0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x44, 0x0a,
0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57,
0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x11, 0x77, 0x6f, 0x72,
0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73,
0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x11, 0x77, 0x6f,
0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22,
0x67, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03,
0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x18,
0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x6d, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74,
0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d,
0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61,
0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53,
0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53,
0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x22, 0xc8, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74,
0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f,
0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x12, 0x46, 0x0a, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x52, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65,
0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05,
0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x67,
0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74,
0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75,
0x6e, 0x74, 0x22, 0x56, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70,
0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69,
0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61,
0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e,
0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x25, 0x4c,
0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20,
0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x12, 0x77, 0x6f,
0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x22, 0x67, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70,
0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75,
0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x1f,
0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65,
0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a,
0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22,
0xad, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70,
0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12,
0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18,
0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x10, 0x0a,
0x03, 0x75, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22,
0xc8, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x12, 0x77, 0x6f, 0x72, 0x6b,
0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73,
0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x12, 0x77, 0x6f,
0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73,
0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72,
0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x12,
0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x73, 0x32, 0xaf, 0x08, 0x0a, 0x18, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65,
0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12,
0xdb, 0x01, 0x0a, 0x29, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b,
0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x35, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b,
0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72,
0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66,
0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x60, 0x82, 0xd3, 0xe4,
0x93, 0x02, 0x5a, 0x22, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74,
0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77,
0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f,
0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x3a, 0x11, 0x77, 0x6f, 0x72, 0x6b,
0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0xa0, 0x01,
0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x22, 0x2d,
0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e,
0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70,
0x61, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x3a, 0x11, 0x77,
0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
0x12, 0xa7, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73,
0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61,
0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x49, 0x1a, 0x34, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31,
0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72,
0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73,
0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61,
0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x8d, 0x01, 0x0a, 0x14, 0x47,
0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72,
0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b,
0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x3b, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x35, 0x12, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62,
0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d,
0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x12, 0x98, 0x01, 0x0a, 0x16, 0x4c,
0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74,
0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xbc, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f,
0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56,
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69,
0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04,
0x70, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x04, 0x20,
0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x6f,
0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a,
0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x56, 0x0a, 0x24, 0x4c, 0x69,
0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72,
0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65,
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31,
0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75,
0x69, 0x64, 0x22, 0x85, 0x01, 0x0a, 0x25, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73,
0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73,
0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05,
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75,
0x6e, 0x74, 0x12, 0x46, 0x0a, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x32, 0xce, 0x09, 0x0a, 0x18, 0x57,
0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65,
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xdb, 0x01, 0x0a, 0x29, 0x47, 0x65, 0x6e, 0x65,
0x72, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x35, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x6e, 0x65,
0x72, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x54, 0x65, 0x6d, 0x70, 0x6c,
0x61, 0x74, 0x65, 0x22, 0x60, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, 0x22, 0x45, 0x2f, 0x61, 0x70,
0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65,
0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d,
0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x3a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0xa0, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f,
0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72,
0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x48,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x22, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73,
0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x6c, 0x61, 0x74, 0x65, 0x73, 0x3a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65,
0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0xa6, 0x01, 0x0a, 0x17, 0x55, 0x70, 0x64,
0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x1a, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x73,
0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x74,
0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x3a, 0x11,
0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74,
0x65, 0x12, 0x9d, 0x01, 0x0a, 0x18, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72,
0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x24,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b,
0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73,
0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x43, 0x82, 0xd3,
0xe4, 0x93, 0x02, 0x3d, 0x1a, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65,
0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f,
0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61,
0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x72, 0x63, 0x68, 0x69, 0x76,
0x65, 0x12, 0x8d, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61,
0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70,
0x6c, 0x61, 0x74, 0x65, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x12, 0x33, 0x2f, 0x61,
0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d,
0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63,
0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69, 0x64,
0x7d, 0x12, 0x98, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70,
0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65,
0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73,
0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f,
0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61,
0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61,
0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xbc, 0x01, 0x0a,
0x1d, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65,
0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61,
0x63, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x65, 0x6d,
0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f,
0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x7b, 0x6e, 0x61,
0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61,
0x63, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x75, 0x69,
0x64, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
}
var (
@@ -798,43 +928,48 @@ func file_workspace_template_proto_rawDescGZIP() []byte {
return file_workspace_template_proto_rawDescData
}
var file_workspace_template_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
var file_workspace_template_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
var file_workspace_template_proto_goTypes = []interface{}{
(*WorkspaceTemplate)(nil), // 0: api.WorkspaceTemplate
(*GenerateWorkspaceTemplateWorkflowTemplateRequest)(nil), // 1: api.GenerateWorkspaceTemplateWorkflowTemplateRequest
(*CreateWorkspaceTemplateRequest)(nil), // 2: api.CreateWorkspaceTemplateRequest
(*UpdateWorkspaceTemplateRequest)(nil), // 3: api.UpdateWorkspaceTemplateRequest
(*GetWorkspaceTemplateRequest)(nil), // 4: api.GetWorkspaceTemplateRequest
(*ListWorkspaceTemplatesRequest)(nil), // 5: api.ListWorkspaceTemplatesRequest
(*ListWorkspaceTemplatesResponse)(nil), // 6: api.ListWorkspaceTemplatesResponse
(*ListWorkspaceTemplateVersionsRequest)(nil), // 7: api.ListWorkspaceTemplateVersionsRequest
(*ListWorkspaceTemplateVersionsResponse)(nil), // 8: api.ListWorkspaceTemplateVersionsResponse
(*WorkflowTemplate)(nil), // 9: api.WorkflowTemplate
(*ArchiveWorkspaceTemplateRequest)(nil), // 5: api.ArchiveWorkspaceTemplateRequest
(*ListWorkspaceTemplatesRequest)(nil), // 6: api.ListWorkspaceTemplatesRequest
(*ListWorkspaceTemplatesResponse)(nil), // 7: api.ListWorkspaceTemplatesResponse
(*ListWorkspaceTemplateVersionsRequest)(nil), // 8: api.ListWorkspaceTemplateVersionsRequest
(*ListWorkspaceTemplateVersionsResponse)(nil), // 9: api.ListWorkspaceTemplateVersionsResponse
(*WorkflowTemplate)(nil), // 10: api.WorkflowTemplate
(*KeyValue)(nil), // 11: api.KeyValue
}
var file_workspace_template_proto_depIdxs = []int32{
9, // 0: api.WorkspaceTemplate.workflowTemplate:type_name -> api.WorkflowTemplate
0, // 1: api.GenerateWorkspaceTemplateWorkflowTemplateRequest.workspaceTemplate:type_name -> api.WorkspaceTemplate
0, // 2: api.CreateWorkspaceTemplateRequest.workspaceTemplate:type_name -> api.WorkspaceTemplate
0, // 3: api.UpdateWorkspaceTemplateRequest.workspaceTemplate:type_name -> api.WorkspaceTemplate
0, // 4: api.ListWorkspaceTemplatesResponse.workspaceTemplates:type_name -> api.WorkspaceTemplate
0, // 5: api.ListWorkspaceTemplateVersionsResponse.workspaceTemplates:type_name -> api.WorkspaceTemplate
1, // 6: api.WorkspaceTemplateService.GenerateWorkspaceTemplateWorkflowTemplate:input_type -> api.GenerateWorkspaceTemplateWorkflowTemplateRequest
2, // 7: api.WorkspaceTemplateService.CreateWorkspaceTemplate:input_type -> api.CreateWorkspaceTemplateRequest
3, // 8: api.WorkspaceTemplateService.UpdateWorkspaceTemplate:input_type -> api.UpdateWorkspaceTemplateRequest
4, // 9: api.WorkspaceTemplateService.GetWorkspaceTemplate:input_type -> api.GetWorkspaceTemplateRequest
5, // 10: api.WorkspaceTemplateService.ListWorkspaceTemplates:input_type -> api.ListWorkspaceTemplatesRequest
7, // 11: api.WorkspaceTemplateService.ListWorkspaceTemplateVersions:input_type -> api.ListWorkspaceTemplateVersionsRequest
9, // 12: api.WorkspaceTemplateService.GenerateWorkspaceTemplateWorkflowTemplate:output_type -> api.WorkflowTemplate
0, // 13: api.WorkspaceTemplateService.CreateWorkspaceTemplate:output_type -> api.WorkspaceTemplate
0, // 14: api.WorkspaceTemplateService.UpdateWorkspaceTemplate:output_type -> api.WorkspaceTemplate
0, // 15: api.WorkspaceTemplateService.GetWorkspaceTemplate:output_type -> api.WorkspaceTemplate
6, // 16: api.WorkspaceTemplateService.ListWorkspaceTemplates:output_type -> api.ListWorkspaceTemplatesResponse
8, // 17: api.WorkspaceTemplateService.ListWorkspaceTemplateVersions:output_type -> api.ListWorkspaceTemplateVersionsResponse
12, // [12:18] is the sub-list for method output_type
6, // [6:12] is the sub-list for method input_type
6, // [6:6] is the sub-list for extension type_name
6, // [6:6] is the sub-list for extension extendee
0, // [0:6] is the sub-list for field type_name
10, // 0: api.WorkspaceTemplate.workflowTemplate:type_name -> api.WorkflowTemplate
11, // 1: api.WorkspaceTemplate.labels:type_name -> api.KeyValue
0, // 2: api.GenerateWorkspaceTemplateWorkflowTemplateRequest.workspaceTemplate:type_name -> api.WorkspaceTemplate
0, // 3: api.CreateWorkspaceTemplateRequest.workspaceTemplate:type_name -> api.WorkspaceTemplate
0, // 4: api.UpdateWorkspaceTemplateRequest.workspaceTemplate:type_name -> api.WorkspaceTemplate
0, // 5: api.ListWorkspaceTemplatesResponse.workspaceTemplates:type_name -> api.WorkspaceTemplate
0, // 6: api.ListWorkspaceTemplateVersionsResponse.workspaceTemplates:type_name -> api.WorkspaceTemplate
1, // 7: api.WorkspaceTemplateService.GenerateWorkspaceTemplateWorkflowTemplate:input_type -> api.GenerateWorkspaceTemplateWorkflowTemplateRequest
2, // 8: api.WorkspaceTemplateService.CreateWorkspaceTemplate:input_type -> api.CreateWorkspaceTemplateRequest
3, // 9: api.WorkspaceTemplateService.UpdateWorkspaceTemplate:input_type -> api.UpdateWorkspaceTemplateRequest
5, // 10: api.WorkspaceTemplateService.ArchiveWorkspaceTemplate:input_type -> api.ArchiveWorkspaceTemplateRequest
4, // 11: api.WorkspaceTemplateService.GetWorkspaceTemplate:input_type -> api.GetWorkspaceTemplateRequest
6, // 12: api.WorkspaceTemplateService.ListWorkspaceTemplates:input_type -> api.ListWorkspaceTemplatesRequest
8, // 13: api.WorkspaceTemplateService.ListWorkspaceTemplateVersions:input_type -> api.ListWorkspaceTemplateVersionsRequest
10, // 14: api.WorkspaceTemplateService.GenerateWorkspaceTemplateWorkflowTemplate:output_type -> api.WorkflowTemplate
0, // 15: api.WorkspaceTemplateService.CreateWorkspaceTemplate:output_type -> api.WorkspaceTemplate
0, // 16: api.WorkspaceTemplateService.UpdateWorkspaceTemplate:output_type -> api.WorkspaceTemplate
0, // 17: api.WorkspaceTemplateService.ArchiveWorkspaceTemplate:output_type -> api.WorkspaceTemplate
0, // 18: api.WorkspaceTemplateService.GetWorkspaceTemplate:output_type -> api.WorkspaceTemplate
7, // 19: api.WorkspaceTemplateService.ListWorkspaceTemplates:output_type -> api.ListWorkspaceTemplatesResponse
9, // 20: api.WorkspaceTemplateService.ListWorkspaceTemplateVersions:output_type -> api.ListWorkspaceTemplateVersionsResponse
14, // [14:21] is the sub-list for method output_type
7, // [7:14] is the sub-list for method input_type
7, // [7:7] is the sub-list for extension type_name
7, // [7:7] is the sub-list for extension extendee
0, // [0:7] is the sub-list for field type_name
}
func init() { file_workspace_template_proto_init() }
@@ -843,6 +978,7 @@ func file_workspace_template_proto_init() {
return
}
file_workflow_template_proto_init()
file_label_proto_init()
if !protoimpl.UnsafeEnabled {
file_workspace_template_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*WorkspaceTemplate); i {
@@ -905,7 +1041,7 @@ func file_workspace_template_proto_init() {
}
}
file_workspace_template_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListWorkspaceTemplatesRequest); i {
switch v := v.(*ArchiveWorkspaceTemplateRequest); i {
case 0:
return &v.state
case 1:
@@ -917,7 +1053,7 @@ func file_workspace_template_proto_init() {
}
}
file_workspace_template_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListWorkspaceTemplatesResponse); i {
switch v := v.(*ListWorkspaceTemplatesRequest); i {
case 0:
return &v.state
case 1:
@@ -929,7 +1065,7 @@ func file_workspace_template_proto_init() {
}
}
file_workspace_template_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListWorkspaceTemplateVersionsRequest); i {
switch v := v.(*ListWorkspaceTemplatesResponse); i {
case 0:
return &v.state
case 1:
@@ -941,6 +1077,18 @@ func file_workspace_template_proto_init() {
}
}
file_workspace_template_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListWorkspaceTemplateVersionsRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_workspace_template_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListWorkspaceTemplateVersionsResponse); i {
case 0:
return &v.state
@@ -959,7 +1107,7 @@ func file_workspace_template_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_workspace_template_proto_rawDesc,
NumEnums: 0,
NumMessages: 9,
NumMessages: 10,
NumExtensions: 0,
NumServices: 1,
},
@@ -991,6 +1139,8 @@ type WorkspaceTemplateServiceClient interface {
CreateWorkspaceTemplate(ctx context.Context, in *CreateWorkspaceTemplateRequest, opts ...grpc.CallOption) (*WorkspaceTemplate, error)
// Updates a WorkspaceTemplate
UpdateWorkspaceTemplate(ctx context.Context, in *UpdateWorkspaceTemplateRequest, opts ...grpc.CallOption) (*WorkspaceTemplate, error)
// Archives a WorkspaceTemplate
ArchiveWorkspaceTemplate(ctx context.Context, in *ArchiveWorkspaceTemplateRequest, opts ...grpc.CallOption) (*WorkspaceTemplate, error)
// Get a WorkspaceTemplate
GetWorkspaceTemplate(ctx context.Context, in *GetWorkspaceTemplateRequest, opts ...grpc.CallOption) (*WorkspaceTemplate, error)
ListWorkspaceTemplates(ctx context.Context, in *ListWorkspaceTemplatesRequest, opts ...grpc.CallOption) (*ListWorkspaceTemplatesResponse, error)
@@ -1032,6 +1182,15 @@ func (c *workspaceTemplateServiceClient) UpdateWorkspaceTemplate(ctx context.Con
return out, nil
}
func (c *workspaceTemplateServiceClient) ArchiveWorkspaceTemplate(ctx context.Context, in *ArchiveWorkspaceTemplateRequest, opts ...grpc.CallOption) (*WorkspaceTemplate, error) {
out := new(WorkspaceTemplate)
err := c.cc.Invoke(ctx, "/api.WorkspaceTemplateService/ArchiveWorkspaceTemplate", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *workspaceTemplateServiceClient) GetWorkspaceTemplate(ctx context.Context, in *GetWorkspaceTemplateRequest, opts ...grpc.CallOption) (*WorkspaceTemplate, error) {
out := new(WorkspaceTemplate)
err := c.cc.Invoke(ctx, "/api.WorkspaceTemplateService/GetWorkspaceTemplate", in, out, opts...)
@@ -1067,6 +1226,8 @@ type WorkspaceTemplateServiceServer interface {
CreateWorkspaceTemplate(context.Context, *CreateWorkspaceTemplateRequest) (*WorkspaceTemplate, error)
// Updates a WorkspaceTemplate
UpdateWorkspaceTemplate(context.Context, *UpdateWorkspaceTemplateRequest) (*WorkspaceTemplate, error)
// Archives a WorkspaceTemplate
ArchiveWorkspaceTemplate(context.Context, *ArchiveWorkspaceTemplateRequest) (*WorkspaceTemplate, error)
// Get a WorkspaceTemplate
GetWorkspaceTemplate(context.Context, *GetWorkspaceTemplateRequest) (*WorkspaceTemplate, error)
ListWorkspaceTemplates(context.Context, *ListWorkspaceTemplatesRequest) (*ListWorkspaceTemplatesResponse, error)
@@ -1086,6 +1247,9 @@ func (*UnimplementedWorkspaceTemplateServiceServer) CreateWorkspaceTemplate(cont
func (*UnimplementedWorkspaceTemplateServiceServer) UpdateWorkspaceTemplate(context.Context, *UpdateWorkspaceTemplateRequest) (*WorkspaceTemplate, error) {
return nil, status.Errorf(codes.Unimplemented, "method UpdateWorkspaceTemplate not implemented")
}
func (*UnimplementedWorkspaceTemplateServiceServer) ArchiveWorkspaceTemplate(context.Context, *ArchiveWorkspaceTemplateRequest) (*WorkspaceTemplate, error) {
return nil, status.Errorf(codes.Unimplemented, "method ArchiveWorkspaceTemplate not implemented")
}
func (*UnimplementedWorkspaceTemplateServiceServer) GetWorkspaceTemplate(context.Context, *GetWorkspaceTemplateRequest) (*WorkspaceTemplate, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetWorkspaceTemplate not implemented")
}
@@ -1154,6 +1318,24 @@ func _WorkspaceTemplateService_UpdateWorkspaceTemplate_Handler(srv interface{},
return interceptor(ctx, in, info, handler)
}
func _WorkspaceTemplateService_ArchiveWorkspaceTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ArchiveWorkspaceTemplateRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(WorkspaceTemplateServiceServer).ArchiveWorkspaceTemplate(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.WorkspaceTemplateService/ArchiveWorkspaceTemplate",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(WorkspaceTemplateServiceServer).ArchiveWorkspaceTemplate(ctx, req.(*ArchiveWorkspaceTemplateRequest))
}
return interceptor(ctx, in, info, handler)
}
func _WorkspaceTemplateService_GetWorkspaceTemplate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetWorkspaceTemplateRequest)
if err := dec(in); err != nil {
@@ -1224,6 +1406,10 @@ var _WorkspaceTemplateService_serviceDesc = grpc.ServiceDesc{
MethodName: "UpdateWorkspaceTemplate",
Handler: _WorkspaceTemplateService_UpdateWorkspaceTemplate_Handler,
},
{
MethodName: "ArchiveWorkspaceTemplate",
Handler: _WorkspaceTemplateService_ArchiveWorkspaceTemplate_Handler,
},
{
MethodName: "GetWorkspaceTemplate",
Handler: _WorkspaceTemplateService_GetWorkspaceTemplate_Handler,

View File

@@ -223,15 +223,15 @@ func request_WorkspaceTemplateService_UpdateWorkspaceTemplate_0(ctx context.Cont
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.UpdateWorkspaceTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
@@ -269,15 +269,15 @@ func local_request_WorkspaceTemplateService_UpdateWorkspaceTemplate_0(ctx contex
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["name"]
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name")
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Name, err = runtime.String(val)
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err)
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.UpdateWorkspaceTemplate(ctx, &protoReq)
@@ -285,6 +285,82 @@ func local_request_WorkspaceTemplateService_UpdateWorkspaceTemplate_0(ctx contex
}
func request_WorkspaceTemplateService_ArchiveWorkspaceTemplate_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceTemplateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ArchiveWorkspaceTemplateRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := client.ArchiveWorkspaceTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkspaceTemplateService_ArchiveWorkspaceTemplate_0(ctx context.Context, marshaler runtime.Marshaler, server WorkspaceTemplateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ArchiveWorkspaceTemplateRequest
var metadata runtime.ServerMetadata
var (
val string
ok bool
err error
_ = err
)
val, ok = pathParams["namespace"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "namespace")
}
protoReq.Namespace, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "namespace", err)
}
val, ok = pathParams["uid"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "uid")
}
protoReq.Uid, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "uid", err)
}
msg, err := server.ArchiveWorkspaceTemplate(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_WorkspaceTemplateService_GetWorkspaceTemplate_0 = &utilities.DoubleArray{Encoding: map[string]int{"namespace": 0, "uid": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}
)
@@ -586,6 +662,26 @@ func RegisterWorkspaceTemplateServiceHandlerServer(ctx context.Context, mux *run
})
mux.Handle("PUT", pattern_WorkspaceTemplateService_ArchiveWorkspaceTemplate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_WorkspaceTemplateService_ArchiveWorkspaceTemplate_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkspaceTemplateService_ArchiveWorkspaceTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WorkspaceTemplateService_GetWorkspaceTemplate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -747,6 +843,26 @@ func RegisterWorkspaceTemplateServiceHandlerClient(ctx context.Context, mux *run
})
mux.Handle("PUT", pattern_WorkspaceTemplateService_ArchiveWorkspaceTemplate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_WorkspaceTemplateService_ArchiveWorkspaceTemplate_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_WorkspaceTemplateService_ArchiveWorkspaceTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WorkspaceTemplateService_GetWorkspaceTemplate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
@@ -815,7 +931,9 @@ var (
pattern_WorkspaceTemplateService_CreateWorkspaceTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"apis", "v1beta1", "namespace", "workspace_templates"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceTemplateService_UpdateWorkspaceTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "workspace_templates", "name"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceTemplateService_UpdateWorkspaceTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "workspace_templates", "uid"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceTemplateService_ArchiveWorkspaceTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "workspace_templates", "uid", "archive"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_WorkspaceTemplateService_GetWorkspaceTemplate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"apis", "v1beta1", "namespace", "workspace_templates", "uid"}, "", runtime.AssumeColonVerbOpt(true)))
@@ -831,6 +949,8 @@ var (
forward_WorkspaceTemplateService_UpdateWorkspaceTemplate_0 = runtime.ForwardResponseMessage
forward_WorkspaceTemplateService_ArchiveWorkspaceTemplate_0 = runtime.ForwardResponseMessage
forward_WorkspaceTemplateService_GetWorkspaceTemplate_0 = runtime.ForwardResponseMessage
forward_WorkspaceTemplateService_ListWorkspaceTemplates_0 = runtime.ForwardResponseMessage

View File

@@ -5,6 +5,7 @@ package api;
import "google/api/annotations.proto";
import "workflow_template.proto";
import "google/protobuf/empty.proto";
import "label.proto";
service WorkspaceTemplateService {
// Get the generated WorkflowTemplate for a WorkspaceTemplate
@@ -26,11 +27,18 @@ service WorkspaceTemplateService {
// Updates a WorkspaceTemplate
rpc UpdateWorkspaceTemplate (UpdateWorkspaceTemplateRequest) returns (WorkspaceTemplate) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workspace_templates/{name}"
put: "/apis/v1beta1/{namespace}/workspace_templates/{uid}"
body: "workspaceTemplate"
};
}
// Archives a WorkspaceTemplate
rpc ArchiveWorkspaceTemplate (ArchiveWorkspaceTemplateRequest) returns (WorkspaceTemplate) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workspace_templates/{uid}/archive"
};
}
// Get a WorkspaceTemplate
rpc GetWorkspaceTemplate (GetWorkspaceTemplateRequest) returns (WorkspaceTemplate) {
option (google.api.http) = {
@@ -59,6 +67,9 @@ message WorkspaceTemplate {
bool isLatest = 5;
string createdAt = 6;
WorkflowTemplate workflowTemplate = 7;
repeated KeyValue labels = 8;
bool isArchived = 9;
string description = 10;
}
message GenerateWorkspaceTemplateWorkflowTemplateRequest {
@@ -74,7 +85,7 @@ message CreateWorkspaceTemplateRequest {
message UpdateWorkspaceTemplateRequest {
string namespace = 1;
string name = 2;
string uid = 2;
WorkspaceTemplate workspaceTemplate = 3;
}
@@ -84,10 +95,18 @@ message GetWorkspaceTemplateRequest {
int64 version = 3;
}
message ArchiveWorkspaceTemplateRequest {
string namespace = 1;
string uid = 2;
}
message ListWorkspaceTemplatesRequest {
string namespace = 1;
int32 pageSize = 2;
int32 page = 3;
string order = 4;
string labels = 5;
string uid = 6;
}
message ListWorkspaceTemplatesResponse {

17
cmd/README.md Normal file
View File

@@ -0,0 +1,17 @@
# Helper scripts
## gen-release-md.go
Generates markdown for releases.
Usage:
```bash
go run cmd/gen-release-md/gen-release-md.go -v=0.10.0 -u=[github-username] > /tmp/release.md
```
## goose.go
Supports both Go and SQL migrations.
```bash
go run cmd/goose/goose up # run up migrations
go run cmd/goose/goose down # run down migrations
```

View File

@@ -0,0 +1,255 @@
package main
import (
"encoding/json"
"errors"
"flag"
"fmt"
"net/http"
"sort"
"strings"
)
type user struct {
Login string `json:"login"`
URL string `json:"html_url"`
AvatarURL string `json:"avatar_url"`
ContributionsCount int
}
type label struct {
Name string `json:"name"`
}
type pullRequest struct {
URL string `json:"url"`
}
type issue struct {
Number int `json:"number"`
URL string `json:"html_url"`
Title string `json:"title"`
User user `json:"user"`
PullRequest *pullRequest `json:"pull_request"`
Labels []label `json:"labels"`
}
type milestone struct {
Number int `json:"number"`
Title string `json:"title"`
}
const (
apiPrefix = "https://api.github.com/repos/"
)
var releaseTemplate = `# Documentation
See https://docs.onepanel.ai
# CLI Installation
## Linux
` + "```" + `
# Download the binary
curl -sLO https://github.com/onepanelio/core/releases/download/v%s/opctl-linux-amd64
# Make binary executable
chmod +x opctl-linux-amd64
# Move binary to path
mv ./opctl-linux-amd64 /usr/local/bin/opctl
# Test installation
opctl version
` + "```" + `
## macOS
` + "```" + `
# Download the binary
curl -sLO https://github.com/onepanelio/core/releases/download/v%s/opctl-macos-amd64
# Make binary executable
chmod +x opctl-macos-amd64
# Move binary to path
mv ./opctl-macos-amd64 /usr/local/bin/opctl
# Test installation
opctl version
` + "```" + `
## Windows
Download the [attached executable](https://github.com/onepanelio/core/releases/download/v%s/opctl-windows-amd64.exe), rename it to "opctl" and move it to a folder that is in your PATH environment variable.
`
var repositories = []string{
"onepanelio/core",
"onepanelio/core-ui",
"onepanelio/cli",
"onepanelio/manifests",
"onepanelio/core-docs",
}
func getPrefixSection(prefix string) (section string) {
switch prefix {
case "feat":
fallthrough
case "fix":
fallthrough
case "docs":
section = prefix
default:
section = "other"
}
return
}
// Parse issues, pulling only PRs and categorize them based on labels
// Print everything as MD that can be copied into release notes
func printMarkDown(issues []*issue, version *string) {
contributorsMap := make(map[string]user, 0)
sections := make(map[string]string, 0)
for _, iss := range issues {
if iss.PullRequest == nil {
continue
}
parts := strings.Split(iss.Title, ":")
if len(parts) > 0 {
if user, ok := contributorsMap[iss.User.Login]; ok {
user.ContributionsCount++
contributorsMap[iss.User.Login] = user
} else {
iss.User.ContributionsCount = 1
contributorsMap[iss.User.Login] = iss.User
}
sections[getPrefixSection(parts[0])] += fmt.Sprintf("- %s ([#%d](%s))\n", iss.Title, iss.Number, iss.URL)
}
}
releaseTemplate := fmt.Sprintf(releaseTemplate, *version, *version, *version)
fmt.Println(releaseTemplate)
fmt.Println("# Changelog")
if sections["feat"] != "" {
fmt.Println("## Features")
fmt.Println(sections["feat"])
}
if sections["fix"] != "" {
fmt.Println("## Fixes")
fmt.Println(sections["fix"])
}
if sections["docs"] != "" {
fmt.Println("## Docs")
fmt.Println(sections["docs"])
}
if sections["other"] != "" {
fmt.Println("## Other")
fmt.Println(sections["other"])
}
fmt.Println("# Contributors")
contributors := make([]user, 0)
for _, contributor := range contributorsMap {
// Sorry, no bots.
if contributor.Login == "dependabot[bot]" {
continue
}
contributors = append(contributors, contributor)
}
sort.Slice(contributors, func(i, j int) bool { return contributors[i].ContributionsCount > contributors[j].ContributionsCount })
for _, user := range contributors {
fmt.Println(fmt.Sprintf("- <a href=\"%s\"><img src=\"%s\" width=\"12\"/> <strong>%s</strong></a> %s", user.URL, user.AvatarURL, user.Login, user.Login))
}
}
func httpGet(url string, username, token *string) (*http.Response, error) {
client := &http.Client{}
req, err := http.NewRequest(http.MethodGet, url, nil)
if username != nil {
req.SetBasicAuth(*username, *token)
}
res, err := client.Do(req)
if err != nil {
return nil, err
}
return res, nil
}
// Get milestone by title
func getMilestone(repository string, version, username, token *string) (*milestone, error) {
url := fmt.Sprintf("%s%s/milestones", apiPrefix, repository)
res, err := httpGet(url, username, token)
if err != nil {
return nil, err
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
return nil, errors.New("API rate limit exceeded")
}
milestones := make([]*milestone, 0)
if err = json.NewDecoder(res.Body).Decode(&milestones); err != nil {
return nil, err
}
for _, milestone := range milestones {
if milestone.Title == "v"+*version {
return milestone, nil
}
}
return nil, errors.New("milestone not found")
}
// Get issues from repository
func getIssues(repository string, milestone *milestone, username, token *string) ([]*issue, error) {
url := fmt.Sprintf("%s%s/issues?state=closed&direction=asc&milestone=%d", apiPrefix, repository, milestone.Number)
res, err := httpGet(url, username, token)
if err != nil {
return nil, err
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
return nil, errors.New("API rate limit exceeded")
}
issues := make([]*issue, 0)
if err = json.NewDecoder(res.Body).Decode(&issues); err != nil {
return nil, err
}
return issues, nil
}
func main() {
version := flag.String("v", "1.0.0", "Version of release, example: -v=1.0.0")
username := flag.String("u", "", "GitHub username for request, example: -u=octocat")
token := flag.String("t", "", "GitHub token for request, example: -t=<token>")
flag.Parse()
issues := make([]*issue, 0)
for _, repository := range repositories {
mil, err := getMilestone(repository, version, username, token)
if err != nil {
fmt.Printf(err.Error())
return
}
iss, err := getIssues(repository, mil, username, token)
if err != nil {
return
}
issues = append(issues, iss...)
}
printMarkDown(issues, version)
}

62
cmd/goose/goose.go Normal file
View File

@@ -0,0 +1,62 @@
// This is custom goose binary to support .go migration files in ./db dir
package main
import (
"flag"
"github.com/jmoiron/sqlx"
migrations "github.com/onepanelio/core/db/go"
v1 "github.com/onepanelio/core/pkg"
"log"
"os"
"path/filepath"
"github.com/pressly/goose"
)
var (
flags = flag.NewFlagSet("goose", flag.ExitOnError)
dir = flags.String("dir", ".", "directory with migration files")
)
func main() {
flags.Parse(os.Args[1:])
args := flags.Args()
if len(args) < 1 {
flags.Usage()
return
}
kubeConfig := v1.NewConfig()
client, err := v1.NewClient(kubeConfig, nil, nil)
if err != nil {
log.Fatalf("Failed to connect to Kubernetes cluster: %v", err)
}
config, err := client.GetSystemConfig()
if err != nil {
log.Fatalf("Failed to get system config: %v", err)
}
dbDriverName, dbDataSourceName := config.DatabaseConnection()
db := sqlx.MustConnect(dbDriverName, dbDataSourceName)
defer db.Close()
command := args[0]
arguments := []string{}
if len(args) > 2 {
arguments = append(arguments, args[2:]...)
}
goose.SetTableName("goose_db_version")
if err := goose.Run(command, db.DB, filepath.Join(*dir, "sql"), arguments...); err != nil {
log.Fatalf("Failed to run database sql migrations: %v %v", command, err)
}
goose.SetTableName("goose_db_go_version")
migrations.Initialize()
if err := goose.Run(command, db.DB, filepath.Join(*dir, "go"), arguments...); err != nil {
log.Fatalf("Failed to run database go migrations: %v %v", command, err)
}
}

View File

@@ -1,7 +0,0 @@
-- +goose Up
ALTER TABLE workflow_templates DROP CONSTRAINT workflow_templates_name_namespace_key;
CREATE UNIQUE INDEX workflow_templates_name_namespace_key ON workflow_templates (name, namespace) WHERE is_archived = false;
-- +goose Down
DROP INDEX workflow_templates_name_namespace_key;
ALTER TABLE workflow_templates ADD CONSTRAINT workflow_templates_name_namespace_key UNIQUE (name, namespace);

View File

@@ -1,5 +0,0 @@
-- +goose Up
ALTER TABLE workflow_template_versions DROP COLUMN manifest;
-- +goose Down
ALTER TABLE workflow_template_versions ADD COLUMN manifest TEXT NOT NULL;

View File

@@ -1,14 +0,0 @@
-- +goose Up
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
ALTER TABLE workflow_template_versions ADD COLUMN uid varchar(36) UNIQUE CHECK(uid <> '');
UPDATE workflow_template_versions SET uid = uuid_generate_v4();
ALTER TABLE workflow_template_versions ALTER COLUMN uid SET NOT NULL;
ALTER TABLE labels ADD COLUMN uid varchar(36) UNIQUE CHECK(uid <> '');
UPDATE labels SET uid = uuid_generate_v4();
ALTER TABLE labels ALTER COLUMN uid SET NOT NULL;
-- +goose Down
ALTER TABLE workflow_template_versions DROP COLUMN uid;
ALTER TABLE labels DROP COLUMN uid;
DROP EXTENSION IF EXISTS "uuid-ossp"

View File

@@ -1,7 +0,0 @@
-- +goose Up
ALTER TABLE workflow_executions ADD COLUMN uid varchar(36) UNIQUE CHECK(uid <> '');
UPDATE workflow_executions SET uid = uuid_generate_v4();
ALTER TABLE workflow_executions ALTER COLUMN uid SET NOT NULL;
-- +goose Down
ALTER TABLE workflow_executions DROP COLUMN uid;

View File

@@ -0,0 +1,137 @@
// Package migration is for carrying out migrations against the database.
// To support Onepanel Core operations.
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
"log"
)
const jupyterWorkspaceTemplate = `# Docker containers that are part of the Workspace
containers:
- name: jupyterlab-tensorflow
image: jupyter/tensorflow-notebook
command: [start.sh, jupyter]
env:
- name: tornado
value: "{ 'headers': { 'Content-Security-Policy': \"frame-ancestors * 'self'\" } }"
args:
- lab
- --LabApp.token=''
- --LabApp.allow_remote_access=True
- --LabApp.allow_origin="*"
- --LabApp.disable_check_xsrf=True
- --LabApp.trust_xheaders=True
- --LabApp.tornado_settings=$(tornado)
- --notebook-dir='/data'
ports:
- containerPort: 8888
name: jupyterlab
# Volumes to be mounted in this container
# Onepanel will automatically create these volumes and mount them to the container
volumeMounts:
- name: data
mountPath: /data
# Ports that need to be exposed
ports:
- name: jupyterlab
port: 80
protocol: TCP
targetPort: 8888
# Routes that will map to ports
routes:
- match:
- uri:
prefix: /
route:
- destination:
port:
number: 80
# DAG Workflow to be executed once a Workspace action completes
# postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c
`
const jupyterLabTemplateName = "JupyterLab"
func initialize20200525160514() {
if _, ok := initializedMigrations[20200525160514]; !ok {
goose.AddMigration(Up20200525160514, Down20200525160514)
initializedMigrations[20200525160514] = true
}
}
func Up20200525160514(tx *sql.Tx) error {
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200525160514]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
workspaceTemplate := &v1.WorkspaceTemplate{
Name: jupyterLabTemplateName,
Manifest: jupyterWorkspaceTemplate,
}
for _, namespace := range namespaces {
if _, err := client.CreateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
func Down20200525160514(tx *sql.Tx) error {
client, err := getClient()
if err != nil {
return err
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(jupyterLabTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
if _, err := client.ArchiveWorkspaceTemplate(namespace.Name, uid); err != nil {
log.Fatalf("error %v", err.Error())
}
}
return nil
}

View File

@@ -0,0 +1,189 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
"log"
)
const cvatWorkspaceTemplate = `# Docker containers that are part of the Workspace
containers:
- name: cvat-db
image: postgres:10-alpine
env:
- name: POSTGRES_USER
value: root
- name: POSTGRES_DB
value: cvat
- name: POSTGRES_HOST_AUTH_METHOD
value: trust
- name: PGDATA
value: /var/lib/psql/data
ports:
- containerPort: 5432
name: tcp
volumeMounts:
- name: db
mountPath: /var/lib/psql
- name: cvat-redis
image: redis:4.0-alpine
ports:
- containerPort: 6379
name: tcp
- name: cvat
image: onepanel/cvat:v0.7.0
env:
- name: DJANGO_MODWSGI_EXTRA_ARGS
value: ""
- name: ALLOWED_HOSTS
value: '*'
- name: CVAT_REDIS_HOST
value: localhost
- name: CVAT_POSTGRES_HOST
value: localhost
- name: CVAT_SHARE_URL
value: /home/django/data
ports:
- containerPort: 8080
name: http
volumeMounts:
- name: data
mountPath: /home/django/data
- name: keys
mountPath: /home/django/keys
- name: logs
mountPath: /home/django/logs
- name: models
mountPath: /home/django/models
- name: cvat-ui
image: onepanel/cvat-ui:v0.7.0
ports:
- containerPort: 80
name: http
ports:
- name: cvat-ui
port: 80
protocol: TCP
targetPort: 80
- name: cvat
port: 8080
protocol: TCP
targetPort: 8080
routes:
- match:
- uri:
regex: /api/.*|/git/.*|/tensorflow/.*|/auto_annotation/.*|/analytics/.*|/static/.*|/admin/.*|/documentation/.*|/dextr/.*|/reid/.*
- queryParams:
id:
regex: \d+.*
route:
- destination:
port:
number: 8080
- match:
- uri:
prefix: /
route:
- destination:
port:
number: 80
# DAG Workflow to be executed once a Workspace action completes
# postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c
`
const cvatTemplateName = "CVAT"
func initialize20200528140124() {
if _, ok := initializedMigrations[20200528140124]; !ok {
goose.AddMigration(Up20200528140124, Down20200528140124)
initializedMigrations[20200528140124] = true
}
}
// Up20200528140124 will insert the cvatTemplate to each user.
// Each user is determined by onepanel enabled namespaces.
// Any errors reported are logged as fatal.
func Up20200528140124(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200528140124]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
workspaceTemplate := &v1.WorkspaceTemplate{
Name: cvatTemplateName,
Manifest: cvatWorkspaceTemplate,
}
for _, namespace := range namespaces {
if _, err := client.CreateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20200528140124 will attempt to remove cvatTemplate from each user.
// Each user is determined by onepanel enabled namespaces.
// DB entries are archived, K8S components are deleted.
// Active workspaces with that template are terminated.
// Any errors reported are logged as fatal.
func Down20200528140124(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
client, err := getClient()
if err != nil {
return err
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(cvatTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
if _, err := client.ArchiveWorkspaceTemplate(namespace.Name, uid); err != nil {
log.Fatalf("error %v", err.Error())
}
}
return nil
}

View File

@@ -0,0 +1,164 @@
package migration
import (
"database/sql"
"log"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
)
const pytorchMnistWorkflowTemplate = `entrypoint: main
arguments:
parameters:
- name: source
value: https://github.com/onepanelio/pytorch-examples.git
- name: command
value: "python mnist/main.py --epochs=1"
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 2Gi
- metadata:
name: output
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 2Gi
templates:
- name: main
dag:
tasks:
- name: train-model
template: pytorch
# Uncomment section below to send metrics to Slack
# - name: notify-in-slack
# dependencies: [train-model]
# template: slack-notify-success
# arguments:
# parameters:
# - name: status
# value: "{{tasks.train-model.status}}"
# artifacts:
# - name: metrics
# from: "{{tasks.train-model.outputs.artifacts.sys-metrics}}"
- name: pytorch
inputs:
artifacts:
- name: src
path: /mnt/src
git:
repo: "{{workflow.parameters.source}}"
outputs:
artifacts:
- name: model
path: /mnt/output
optional: true
archive:
none: {}
container:
image: pytorch/pytorch:latest
command: [sh,-c]
args: ["{{workflow.parameters.command}}"]
workingDir: /mnt/src
volumeMounts:
- name: data
mountPath: /mnt/data
- name: output
mountPath: /mnt/output
- name: slack-notify-success
container:
image: technosophos/slack-notify
command: [sh,-c]
args: ['SLACK_USERNAME=Worker SLACK_TITLE="{{workflow.name}} {{inputs.parameters.status}}" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE=$(cat /tmp/metrics.json)} ./slack-notify']
inputs:
parameters:
- name: status
artifacts:
- name: metrics
path: /tmp/metrics.json
optional: true
`
const pytorchMnistWorkflowTemplateName = "PyTorch Training"
func initialize20200605090509() {
if _, ok := initializedMigrations[20200605090509]; !ok {
goose.AddMigration(Up20200605090509, Down20200605090509)
initializedMigrations[20200605090509] = true
}
}
// Up20200605090509 will insert a Pytorch workflow template to each user.
// Each user is determined by onepanel enabled namespaces.
// Any errors reported are logged as fatal.
func Up20200605090509(tx *sql.Tx) error {
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200605090509]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
workflowTemplate := &v1.WorkflowTemplate{
Name: pytorchMnistWorkflowTemplateName,
Manifest: pytorchMnistWorkflowTemplate,
}
for _, namespace := range namespaces {
if _, err := client.CreateWorkflowTemplate(namespace.Name, workflowTemplate); err != nil {
return err
}
}
return nil
}
// Down20200605090509 will attempt to remove Pytorch workflow from each user.
// Each user is determined by onepanel enabled namespaces.
// DB entries are archived, K8S components are deleted.
// Active workflows with that template are terminated.
// Any errors reported are logged as fatal.
func Down20200605090509(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
client, err := getClient()
if err != nil {
return err
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(pytorchMnistWorkflowTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
if _, err := client.ArchiveWorkflowTemplate(namespace.Name, uid); err != nil {
log.Fatalf("error %v", err.Error())
}
}
return nil
}

View File

@@ -0,0 +1,163 @@
package migration
import (
"database/sql"
"log"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
)
const tensorflowWorkflowTemplate = `entrypoint: main
arguments:
parameters:
- name: source
value: https://github.com/onepanelio/tensorflow-examples.git
- name: command
value: "python mnist/main.py --epochs=5"
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 2Gi
- metadata:
name: output
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 2Gi
templates:
- name: main
dag:
tasks:
- name: train-model
template: pytorch
# Uncomment section below to send metrics to Slack
# - name: notify-in-slack
# dependencies: [train-model]
# template: slack-notify-success
# arguments:
# parameters:
# - name: status
# value: "{{tasks.train-model.status}}"
# artifacts:
# - name: metrics
# from: "{{tasks.train-model.outputs.artifacts.sys-metrics}}"
- name: pytorch
inputs:
artifacts:
- name: src
path: /mnt/src
git:
repo: "{{workflow.parameters.source}}"
outputs:
artifacts:
- name: model
path: /mnt/output
optional: true
archive:
none: {}
container:
image: tensorflow/tensorflow:latest
command: [sh,-c]
args: ["{{workflow.parameters.command}}"]
workingDir: /mnt/src
volumeMounts:
- name: data
mountPath: /mnt/data
- name: output
mountPath: /mnt/output
- name: slack-notify-success
container:
image: technosophos/slack-notify
command: [sh,-c]
args: ['SLACK_USERNAME=Worker SLACK_TITLE="{{workflow.name}} {{inputs.parameters.status}}" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE=$(cat /tmp/metrics.json)} ./slack-notify']
inputs:
parameters:
- name: status
artifacts:
- name: metrics
path: /tmp/metrics.json
optional: true
`
const tensorflowWorkflowTemplateName = "TensorFlow Training"
func initialize20200605090535() {
if _, ok := initializedMigrations[20200605090535]; !ok {
goose.AddMigration(Up20200605090535, Down20200605090535)
initializedMigrations[20200605090535] = true
}
}
// Up20200605090535 will insert a tensorflow workflow template to each user.
// Each user is determined by onepanel enabled namespaces.
// Any errors reported are logged as fatal.
func Up20200605090535(tx *sql.Tx) error {
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200605090535]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
workflowTemplate := &v1.WorkflowTemplate{
Name: tensorflowWorkflowTemplateName,
Manifest: tensorflowWorkflowTemplate,
}
for _, namespace := range namespaces {
if _, err := client.CreateWorkflowTemplate(namespace.Name, workflowTemplate); err != nil {
return err
}
}
return nil
}
// Down20200605090535 will attempt to remove tensorflow workflow from each user.
// Each user is determined by onepanel enabled namespaces.
// DB entries are archived, K8S components are deleted.
// Active workflows with that template are terminated.
// Any errors reported are logged as fatal.
func Down20200605090535(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
client, err := getClient()
if err != nil {
return err
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(tensorflowWorkflowTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
if _, err := client.ArchiveWorkflowTemplate(namespace.Name, uid); err != nil {
log.Fatalf("error %v", err.Error())
}
}
return nil
}

View File

@@ -0,0 +1,175 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
)
const cvatWorkspaceTemplate2 = `# Docker containers that are part of the Workspace
containers:
- name: cvat-db
image: postgres:10-alpine
env:
- name: POSTGRES_USER
value: root
- name: POSTGRES_DB
value: cvat
- name: POSTGRES_HOST_AUTH_METHOD
value: trust
- name: PGDATA
value: /var/lib/psql/data
ports:
- containerPort: 5432
name: tcp
volumeMounts:
- name: db
mountPath: /var/lib/psql
- name: cvat-redis
image: redis:4.0-alpine
ports:
- containerPort: 6379
name: tcp
- name: cvat
image: onepanel/cvat:v0.7.6
env:
- name: DJANGO_MODWSGI_EXTRA_ARGS
value: ""
- name: ALLOWED_HOSTS
value: '*'
- name: CVAT_REDIS_HOST
value: localhost
- name: CVAT_POSTGRES_HOST
value: localhost
- name: CVAT_SHARE_URL
value: /home/django/data
ports:
- containerPort: 8080
name: http
volumeMounts:
- name: data
mountPath: /home/django/data
- name: keys
mountPath: /home/django/keys
- name: logs
mountPath: /home/django/logs
- name: models
mountPath: /home/django/models
- name: share
mountPath: /home/django/share
- name: cvat-ui
image: onepanel/cvat-ui:v0.7.5
ports:
- containerPort: 80
name: http
- name: filesyncer
image: onepanel/filesyncer:v0.0.4
command: ['python3', 'main.py']
volumeMounts:
- name: share
mountPath: /mnt/share
ports:
- name: cvat-ui
port: 80
protocol: TCP
targetPort: 80
- name: cvat
port: 8080
protocol: TCP
targetPort: 8080
routes:
- match:
- uri:
regex: /api/.*|/git/.*|/tensorflow/.*|/auto_annotation/.*|/analytics/.*|/static/.*|/admin/.*|/documentation/.*|/dextr/.*|/reid/.*
- queryParams:
id:
regex: \d+.*
route:
- destination:
port:
number: 8080
timeout: 600s
- match:
- uri:
prefix: /
route:
- destination:
port:
number: 80
timeout: 600s
# DAG Workflow to be executed once a Workspace action completes (optional)
# Uncomment the lines below if you want to send Slack notifications
#postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c
`
func initialize20200626113635() {
if _, ok := initializedMigrations[20200626113635]; !ok {
goose.AddMigration(Up20200626113635, Down20200626113635)
initializedMigrations[20200626113635] = true
}
}
// Up20200626113635 updates the CVAT template to a new version.
func Up20200626113635(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200626113635]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(cvatTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
workspaceTemplate := &v1.WorkspaceTemplate{
UID: uid,
Name: cvatTemplateName,
Manifest: cvatWorkspaceTemplate2,
}
if _, err := client.UpdateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20200626113635 removes the CVAT template update
func Down20200626113635(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,176 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
)
const cvatWorkspaceTemplate3 = `# Docker containers that are part of the Workspace
containers:
- name: cvat-db
image: postgres:10-alpine
env:
- name: POSTGRES_USER
value: root
- name: POSTGRES_DB
value: cvat
- name: POSTGRES_HOST_AUTH_METHOD
value: trust
- name: PGDATA
value: /var/lib/psql/data
ports:
- containerPort: 5432
name: tcp
volumeMounts:
- name: db
mountPath: /var/lib/psql
- name: cvat-redis
image: redis:4.0-alpine
ports:
- containerPort: 6379
name: tcp
- name: cvat
image: onepanel/cvat:v0.7.10-stable
env:
- name: DJANGO_MODWSGI_EXTRA_ARGS
value: ""
- name: ALLOWED_HOSTS
value: '*'
- name: CVAT_REDIS_HOST
value: localhost
- name: CVAT_POSTGRES_HOST
value: localhost
- name: CVAT_SHARE_URL
value: /home/django/data
ports:
- containerPort: 8080
name: http
volumeMounts:
- name: data
mountPath: /home/django/data
- name: keys
mountPath: /home/django/keys
- name: logs
mountPath: /home/django/logs
- name: models
mountPath: /home/django/models
- name: share
mountPath: /home/django/share
- name: cvat-ui
image: onepanel/cvat-ui:v0.7.10-stable
ports:
- containerPort: 80
name: http
# Uncomment following lines to enable S3 FileSyncer
# Refer to https://docs.onepanel.ai/docs/getting-started/use-cases/computervision/annotation/cvat/cvat_quick_guide#setting-up-environment-variables
#- name: filesyncer
# image: onepanel/filesyncer:v0.0.4
# command: ['python3', 'main.py']
# volumeMounts:
# - name: share
# mountPath: /mnt/share
ports:
- name: cvat-ui
port: 80
protocol: TCP
targetPort: 80
- name: cvat
port: 8080
protocol: TCP
targetPort: 8080
routes:
- match:
- uri:
regex: /api/.*|/git/.*|/tensorflow/.*|/auto_annotation/.*|/analytics/.*|/static/.*|/admin/.*|/documentation/.*|/dextr/.*|/reid/.*
- queryParams:
id:
regex: \d+.*
route:
- destination:
port:
number: 8080
timeout: 600s
- match:
- uri:
prefix: /
route:
- destination:
port:
number: 80
timeout: 600s
# DAG Workflow to be executed once a Workspace action completes (optional)
# Uncomment the lines below if you want to send Slack notifications
#postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c
`
func initialize20200704151301() {
if _, ok := initializedMigrations[20200704151301]; !ok {
goose.AddMigration(Up20200704151301, Down20200704151301)
initializedMigrations[20200704151301] = true
}
}
// Up20200704151301 updates the CVAT template to a new version.
func Up20200704151301(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200704151301]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(cvatTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
workspaceTemplate := &v1.WorkspaceTemplate{
UID: uid,
Name: cvatTemplateName,
Manifest: cvatWorkspaceTemplate3,
}
if _, err := client.UpdateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20200704151301 removes the CVAT template update
func Down20200704151301(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,205 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
"strings"
)
const cvatWorkspaceTemplate4 = `# Workspace arguments
arguments:
parameters:
- name: storage-prefix
displayName: Directory in default object storage
value: data
hint: Location of data and models in default object storage, will continuously sync to '/mnt/share'
containers:
- name: cvat-db
image: postgres:10-alpine
env:
- name: POSTGRES_USER
value: root
- name: POSTGRES_DB
value: cvat
- name: POSTGRES_HOST_AUTH_METHOD
value: trust
- name: PGDATA
value: /var/lib/psql/data
ports:
- containerPort: 5432
name: tcp
volumeMounts:
- name: db
mountPath: /var/lib/psql
- name: cvat-redis
image: redis:4.0-alpine
ports:
- containerPort: 6379
name: tcp
- name: cvat
image: onepanel/cvat:v0.7.10-stable
env:
- name: DJANGO_MODWSGI_EXTRA_ARGS
value: ""
- name: ALLOWED_HOSTS
value: '*'
- name: CVAT_REDIS_HOST
value: localhost
- name: CVAT_POSTGRES_HOST
value: localhost
- name: CVAT_SHARE_URL
value: /home/django/data
ports:
- containerPort: 8080
name: http
volumeMounts:
- name: data
mountPath: /home/django/data
- name: keys
mountPath: /home/django/keys
- name: logs
mountPath: /home/django/logs
- name: models
mountPath: /home/django/models
- name: share
mountPath: /home/django/share
- name: sys-namespace-config
mountPath: /etc/onepanel
readOnly: true
- name: cvat-ui
image: onepanel/cvat-ui:v0.7.10-stable
ports:
- containerPort: 80
name: http
# You can add multiple FileSyncer sidecar containers if needed
- name: filesyncer
image: onepanel/filesyncer:{{.ArtifactRepositoryType}}
args:
- download
env:
- name: FS_PATH
value: /mnt/share
- name: FS_PREFIX
value: '{{workspace.parameters.storage-prefix}}'
volumeMounts:
- name: share
mountPath: /mnt/share
- name: sys-namespace-config
mountPath: /etc/onepanel
readOnly: true
ports:
- name: cvat-ui
port: 80
protocol: TCP
targetPort: 80
- name: cvat
port: 8080
protocol: TCP
targetPort: 8080
routes:
- match:
- uri:
regex: /api/.*|/git/.*|/tensorflow/.*|/auto_annotation/.*|/analytics/.*|/static/.*|/admin/.*|/documentation/.*|/dextr/.*|/reid/.*
- queryParams:
id:
regex: \d+.*
route:
- destination:
port:
number: 8080
timeout: 600s
- match:
- uri:
prefix: /
route:
- destination:
port:
number: 80
timeout: 600s
# DAG Workflow to be executed once a Workspace action completes (optional)
# Uncomment the lines below if you want to send Slack notifications
#postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c
`
func initialize20200724220450() {
if _, ok := initializedMigrations[20200724220450]; !ok {
goose.AddMigration(Up20200724220450, Down20200724220450)
initializedMigrations[20200724220450] = true
}
}
// Up20200724220450 updates the CVAT template to a new version.
func Up20200724220450(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200724220450]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(cvatTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
artifactRepositoryType := "s3"
nsConfig, err := client.GetNamespaceConfig(namespace.Name)
if err != nil {
return err
}
if nsConfig.ArtifactRepository.GCS != nil {
artifactRepositoryType = "gcs"
}
workspaceTemplate := &v1.WorkspaceTemplate{
UID: uid,
Name: cvatTemplateName,
Manifest: cvatWorkspaceTemplate4,
}
workspaceTemplate.Manifest = strings.NewReplacer(
"{{.ArtifactRepositoryType}}", artifactRepositoryType).Replace(workspaceTemplate.Manifest)
if _, err := client.UpdateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20200724220450 rolls back the CVAT template version
func Down20200724220450(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,74 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
"github.com/onepanelio/core/pkg/util/request/pagination"
"github.com/pressly/goose"
)
func initialize20200727144157() {
if _, ok := initializedMigrations[20200727144157]; !ok {
goose.AddMigration(Up20200727144157, Down20200727144157)
initializedMigrations[20200727144157] = true
}
}
// Up20200727144157 will go through all WorkflowTemplateVersion database entries
// and attempt to generate the "parameters" column from the "manifests" column.
func Up20200727144157(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200727144157]; ok {
return nil
}
pageSize := int32(100)
page := int32(0)
paginator := pagination.NewRequest(page, pageSize)
wtvsResults := -1
for wtvsResults != 0 {
wtvs, err := client.ListWorkflowTemplateVersionsAll(&paginator)
if err != nil {
return err
}
//Exit condition; Check for more results
wtvsResults = len(wtvs)
if wtvsResults > 0 {
page++
paginator = pagination.NewRequest(page, pageSize)
}
for _, wtv := range wtvs {
params, err := v1.ParseParametersFromManifest([]byte(wtv.Manifest))
if err != nil {
return err
}
wtv.Parameters = params
err = client.UpdateWorkflowTemplateVersion(wtv)
if err != nil {
return err
}
}
}
return nil
}
// Down20200727144157 can be run before 20200727155027_add_parameters_col_to_workflow_template_version.sql
// Nothing happens because the referenced SQL file will drop the "parameters" column.
func Down20200727144157(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,42 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
"github.com/pressly/goose"
)
func initialize20200728190804() {
if _, ok := initializedMigrations[20200728190804]; !ok {
goose.AddMigration(Up20200728190804, Down20200728190804)
initializedMigrations[20200728190804] = true
}
}
// Up20200728190804 is a legacy migration. Due to code changes, it no longer does anything.
// It used to update labels so that we keep track of WorkflowTemplate labels.
// Before, only workflow template versions had labels, but to speed up some queries, we now cache the latest version's labels
// for workflow templates themselves.
func Up20200728190804(tx *sql.Tx) error {
// This code is executed when the migration is applied.
if migrationHasAlreadyBeenRun(20200728190804) {
return nil
}
// Do nothing, be preserve for legacy.
return nil
}
// Down20200728190804 rolls down the migration by deleting all workflow template labels, since they did not exist before this
func Down20200728190804(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
return client.DeleteResourceLabels(tx, v1.TypeWorkflowTemplate)
}

View File

@@ -0,0 +1,510 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
"github.com/pressly/goose"
"log"
"strings"
)
const maskRCNNWorkflowTemplate = `arguments:
parameters:
- name: source
value: https://github.com/onepanelio/Mask_RCNN.git
displayName: Model source code
type: hidden
visibility: private
- name: sys-annotation-path
value: annotation-dump/sample_dataset
hint: Path to annotated data in default object storage (i.e S3). In CVAT, this parameter will be pre-populated.
displayName: Dataset path
visibility: private
- name: sys-output-path
value: workflow-data/output/sample_output
hint: Path to store output artifacts in default object storage (i.e s3). In CVAT, this parameter will be pre-populated.
displayName: Workflow output path
visibility: private
- name: sys-finetune-checkpoint
value: ''
hint: Select the last fine-tune checkpoint for this model. It may take up to 5 minutes for a recent checkpoint show here. Leave empty if this is the first time you're training this model.
displayName: Checkpoint path
visibility: public
- name: sys-num-classes
displayName: Number of classes
hint: Number of classes (i.e in CVAT taks) + 1 for background
value: 81
visibility: private
- name: extras
displayName: Hyperparameters
visibility: public
type: textarea.textarea
value: |-
stage-1-epochs=1 # Epochs for network heads
stage-2-epochs=2 # Epochs for finetune layers
stage-3-epochs=3 # Epochs for all layers
hint: "Please refer to our <a href='https://docs.onepanel.ai/docs/getting-started/use-cases/computervision/annotation/cvat/cvat_annotation_model#arguments-optional' target='_blank'>documentation</a> for more information on parameters."
- name: dump-format
type: select.select
value: cvat_coco
displayName: CVAT dump format
visibility: public
options:
- name: 'MS COCO'
value: 'cvat_coco'
- name: 'TF Detection API'
value: 'cvat_tfrecord'
- name: tf-image
visibility: public
value: tensorflow/tensorflow:1.13.1-py3
type: select.select
displayName: Select TensorFlow image
hint: Select the GPU image if you are running on a GPU node pool
options:
- name: 'TensorFlow 1.13.1 CPU Image'
value: 'tensorflow/tensorflow:1.13.1-py3'
- name: 'TensorFlow 1.13.1 GPU Image'
value: 'tensorflow/tensorflow:1.13.1-gpu-py3'
- displayName: Node pool
hint: Name of node pool or group to run this workflow task
type: select.select
visibility: public
name: sys-node-pool
value: Standard_D4s_v3
required: true
options:
- name: 'CPU: 2, RAM: 8GB'
value: Standard_D2s_v3
- name: 'CPU: 4, RAM: 16GB'
value: Standard_D4s_v3
- name: 'GPU: 1xK80, CPU: 6, RAM: 56GB'
value: Standard_NC6
entrypoint: main
templates:
- dag:
tasks:
- name: train-model
template: tensorflow
# Uncomment the lines below if you want to send Slack notifications
# - arguments:
# artifacts:
# - from: '{{tasks.train-model.outputs.artifacts.sys-metrics}}'
# name: metrics
# parameters:
# - name: status
# value: '{{tasks.train-model.status}}'
# dependencies:
# - train-model
# name: notify-in-slack
# template: slack-notify-success
name: main
- container:
args:
- |
apt-get update \
&& apt-get install -y git wget libglib2.0-0 libsm6 libxext6 libxrender-dev \
&& pip install -r requirements.txt \
&& pip install boto3 pyyaml google-cloud-storage \
&& git clone https://github.com/waleedka/coco \
&& cd coco/PythonAPI \
&& python setup.py build_ext install \
&& rm -rf build \
&& cd ../../ \
&& wget https://github.com/matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5 \
&& python setup.py install && ls \
&& python samples/coco/cvat.py train --dataset=/mnt/data/datasets \
--model=workflow_maskrcnn \
--extras="{{workflow.parameters.extras}}" \
--ref_model_path="{{workflow.parameters.sys-finetune-checkpoint}}" \
--num_classes="{{workflow.parameters.sys-num-classes}}" \
&& cd /mnt/src/ \
&& python prepare_dataset.py /mnt/data/datasets/annotations/instances_default.json
command:
- sh
- -c
image: '{{workflow.parameters.tf-image}}'
volumeMounts:
- mountPath: /mnt/data
name: data
- mountPath: /mnt/output
name: output
workingDir: /mnt/src
nodeSelector:
beta.kubernetes.io/instance-type: '{{workflow.parameters.sys-node-pool}}'
inputs:
artifacts:
- name: data
path: /mnt/data/datasets/
{{.ArtifactRepositoryType}}:
key: '{{workflow.namespace}}/{{workflow.parameters.sys-annotation-path}}'
- git:
repo: '{{workflow.parameters.source}}'
revision: "no-boto"
name: src
path: /mnt/src
name: tensorflow
outputs:
artifacts:
- name: model
optional: true
path: /mnt/output
{{.ArtifactRepositoryType}}:
key: '{{workflow.namespace}}/{{workflow.parameters.sys-output-path}}'
# Uncomment the lines below if you want to send Slack notifications
#- container:
# args:
# - SLACK_USERNAME=Onepanel SLACK_TITLE="{{workflow.name}} {{inputs.parameters.status}}"
# SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd
# SLACK_MESSAGE=$(cat /tmp/metrics.json)} ./slack-notify
# command:
# - sh
# - -c
# image: technosophos/slack-notify
# inputs:
# artifacts:
# - name: metrics
# optional: true
# path: /tmp/metrics.json
# parameters:
# - name: status
# name: slack-notify-success
volumeClaimTemplates:
- metadata:
creationTimestamp: null
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi
- metadata:
creationTimestamp: null
name: output
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi`
const maskRCNNWorkflowTemplateName = "MaskRCNN Training"
const tensorflowObjectDetectionWorkflowTemplate = `arguments:
parameters:
- name: source
value: https://github.com/tensorflow/models.git
displayName: Model source code
type: hidden
visibility: private
- name: trainingsource
value: https://github.com/onepanelio/cvat-training.git
type: hidden
visibility: private
- name: revision
value: v1.13.0
type: hidden
visibility: private
- name: sys-annotation-path
value: annotation-dump/sample_dataset
displayName: Dataset path
hint: Path to annotated data in default object storage (i.e S3). In CVAT, this parameter will be pre-populated.
- name: sys-output-path
value: workflow-data/output/sample_output
hint: Path to store output artifacts in default object storage (i.e s3). In CVAT, this parameter will be pre-populated.
displayName: Workflow output path
visibility: private
- name: ref-model
value: frcnn-res50-coco
displayName: Model
hint: TF Detection API's model to use for training.
type: select.select
visibility: public
options:
- name: 'Faster RCNN-ResNet 101-COCO'
value: frcnn-res101-coco
- name: 'Faster RCNN-ResNet 101-Low Proposal-COCO'
value: frcnn-res101-low
- name: 'Faster RCNN-ResNet 50-COCO'
value: frcnn-res50-coco
- name: 'Faster RCNN-NAS-COCO'
value: frcnn-nas-coco
- name: 'SSD MobileNet V1-COCO'
value: ssd-mobilenet-v1-coco2
- name: 'SSD MobileNet V2-COCO'
value: ssd-mobilenet-v2-coco
- name: 'SSDLite MobileNet-COCO'
value: ssdlite-mobilenet-coco
- name: extras
value: |-
epochs=1000
displayName: Hyperparameters
visibility: public
type: textarea.textarea
hint: "Please refer to our <a href='https://docs.onepanel.ai/docs/getting-started/use-cases/computervision/annotation/cvat/cvat_annotation_model#arguments-optional' target='_blank'>documentation</a> for more information on parameters. Number of classes will be automatically populated if you had 'sys-num-classes' parameter in a workflow."
- name: sys-finetune-checkpoint
value: ''
hint: Select the last fine-tune checkpoint for this model. It may take up to 5 minutes for a recent checkpoint show here. Leave empty if this is the first time you're training this model.
displayName: Checkpoint path
visibility: public
- name: sys-num-classes
value: 81
hint: Number of classes
displayName: Number of classes
visibility: private
- name: tf-image
value: tensorflow/tensorflow:1.13.1-py3
type: select.select
displayName: Select TensorFlow image
visibility: public
hint: Select the GPU image if you are running on a GPU node pool
options:
- name: 'TensorFlow 1.13.1 CPU Image'
value: 'tensorflow/tensorflow:1.13.1-py3'
- name: 'TensorFlow 1.13.1 GPU Image'
value: 'tensorflow/tensorflow:1.13.1-gpu-py3'
- displayName: Node pool
hint: Name of node pool or group to run this workflow task
type: select.select
name: sys-node-pool
value: Standard_D4s_v3
visibility: public
required: true
options:
- name: 'CPU: 2, RAM: 8GB'
value: Standard_D2s_v3
- name: 'CPU: 4, RAM: 16GB'
value: Standard_D4s_v3
- name: 'GPU: 1xK80, CPU: 6, RAM: 56GB'
value: Standard_NC6
- name: dump-format
value: cvat_tfrecord
visibility: public
entrypoint: main
templates:
- dag:
tasks:
- name: train-model
template: tensorflow
# Uncomment the lines below if you want to send Slack notifications
# - arguments:
# artifacts:
# - from: '{{tasks.train-model.outputs.artifacts.sys-metrics}}'
# name: metrics
# parameters:
# - name: status
# value: '{{tasks.train-model.status}}'
# dependencies:
# - train-model
# name: notify-in-slack
# template: slack-notify-success
name: main
- container:
args:
- |
apt-get update && \
apt-get install -y python3-pip git wget unzip libglib2.0-0 libsm6 libxext6 libxrender-dev && \
pip install pillow lxml Cython contextlib2 jupyter matplotlib numpy scipy boto3 pycocotools pyyaml google-cloud-storage && \
cd /mnt/src/tf/research && \
export PYTHONPATH=$PYTHONPATH:` + "`pwd`:`pwd`/slim" + ` && \
cd /mnt/src/train && \
python convert_workflow.py \
--extras="{{workflow.parameters.extras}}" \
--model="{{workflow.parameters.ref-model}}" \
--num_classes="{{workflow.parameters.sys-num-classes}}" \
--sys_finetune_checkpoint={{workflow.parameters.sys-finetune-checkpoint}}
command:
- sh
- -c
image: '{{workflow.parameters.tf-image}}'
volumeMounts:
- mountPath: /mnt/data
name: data
- mountPath: /mnt/output
name: output
workingDir: /mnt/src
nodeSelector:
beta.kubernetes.io/instance-type: '{{workflow.parameters.sys-node-pool}}'
inputs:
artifacts:
- name: data
path: /mnt/data/datasets/
{{.ArtifactRepositoryType}}:
key: '{{workflow.namespace}}/{{workflow.parameters.sys-annotation-path}}'
- name: models
path: /mnt/data/models/
optional: true
{{.ArtifactRepositoryType}}:
key: '{{workflow.namespace}}/{{workflow.parameters.sys-finetune-checkpoint}}'
- git:
repo: '{{workflow.parameters.source}}'
revision: '{{workflow.parameters.revision}}'
name: src
path: /mnt/src/tf
- git:
repo: '{{workflow.parameters.trainingsource}}'
revision: 'optional-artifacts'
name: tsrc
path: /mnt/src/train
name: tensorflow
outputs:
artifacts:
- name: model
optional: true
path: /mnt/output
{{.ArtifactRepositoryType}}:
key: '{{workflow.namespace}}/{{workflow.parameters.sys-output-path}}'
# Uncomment the lines below if you want to send Slack notifications
#- container:
# args:
# - SLACK_USERNAME=Onepanel SLACK_TITLE="{{workflow.name}} {{inputs.parameters.status}}"
# SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd
# SLACK_MESSAGE=$(cat /tmp/metrics.json)} ./slack-notify
# command:
# - sh
# - -c
# image: technosophos/slack-notify
# inputs:
# artifacts:
# - name: metrics
# optional: true
# path: /tmp/metrics.json
# parameters:
# - name: status
# name: slack-notify-success
volumeClaimTemplates:
- metadata:
creationTimestamp: null
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi
- metadata:
creationTimestamp: null
name: output
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi`
const tensorflowObjectDetectionWorkflowTemplateName = "TF Object Detection Training"
func initialize20200812104328() {
if _, ok := initializedMigrations[20200812104328]; !ok {
goose.AddMigration(Up20200812104328, Down20200812104328)
initializedMigrations[20200812104328] = true
}
}
// Up20200812104328 runs the migration to update MaskRCNN and TF_OD templates
func Up20200812104328(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200812104328]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
// Create maskrcnn
workflowTemplate := &v1.WorkflowTemplate{
Name: maskRCNNWorkflowTemplateName,
Manifest: maskRCNNWorkflowTemplate,
Labels: map[string]string{
"used-by": "cvat",
},
}
if err := workflowTemplate.GenerateUID(workflowTemplate.Name); err != nil {
return err
}
for _, namespace := range namespaces {
existingWorkflowTemplate, err := client.GetLatestWorkflowTemplate(namespace.Name, workflowTemplate.UID)
if err != nil {
if strings.Contains(err.Error(), "Workflow template not found") {
err = nil
existingWorkflowTemplate = nil
} else {
return err
}
}
if existingWorkflowTemplate != nil {
log.Printf("Skipping creating template '%v'. It already exists in namespace '%v'", workflowTemplate.Name, namespace.Name)
continue
}
err = ReplaceArtifactRepositoryType(client, namespace, workflowTemplate, nil)
if err != nil {
return err
}
if _, err := client.CreateWorkflowTemplate(namespace.Name, workflowTemplate); err != nil {
return err
}
}
// Create tf-od
workflowTemplate = &v1.WorkflowTemplate{
Name: tensorflowObjectDetectionWorkflowTemplateName,
Manifest: tensorflowObjectDetectionWorkflowTemplate,
Labels: map[string]string{
"used-by": "cvat",
},
}
if err := workflowTemplate.GenerateUID(workflowTemplate.Name); err != nil {
return err
}
for _, namespace := range namespaces {
err = ReplaceArtifactRepositoryType(client, namespace, workflowTemplate, nil)
if err != nil {
return err
}
if _, err := client.CreateWorkflowTemplate(namespace.Name, workflowTemplate); err != nil {
return err
}
}
return nil
}
// Down20200812104328 does nothing
func Down20200812104328(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,213 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
"strings"
)
const cvatWorkspaceTemplate5 = `# Workspace arguments
arguments:
parameters:
- name: sync-directory
displayName: Directory to sync raw input and training output
value: workflow-data
hint: Location to sync raw input, models and checkpoints from default object storage. Note that this will be relative to the current namespace.
containers:
- name: cvat-db
image: postgres:10-alpine
env:
- name: POSTGRES_USER
value: root
- name: POSTGRES_DB
value: cvat
- name: POSTGRES_HOST_AUTH_METHOD
value: trust
- name: PGDATA
value: /var/lib/psql/data
ports:
- containerPort: 5432
name: tcp
volumeMounts:
- name: db
mountPath: /var/lib/psql
- name: cvat-redis
image: redis:4.0-alpine
ports:
- containerPort: 6379
name: tcp
- name: cvat
image: onepanel/cvat:0.12.0_cvat.1.0.0-beta.2-cuda
env:
- name: DJANGO_MODWSGI_EXTRA_ARGS
value: ""
- name: ALLOWED_HOSTS
value: '*'
- name: CVAT_REDIS_HOST
value: localhost
- name: CVAT_POSTGRES_HOST
value: localhost
- name: CVAT_SHARE_URL
value: /home/django/data
- name: ONEPANEL_SYNC_DIRECTORY
value: '{{workspace.parameters.sync-directory}}'
- name: NVIDIA_VISIBLE_DEVICES
value: all
- name: NVIDIA_DRIVER_CAPABILITIES
value: compute,utility
- name: NVIDIA_REQUIRE_CUDA
value: "cuda>=10.0 brand=tesla,driver>=384,driver<385 brand=tesla,driver>=410,driver<411"
ports:
- containerPort: 8080
name: http
volumeMounts:
- name: data
mountPath: /home/django/data
- name: keys
mountPath: /home/django/keys
- name: logs
mountPath: /home/django/logs
- name: models
mountPath: /home/django/models
- name: share
mountPath: /home/django/share
- name: sys-namespace-config
mountPath: /etc/onepanel
readOnly: true
- name: cvat-ui
image: onepanel/cvat-ui:0.12.0_cvat.1.0.0-beta.2
ports:
- containerPort: 80
name: http
# You can add multiple FileSyncer sidecar containers if needed
- name: filesyncer
image: onepanel/filesyncer:{{.ArtifactRepositoryType}}
imagePullPolicy: Always
args:
- download
env:
- name: FS_PATH
value: /mnt/share
- name: FS_PREFIX
value: '{{workflow.namespace}}/{{workspace.parameters.sync-directory}}'
volumeMounts:
- name: share
mountPath: /mnt/share
- name: sys-namespace-config
mountPath: /etc/onepanel
readOnly: true
ports:
- name: cvat-ui
port: 80
protocol: TCP
targetPort: 80
- name: cvat
port: 8080
protocol: TCP
targetPort: 8080
routes:
- match:
- uri:
regex: /api/.*|/git/.*|/tensorflow/.*|/onepanelio/.*|/tracking/.*|/auto_annotation/.*|/analytics/.*|/static/.*|/admin/.*|/documentation/.*|/dextr/.*|/reid/.*
- queryParams:
id:
regex: \d+.*
route:
- destination:
port:
number: 8080
timeout: 600s
- match:
- uri:
prefix: /
route:
- destination:
port:
number: 80
timeout: 600s
# DAG Workflow to be executed once a Workspace action completes (optional)
# Uncomment the lines below if you want to send Slack notifications
#postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c`
func initialize20200812113316() {
if _, ok := initializedMigrations[20200812113316]; !ok {
goose.AddMigration(Up20200812113316, Down20200812113316)
initializedMigrations[20200812113316] = true
}
}
// Up20200812113316 runs the go migration to update cvat template
func Up20200812113316(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200812113316]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(cvatTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
artifactRepositoryType := "s3"
nsConfig, err := client.GetNamespaceConfig(namespace.Name)
if err != nil {
return err
}
if nsConfig.ArtifactRepository.GCS != nil {
artifactRepositoryType = "gcs"
}
workspaceTemplate := &v1.WorkspaceTemplate{
UID: uid,
Name: cvatTemplateName,
Manifest: cvatWorkspaceTemplate5,
Description: "Powerful and efficient Computer Vision Annotation Tool (CVAT)",
}
workspaceTemplate.Manifest = strings.NewReplacer(
"{{.ArtifactRepositoryType}}", artifactRepositoryType).Replace(workspaceTemplate.Manifest)
if _, err := client.UpdateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20200812113316 does nothing
func Down20200812113316(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,58 @@
package migration
import (
"database/sql"
"github.com/pressly/goose"
)
func initialize20200814160856() {
if _, ok := initializedMigrations[20200814160856]; !ok {
goose.AddMigration(Up20200814160856, Down20200814160856)
initializedMigrations[20200814160856] = true
}
}
// Up20200814160856 runs a migration to add description to jupyterlab template
func Up20200814160856(tx *sql.Tx) error {
// This code is executed when the migration is applied.
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200814160856]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
for _, namespace := range namespaces {
workspaceTemplate, err := client.GetWorkspaceTemplate(namespace.Name, "jupyterlab", 0)
if err != nil {
return err
}
workspaceTemplate.Description = "Interactive development environment for notebooks"
if _, err := client.UpdateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20200814160856 does nothing
func Down20200814160856(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,155 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
)
const jupyterWorkspaceTemplate2 = `# Docker containers that are part of the Workspace
containers:
- name: jupyterlab-tensorflow
image: onepanel/jupyterlab:1.0.1
command: ["/bin/bash", "-c", "start.sh jupyter lab --LabApp.token='' --LabApp.allow_remote_access=True --LabApp.allow_origin=\"*\" --LabApp.disable_check_xsrf=True --LabApp.trust_xheaders=True --LabApp.base_url=/ --LabApp.tornado_settings='{\"headers\":{\"Content-Security-Policy\":\"frame-ancestors * \'self\'\"}}' --notebook-dir='/data' --allow-root"]
env:
- name: tornado
value: "'{'headers':{'Content-Security-Policy':\"frame-ancestors\ *\ \'self'\"}}'"
args:
ports:
- containerPort: 8888
name: jupyterlab
- containerPort: 6006
name: tensorboard
volumeMounts:
- name: data
mountPath: /data
ports:
- name: jupyterlab
port: 80
protocol: TCP
targetPort: 8888
- name: tensorboard
port: 6006
protocol: TCP
targetPort: 6006
routes:
- match:
- uri:
prefix: /tensorboard
route:
- destination:
port:
number: 6006
- match:
- uri:
prefix: / #jupyter runs at the default route
route:
- destination:
port:
number: 80
# DAG Workflow to be executed once a Workspace action completes (optional)
#postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c
`
func initialize20200821162630() {
if _, ok := initializedMigrations[20200821162630]; !ok {
goose.AddMigration(Up20200821162630, Down20200821162630)
initializedMigrations[20200821162630] = true
}
}
//Up20200821162630 updates jupyterlab workspace with new features.
// Tensorflow 2.3 compiled to support CUDA 10.2 and cudnn8
// Pytorch with GPU support.
// OpenCV compiled from source with CUDA support.
// Miniconda, Jupyterlab 2.2+, and lots of neat extensions.
func Up20200821162630(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200821162630]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(jupyterLabTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
workspaceTemplate := &v1.WorkspaceTemplate{
UID: uid,
Name: jupyterLabTemplateName,
Manifest: jupyterWorkspaceTemplate2,
}
if _, err := client.UpdateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20200821162630 removes the JupyterLab template update
func Down20200821162630(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(jupyterLabTemplateName, 30)
if err != nil {
return err
}
workspaceTemplate := &v1.WorkspaceTemplate{
UID: uid,
Name: jupyterLabTemplateName,
Manifest: jupyterWorkspaceTemplate,
}
for _, namespace := range namespaces {
if _, err := client.UpdateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}

View File

@@ -0,0 +1,251 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
"github.com/pressly/goose"
)
const maskRCNNTemplate2 = `arguments:
parameters:
- name: source
value: https://github.com/onepanelio/Mask_RCNN.git
displayName: Model source code
type: hidden
visibility: private
- name: cvat-annotation-path
value: annotation-dump/sample_dataset
hint: Path to annotated data in default object storage (i.e S3). In CVAT, this parameter will be pre-populated.
displayName: Dataset path
visibility: private
- name: cvat-output-path
value: workflow-data/output/sample_output
hint: Path to store output artifacts in default object storage (i.e s3). In CVAT, this parameter will be pre-populated.
displayName: Workflow output path
visibility: private
- name: cvat-finetune-checkpoint
value: ''
hint: Select the last fine-tune checkpoint for this model. It may take up to 5 minutes for a recent checkpoint show here. Leave empty if this is the first time you're training this model.
displayName: Checkpoint path
visibility: public
- name: cvat-num-classes
displayName: Number of classes
hint: Number of classes (i.e in CVAT taks) + 1 for background
value: 81
visibility: private
- name: hyperparameters
displayName: Hyperparameters
visibility: public
type: textarea.textarea
value: |-
stage-1-epochs=1 # Epochs for network heads
stage-2-epochs=2 # Epochs for finetune layers
stage-3-epochs=3 # Epochs for all layers
hint: "Please refer to our <a href='https://docs.onepanel.ai/docs/getting-started/use-cases/computervision/annotation/cvat/cvat_annotation_model#arguments-optional' target='_blank'>documentation</a> for more information on parameters. Number of classes will be automatically populated if you had 'sys-num-classes' parameter in a workflow."
- name: dump-format
value: cvat_coco
displayName: CVAT dump format
visibility: public
- name: tf-image
visibility: public
value: tensorflow/tensorflow:1.13.1-py3
type: select.select
displayName: Select TensorFlow image
hint: Select the GPU image if you are running on a GPU node pool
options:
- name: 'TensorFlow 1.13.1 CPU Image'
value: 'tensorflow/tensorflow:1.13.1-py3'
- name: 'TensorFlow 1.13.1 GPU Image'
value: 'tensorflow/tensorflow:1.13.1-gpu-py3'
- displayName: Node pool
hint: Name of node pool or group to run this workflow task
type: select.select
visibility: public
name: sys-node-pool
value: Standard_D4s_v3
required: true
options:
- name: 'CPU: 2, RAM: 8GB'
value: Standard_D2s_v3
- name: 'CPU: 4, RAM: 16GB'
value: Standard_D4s_v3
- name: 'GPU: 1xK80, CPU: 6, RAM: 56GB'
value: Standard_NC6
entrypoint: main
templates:
- dag:
tasks:
- name: train-model
template: tensorflow
# Uncomment the lines below if you want to send Slack notifications
# - arguments:
# artifacts:
# - from: '{{tasks.train-model.outputs.artifacts.sys-metrics}}'
# name: metrics
# parameters:
# - name: status
# value: '{{tasks.train-model.status}}'
# dependencies:
# - train-model
# name: notify-in-slack
# template: slack-notify-success
name: main
- container:
args:
- |
apt-get update \
&& apt-get install -y git wget libglib2.0-0 libsm6 libxext6 libxrender-dev \
&& pip install -r requirements.txt \
&& pip install boto3 pyyaml google-cloud-storage \
&& git clone https://github.com/waleedka/coco \
&& cd coco/PythonAPI \
&& python setup.py build_ext install \
&& rm -rf build \
&& cd ../../ \
&& wget https://github.com/matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5 \
&& python setup.py install && ls \
&& python samples/coco/cvat.py train --dataset=/mnt/data/datasets \
--model=workflow_maskrcnn \
--extras="{{workflow.parameters.hyperparameters}}" \
--ref_model_path="{{workflow.parameters.cvat-finetune-checkpoint}}" \
--num_classes="{{workflow.parameters.cvat-num-classes}}" \
&& cd /mnt/src/ \
&& python prepare_dataset.py /mnt/data/datasets/annotations/instances_default.json
command:
- sh
- -c
image: '{{workflow.parameters.tf-image}}'
volumeMounts:
- mountPath: /mnt/data
name: data
- mountPath: /mnt/output
name: output
workingDir: /mnt/src
nodeSelector:
beta.kubernetes.io/instance-type: '{{workflow.parameters.sys-node-pool}}'
inputs:
artifacts:
- name: data
path: /mnt/data/datasets/
{{.ArtifactRepositoryType}}:
key: '{{workflow.namespace}}/{{workflow.parameters.cvat-annotation-path}}'
- git:
repo: '{{workflow.parameters.source}}'
revision: "no-boto"
name: src
path: /mnt/src
name: tensorflow
outputs:
artifacts:
- name: model
optional: true
path: /mnt/output
{{.ArtifactRepositoryType}}:
key: '{{workflow.namespace}}/{{workflow.parameters.cvat-output-path}}/{{workflow.name}}'
# Uncomment the lines below if you want to send Slack notifications
#- container:
# args:
# - SLACK_USERNAME=Onepanel SLACK_TITLE="{{workflow.name}} {{inputs.parameters.status}}"
# SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd
# SLACK_MESSAGE=$(cat /tmp/metrics.json)} ./slack-notify
# command:
# - sh
# - -c
# image: technosophos/slack-notify
# inputs:
# artifacts:
# - name: metrics
# optional: true
# path: /tmp/metrics.json
# parameters:
# - name: status
# name: slack-notify-success
volumeClaimTemplates:
- metadata:
creationTimestamp: null
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi
- metadata:
creationTimestamp: null
name: output
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi`
func initialize20200824095513() {
if _, ok := initializedMigrations[20200824095513]; !ok {
goose.AddMigration(Up20200824095513, Down20200824095513)
initializedMigrations[20200824095513] = true
}
}
// Up20200824095513 updates the maskrcnn workflow template
func Up20200824095513(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200824095513]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
// Update maskrcnn
workflowTemplate := &v1.WorkflowTemplate{
Name: maskRCNNWorkflowTemplateName,
Manifest: maskRCNNTemplate2,
Labels: map[string]string{
"used-by": "cvat",
},
}
if err := workflowTemplate.GenerateUID(workflowTemplate.Name); err != nil {
return err
}
for _, namespace := range namespaces {
err = ReplaceArtifactRepositoryType(client, namespace, workflowTemplate, nil)
if err != nil {
return err
}
if _, err := client.CreateWorkflowTemplateVersion(namespace.Name, workflowTemplate); err != nil {
return err
}
}
return nil
}
// Down20200824095513 does nothing
func Down20200824095513(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,281 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
"github.com/pressly/goose"
)
const tensorflowObjectDetectionTraining2 = `arguments:
parameters:
- name: source
value: https://github.com/tensorflow/models.git
displayName: Model source code
type: hidden
visibility: private
- name: trainingsource
value: https://github.com/onepanelio/cvat-training.git
type: hidden
visibility: private
- name: revision
value: v1.13.0
type: hidden
visibility: private
- name: cvat-annotation-path
value: annotation-dump/sample_dataset
displayName: Dataset path
hint: Path to annotated data in default object storage (i.e S3). In CVAT, this parameter will be pre-populated.
visibility: private
- name: cvat-output-path
value: workflow-data/output/sample_output
hint: Path to store output artifacts in default object storage (i.e s3). In CVAT, this parameter will be pre-populated.
displayName: Workflow output path
visibility: private
- name: cvat-model
value: frcnn-res50-coco
displayName: Model
hint: TF Detection API's model to use for training.
type: select.select
visibility: public
options:
- name: 'Faster RCNN-ResNet 101-COCO'
value: frcnn-res101-coco
- name: 'Faster RCNN-ResNet 101-Low Proposal-COCO'
value: frcnn-res101-low
- name: 'Faster RCNN-ResNet 50-COCO'
value: frcnn-res50-coco
- name: 'Faster RCNN-NAS-COCO'
value: frcnn-nas-coco
- name: 'SSD MobileNet V1-COCO'
value: ssd-mobilenet-v1-coco2
- name: 'SSD MobileNet V2-COCO'
value: ssd-mobilenet-v2-coco
- name: 'SSDLite MobileNet-COCO'
value: ssdlite-mobilenet-coco
- name: hyperparameters
value: |-
num-steps=10000
displayName: Hyperparameters
visibility: public
type: textarea.textarea
hint: "Please refer to our <a href='https://docs.onepanel.ai/docs/getting-started/use-cases/computervision/annotation/cvat/cvat_annotation_model#arguments-optional' target='_blank'>documentation</a> for more information on parameters. Number of classes will be automatically populated if you had 'sys-num-classes' parameter in a workflow."
- name: cvat-finetune-checkpoint
value: ''
hint: Select the last fine-tune checkpoint for this model. It may take up to 5 minutes for a recent checkpoint show here. Leave empty if this is the first time you're training this model.
displayName: Checkpoint path
visibility: public
- name: cvat-num-classes
value: 81
hint: Number of classes
displayName: Number of classes
visibility: private
- name: tf-image
value: tensorflow/tensorflow:1.13.1-py3
type: select.select
displayName: Select TensorFlow image
visibility: public
hint: Select the GPU image if you are running on a GPU node pool
options:
- name: 'TensorFlow 1.13.1 CPU Image'
value: 'tensorflow/tensorflow:1.13.1-py3'
- name: 'TensorFlow 1.13.1 GPU Image'
value: 'tensorflow/tensorflow:1.13.1-gpu-py3'
- displayName: Node pool
hint: Name of node pool or group to run this workflow task
type: select.select
name: sys-node-pool
value: Standard_D4s_v3
visibility: public
required: true
options:
- name: 'CPU: 2, RAM: 8GB'
value: Standard_D2s_v3
- name: 'CPU: 4, RAM: 16GB'
value: Standard_D4s_v3
- name: 'GPU: 1xK80, CPU: 6, RAM: 56GB'
value: Standard_NC6
- name: dump-format
value: cvat_tfrecord
visibility: public
entrypoint: main
templates:
- dag:
tasks:
- name: train-model
template: tensorflow
# Uncomment the lines below if you want to send Slack notifications
# - arguments:
# artifacts:
# - from: '{{tasks.train-model.outputs.artifacts.sys-metrics}}'
# name: metrics
# parameters:
# - name: status
# value: '{{tasks.train-model.status}}'
# dependencies:
# - train-model
# name: notify-in-slack
# template: slack-notify-success
name: main
- container:
args:
- |
apt-get update && \
apt-get install -y python3-pip git wget unzip libglib2.0-0 libsm6 libxext6 libxrender-dev && \
pip install pillow lxml Cython contextlib2 jupyter matplotlib numpy scipy boto3 pycocotools pyyaml google-cloud-storage && \
cd /mnt/src/tf/research && \
export PYTHONPATH=$PYTHONPATH:` + "`pwd`:`pwd`" + `/slim && \
cd /mnt/src/train && \
python convert_workflow.py \
--extras="{{workflow.parameters.hyperparameters}}" \
--model="{{workflow.parameters.cvat-model}}" \
--num_classes="{{workflow.parameters.cvat-num-classes}}" \
--sys_finetune_checkpoint={{workflow.parameters.cvat-finetune-checkpoint}}
command:
- sh
- -c
image: '{{workflow.parameters.tf-image}}'
volumeMounts:
- mountPath: /mnt/data
name: data
- mountPath: /mnt/output
name: output
workingDir: /mnt/src
nodeSelector:
beta.kubernetes.io/instance-type: '{{workflow.parameters.sys-node-pool}}'
inputs:
artifacts:
- name: data
path: /mnt/data/datasets/
{{.ArtifactRepositoryType}}:
key: '{{workflow.namespace}}/{{workflow.parameters.cvat-annotation-path}}'
- name: models
path: /mnt/data/models/
optional: true
{{.ArtifactRepositoryType}}:
key: '{{workflow.namespace}}/{{workflow.parameters.cvat-finetune-checkpoint}}'
- git:
repo: '{{workflow.parameters.source}}'
revision: '{{workflow.parameters.revision}}'
name: src
path: /mnt/src/tf
- git:
repo: '{{workflow.parameters.trainingsource}}'
revision: 'optional-artifacts'
name: tsrc
path: /mnt/src/train
name: tensorflow
outputs:
artifacts:
- name: model
optional: true
path: /mnt/output
{{.ArtifactRepositoryType}}:
key: '{{workflow.namespace}}/{{workflow.parameters.cvat-output-path}}/{{workflow.name}}'
# Uncomment the lines below if you want to send Slack notifications
#- container:
# args:
# - SLACK_USERNAME=Onepanel SLACK_TITLE="{{workflow.name}} {{inputs.parameters.status}}"
# SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd
# SLACK_MESSAGE=$(cat /tmp/metrics.json)} ./slack-notify
# command:
# - sh
# - -c
# image: technosophos/slack-notify
# inputs:
# artifacts:
# - name: metrics
# optional: true
# path: /tmp/metrics.json
# parameters:
# - name: status
# name: slack-notify-success
volumeClaimTemplates:
- metadata:
creationTimestamp: null
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi
- metadata:
creationTimestamp: null
name: output
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200Gi`
func initialize20200824101019() {
if _, ok := initializedMigrations[20200824101019]; !ok {
goose.AddMigration(Up20200824101019, Down20200824101019)
initializedMigrations[20200824101019] = true
}
}
// Up20200824101019 updates the tf object detection training workflow template
func Up20200824101019(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200824101019]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
// Update tfObjectDetectionTraining
workflowTemplate := &v1.WorkflowTemplate{
Name: tensorflowObjectDetectionWorkflowTemplateName,
Manifest: tensorflowObjectDetectionTraining2,
Labels: map[string]string{
"used-by": "cvat",
},
}
if err := workflowTemplate.GenerateUID(workflowTemplate.Name); err != nil {
return err
}
for _, namespace := range namespaces {
err = ReplaceArtifactRepositoryType(client, namespace, workflowTemplate, nil)
if err != nil {
return err
}
if _, err := client.CreateWorkflowTemplateVersion(namespace.Name, workflowTemplate); err != nil {
return err
}
}
return nil
}
// Down20200824101019 does nothing
func Down20200824101019(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,206 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
)
const cvatWorkspaceTemplate6 = `# Workspace arguments
arguments:
parameters:
- name: sync-directory
displayName: Directory to sync raw input and training output
value: workflow-data
hint: Location to sync raw input, models and checkpoints from default object storage. Note that this will be relative to the current namespace.
containers:
- name: cvat-db
image: postgres:10-alpine
env:
- name: POSTGRES_USER
value: root
- name: POSTGRES_DB
value: cvat
- name: POSTGRES_HOST_AUTH_METHOD
value: trust
- name: PGDATA
value: /var/lib/psql/data
ports:
- containerPort: 5432
name: tcp
volumeMounts:
- name: db
mountPath: /var/lib/psql
- name: cvat-redis
image: redis:4.0-alpine
ports:
- containerPort: 6379
name: tcp
- name: cvat
image: onepanel/cvat:0.12.0-rc.6_cvat.1.0.0
env:
- name: DJANGO_MODWSGI_EXTRA_ARGS
value: ""
- name: ALLOWED_HOSTS
value: '*'
- name: CVAT_REDIS_HOST
value: localhost
- name: CVAT_POSTGRES_HOST
value: localhost
- name: CVAT_SHARE_URL
value: /home/django/data
- name: ONEPANEL_SYNC_DIRECTORY
value: '{{workspace.parameters.sync-directory}}'
- name: NVIDIA_VISIBLE_DEVICES
value: all
- name: NVIDIA_DRIVER_CAPABILITIES
value: compute,utility
- name: NVIDIA_REQUIRE_CUDA
value: "cuda>=10.0 brand=tesla,driver>=384,driver<385 brand=tesla,driver>=410,driver<411"
ports:
- containerPort: 8080
name: http
volumeMounts:
- name: data
mountPath: /home/django/data
- name: keys
mountPath: /home/django/keys
- name: logs
mountPath: /home/django/logs
- name: models
mountPath: /home/django/models
- name: share
mountPath: /home/django/share
- name: sys-namespace-config
mountPath: /etc/onepanel
readOnly: true
- name: cvat-ui
image: onepanel/cvat-ui:0.12.0-rc.1_cvat.1.0.0
ports:
- containerPort: 80
name: http
# You can add multiple FileSyncer sidecar containers if needed
- name: filesyncer
image: onepanel/filesyncer:{{.ArtifactRepositoryType}}
imagePullPolicy: Always
args:
- download
env:
- name: FS_PATH
value: /mnt/share
- name: FS_PREFIX
value: '{{workflow.namespace}}/{{workspace.parameters.sync-directory}}'
volumeMounts:
- name: share
mountPath: /mnt/share
- name: sys-namespace-config
mountPath: /etc/onepanel
readOnly: true
ports:
- name: cvat-ui
port: 80
protocol: TCP
targetPort: 80
- name: cvat
port: 8080
protocol: TCP
targetPort: 8080
routes:
- match:
- uri:
regex: /api/.*|/git/.*|/tensorflow/.*|/onepanelio/.*|/tracking/.*|/auto_annotation/.*|/analytics/.*|/static/.*|/admin/.*|/documentation/.*|/dextr/.*|/reid/.*
- queryParams:
id:
regex: \d+.*
route:
- destination:
port:
number: 8080
timeout: 600s
- match:
- uri:
prefix: /
route:
- destination:
port:
number: 80
timeout: 600s
# DAG Workflow to be executed once a Workspace action completes (optional)
# Uncomment the lines below if you want to send Slack notifications
#postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c`
func initialize20200824101905() {
if _, ok := initializedMigrations[20200824101905]; !ok {
goose.AddMigration(Up20200824101905, Down20200824101905)
initializedMigrations[20200824101905] = true
}
}
// Up20200824101905 updates the cvat workspace template
func Up20200824101905(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200824101905]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(cvatTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
workspaceTemplate := &v1.WorkspaceTemplate{
UID: uid,
Name: cvatTemplateName,
Manifest: cvatWorkspaceTemplate6,
Description: "Powerful and efficient Computer Vision Annotation Tool (CVAT)",
}
err = ReplaceArtifactRepositoryType(client, namespace, nil, workspaceTemplate)
if err != nil {
return err
}
if _, err := client.UpdateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20200824101905 does nothing
func Down20200824101905(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,206 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
)
const cvatWorkspaceTemplate7 = `# Workspace arguments
arguments:
parameters:
- name: sync-directory
displayName: Directory to sync raw input and training output
value: workflow-data
hint: Location to sync raw input, models and checkpoints from default object storage. Note that this will be relative to the current namespace.
containers:
- name: cvat-db
image: postgres:10-alpine
env:
- name: POSTGRES_USER
value: root
- name: POSTGRES_DB
value: cvat
- name: POSTGRES_HOST_AUTH_METHOD
value: trust
- name: PGDATA
value: /var/lib/psql/data
ports:
- containerPort: 5432
name: tcp
volumeMounts:
- name: db
mountPath: /var/lib/psql
- name: cvat-redis
image: redis:4.0-alpine
ports:
- containerPort: 6379
name: tcp
- name: cvat
image: onepanel/cvat:0.12.0_cvat.1.0.0
env:
- name: DJANGO_MODWSGI_EXTRA_ARGS
value: ""
- name: ALLOWED_HOSTS
value: '*'
- name: CVAT_REDIS_HOST
value: localhost
- name: CVAT_POSTGRES_HOST
value: localhost
- name: CVAT_SHARE_URL
value: /home/django/data
- name: ONEPANEL_SYNC_DIRECTORY
value: '{{workspace.parameters.sync-directory}}'
- name: NVIDIA_VISIBLE_DEVICES
value: all
- name: NVIDIA_DRIVER_CAPABILITIES
value: compute,utility
- name: NVIDIA_REQUIRE_CUDA
value: "cuda>=10.0 brand=tesla,driver>=384,driver<385 brand=tesla,driver>=410,driver<411"
ports:
- containerPort: 8080
name: http
volumeMounts:
- name: data
mountPath: /home/django/data
- name: keys
mountPath: /home/django/keys
- name: logs
mountPath: /home/django/logs
- name: models
mountPath: /home/django/models
- name: share
mountPath: /home/django/share
- name: sys-namespace-config
mountPath: /etc/onepanel
readOnly: true
- name: cvat-ui
image: onepanel/cvat-ui:0.12.0_cvat.1.0.0
ports:
- containerPort: 80
name: http
# You can add multiple FileSyncer sidecar containers if needed
- name: filesyncer
image: onepanel/filesyncer:{{.ArtifactRepositoryType}}
imagePullPolicy: Always
args:
- download
env:
- name: FS_PATH
value: /mnt/share
- name: FS_PREFIX
value: '{{workflow.namespace}}/{{workspace.parameters.sync-directory}}'
volumeMounts:
- name: share
mountPath: /mnt/share
- name: sys-namespace-config
mountPath: /etc/onepanel
readOnly: true
ports:
- name: cvat-ui
port: 80
protocol: TCP
targetPort: 80
- name: cvat
port: 8080
protocol: TCP
targetPort: 8080
routes:
- match:
- uri:
regex: /api/.*|/git/.*|/tensorflow/.*|/onepanelio/.*|/tracking/.*|/auto_annotation/.*|/analytics/.*|/static/.*|/admin/.*|/documentation/.*|/dextr/.*|/reid/.*
- queryParams:
id:
regex: \d+.*
route:
- destination:
port:
number: 8080
timeout: 600s
- match:
- uri:
prefix: /
route:
- destination:
port:
number: 80
timeout: 600s
# DAG Workflow to be executed once a Workspace action completes (optional)
# Uncomment the lines below if you want to send Slack notifications
#postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c`
func initialize20200825154403() {
if _, ok := initializedMigrations[20200825154403]; !ok {
goose.AddMigration(Up20200825154403, Down20200825154403)
initializedMigrations[20200825154403] = true
}
}
// Up20200825154403 runs the migration to upgrade the cvat workspace template
func Up20200825154403(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200825154403]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(cvatTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
workspaceTemplate := &v1.WorkspaceTemplate{
UID: uid,
Name: cvatTemplateName,
Manifest: cvatWorkspaceTemplate7,
Description: "Powerful and efficient Computer Vision Annotation Tool (CVAT)",
}
err = ReplaceArtifactRepositoryType(client, namespace, nil, workspaceTemplate)
if err != nil {
return err
}
if _, err := client.UpdateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20200825154403 does nothing
func Down20200825154403(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,218 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
)
const cvatWorkspaceTemplate8 = `# Workspace arguments
arguments:
parameters:
- name: sync-directory
displayName: Directory to sync raw input and training output
value: workflow-data
hint: Location to sync raw input, models and checkpoints from default object storage. Note that this will be relative to the current namespace.
containers:
- name: cvat-db
image: postgres:10-alpine
env:
- name: POSTGRES_USER
value: root
- name: POSTGRES_DB
value: cvat
- name: POSTGRES_HOST_AUTH_METHOD
value: trust
- name: PGDATA
value: /var/lib/psql/data
ports:
- containerPort: 5432
name: tcp
volumeMounts:
- name: db
mountPath: /var/lib/psql
- name: cvat-redis
image: redis:4.0-alpine
ports:
- containerPort: 6379
name: tcp
- name: cvat
image: onepanel/cvat:0.12.0_cvat.1.0.0
env:
- name: DJANGO_MODWSGI_EXTRA_ARGS
value: ""
- name: ALLOWED_HOSTS
value: '*'
- name: CVAT_REDIS_HOST
value: localhost
- name: CVAT_POSTGRES_HOST
value: localhost
- name: CVAT_SHARE_URL
value: /home/django/data
- name: ONEPANEL_SYNC_DIRECTORY
value: '{{workspace.parameters.sync-directory}}'
- name: NVIDIA_VISIBLE_DEVICES
value: all
- name: NVIDIA_DRIVER_CAPABILITIES
value: compute,utility
- name: NVIDIA_REQUIRE_CUDA
value: "cuda>=10.0 brand=tesla,driver>=384,driver<385 brand=tesla,driver>=410,driver<411"
ports:
- containerPort: 8080
name: http
volumeMounts:
- name: data
mountPath: /home/django/data
- name: keys
mountPath: /home/django/keys
- name: logs
mountPath: /home/django/logs
- name: models
mountPath: /home/django/models
- name: share
mountPath: /home/django/share
- name: sys-namespace-config
mountPath: /etc/onepanel
readOnly: true
- name: cvat-ui
image: onepanel/cvat-ui:0.12.0_cvat.1.0.0
ports:
- containerPort: 80
name: http
# You can add multiple FileSyncer sidecar containers if needed
- name: filesyncer
image: onepanel/filesyncer:{{.ArtifactRepositoryType}}
imagePullPolicy: Always
args:
- download
- -server-prefix=/sys/filesyncer
env:
- name: FS_PATH
value: /mnt/share
- name: FS_PREFIX
value: '{{workflow.namespace}}/{{workspace.parameters.sync-directory}}'
volumeMounts:
- name: share
mountPath: /mnt/share
- name: sys-namespace-config
mountPath: /etc/onepanel
readOnly: true
ports:
- name: cvat-ui
port: 80
protocol: TCP
targetPort: 80
- name: cvat
port: 8080
protocol: TCP
targetPort: 8080
- name: fs
port: 8888
protocol: TCP
targetPort: 8888
routes:
- match:
- uri:
prefix: /sys/filesyncer
route:
- destination:
port:
number: 8888
- match:
- uri:
regex: /api/.*|/git/.*|/tensorflow/.*|/onepanelio/.*|/tracking/.*|/auto_annotation/.*|/analytics/.*|/static/.*|/admin/.*|/documentation/.*|/dextr/.*|/reid/.*
- queryParams:
id:
regex: \d+.*
route:
- destination:
port:
number: 8080
timeout: 600s
- match:
- uri:
prefix: /
route:
- destination:
port:
number: 80
timeout: 600s
# DAG Workflow to be executed once a Workspace action completes (optional)
# Uncomment the lines below if you want to send Slack notifications
#postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c`
func initialize20200826185926() {
if _, ok := initializedMigrations[20200826185926]; !ok {
goose.AddMigration(Up20200826185926, Down20200826185926)
initializedMigrations[20200826185926] = true
}
}
// Up20200826185926 runs the migration to upgrade the cvat workspace template
func Up20200826185926(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200826185926]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(cvatTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
workspaceTemplate := &v1.WorkspaceTemplate{
UID: uid,
Name: cvatTemplateName,
Manifest: cvatWorkspaceTemplate8,
Description: "Powerful and efficient Computer Vision Annotation Tool (CVAT)",
}
err = ReplaceArtifactRepositoryType(client, namespace, nil, workspaceTemplate)
if err != nil {
return err
}
if _, err := client.UpdateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20200826185926 does nothing
func Down20200826185926(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,68 @@
package migration
import (
"database/sql"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
)
func initialize20200922103448() {
if _, ok := initializedMigrations[20200922103448]; !ok {
goose.AddMigration(Up20200922103448, Down20200922103448)
initializedMigrations[20200922103448] = true
}
}
// Up20200922103448 adds a description to the jupyterlab workspace template
func Up20200922103448(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200922103448]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(jupyterLabTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
workspaceTemplate, err := client.GetWorkspaceTemplate(namespace.Name, uid, 0)
if err != nil {
return err
}
if workspaceTemplate == nil {
continue
}
// Adding description
workspaceTemplate.Description = "Interactive development environment for notebooks"
if _, err := client.UpdateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20200922103448 does nothing
func Down20200922103448(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

View File

@@ -0,0 +1,123 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
)
const vscodeWorkspaceTemplate = `
# Docker containers that are part of the Workspace
containers:
- name: vscode
image: onepanel/vscode:1.0.0
command: ["/bin/bash", "-c", "pip install onepanel-sdk && /usr/bin/entrypoint.sh --bind-addr 0.0.0.0:8080 --auth none ."]
ports:
- containerPort: 8080
name: vscode
volumeMounts:
- name: data
mountPath: /data
ports:
- name: vscode
port: 8080
protocol: TCP
targetPort: 8080
routes:
- match:
- uri:
prefix: / #vscode runs at the default route
route:
- destination:
port:
number: 8080
# DAG Workflow to be executed once a Workspace action completes (optional)
#postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c
`
const vscodeWorkspaceTemplateName = "Visual Studio Code"
func initialize20200929144301() {
if _, ok := initializedMigrations[20200929144301]; !ok {
goose.AddMigration(Up20200929144301, Down20200929144301)
initializedMigrations[20200929144301] = true
}
}
// Up20200929144301 adds Visual Studio Code as a workspace template.
func Up20200929144301(tx *sql.Tx) error {
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200929144301]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
workspaceTemplate := &v1.WorkspaceTemplate{
Name: vscodeWorkspaceTemplateName,
Manifest: vscodeWorkspaceTemplate,
}
// Adding description
workspaceTemplate.Description = "Open source code editor"
for _, namespace := range namespaces {
if _, err := client.CreateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20200929144301 removes Visual Studio Code from workspace templates.
func Down20200929144301(tx *sql.Tx) error {
client, err := getClient()
if err != nil {
return err
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(vscodeWorkspaceTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
if _, err := client.ArchiveWorkspaceTemplate(namespace.Name, uid); err != nil {
return err
}
}
return nil
}

View File

@@ -0,0 +1,148 @@
package migration
import (
"database/sql"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
)
const jupyterWorkspaceTemplate3 = `
# Docker containers that are part of the Workspace
containers:
- name: jupyterlab-tensorflow
image: onepanel/jupyterlab:1.0.1
command: ["/bin/bash", "-c", "pip install onepanel-sdk && start.sh jupyter lab --LabApp.token='' --LabApp.allow_remote_access=True --LabApp.allow_origin=\"*\" --LabApp.disable_check_xsrf=True --LabApp.trust_xheaders=True --LabApp.base_url=/ --LabApp.tornado_settings='{\"headers\":{\"Content-Security-Policy\":\"frame-ancestors * \'self\'\"}}' --notebook-dir='/data' --allow-root"]
env:
- name: tornado
value: "'{'headers':{'Content-Security-Policy':\"frame-ancestors\ *\ \'self'\"}}'"
args:
ports:
- containerPort: 8888
name: jupyterlab
- containerPort: 6006
name: tensorboard
volumeMounts:
- name: data
mountPath: /data
ports:
- name: jupyterlab
port: 80
protocol: TCP
targetPort: 8888
- name: tensorboard
port: 6006
protocol: TCP
targetPort: 6006
routes:
- match:
- uri:
prefix: /tensorboard
route:
- destination:
port:
number: 6006
- match:
- uri:
prefix: / #jupyter runs at the default route
route:
- destination:
port:
number: 80
# DAG Workflow to be executed once a Workspace action completes (optional)
#postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c
`
func initialize20200929153931() {
if _, ok := initializedMigrations[20200929153931]; !ok {
goose.AddMigration(Up20200929153931, Down20200929153931)
initializedMigrations[20200929153931] = true
}
}
// Up20200929153931 updates jupyterlab workspace to include the onepanel-sdk
func Up20200929153931(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200929153931]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(jupyterLabTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
if _, err := client.UpdateWorkspaceTemplateManifest(namespace.Name, uid, jupyterWorkspaceTemplate3); err != nil {
return err
}
}
return nil
}
// Down20200929153931 removes the onepanel-sdk addition.
func Down20200929153931(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20200929153931]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(jupyterLabTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
if _, err := client.UpdateWorkspaceTemplateManifest(namespace.Name, uid, jupyterWorkspaceTemplate2); err != nil {
return err
}
}
return nil
}

View File

@@ -0,0 +1,216 @@
package migration
import (
"database/sql"
v1 "github.com/onepanelio/core/pkg"
uid2 "github.com/onepanelio/core/pkg/util/uid"
"github.com/pressly/goose"
)
const cvatWorkspaceTemplate9 = `# Workspace arguments
arguments:
parameters:
- name: sync-directory
displayName: Directory to sync raw input and training output
value: workflow-data
hint: Location to sync raw input, models and checkpoints from default object storage. Note that this will be relative to the current namespace.
containers:
- name: cvat-db
image: postgres:10-alpine
env:
- name: POSTGRES_USER
value: root
- name: POSTGRES_DB
value: cvat
- name: POSTGRES_HOST_AUTH_METHOD
value: trust
- name: PGDATA
value: /var/lib/psql/data
ports:
- containerPort: 5432
name: tcp
volumeMounts:
- name: db
mountPath: /var/lib/psql
- name: cvat-redis
image: redis:4.0-alpine
ports:
- containerPort: 6379
name: tcp
- name: cvat
image: onepanel/cvat:0.12.1_cvat.1.0.0
env:
- name: DJANGO_MODWSGI_EXTRA_ARGS
value: ""
- name: ALLOWED_HOSTS
value: '*'
- name: CVAT_REDIS_HOST
value: localhost
- name: CVAT_POSTGRES_HOST
value: localhost
- name: CVAT_SHARE_URL
value: /home/django/data
- name: ONEPANEL_SYNC_DIRECTORY
value: '{{workspace.parameters.sync-directory}}'
- name: NVIDIA_VISIBLE_DEVICES
value: all
- name: NVIDIA_DRIVER_CAPABILITIES
value: compute,utility
- name: NVIDIA_REQUIRE_CUDA
value: "cuda>=10.0 brand=tesla,driver>=384,driver<385 brand=tesla,driver>=410,driver<411"
ports:
- containerPort: 8080
name: http
volumeMounts:
- name: data
mountPath: /home/django/data
- name: keys
mountPath: /home/django/keys
- name: logs
mountPath: /home/django/logs
- name: models
mountPath: /home/django/models
- name: share
mountPath: /home/django/share
- name: sys-namespace-config
mountPath: /etc/onepanel
readOnly: true
- name: cvat-ui
image: onepanel/cvat-ui:0.12.1_cvat.1.0.0
ports:
- containerPort: 80
name: http
# You can add multiple FileSyncer sidecar containers if needed
- name: filesyncer
image: onepanel/filesyncer:{{.ArtifactRepositoryType}}
imagePullPolicy: Always
args:
- download
- -server-prefix=/sys/filesyncer
env:
- name: FS_PATH
value: /mnt/share
- name: FS_PREFIX
value: '{{workflow.namespace}}/{{workspace.parameters.sync-directory}}'
volumeMounts:
- name: share
mountPath: /mnt/share
- name: sys-namespace-config
mountPath: /etc/onepanel
readOnly: true
ports:
- name: cvat-ui
port: 80
protocol: TCP
targetPort: 80
- name: cvat
port: 8080
protocol: TCP
targetPort: 8080
- name: fs
port: 8888
protocol: TCP
targetPort: 8888
routes:
- match:
- uri:
prefix: /sys/filesyncer
route:
- destination:
port:
number: 8888
- match:
- uri:
regex: /api/.*|/git/.*|/tensorflow/.*|/onepanelio/.*|/tracking/.*|/auto_annotation/.*|/analytics/.*|/static/.*|/admin/.*|/documentation/.*|/dextr/.*|/reid/.*
- queryParams:
id:
regex: \d+.*
route:
- destination:
port:
number: 8080
- match:
- uri:
prefix: /
route:
- destination:
port:
number: 80
# DAG Workflow to be executed once a Workspace action completes (optional)
# Uncomment the lines below if you want to send Slack notifications
#postExecutionWorkflow:
# entrypoint: main
# templates:
# - name: main
# dag:
# tasks:
# - name: slack-notify
# template: slack-notify
# - name: slack-notify
# container:
# image: technosophos/slack-notify
# args:
# - SLACK_USERNAME=onepanel SLACK_TITLE="Your workspace is ready" SLACK_ICON=https://www.gravatar.com/avatar/5c4478592fe00878f62f0027be59c1bd SLACK_MESSAGE="Your workspace is now running" ./slack-notify
# command:
# - sh
# - -c`
func initialize20201001070806() {
if _, ok := initializedMigrations[20201001070806]; !ok {
goose.AddMigration(Up20201001070806, Down20201001070806)
initializedMigrations[20201001070806] = true
}
}
// Up20201001070806 updates the cvat workspace
func Up20201001070806(tx *sql.Tx) error {
// This code is executed when the migration is applied.
client, err := getClient()
if err != nil {
return err
}
defer client.DB.Close()
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
return err
}
if _, ok := migrationsRan[20201001070806]; ok {
return nil
}
namespaces, err := client.ListOnepanelEnabledNamespaces()
if err != nil {
return err
}
uid, err := uid2.GenerateUID(cvatTemplateName, 30)
if err != nil {
return err
}
for _, namespace := range namespaces {
workspaceTemplate := &v1.WorkspaceTemplate{
UID: uid,
Name: cvatTemplateName,
Manifest: cvatWorkspaceTemplate9,
Description: "Powerful and efficient Computer Vision Annotation Tool (CVAT)",
}
err = ReplaceArtifactRepositoryType(client, namespace, nil, workspaceTemplate)
if err != nil {
return err
}
if _, err := client.UpdateWorkspaceTemplate(namespace.Name, workspaceTemplate); err != nil {
return err
}
}
return nil
}
// Down20201001070806 does nothing
func Down20201001070806(tx *sql.Tx) error {
// This code is executed when the migration is rolled back.
return nil
}

130
db/go/db.go Normal file
View File

@@ -0,0 +1,130 @@
package migration
import (
"errors"
sq "github.com/Masterminds/squirrel"
"github.com/jmoiron/sqlx"
v1 "github.com/onepanelio/core/pkg"
"log"
"strings"
)
// initializedMigrations is used to keep track of which migrations have been initialized.
// if they are initialized more than once, goose panics.
var initializedMigrations = make(map[int]bool)
// sqlRanMigrations keeps track of all the sql migrations that have been run.
// we need to know this because in an older version some go migrations ran alongside sql.
// So if they have already been run, we can't run them again.
var sqlRanMigrations = make(map[uint64]bool)
// migrationHasAlreadyBeenRun returns true if the migration has already been run in sql
// see sqlRanMigrations var
func migrationHasAlreadyBeenRun(version int) bool {
_, ok := sqlRanMigrations[uint64(version)]
return ok
}
// Initialize sets up the go migrations.
func Initialize() {
client, err := getClient()
if err != nil {
log.Fatalf("unable to get client for go migrations: %v", err)
}
migrationsRan, err := getRanSQLMigrations(client)
if err != nil {
log.Fatalf("Unable to get already run sql migrations: %v", err)
}
sqlRanMigrations = migrationsRan
initialize20200525160514()
initialize20200528140124()
initialize20200605090509()
initialize20200605090535()
initialize20200626113635()
initialize20200704151301()
initialize20200724220450()
initialize20200727144157()
initialize20200728190804()
initialize20200812104328()
initialize20200812113316()
initialize20200814160856()
initialize20200821162630()
initialize20200824095513()
initialize20200824101019()
initialize20200824101905()
initialize20200825154403()
initialize20200826185926()
initialize20200922103448()
initialize20200929144301()
initialize20200929153931()
initialize20201001070806()
if err := client.DB.Close(); err != nil {
log.Printf("[error] closing db %v", err)
}
}
func getClient() (*v1.Client, error) {
kubeConfig := v1.NewConfig()
client, err := v1.NewClient(kubeConfig, nil, nil)
if err != nil {
return nil, err
}
config, err := client.GetSystemConfig()
if err != nil {
return nil, err
}
dbDriverName, dbDataSourceName := config.DatabaseConnection()
client.DB = v1.NewDB(sqlx.MustConnect(dbDriverName, dbDataSourceName))
return client, nil
}
// getRanSQLMigrations returns a map where each key is a sql migration version ran.
func getRanSQLMigrations(client *v1.Client) (map[uint64]bool, error) {
sb := sq.StatementBuilder.PlaceholderFormat(sq.Dollar)
query := sb.Select("version_id").
From("goose_db_version")
versions := make([]uint64, 0)
if err := client.Selectx(&versions, query); err != nil {
return nil, err
}
result := make(map[uint64]bool)
for _, version := range versions {
result[version] = true
}
return result, nil
}
// ReplaceArtifactRepositoryType will look for {{.ArtifactRepositoryType}} in the migration and replace it based on config.
func ReplaceArtifactRepositoryType(client *v1.Client, namespace *v1.Namespace, workflowTemplate *v1.WorkflowTemplate, workspaceTemplate *v1.WorkspaceTemplate) error {
artifactRepositoryType := "s3"
nsConfig, err := client.GetNamespaceConfig(namespace.Name)
if err != nil {
return err
}
if nsConfig.ArtifactRepository.GCS != nil {
artifactRepositoryType = "gcs"
}
if workflowTemplate != nil {
workflowTemplate.Manifest = strings.NewReplacer(
"{{.ArtifactRepositoryType}}", artifactRepositoryType).Replace(workflowTemplate.Manifest)
}
if workspaceTemplate != nil {
workspaceTemplate.Manifest = strings.NewReplacer(
"{{.ArtifactRepositoryType}}", artifactRepositoryType).Replace(workspaceTemplate.Manifest)
}
if workflowTemplate == nil && workspaceTemplate == nil {
return errors.New("workflow and workspace template cannot be nil")
}
return nil
}

View File

@@ -2,15 +2,15 @@
CREATE TABLE workflow_templates
(
id serial PRIMARY KEY,
uid varchar(36) UNIQUE NOT NULL CHECK(uid <> ''),
uid varchar(30) UNIQUE NOT NULL CHECK(uid <> ''),
name text NOT NULL CHECK(name <> ''),
namespace varchar(36) NOT NULL,
namespace varchar(30) NOT NULL,
-- auditing info
created_at timestamp NOT NULL DEFAULT (NOW() at time zone 'utc'),
modified_at timestamp,
UNIQUE (name, namespace)
UNIQUE (uid, namespace)
);
-- +goose Down

View File

@@ -3,9 +3,10 @@
CREATE TABLE workflow_executions
(
id serial PRIMARY KEY,
uid varchar(30) UNIQUE NOT NULL CHECK(uid <> ''),
workflow_template_id integer NOT NULL REFERENCES workflow_templates ON DELETE CASCADE,
name text NOT NULL CHECK (name <> ''),
namespace varchar(36) NOT NULL,
namespace varchar(30) NOT NULL,
-- auditing info
created_at timestamp NOT NULL DEFAULT (NOW() at time zone 'utc'),

View File

@@ -2,6 +2,7 @@
CREATE TABLE workflow_template_versions
(
id serial PRIMARY KEY,
uid varchar(30),
workflow_template_id integer NOT NULL REFERENCES workflow_templates ON DELETE CASCADE,
version integer NOT NULL,
is_latest boolean NOT NULL,

View File

@@ -2,8 +2,8 @@
CREATE TABLE cron_workflows
(
id serial PRIMARY KEY,
uid varchar(36) UNIQUE NOT NULL CHECK(uid <> ''),
name varchar(255),
uid varchar(30) UNIQUE NOT NULL CHECK(uid <> ''),
name varchar(30),
workflow_template_version_id INT REFERENCES workflow_template_versions,
schedule varchar(255),
timezone varchar(255),

View File

@@ -2,9 +2,9 @@
CREATE TABLE workspace_templates
(
id serial PRIMARY KEY,
uid varchar(36) UNIQUE NOT NULL CHECK(uid <> ''),
name text NOT NULL CHECK(name <> ''),
namespace varchar(36) NOT NULL,
uid varchar(30) NOT NULL CHECK(uid <> ''),
name varchar(30) NOT NULL CHECK(name <> ''),
namespace varchar(30) NOT NULL,
is_archived boolean DEFAULT false,
workflow_template_id integer NOT NULL REFERENCES workflow_templates ON DELETE CASCADE,
@@ -15,6 +15,7 @@ CREATE TABLE workspace_templates
);
CREATE UNIQUE INDEX workspace_templates_name_namespace_key ON workspace_templates (name, namespace) WHERE is_archived = false;
CREATE UNIQUE INDEX workspace_templates_uid_namespace_key ON workspace_templates (uid, namespace) WHERE is_archived = false;
-- +goose Down
DROP TABLE workspace_templates;
DROP TABLE workspace_templates;

View File

@@ -2,9 +2,9 @@
CREATE TABLE workspaces
(
id serial PRIMARY KEY,
uid varchar(36) UNIQUE NOT NULL CHECK(uid <> ''),
name text NOT NULL CHECK(name <> ''),
namespace varchar(36) NOT NULL,
uid varchar(30) NOT NULL CHECK(uid <> ''),
name varchar(30) NOT NULL CHECK(name <> ''),
namespace varchar(30) NOT NULL,
phase varchar(50) NOT NULL,
parameters jsonb NOT NULL,
@@ -20,5 +20,8 @@ CREATE TABLE workspaces
modified_at timestamp
);
CREATE UNIQUE INDEX workspaces_name_namespace_key ON workspaces (name, namespace) WHERE phase <> 'Terminated';
CREATE UNIQUE INDEX workspaces_uid_namespace_key ON workspaces (uid, namespace) WHERE phase <> 'Terminated';
-- +goose Down
DROP TABLE workspaces;
DROP TABLE workspaces;

View File

@@ -0,0 +1,7 @@
-- +goose Up
ALTER TABLE workflow_templates ADD COLUMN is_system BOOLEAN DEFAULT false;
UPDATE workflow_templates SET is_system = false;
ALTER TABLE workflow_templates ALTER COLUMN is_system SET NOT NULL;
-- +goose Down
ALTER TABLE workflow_templates DROP COLUMN is_system;

View File

@@ -0,0 +1,7 @@
-- +goose Up
ALTER TABLE workspaces ADD COLUMN url TEXT;
UPDATE workspaces set url = '';
ALTER TABLE workspaces ALTER COLUMN url SET NOT NULL;
-- +goose Down
ALTER TABLE workspaces DROP COLUMN url;

View File

@@ -0,0 +1,5 @@
-- +goose Up
ALTER TABLE workspaces ADD COLUMN updated_at timestamp;
-- +goose Down
ALTER TABLE workspaces DROP COLUMN updated_at;

View File

@@ -0,0 +1,13 @@
-- +goose Up
ALTER TABLE workflow_templates DROP CONSTRAINT IF EXISTS workflow_templates_uid_key;
ALTER TABLE workflow_templates DROP CONSTRAINT IF EXISTS workflow_templates_uid_namespace_key;
DROP INDEX IF EXISTS workflow_templates_name_namespace_key;
CREATE UNIQUE INDEX workflow_templates_name_namespace_key ON workflow_templates (name, namespace) WHERE is_archived = false;
CREATE UNIQUE INDEX workflow_templates_uid_namespace_key ON workflow_templates (uid, namespace) WHERE is_archived = false;
-- +goose Down
-- SQL in this section is executed when the migration is rolled back.
DROP INDEX workflow_templates_name_namespace_key;
DROP INDEX workflow_templates_uid_namespace_key;
ALTER TABLE workflow_templates ADD CONSTRAINT workflow_templates_uid_key UNIQUE (uid);
ALTER TABLE workflow_templates ADD CONSTRAINT workflow_templates_uid_namespace_key UNIQUE (uid, namespace);

View File

@@ -0,0 +1,15 @@
-- +goose Up
-- SQL in this section is executed when the migration is applied.
ALTER TABLE cron_workflows ADD COLUMN namespace varchar(30);
UPDATE cron_workflows cwfs
SET namespace = q.namespace
FROM (
SELECT wft.id, wft.namespace, wtv.id as wtv_id, wtv.workflow_template_id, cw.id
FROM workflow_templates wft
INNER JOIN workflow_template_versions wtv on wft.id = wtv.workflow_template_id
INNER JOIN cron_workflows cw on wtv.id = cw.workflow_template_version_id) q
WHERE cwfs.workflow_template_version_id = q.wtv_id;
ALTER TABLE cron_workflows ALTER COLUMN namespace SET NOT NULL;
-- +goose Down
-- SQL in this section is executed when the migration is rolled back.
ALTER TABLE cron_workflows DROP COLUMN namespace;

View File

@@ -0,0 +1,6 @@
-- +goose Up
-- SQL in this section is executed when the migration is applied.
CREATE UNIQUE INDEX cron_workflow_namespace_uid ON cron_workflows (uid, namespace);
-- +goose Down
-- SQL in this section is executed when the migration is rolled back.
DROP INDEX cron_workflow_namespace_uid;

View File

@@ -0,0 +1,8 @@
-- +goose Up
-- SQL in this section is executed when the migration is applied.
ALTER TABLE cron_workflows ADD COLUMN is_archived BOOL DEFAULT false NOT NULL;
ALTER TABLE workflow_executions ADD COLUMN is_archived BOOL DEFAULT false NOT NULL;
-- +goose Down
-- SQL in this section is executed when the migration is rolled back.
ALTER TABLE cron_workflows DROP COLUMN is_archived;
ALTER TABLE workflow_executions DROP COLUMN is_archived;

View File

@@ -0,0 +1,7 @@
-- +goose Up
ALTER TABLE workflow_executions ALTER COLUMN uid TYPE varchar(63);
ALTER TABLE workflow_executions ALTER COLUMN name TYPE varchar(63);
-- +goose Down
ALTER TABLE workflow_executions ALTER COLUMN uid TYPE varchar(30);
ALTER TABLE workflow_executions ALTER COLUMN name TYPE text;

View File

@@ -0,0 +1,7 @@
-- +goose Up
ALTER TABLE cron_workflows ALTER COLUMN uid TYPE varchar(63);
ALTER TABLE cron_workflows ALTER COLUMN name TYPE varchar(63);
-- +goose Down
ALTER TABLE cron_workflows ALTER COLUMN uid TYPE varchar(30);
ALTER TABLE cron_workflows ALTER COLUMN name TYPE varchar(30);

View File

@@ -0,0 +1,13 @@
-- +goose Up
ALTER TABLE workflow_templates ALTER COLUMN is_archived SET DEFAULT false;
ALTER TABLE workflow_templates ALTER COLUMN is_archived SET NOT NULL;
ALTER TABLE workspace_templates ALTER COLUMN is_archived SET DEFAULT false;
ALTER TABLE workspace_templates ALTER COLUMN is_archived SET NOT NULL;
-- +goose Down
ALTER TABLE workspace_templates ALTER COLUMN is_archived DROP NOT NULL;
ALTER TABLE workspace_templates ALTER COLUMN is_archived DROP DEFAULT;
ALTER TABLE workflow_templates ALTER COLUMN is_archived DROP NOT NULL;
ALTER TABLE workflow_templates ALTER COLUMN is_archived DROP DEFAULT;

View File

@@ -0,0 +1,5 @@
-- +goose Up
ALTER TABLE workflow_template_versions DROP COLUMN uid;
-- +goose Down
UPDATE workflow_template_versions SET uid = version::text;

View File

@@ -0,0 +1,7 @@
-- +goose Up
ALTER TABLE workspaces DROP COLUMN url;
-- +goose Down
ALTER TABLE workspaces ADD COLUMN url TEXT;
UPDATE workspaces set url = '';
ALTER TABLE workspaces ALTER COLUMN url SET NOT NULL;

View File

@@ -0,0 +1,11 @@
-- +goose Up
-- SQL in this section is executed when the migration is applied.
ALTER TABLE workflow_template_versions ALTER COLUMN version TYPE BIGINT;
ALTER TABLE workspace_template_versions ALTER COLUMN version TYPE BIGINT;
ALTER TABLE workspaces ALTER COLUMN workspace_template_version TYPE BIGINT;
-- +goose Down
-- SQL in this section is executed when the migration is rolled back.
ALTER TABLE workflow_template_versions ALTER COLUMN version TYPE INT;
ALTER TABLE workspace_template_versions ALTER COLUMN version TYPE INT;
ALTER TABLE workspaces ALTER COLUMN workspace_template_version TYPE INT;

View File

@@ -0,0 +1,7 @@
-- +goose Up
ALTER TABLE workflow_template_versions ADD COLUMN parameters JSONB;
UPDATE workflow_template_versions SET parameters = '[]'::JSONB;
ALTER TABLE workflow_template_versions ALTER COLUMN parameters SET NOT NULL;
-- +goose Down
ALTER TABLE workflow_template_versions DROP COLUMN parameters;

Some files were not shown because too many files have changed in this diff Show More