Compare commits

..

1328 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
Andrey Melnikov
243a147482 Merge pull request #181 from onepanelio/feat/integrate.workflow.changes
Feat/integrate.workflow.changes
2020-05-07 10:08:47 -07:00
Andrey Melnikov
4f549d0103 Merge remote-tracking branch 'origin/feat/workspaces' into feat/integrate.workflow.changes 2020-05-07 09:59:12 -07:00
rushtehrani
7d720a43fb delete/pause workspace 2020-05-06 22:23:35 -07:00
Andrey Melnikov
9d1e8ecf68 update: added labels to create workspace request. 2020-05-06 16:59:36 -07:00
Andrey Melnikov
872ed2d9af update/fix: fixed issue where parameters were not being sent with API response.
Fixed issue where cron workflows did not apply their labels to the newly created workflow executions.
2020-05-06 15:39:55 -07:00
Andrey Melnikov
c64954562b Merge remote-tracking branch 'origin/feat/workspaces' into feat/integrate.workflow.changes 2020-05-06 14:29:27 -07:00
Andrey Melnikov
6f60592669 fix: issue where cron workflows did not pass on parameters to workflow executions in db 2020-05-06 14:22:39 -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
Andrey Melnikov
7f6445f356 uncommented output artifacts code as it was commented out during testing. 2020-05-06 13:13:27 -07:00
rushtehrani
ca5d69e3f8 additional status curl calls 2020-05-06 12:44:01 -07:00
Andrey Melnikov
396d95d9d9 update: Added List Workspaces method. 2020-05-06 12:30:12 -07:00
Andrey Melnikov
485c75695d fix: changed default workflow execution parameters to be an array. 2020-05-06 11:36:10 -07:00
rushtehrani
7ca68b6dfa allow inputs for curlNodeTemplate 2020-05-06 10:44:40 -07:00
rushtehrani
1f98997bb3 fix token 2020-05-05 22:57:45 -07:00
rushtehrani
ff51502a0a fix IsAuthorized and statefulsets group 2020-05-05 22:48:31 -07:00
rushtehrani
7d19a8543b add sys-uid as a param to all workflows 2020-05-05 22:16:00 -07:00
rushtehrani
5ebb1db051 make code more modular 2020-05-05 20:52:36 -07:00
rushtehrani
80476af59c update curl template to take http method 2020-05-05 20:40:18 -07:00
Andrey Melnikov
927e49fe63 Merge pull request #173 from onepanelio/feat/workspaces
update protobuf generators
2020-05-05 15:51:25 -07:00
rushtehrani
7082e53328 update protobuf generators 2020-05-05 15:50:09 -07:00
Andrey Melnikov
7b6c46bbda Merge pull request #172 from onepanelio/feat/workspaces
feat: workspaces
2020-05-05 13:57:56 -07:00
rushtehrani
12f2a9bd05 make api 2020-05-05 13:10:07 -07:00
rushtehrani
ff7c79a5ff update and add curl template to workspace template 2020-05-05 12:58:07 -07:00
rushtehrani
58d6029d45 refactor to make curl node reusable 2020-05-05 12:58:07 -07:00
rushtehrani
c5b34248b3 code cleanup 2020-05-05 12:58:07 -07:00
rushtehrani
ab75bb1254 workspace status update api 2020-05-05 12:58:07 -07:00
rushtehrani
51699159c5 update workspace status 2020-05-05 12:58:07 -07:00
rushtehrani
99c17689a2 workspace phases and times 2020-05-05 12:57:45 -07:00
Andrey Melnikov
d6c9ffb1c1 fix: Added a clone workflow execution endpoint and cleaned up code a bit. 2020-05-05 12:19:06 -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
Andrey Melnikov
b90b702709 update: initial working version of updating workspace templates. 2020-05-04 14:54:57 -07:00
Andrey Melnikov
cfd000d38b Merge remote-tracking branch 'origin/feat/core.124-add.envoy.filter' into feat/integrate.workflow.changes 2020-05-04 11:55:57 -07:00
Aleksandr Melnikov
5a329c242e Updating code to return the domain field in IsValidToken code. 2020-05-04 11:49:03 -07:00
Aleksandr Melnikov
6591977470 Adding a domain field as a response to IsValidToken request. 2020-05-04 11:48:29 -07:00
Andrey Melnikov
11c18f23a9 auto-generated: ran make api 2020-05-04 10:42:20 -07:00
rushtehrani
6761633ce5 make name special field and snapshot parameters 2020-05-03 19:41:26 -07:00
rushtehrani
16df1e44f0 fix query for workspace creation 2020-05-03 16:48:16 -07:00
rushtehrani
e96413d05a update LisWorkspaceTemplateVersions api 2020-05-03 16:38:27 -07:00
rushtehrani
19e62e00a4 make code more DRY 2020-05-03 16:18:41 -07:00
rushtehrani
a68e27af42 consistent version logic 2020-05-03 15:42:46 -07:00
rushtehrani
85f335c212 refactor workspace template version selection 2020-05-03 15:27:21 -07:00
rushtehrani
e1756d3ee1 use uid instead of name 2020-05-03 15:10:18 -07:00
rushtehrani
8631c5cc85 fix select by version 2020-05-03 14:46:54 -07:00
rushtehrani
38368e4881 add GetWorkspaceTemplate api 2020-05-03 14:10:00 -07:00
rushtehrani
67553adad1 refactor GetWorkspaceTemplate so it can be exposed via api 2020-05-03 13:51:12 -07:00
rushtehrani
4a3f990a3d move host creation to workspace execution time 2020-05-03 12:49:53 -07:00
rushtehrani
1dadebec0d workspace database methods 2020-05-02 20:23:34 -07:00
rushtehrani
67e13bf423 make method private 2020-05-02 19:42:23 -07:00
rushtehrani
a08f36b02e add validation to workspace template creation 2020-05-02 18:02:53 -07:00
Andrey Melnikov
d1235ee2cb fix: Cron update params and field types 2020-05-02 17:57:13 -07:00
Andrey Melnikov
5dfbf98ec4 fix: cron manifest parsing issue 2020-05-02 17:39:36 -07:00
Andrey Melnikov
912c492272 fix: issue where not all parameter configuration was allowed through 2020-05-02 17:10:51 -07:00
Andrey Melnikov
19a622e37a fix: cron workflow parameters did not update 2020-05-02 16:38:24 -07:00
Andrey Melnikov
5c1c64cac9 fix: uncommented artifacts code from testing 2020-05-02 16:32:45 -07:00
Andrey Melnikov
024992469f update: WIP workspace template versions 2020-05-02 16:28:23 -07:00
Andrey Melnikov
adb59a36a3 Merge remote-tracking branch 'origin/feat/workspaces' into feat/integrate.workflow.changes 2020-05-01 23:36:59 -07:00
rushtehrani
5eb3a1c0ef add comment 2020-05-01 18:07:38 -07:00
rushtehrani
6adccf5174 refactor function 2020-05-01 18:06:03 -07:00
rushtehrani
1116e862ac workspace creation changes 2020-05-01 17:42:40 -07:00
Aleksandr Melnikov
6d4f8fff3e Added Authentication for statefulsets. 2020-05-01 17:24:33 -07:00
Aleksandr Melnikov
f7933fd549 Fixing the source of URL. 2020-05-01 17:24:16 -07:00
Andrey Melnikov
031122ed79 fix: issue where a badly formatted workflow template manifest would delete the latest label and not revert the changes. 2020-04-30 21:23:09 -07:00
rushtehrani
4f2f7df8f0 update api for workspace creation 2020-04-30 20:29:53 -07:00
rushtehrani
f1cfdbb9a0 workspace actions wrappers 2020-04-30 19:36:59 -07:00
rushtehrani
dfe606447c create workspace logic 2020-04-30 16:47:25 -07:00
Andrey Melnikov
67a3b0851e fix: Updated workspace template manifest to be an object when passed in. This makes it easier for HTTP to pass it in. 2020-04-30 16:33:35 -07:00
Andrey Melnikov
1fe4201704 feat: updated crons to have a manifest in db 2020-04-30 14:52:26 -07:00
Aleksandr Melnikov
fb73c672fd Updated IsWorkspaceAuthenticated
- Moved it below the struct
- Added debugging print statement for headers.
2020-04-30 14:43:14 -07:00
Aleksandr Melnikov
c7329a6d7a Updated code that checks the auth.
- Code grabs the headers and checks to see if the "x-original-uri"
matches "fqdn".
If there is no match, then the code continues to the regular auth.
2020-04-30 14:42:46 -07:00
Aleksandr Melnikov
13e1bca6b2 Removing non X parameters from IsWorkspaceAuthenticatedRequest.
- Adding FQDN.
2020-04-30 14:36:48 -07:00
rushtehrani
dda2a8325b use -- to separate name and namespace in workspace url 2020-04-30 11:57:57 -07:00
rushtehrani
a002f32a5a instead of skipping missing values, set them 2020-04-30 11:55:13 -07:00
rushtehrani
14b8e4c1c6 minor refactor 2020-04-30 10:49:33 -07:00
rushtehrani
af82c312a7 move workspace_types and common_types and refactor Parameter alias 2020-04-29 17:31:44 -07:00
Aleksandr Melnikov
b4962f16a4 Adding code to check IsWorkspaceAuthenticated method call. 2020-04-29 16:46:46 -07:00
Aleksandr Melnikov
cc3ffd68ba Adding a return piece. 2020-04-29 16:40:41 -07:00
Aleksandr Melnikov
5c1b48dcab Fixing the proto HEAD request.
- Otherwise, you get a 405 method not found.
2020-04-29 16:40:32 -07:00
Andrey Melnikov
b0571f69c9 fix: issues with cron workflow labels not being set/saved. 2020-04-29 14:01:37 -07:00
Andrey Melnikov
92bde140b9 fix: issue where removing the last label crashed. 2020-04-29 11:41:54 -07:00
Andrey Melnikov
88dd5dd788 fix: issue where newly created workflow execution did not add new labels. 2020-04-29 11:39:12 -07:00
Andrey Melnikov
a516ab4d38 fix: missing db cron workflow update. 2020-04-29 11:11:33 -07:00
Andrey Melnikov
d493bfb19a Merge remote-tracking branch 'origin/feat/workspaces' into feat/integrate.workflow.changes 2020-04-29 09:53:22 -07:00
rushtehrani
772f6ce880 move injectAutomatedFields after exit and init handlers 2020-04-29 09:37:04 -07:00
rushtehrani
41e4ff6b2c remove all target from Makefile 2020-04-28 21:29:50 -07:00
rushtehrani
ecf8b744b4 update docker commands to use commit hash 2020-04-28 21:10:18 -07:00
rushtehrani
2bca0d7d8a add API call to get generated workflow_template from a workspace_template manifest 2020-04-28 21:09:16 -07:00
rushtehrani
4b2e0173c1 fix stats request 2020-04-28 17:47:01 -07:00
rushtehrani
beea0ce69e refactor workflow stats 2020-04-28 16:59:24 -07:00
Andrey Melnikov
1807234621 feat: Added ListWorkspaceTemplates 2020-04-28 16:58:39 -07:00
Aleksandr Melnikov
0d9665e11e Adding head request to auth/token.
- Adding stub method to handle request.
2020-04-28 16:20:55 -07:00
rushtehrani
015d78f1a3 support hint and displayName 2020-04-28 13:59:30 -07:00
Aleksandr Melnikov
d8bf13871a Adding extension enabling to handle this error:
```
FATA[0000] Failed to run database migrations: failed to run SQL migration "20200427114910_add_uid_to_workflow_template_versions_and_labels.sql": failed to execute SQL query "UPDATE workflow_template_versions SET uid = uuid_generate_v4();\n": pq: function uuid_generate_v4() does not exist
```
2020-04-28 12:05:31 -07:00
rushtehrani
816e7fdf1a update curl templates 2020-04-28 11:57:20 -07:00
Andrey Melnikov
1ec494d34c fix: migration to add uid to workflow executions 2020-04-28 10:47:11 -07:00
Andrey Melnikov
7528348aaf Merge remote-tracking branch 'origin/feat/workspaces' into feat/integrate.workflow.changes 2020-04-28 10:21:23 -07:00
rushtehrani
07fe5325af check auth and use env var for token 2020-04-27 21:19:51 -07:00
Andrey Melnikov
724a640127 fix: case where there are no labels input. 2020-04-27 20:29:02 -07:00
Andrey Melnikov
3db1a4557b clean-up: updated code to make use of squirrel's built in "where in" logic. 2020-04-27 20:28:45 -07:00
Andrey Melnikov
3ce771967b update: Get Workflow Template Versions to use db records and order by created at desc by default. 2020-04-27 20:17:00 -07:00
Andrey Melnikov
9c193b3616 feature: centralize labels to one location. 2020-04-27 19:55:44 -07:00
rushtehrani
d80e53a12b inject stats container before automated fields 2020-04-27 19:21:59 -07:00
rushtehrani
2618da8d0c move postExecutionWorkflow out of onExit 2020-04-27 19:20:36 -07:00
Andrey Melnikov
f59e7d5b1a fix: Added workflow template version uid label 2020-04-27 16:43:07 -07:00
Andrey Melnikov
c2cf26b313 fix: issue where workflow template version uid was not being set on creation. 2020-04-27 16:40:59 -07:00
rushtehrani
6167ea6d41 use ONEPANEL_DOMAIN 2020-04-27 15:59:46 -07:00
Andrey Melnikov
872f6c97dc fix: migration for uids 2020-04-27 15:49:15 -07:00
rushtehrani
16fe0ac2bd update go.sum 2020-04-27 14:53:54 -07:00
rushtehrani
6b4ff97c01 prefix system parameters with 'sys' 2020-04-27 14:51:15 -07:00
rushtehrani
eb9ae0cf70 change order of method calls to ensure istio removal 2020-04-27 14:51:15 -07:00
rushtehrani
e7bac1229b minor refactors 2020-04-27 14:51:15 -07:00
rushtehrani
4e32b4b54d append statistics template if there is an existing handler 2020-04-27 14:51:15 -07:00
rushtehrani
3546dacb9e rename auth package functions to not start with package name 2020-04-27 14:51:15 -07:00
rushtehrani
be226b18a7 require onExit and enterypoint templates to be DAGs 2020-04-27 14:51:15 -07:00
rushtehrani
297def6143 add postExecutionWorkflow 2020-04-27 14:51:15 -07:00
rushtehrani
f40e83f437 alias workflowExecutionParameter to Parameter for future refactor 2020-04-27 14:51:15 -07:00
rushtehrani
5d1ac885a0 decouple workflowTemplate generation 2020-04-27 14:51:15 -07:00
rushtehrani
356f695d6f add is_archived 2020-04-27 14:51:15 -07:00
rushtehrani
dd49f038bb better duplicate checking + additional field 2020-04-27 14:51:15 -07:00
rushtehrani
e2e3313e97 workspace database table updates 2020-04-27 14:51:15 -07:00
rushtehrani
2a5905d13b store workspace information in database 2020-04-27 14:51:15 -07:00
rushtehrani
c105fb3c39 return workspaceTemplate.workflowTemplate in api response 2020-04-27 14:50:21 -07:00
rushtehrani
2e71663e42 support all workspace actions 2020-04-27 14:50:21 -07:00
rushtehrani
bb2b3e84a1 handle update/create vs pause/delete 2020-04-27 14:50:21 -07:00
rushtehrani
9158ddc68d generate api for workspace_template 2020-04-27 14:50:21 -07:00
rushtehrani
63230736d9 update go.mod 2020-04-27 14:50:21 -07:00
rushtehrani
8beb2312c1 additional generated parameters 2020-04-27 14:49:16 -07:00
rushtehrani
36d7c91942 generate parameters 2020-04-27 14:49:16 -07:00
rushtehrani
3b76b6acee uncomment create method 2020-04-27 14:49:16 -07:00
rushtehrani
2fc04179dd fix func name and update tests 2020-04-27 14:49:16 -07:00
rushtehrani
e4685aef76 minor cleanup 2020-04-27 14:49:16 -07:00
rushtehrani
3daa67fa3a use maps for some fields. 2020-04-27 14:49:16 -07:00
rushtehrani
25a9042852 use workspace struct 2020-04-27 14:49:15 -07:00
rushtehrani
d148853881 only pass workflowTemplateSpec 2020-04-27 14:49:15 -07:00
rushtehrani
5cee7573d5 var name change 2020-04-27 14:49:15 -07:00
rushtehrani
88301d5575 fake => mock 2020-04-27 14:49:15 -07:00
rushtehrani
32877ead31 update tests 2020-04-27 14:49:15 -07:00
rushtehrani
579de1dd00 get data from configmap and update tests. 2020-04-27 14:49:15 -07:00
rushtehrani
e7820ff310 don't duplicate volumeClaimTemplates 2020-04-27 14:49:15 -07:00
rushtehrani
8494d0256c add additional manifests to workflow 2020-04-27 14:49:15 -07:00
rushtehrani
6615fde6eb workspace_template logic 2020-04-27 14:49:15 -07:00
rushtehrani
bf02e031a2 add core types 2020-04-27 14:46:37 -07:00
rushtehrani
3bcdb7681a use []byte and additional invalid tests 2020-04-27 14:46:37 -07:00
rushtehrani
4d4535ec8d use a diff yaml lib 2020-04-27 14:46:37 -07:00
rushtehrani
025b06796b template parse and tests 2020-04-27 14:46:37 -07:00
Rush Tehrani
dab1664bee Merge pull request #164 from onepanelio/feat/core.160-add.url.update.host
Feat/core.160 add.url.update.host
2020-04-27 14:34:29 -07:00
Rush Tehrani
9a01fdf98f Merge pull request #159 from onepanelio/feat/core.158-move.s3.config
Feat/core.158 move.s3.config
2020-04-27 14:34:09 -07:00
Andrey Melnikov
9533251227 feat: Added cron workflow statistics to workflow templates 2020-04-27 11:34:44 -07:00
Andrey Melnikov
5691d93a5a fix: terminating workflow execution did not delete DB record. 2020-04-27 11:13:30 -07:00
Andrey Melnikov
6cacf140c3 Merge remote-tracking branch 'origin/feat/workspaces' into feat/integrate.workflow.changes 2020-04-27 09:54:06 -07:00
Andrey Melnikov
1920eb5ed0 update: database records for all resources. 2020-04-27 09:32:45 -07:00
rushtehrani
f69fc07e22 minor refactors 2020-04-26 21:58:38 -07:00
rushtehrani
718bc349cd append statistics template if there is an existing handler 2020-04-26 21:30:20 -07:00
rushtehrani
34556d243b rename auth package functions to not start with package name 2020-04-26 20:23:17 -07:00
rushtehrani
2d248c05f5 require onExit and enterypoint templates to be DAGs 2020-04-26 19:26:33 -07:00
rushtehrani
697bf02ded add postExecutionWorkflow 2020-04-26 18:43:17 -07:00
rushtehrani
1809215615 alias workflowExecutionParameter to Parameter for future refactor 2020-04-26 15:15:44 -07:00
rushtehrani
6d51342cf8 decouple workflowTemplate generation 2020-04-26 14:51:06 -07:00
rushtehrani
72c2b8da81 add is_archived 2020-04-26 13:00:48 -07:00
rushtehrani
18ee46462e better duplicate checking + additional field 2020-04-26 12:37:15 -07:00
rushtehrani
151bf47dba workspace database table updates 2020-04-26 11:27:18 -07:00
rushtehrani
27c586560b store workspace information in database 2020-04-25 18:53:28 -07:00
rushtehrani
da6934face return workspaceTemplate.workflowTemplate in api response 2020-04-25 16:03:07 -07:00
rushtehrani
bff87cecf0 support all workspace actions 2020-04-25 11:37:50 -07:00
rushtehrani
fef9672e71 handle update/create vs pause/delete 2020-04-25 01:14:14 -07:00
rushtehrani
f74ec05f97 generate api for workspace_template 2020-04-25 00:19:25 -07:00
Aleksandr Melnikov
2f5303bd78 Updating ENV Vars injected into workflow_execution.
- Using FQDN and DOMAIN
2020-04-24 15:57:01 -07:00
rushtehrani
4d427dac76 update go.mod 2020-04-24 13:12:36 -07:00
rushtehrani
2913362ba9 additional generated parameters 2020-04-24 12:39:53 -07:00
rushtehrani
4b06855e00 generate parameters 2020-04-24 12:39:53 -07:00
rushtehrani
b185dcd85e uncomment create method 2020-04-24 12:39:53 -07:00
rushtehrani
f18b0aeb14 fix func name and update tests 2020-04-24 12:39:53 -07:00
rushtehrani
5242e10b86 minor cleanup 2020-04-24 12:39:52 -07:00
rushtehrani
4c2a2d527a use maps for some fields. 2020-04-24 12:39:52 -07:00
rushtehrani
9b34aff8fa use workspace struct 2020-04-24 12:39:52 -07:00
rushtehrani
6950633439 only pass workflowTemplateSpec 2020-04-24 12:39:52 -07:00
rushtehrani
6c8d7766ea var name change 2020-04-24 12:39:52 -07:00
rushtehrani
3b1eb96cf3 fake => mock 2020-04-24 12:39:52 -07:00
rushtehrani
2e18d7005a update tests 2020-04-24 12:39:52 -07:00
rushtehrani
f07df94121 get data from configmap and update tests. 2020-04-24 12:39:52 -07:00
rushtehrani
00d6521646 don't duplicate volumeClaimTemplates 2020-04-24 12:39:52 -07:00
rushtehrani
a7b8fdc75d add additional manifests to workflow 2020-04-24 12:39:52 -07:00
rushtehrani
13ab6c0d90 workspace_template logic 2020-04-24 12:39:52 -07:00
rushtehrani
2c967d656a add core types 2020-04-24 12:39:22 -07:00
rushtehrani
7ba41f2df9 use []byte and additional invalid tests 2020-04-24 12:39:22 -07:00
rushtehrani
2fb7d67378 use a diff yaml lib 2020-04-24 12:39:22 -07:00
rushtehrani
c5b822a8d1 template parse and tests 2020-04-24 12:38:41 -07:00
Aleksandr Melnikov
8b459f882c Fixing formatting. 2020-04-23 16:59:39 -07:00
Aleksandr Melnikov
be99db4ffc Due to adjustments in manifests, and how S3 is stored,
we need to parse the new configuration and set it up to be available
as the code expects.
2020-04-23 16:59:26 -07:00
Aleksandr Melnikov
946849c6b6 Updating constants to look in new places for S3 2020-04-23 16:58:11 -07:00
Andrey Melnikov
d42bffa0e2 revert: accidental local config changes. 2020-04-22 14:52:44 -07:00
Andrey Melnikov
965341cb5c Merge pull request #157 from onepanelio/feat/dev-core-144-workflow.stats
Feat/dev core 144 workflow.stats
2020-04-22 13:46:27 -07:00
Andrey Melnikov
fd686a0672 update: workflow versions are db records again to more easily store custom user manifest and parameters 2020-04-22 12:18:39 -07:00
Aleksandr Melnikov
b380fa68e9 Removing uuid migration since we are no longer relying on uuid. 2020-04-22 12:00:27 -07:00
Aleksandr Melnikov
8130d44ced Refactoring functions to no longer use uuid. 2020-04-22 11:59:43 -07:00
Aleksandr Melnikov
74b3043db1 Using workflow name instead of uuid. 2020-04-22 11:58:52 -07:00
Aleksandr Melnikov
238353ffb9 Refactoring workflow execution statistics.
- The workflow name is available even at start of the workflow, so
we do not need the uid to act as a placeholder.
- Changing workflow.proto to use name and remove uid uses
2020-04-22 11:54:36 -07:00
Aleksandr Melnikov
5128135be7 Added endpoint for workflows created by Crons to ping, when they start. 2020-04-21 16:58:13 -07:00
Aleksandr Melnikov
4e524318bc Adding initContainer to the entry point for a given Cron Workflow. 2020-04-21 16:55:22 -07:00
Aleksandr Melnikov
33cc90ea4f Using helper function in cron workflows for adding an exitHandler. 2020-04-20 15:31:27 -07:00
Aleksandr Melnikov
08a432cf23 Updated endpoint called by CURL.
- CreatedAt is no longer parsed
- Passing in uid from request
2020-04-20 15:22:36 -07:00
Aleksandr Melnikov
77c1d9a83a Added a name to the workflow execution statistic, after creation.
- Pre-creation, uid is used as a placeholder
- After creation, the real name can be added.
2020-04-20 15:22:36 -07:00
Aleksandr Melnikov
57336ed666 Added function to adding an exitHandler to wf Workflow.
- Passes in the necessary parameters to the CURL request as well.
2020-04-20 15:22:36 -07:00
Aleksandr Melnikov
ab76f71ed2 Passing in uid to CURL request that executes during exitHandler. 2020-04-20 15:22:36 -07:00
Aleksandr Melnikov
a05c3a39be Changed Statistic message.
- Instead of passing created_at, we pass uuid.
- Created at will be generated outside of the Workflow.
Ran `make api` to generate the other files.
2020-04-20 15:22:36 -07:00
Andrey Melnikov
d5c3a8bf95 fix: issue where a default versions counter was not created when a workflow template was. 2020-04-20 14:08:14 -07:00
Aleksandr Melnikov
8ed539f680 Added code to clean up the Pre Workflow Execution Statistic.
- If an error happens, code will try to remove the database entry.
2020-04-20 13:52:39 -07:00
Andrey Melnikov
ae524fbd2e feat: added versions to workflow tempaltes.
update: updated logic to get workflow template executions stats to be a single query.
2020-04-20 13:47:48 -07:00
Aleksandr Melnikov
43f71184a9 Adding function to insert Workflow Execution statistic before it's created.
- Need this for "Running" workflows, in case they take a long time.
Relying on CURL endpoint results in the "created_at" time and
"finished_at" being created at the end.
- We need a starting time to show the user.
2020-04-20 13:37:11 -07:00
Aleksandr Melnikov
41c802805c Adding uid column to workflow_executions. 2020-04-20 12:18:17 -07:00
Andrey Melnikov
ed7dd7a367 fix: issue where failed was not being selected for stats. Also fixed overlapping of statistics - if one failed, it was also running. 2020-04-18 11:59:56 -07:00
Aleksandr Melnikov
27d5a480a8 Using curl docker image to remove curl install. 2020-04-16 16:07:20 -07:00
Aleksandr Melnikov
5520558ef0 Removed un-needed headers from CURL request. 2020-04-16 16:04:06 -07:00
Aleksandr Melnikov
bcfa8d986d DRY Principle - Simplified if-else for insert SQL. 2020-04-16 15:48:54 -07:00
Andrey Melnikov
ad36870b28 fix: wrong workflow status for success 2020-04-16 15:21:00 -07:00
Andrey Melnikov
74f1019e76 Merge branch 'feat/core.144-workflow.stats' into feat/dev-core-144-workflow.stats 2020-04-16 14:44:11 -07:00
Andrey Melnikov
d4687e1b78 Merge remote-tracking branch 'origin/feat/core.144-workflow.stats' into feat/core.144-workflow.stats 2020-04-16 13:46:26 -07:00
Andrey Melnikov
6d2d7a0f03 fix: occasional nil access for stats 2020-04-16 13:46:13 -07:00
Aleksandr Melnikov
ba9f2669db Added logging per feedback. 2020-04-16 13:14:06 -07:00
Aleksandr Melnikov
3410898188 Per feedback, using *time.Time to allow nil value. 2020-04-16 13:10:23 -07:00
Rush Tehrani
bdc817c14d Merge pull request #151 from onepanelio/feature/core.update.template
Feature/core.update.template
2020-04-16 11:14:40 -07:00
Andrey Melnikov
94de4aafe3 feat: Updated functions that worked with workflow templates to be methods and renamed them a bit for simplicity. 2020-04-16 11:02:58 -07:00
Andrey Melnikov
4f69a56996 fix: parameters wrong type in setting it from annotations. 2020-04-15 20:22:48 -07:00
Rush Tehrani
491267b255 Merge pull request #154 from onepanelio/feat/core.149-add.sys.env.var
Injecting ONEPANEL_HOST to workflows.
2020-04-15 17:20:43 -07:00
Aleksandr Melnikov
32ea715005 Injecting ONEPANEL_HOST to workflows. 2020-04-15 17:01:32 -07:00
Andrey Melnikov
259c9f8a57 clean: cleaned up code for getting/setting parameters. 2020-04-15 16:22:45 -07:00
Aleksandr Melnikov
01bbca6c73 Renamed WorkflowStatistics to just Stats.
Changed value types so they come back as integers in JSON.
2020-04-15 15:16:45 -07:00
Aleksandr Melnikov
72df98834c Adding code to return the WorkflowStatistics with the ListTemplates
response.
2020-04-15 15:03:07 -07:00
Aleksandr Melnikov
7574c1500f Added code to retrieve workflow execution statistics for a workflow template.
- Code will calculate expected values and attach them to the given
WorkflowTemplate.
2020-04-15 14:34:02 -07:00
Andrey Melnikov
527ea03b41 feat: updated annotations for parameters to keep track of their order and to sort by it in the response. Otherwise it defaults to alphabetical. 2020-04-15 11:29:17 -07:00
Andrey Melnikov
aac67a9c6d feat: reworked parameters to be annotations - first draft 2020-04-15 10:43:41 -07:00
Aleksandr Melnikov
059608018a Updated GetExitHandlerWorkflowStatistics to get the bearer token on the
fly, depending on the namespace.
- Updated the places this function is called to pass in the client.
2020-04-15 10:11:24 -07:00
Aleksandr Melnikov
c5c1179d64 Added function to GetBearerToken. 2020-04-15 10:10:45 -07:00
Aleksandr Melnikov
8cdafc77cb Adjusting the JSON Body
- Since we are posting to HTTP, we do not need the surrounding pieces.
Just the "Body".
- Removing debugging statements.
2020-04-14 18:39:11 -07:00
Aleksandr Melnikov
ecb864df9a Removing todo, the new ENV VARS are present on new onepanel-core pod. 2020-04-14 18:38:35 -07:00
Aleksandr Melnikov
46c538ef28 Adding go.mod updates. 2020-04-14 17:58:13 -07:00
Aleksandr Melnikov
332e7176d8 Adding new layout for parsing createdAt
- Debugging code kept in
2020-04-14 17:57:56 -07:00
Aleksandr Melnikov
76ce475ae1 Passing in the workflowTemplateID, so the exitHandler can use that
information.
2020-04-14 17:56:42 -07:00
rushtehrani
07ae9b9777 use system name in labels 2020-04-14 15:26:47 -07:00
Aleksandr Melnikov
1e594eb63f Parsing the created_at timestamp from Argo workflow. 2020-04-14 14:03:24 -07:00
Aleksandr Melnikov
ac8c3e39b1 Updated code to execute a SQL request to insert into workflow_executions. 2020-04-14 12:25:22 -07:00
Aleksandr Melnikov
9fb1da353b Added in progress CURL JSON Post.
- Basic POST request is made
2020-04-14 12:24:59 -07:00
Aleksandr Melnikov
930cdd5d08 Added insert statements for workflow_executions table. 2020-04-14 12:24:28 -07:00
Aleksandr Melnikov
057dde1a86 Passing in CreatedAt timestamp and workflowTemplateId as part of the
statistics information.
- The CURL request will send this information along
2020-04-14 12:24:04 -07:00
Andrey Melnikov
fd9a9cc871 feat: updated workflow template name (k8) to be {name}-v{version} 2020-04-14 11:57:40 -07:00
Andrey Melnikov
c0a4549d41 fix consistency: updated workflow template labels to use dashes instead of underscores. 2020-04-14 11:38:16 -07:00
Andrey Melnikov
07a473c0ab fix: workflow template resource checks are now on "workflowtemplates" and not "workflows" 2020-04-14 11:26:45 -07:00
Andrey Melnikov
a5060a71ae fix: Get label requests now use "get" permission instead of "create" 2020-04-14 11:22:54 -07:00
Andrey Melnikov
fa7dd28a9a fix: permission verbs for adding/replacing labels are now "update" instead of "create" 2020-04-14 11:20:20 -07:00
Andrey Melnikov
77d0b1e0fa fix: don't show empty values in manifest 2020-04-14 11:20:20 -07:00
Andrey Melnikov
86b307cd42 fix: rename LatestArgo to ArgoWorkflowTemplate to be more descriptive. 2020-04-14 11:20:20 -07:00
Aleksandr Melnikov
ed546be1d3 Updated exitHandler function to accept a namespace, since that
information is needed to be passed in to the statistics endpoint.
2020-04-14 10:28:30 -07:00
Aleksandr Melnikov
e2152058c6 Adding function to accept workflow statistics.
- Currently, code outputs the request for debugging purposes.
2020-04-14 10:27:49 -07:00
Aleksandr Melnikov
b02313c212 Adding endpoint for adding Workflow Execution Statistics 2020-04-14 10:27:12 -07:00
Aleksandr Melnikov
e09c3ea87e Updating dockerfile golang version, minor increase. 2020-04-14 10:21:23 -07:00
rushtehrani
e3fc34840b fix workflowtemplate name in label 2020-04-13 18:18:11 -07:00
Andrey Melnikov
78491c9436 fix consistency: snake_case migrations 2020-04-13 15:20:15 -07:00
Aleksandr Melnikov
6fc161b128 Adding table to track workflow executions.
- Data from this table will be used to generate workflow statistics.
2020-04-13 14:30:26 -07:00
Andrey Melnikov
318869bba4 fix: Updated workflow template labels request so a version can be specified. 2020-04-13 13:01:40 -07:00
Andrey Melnikov
628c68c24f clean/fix: fixed issues with creating workflow template versions and labels.
Removed most of the logic from updating a workflow template version as it is currently not used.
2020-04-13 12:45:36 -07:00
Aleksandr Melnikov
e0f9b77846 Adding ENV vars for passing the host and port to the exit handler.
- Curl needs this information to properly send a POST request to the
onepanel-core endpoint.
2020-04-13 12:20:22 -07:00
Aleksandr Melnikov
89d6d626e9 Added code to add an exit handler to Cron and Workflow Execution. 2020-04-13 12:10:56 -07:00
Aleksandr Melnikov
efb28419b9 Added function to generate an exit handler template.
- In this case, it's to ping an endpoint with workflow statistics.
- The posted data is a WIP
2020-04-13 11:45:08 -07:00
Andrey Melnikov
57dcd1d399 fix: updated resources so they can be provided labels on creation. 2020-04-12 13:28:45 -07:00
Andrey Melnikov
39c675b3d3 fix: Issue where getting workflow manifest was showing all of the fields. 2020-04-10 15:39:12 -07:00
Andrey Melnikov
19195fa23b Revert "removed template manifest formatting based on potential need for metadata provided by user."
This reverts commit d4c919c9be.
2020-04-10 13:34:26 -07:00
Andrey Melnikov
bfb65dd1ad fix: issue with cron workflows not working and updated workflow executions to include the version of the workflow template they ran. 2020-04-10 12:04:12 -07:00
Andrey Melnikov
2a77d8fdd8 Merge branch 'feature/core.update.template' of github.com:onepanelio/core into feature/core.update.template 2020-04-09 15:49:16 -07:00
Andrey Melnikov
b88c2ef937 fix: Updated cron worklfow to use new workflow manifest method 2020-04-09 15:49:03 -07:00
Andrey Melnikov
02815b9cf0 progress: basic workflow execution from template. 2020-04-09 15:49:03 -07:00
Andrey Melnikov
d4c919c9be removed template manifest formatting based on potential need for metadata provided by user. 2020-04-09 15:49:03 -07:00
Andrey Melnikov
a520f3c6c3 Prototyping removing workflow versions and updating workflow templates to always create a k8 resources. 2020-04-09 15:49:03 -07:00
Andrey Melnikov
2a9833be38 fix: Updated cron worklfow to use new workflow manifest method 2020-04-09 15:48:04 -07:00
Andrey Melnikov
58fa1eceac test: github tagging #patch 2020-04-09 13:43:38 -07:00
Rush Tehrani
7cd01ded19 Merge pull request #143 from onepanelio/develop
develop > master
2020-04-08 17:26:34 -07:00
Rush Tehrani
2f35f877f2 Merge pull request #142 from onepanelio/fix/cron.workflows.edit
Fixing labels and ENV VARs not persisting on CronWorkflow change.
2020-04-08 17:09:19 -07:00
Andrey Melnikov
637bddf83b progress: basic workflow execution from template. 2020-04-08 16:42:32 -07:00
Aleksandr Melnikov
ae54d21e24 Fixing labels and ENV VARs not persisting on CronWorkflow change. 2020-04-08 16:03:18 -07:00
Rush Tehrani
e082553d0d Merge pull request #129 from onepanelio/develop
develop > master
2020-04-08 13:54:55 -07:00
Rush Tehrani
87810cc010 Merge pull request #140 from onepanelio/fix/core.127-code.review.adjustments
Removing un-used function.
2020-04-08 13:51:21 -07:00
Rush Tehrani
febc6bb76b Merge pull request #139 from onepanelio/fix/cron.workflows.var.injection
Fix/cron.workflows.var.injection
2020-04-08 13:51:01 -07:00
Andrey Melnikov
dbf1961f16 removed template manifest formatting based on potential need for metadata provided by user. 2020-04-08 13:34:50 -07:00
Aleksandr Melnikov
9cc044dc4a Fixing a possible nil error. 2020-04-07 17:49:41 -07:00
Aleksandr Melnikov
62f949de5f Adjusting labels logic so that they merge together.
- Need labels from CronWorkflow passed into Workflow, so they can
relate and thus show up in the UI
2020-04-07 16:26:52 -07:00
Aleksandr Melnikov
2f8c923fe8 Enabled code to inject ENV Vars and istio + other labels to
Workflows created by CronWorkflow.
2020-04-07 16:01:45 -07:00
Andrey Melnikov
a57184e42d Prototyping removing workflow versions and updating workflow templates to always create a k8 resources. 2020-04-07 15:50:41 -07:00
Aleksandr Melnikov
e621882b63 Removing un-used function. 2020-04-07 11:03:42 -07:00
Andrey Melnikov
cb6c305ade Ran make api 2020-04-06 18:22:38 -07:00
Andrey Melnikov
739dc3359a Merge pull request #136 from onepanelio/feat/core.134-cron.workflows.ui
Feat/core.134 cron.workflows.ui
2020-04-06 18:16:35 -07:00
Andrey Melnikov
6bd3a9d59d Merge pull request #131 from onepanelio/feature/core.127-clone.workflow.template
Added endpoint to clone workflow templates.
2020-04-06 18:16:12 -07:00
Andrey Melnikov
85d21fe80e Merge branch 'feature/core.127-clone.workflow.template' of github.com:onepanelio/core into feature/core.127-clone.workflow.template 2020-04-06 18:03:37 -07:00
Andrey Melnikov
3683dc7e1e Ran make api 2020-04-06 18:01:53 -07:00
Aleksandr Melnikov
c73b5ef17e Rebased branch from develop, rebuild protoc files. 2020-04-06 18:01:31 -07:00
Aleksandr Melnikov
6e043b9b7b Added endpoint to clone workflow templates.
- Added endpoint to proto
- Added supporting functions and error checking
2020-04-06 18:00:44 -07:00
Aleksandr Melnikov
3f80a1be70 Ran make all to update api.swagger.json 2020-04-06 15:46:54 -07:00
Aleksandr Melnikov
b668b54fd6 Added code to pass identifying Workflow labels.
- CronWorkflow will pass these labels into any Workflow Executions that
are created.
- This means those Workflows will show up under the correct Workflow Template
page.
Fixed some code related to argo update.
2020-04-03 16:52:01 -07:00
Aleksandr Melnikov
9ce6e1f1d8 Ran make protoc 2020-04-03 16:51:04 -07:00
Aleksandr Melnikov
560afea884 Updating Argo to 2.7.0 2020-04-03 16:50:55 -07:00
Andrey Melnikov
9a61d7fcff Cleaned up go.sum fie 2020-04-03 10:39:31 -07:00
Andrey Melnikov
4d8c7f5c4f Added api/label.pb.go file 2020-04-03 10:34:10 -07:00
Andrey Melnikov
dfa0c1d7a3 merge: branches 2020-04-03 10:29:25 -07:00
Andrey Melnikov
4c3c3549a8 Merge branch 'feature/core.16-add.argo.cronworkflow' into develop 2020-04-03 10:18:46 -07:00
Andrey Melnikov
b8e37aca73 Merge branch 'feature/namespaces' into develop 2020-04-03 10:18:17 -07:00
Aleksandr Melnikov
f71eb9d6ad Adding a fix for deleting labels from CronWorklows and WorkflowExecutions.
- WorkflowTemplates appears to be un-affected
2020-04-02 17:16:31 -07:00
Aleksandr Melnikov
991c0ec34f Merge pull request #133 from onepanelio/feature/namespaces
feat: Added endpoints to create a namespace and filter/paginate names…
2020-04-02 16:02:33 -07:00
Aleksandr Melnikov
b32ceca18d Added support for label operations in CronWorkflows.
- Endpoints added are add, list, update, and delete.
Note: A bug exists with delete, it doesn't actually delete the label.
WIP.
2020-04-02 15:19:00 -07:00
Aleksandr Melnikov
58eb005851 Moving the label messages out of workflow and into it's own proto file.
- CronWorkflows re-use the same message types.
Added endpoints for CronWorkflow label operations.
2020-04-02 14:56:00 -07:00
Andrey Melnikov
56bce7c5af feat: Added endpoints to create a namespace and filter/paginate namespaces 2020-04-02 14:07:00 -07:00
Aleksandr Melnikov
6e27a5c6b8 Removing unused labels code. 2020-04-02 13:18:59 -07:00
Aleksandr Melnikov
339167cdc3 Removing unused sql and unnecessary table. 2020-04-02 13:17:45 -07:00
Aleksandr Melnikov
a42e7ab7fe Updated List endpoint to take in an optional WorkflowTemplateUID.
- If present, code will try to filter the CronWorkflows by the label
"onepanel.io/workflow-template-uid"
- If not present, all CronWorkflows are returned as normal.
2020-04-02 11:31:01 -07:00
Aleksandr Melnikov
9e029b3f1c Merge pull request #132 from onepanelio/feature/core.16-parameters
feat: Updated cron to return the active parameters
2020-04-01 14:36:33 -07:00
Andrey Melnikov
3fe93a64c9 feat: Updated cron to return the active parameters 2020-03-31 19:20:55 -07:00
Aleksandr Melnikov
648ad4b694 Adding code to associated a new CronWorkflow with a Workflow Template.
- Added database code
- Removing name from the database table since user will not name
their Cron Workflow.
2020-03-31 16:35:28 -07:00
Aleksandr Melnikov
ca3a8c92ea Renaming file. 2020-03-31 15:31:34 -07:00
Aleksandr Melnikov
f21072f4ec Adjusting Create CronWorkflow Templates SQL.
- Adding columns to support tracking CronWorkflows to WorkflowTemplates
- Dropping un-needed table
2020-03-31 15:31:17 -07:00
Aleksandr Melnikov
f02425b8be Rebased branch from develop, rebuild protoc files. 2020-03-31 14:43:03 -07:00
Aleksandr Melnikov
1e1521c8a3 Added endpoint to clone workflow templates.
- Added endpoint to proto
- Added supporting functions and error checking
2020-03-31 14:38:32 -07:00
Aleksandr Melnikov
6872bf7db3 Updated onepanelApiUrl and providerType 2020-03-31 14:37:55 -07:00
Aleksandr Melnikov
3472911065 Adding onepanelApiUrl and providerType to templates as ENV vars. 2020-03-31 14:37:55 -07:00
Aleksandr Melnikov
398faa6f1f Added helper function to add ENVs to a Template. 2020-03-31 14:37:55 -07:00
Aleksandr Melnikov
5b9832fdcd Changing terminate end point to be a DELETE request. 2020-03-31 13:19:21 -07:00
Aleksandr Melnikov
da2a0c06a7 Fixing the Terminate CronWorkflow
- Was deleting workflow executions instead of Cron Workflows.
2020-03-31 13:19:08 -07:00
Rush Tehrani
d79f303863 Create LICENSE 2020-03-30 17:08:05 -07:00
Aleksandr Melnikov
e2359e29e5 Minor fixes. 2020-03-30 14:11:37 -07:00
Aleksandr Melnikov
e6a0bd8549 Revert "Refactored CronWorkflow message."
This reverts commit 59cbf7d15e.
2020-03-30 14:06:02 -07:00
Aleksandr Melnikov
e5e3bcfd2e Adding a handler, per Andrey. 2020-03-30 14:01:17 -07:00
Aleksandr Melnikov
59cbf7d15e Refactored CronWorkflow message.
- Moved Parameters to it's own field
- Using WorkflowTemplate directly, instead of nesting it inside of
WorkflowExecution.
- Updated related code to use new structure.
2020-03-30 11:59:13 -07:00
Aleksandr Melnikov
9045b1a3eb Added UpdateCronWorkflow endpoint. 2020-03-29 22:56:40 -07:00
Aleksandr Melnikov
8b4d93af4b Added TerminateCronWorkflow endpoint.
- Also updated CronWorkflow message to include the name of the cron workflow.
- Updated related function that parses and sets the struct values, to include the name attribute
2020-03-29 22:16:33 -07:00
Aleksandr Melnikov
2ada65e87a Added ListCronWorkflows endpoint. 2020-03-29 22:00:11 -07:00
Aleksandr Melnikov
1096a21058 Adding GetCronWorkflow endpoint.
- Added supporting proto code
- Added supporting server function and cron_workflow client function
- Added extra checking for possible nil values
2020-03-29 21:37:03 -07:00
Aleksandr Melnikov
bcf4400aac Using exposed function. 2020-03-27 12:31:13 -07:00
Aleksandr Melnikov
d7a289c895 Renaming variable testCWF.
Adding the workflow spec correctly to the CronWorkflow spec.
2020-03-27 12:22:01 -07:00
Aleksandr Melnikov
96fd279189 Exposing UnmarshalWorkflows.
- So CronWorkflows can use them
2020-03-27 12:22:01 -07:00
Aleksandr Melnikov
f6d5161bdb Generating the CronWorkflow fields.
- WIP, Workflow spec is not filled in yet.
2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
aab8b4a69b Setting cronWorkflow values during server create request,
from the request data.
2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
e1892d6527 Fixing CronWorkflow values. 2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
24b3fe57fb Fixing values inside of proto for CronWorkflow fields. 2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
9ea94f5bb1 Implementing more details for CreateCronWorkflow.
- Added unmarshalCronWorkflows
- Tweaking how certain parameters are set
- WIP
2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
4d66356c26 Fixing double error check. 2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
b8c732863f Adding a CreateCronWorkflow function to Client, inside pkg. 2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
f92964937e Added CreateCronWorkflow function to server. 2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
8719a1ee2a Adding apiCronWorkflow function, to return the expected API response
struct.
2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
1ffdcf4a3d Adding an exposed method for apiWorkflowExecution 2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
1412d2907b Updating CronWorkflow struct to include more fields. 2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
228b4177e4 Adding tables for cron workflows. 2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
a5fc6b238c Renaming create() to createWorkflow(), to help show what the func.
is doing.
2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
44a4eb8d67 Adding createCronWorkflow to Client.
- Similar to create() command for Workflows.
2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
c044cec3e4 Adding CronWorkflow struct. 2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
4be4dd8419 Updating go.mod to use the latest argoproj/argo
- Alongside, updating other modules to fix conflicts with versioning.
Sourced from: https://github.com/onepanelio/core/pull/123/files
2020-03-27 12:20:58 -07:00
Aleksandr Melnikov
26615700e6 Adding cron_workflow_server.go
- Connecting it to main.go
2020-03-27 12:17:39 -07:00
Aleksandr Melnikov
b114204206 Proto updates. 2020-03-27 12:17:39 -07:00
Aleksandr Melnikov
cc4c4c559f Updating .gitignore
- Ignoring "vendor" files for Go
- Ignoring a virtual env folder for Python
2020-03-27 12:17:39 -07:00
Aleksandr Melnikov
30ce4335db Adding Create endpoint for Cron Workflow.
- Re-using the WorkflowExecution message, since Cron Workflow will use
that information to figure out the Workflow to execute.
2020-03-27 12:17:39 -07:00
Aleksandr Melnikov
d49614beaf Adding basic cron_workflow.proto file. 2020-03-27 12:17:39 -07:00
Aleksandr Melnikov
4a08971f46 Updated onepanelApiUrl and providerType 2020-03-27 12:17:39 -07:00
Aleksandr Melnikov
52b430dca2 Adding onepanelApiUrl and providerType to templates as ENV vars. 2020-03-27 12:17:39 -07:00
Aleksandr Melnikov
5c3009c6f6 Added helper function to add ENVs to a Template. 2020-03-27 12:17:39 -07:00
Andrey Melnikov
0a68ab72dd update: endpoints for labels to use verbs instead of url endings 2020-03-27 11:46:06 -07:00
Andrey Melnikov
63c759c525 fix: undid accidental change. 2020-03-26 18:03:27 -07:00
Andrey Melnikov
d293a85cd0 feat: added label support for workflow executions and templates.
Also updated workflow templates to create a workflow template k8 resource so we can easily work with labels.
2020-03-25 12:46:55 -07:00
Rush Tehrani
c90d85f176 Merge pull request #118 from onepanelio/feature/core.109-sys.env.vars
Feature/core.109 sys.env.vars
2020-03-24 17:57:50 -07:00
Aleksandr Melnikov
d42a360ec9 Updated onepanelApiUrl and providerType 2020-03-24 17:43:05 -07:00
Aleksandr Melnikov
6c6e7fadb0 Adding onepanelApiUrl and providerType to templates as ENV vars. 2020-03-24 17:43:05 -07:00
Aleksandr Melnikov
a7ce4bd1ae Added helper function to add ENVs to a Template. 2020-03-24 17:43:05 -07:00
Rush Tehrani
616069005b Merge pull request #123 from onepanelio/chore/upgrade-deps
Upgrade dependencies
2020-03-24 17:41:56 -07:00
Rush Tehrani
f110adfd92 Merge pull request #125 from onepanelio/fix/upgrade.auth
fix: Updated authentication check endpoint to take the auth token as …
2020-03-24 17:35:07 -07:00
rushtehrani
aca1489ce0 updated go.sum 2020-03-24 16:07:25 -07:00
rushtehrani
c8324cd7e5 only use latest go-autorest 2020-03-24 16:07:25 -07:00
rushtehrani
14d9c06763 upgrade dependencies 2020-03-24 16:07:25 -07:00
Andrey Melnikov
67252942a4 fix: Added missing imports 2020-03-24 16:06:04 -07:00
Andrey Melnikov
570e5d9322 fix: Updated authentication check endpoint to take the auth token as POST request data 2020-03-24 15:55:51 -07:00
Rush Tehrani
a02e8f7d61 Merge pull request #117 from onepanelio/feature/form.field.types
Feature/form.field.types
2020-03-23 17:27:33 -07:00
Andrey Melnikov
014fda6eca feat: added snapshot to master github action build so we can test if caching images is an issue. 2020-03-20 15:39:50 -07:00
Andrey Melnikov
0e100b83d0 feat: updated workflow parameters to ignore values without a default. 2020-03-20 12:38:38 -07:00
Andrey Melnikov
cb821694c3 fix: updated go.mod file for the yaml reference. 2020-03-19 16:38:48 -07:00
Andrey Melnikov
cc7f5678d2 feat: Added function to strip out form field types. 2020-03-19 16:31:28 -07:00
187 changed files with 40649 additions and 4925 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,16 +0,0 @@
name: Publish Docker Master
on:
push:
branches:
- master
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 }}

29
.github/workflows/push_tag.yaml vendored Normal file
View File

@@ -0,0 +1,29 @@
name: Publish docker image on tag push
on:
push:
tags:
- '*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- 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 }}
tags: "${{ env.GIT_TAG_NAME }}"
- name: Set Slack Message
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:
SLACK_CHANNEL: dev
SLACK_ICON: https://avatars1.githubusercontent.com/u/30390575?s=48&v=4
SLACK_TITLE: New Core Version
SLACK_USERNAME: opBot
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}

View File

@@ -1,17 +0,0 @@
name: Publish Docker
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

3
.gitignore vendored
View File

@@ -3,4 +3,5 @@
.idea
pocs
__debug_bin
openapi-generator-cli.jar
vendor
venv3

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

@@ -1,17 +1,19 @@
FROM golang:1.13.8 AS builder
FROM golang:1.13.10 AS builder
WORKDIR /go/src
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.8
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
CMD ["./core"]
CMD ["./core"]

203
LICENSE Normal file
View File

@@ -0,0 +1,203 @@
Copyright 2020 Onepanel, Inc. All rights reserved.
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -1,7 +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
@@ -12,17 +22,20 @@ protoc:
api/*.proto \
--go_out=plugins=grpc:api \
--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: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 .
docker tag onepanel-core:latest onepanel/core:1.0.0-beta.1
docker tag onepanel-core:latest onepanel/core:$(COMMIT_HASH)
docker-push:
docker push onepanel/core:1.0.0-beta.1
docker push onepanel/core:$(COMMIT_HASH)
docker-all: docker-build docker-push
docker: docker-build docker-push
all: api
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

@@ -1,45 +1,86 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.22.0
// protoc v3.11.4
// source: api.proto
package api
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
_ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options"
math "math"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
)
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
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 to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4
func init() { proto.RegisterFile("api.proto", fileDescriptor_00212fb1f9d3bf1c) }
var File_api_proto protoreflect.FileDescriptor
var fileDescriptor_00212fb1f9d3bf1c = []byte{
// 265 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0x3f, 0x4b, 0xf4, 0x40,
0x10, 0x87, 0xdf, 0x77, 0x85, 0x43, 0x57, 0x4f, 0x64, 0xc1, 0xc2, 0xab, 0x96, 0xab, 0x44, 0x2e,
0xd9, 0xbb, 0xb3, 0x09, 0x11, 0x8b, 0x9c, 0x85, 0x5c, 0xa5, 0xb5, 0xdd, 0x64, 0x1d, 0x93, 0x3d,
0xe3, 0xce, 0xb2, 0x99, 0xe0, 0x9f, 0x2f, 0x60, 0x61, 0xe7, 0x27, 0x16, 0x92, 0x43, 0x10, 0xed,
0x9e, 0x99, 0x79, 0x66, 0x18, 0x7e, 0x72, 0x0f, 0x82, 0x4b, 0x43, 0x24, 0x26, 0xb5, 0x03, 0xc1,
0x4d, 0x66, 0x3d, 0xdb, 0xa4, 0x42, 0x9f, 0xb4, 0xcf, 0x50, 0x55, 0x18, 0x0d, 0x05, 0x76, 0xe4,
0x5b, 0x03, 0xde, 0x13, 0x43, 0xcf, 0xc3, 0xca, 0xea, 0x43, 0x7c, 0x16, 0xef, 0x42, 0xb1, 0x1c,
0xdf, 0x78, 0x0c, 0xe0, 0xb1, 0xd1, 0x57, 0x14, 0x51, 0x9d, 0xfc, 0x28, 0x75, 0x88, 0xb4, 0x41,
0xcb, 0xba, 0xb8, 0x5d, 0x4f, 0x2f, 0xe4, 0xf1, 0x9f, 0x43, 0x35, 0xad, 0x99, 0x43, 0x9b, 0x1b,
0x53, 0x39, 0xae, 0xbb, 0x32, 0xb5, 0xf4, 0x64, 0x68, 0x6b, 0x3a, 0x32, 0x96, 0x22, 0x2e, 0xf7,
0x17, 0xe9, 0x3c, 0x9d, 0x27, 0x25, 0x32, 0x2c, 0x26, 0x87, 0x0d, 0x59, 0x68, 0x6a, 0x6a, 0x39,
0xcf, 0xb2, 0x2c, 0x3b, 0x13, 0xff, 0xc5, 0xf2, 0x08, 0x42, 0x68, 0x9c, 0xed, 0x9f, 0x34, 0x9b,
0x96, 0x7c, 0xfe, 0xab, 0x73, 0xb7, 0x96, 0xd7, 0x72, 0xb4, 0x42, 0x88, 0x18, 0xd5, 0xe5, 0xae,
0x50, 0xa7, 0x45, 0xc7, 0x35, 0x7a, 0xde, 0x4a, 0x9a, 0xe9, 0x11, 0xfd, 0x4c, 0x87, 0x88, 0x0f,
0xee, 0x05, 0xef, 0x75, 0xf9, 0xaa, 0x07, 0x7b, 0x32, 0x86, 0x8e, 0x6b, 0x8a, 0xee, 0x6d, 0x10,
0x45, 0x79, 0x20, 0xe5, 0xf7, 0xa9, 0x7f, 0xe5, 0xa8, 0x0f, 0xe5, 0xfc, 0x2b, 0x00, 0x00, 0xff,
0xff, 0x51, 0x1b, 0x37, 0x84, 0x54, 0x01, 0x00, 0x00,
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, 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{}{}
var file_api_proto_depIdxs = []int32{
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_api_proto_init() }
func file_api_proto_init() {
if File_api_proto != nil {
return
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_api_proto_rawDesc,
NumEnums: 0,
NumMessages: 0,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_api_proto_goTypes,
DependencyIndexes: file_api_proto_depIdxs,
}.Build()
File_api_proto = out.File
file_api_proto_rawDesc = nil
file_api_proto_goTypes = nil
file_api_proto_depIdxs = nil
}

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";
@@ -36,4 +37,4 @@ option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) = {
value: {};
}
}
};
};

File diff suppressed because it is too large Load Diff

View File

@@ -1,117 +1,562 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.22.0
// protoc v3.11.4
// source: auth.proto
package api
import (
context "context"
fmt "fmt"
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"
status "google.golang.org/grpc/status"
math "math"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
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 to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
// 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 IsValidTokenResponse struct {
Valid bool `protobuf:"varint,1,opt,name=valid,proto3" json:"valid,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
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 (m *IsValidTokenResponse) Reset() { *m = IsValidTokenResponse{} }
func (m *IsValidTokenResponse) String() string { return proto.CompactTextString(m) }
func (*IsValidTokenResponse) ProtoMessage() {}
func (*IsValidTokenResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_8bbd6f3875b0e874, []int{0}
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 (m *IsValidTokenResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_IsValidTokenResponse.Unmarshal(m, b)
}
func (m *IsValidTokenResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_IsValidTokenResponse.Marshal(b, m, deterministic)
}
func (m *IsValidTokenResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_IsValidTokenResponse.Merge(m, src)
}
func (m *IsValidTokenResponse) XXX_Size() int {
return xxx_messageInfo_IsValidTokenResponse.Size(m)
}
func (m *IsValidTokenResponse) XXX_DiscardUnknown() {
xxx_messageInfo_IsValidTokenResponse.DiscardUnknown(m)
func (x *IsAuthorized) String() string {
return protoimpl.X.MessageStringOf(x)
}
var xxx_messageInfo_IsValidTokenResponse proto.InternalMessageInfo
func (*IsAuthorized) ProtoMessage() {}
func (m *IsValidTokenResponse) GetValid() bool {
if m != nil {
return m.Valid
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
}
func init() {
proto.RegisterType((*IsValidTokenResponse)(nil), "api.IsValidTokenResponse")
type TokenWrapper struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"`
}
func init() { proto.RegisterFile("auth.proto", fileDescriptor_8bbd6f3875b0e874) }
func (x *TokenWrapper) Reset() {
*x = TokenWrapper{}
if protoimpl.UnsafeEnabled {
mi := &file_auth_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
var fileDescriptor_8bbd6f3875b0e874 = []byte{
// 200 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4a, 0x2c, 0x2d, 0xc9,
0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4e, 0x2c, 0xc8, 0x94, 0x92, 0x49, 0xcf, 0xcf,
0x4f, 0xcf, 0x49, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0x4f, 0xcc, 0xcb, 0xcb, 0x2f, 0x49, 0x2c, 0xc9,
0xcc, 0xcf, 0x2b, 0x86, 0x28, 0x91, 0x92, 0x86, 0xca, 0x82, 0x79, 0x49, 0xa5, 0x69, 0xfa, 0xa9,
0xb9, 0x05, 0x25, 0x95, 0x10, 0x49, 0x25, 0x1d, 0x2e, 0x11, 0xcf, 0xe2, 0xb0, 0xc4, 0x9c, 0xcc,
0x94, 0x90, 0xfc, 0xec, 0xd4, 0xbc, 0xa0, 0xd4, 0xe2, 0x82, 0xfc, 0xbc, 0xe2, 0x54, 0x21, 0x11,
0x2e, 0xd6, 0x32, 0x90, 0xa8, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x47, 0x10, 0x84, 0x63, 0x54, 0xc4,
0xc5, 0xed, 0x58, 0x5a, 0x92, 0x11, 0x9c, 0x5a, 0x54, 0x96, 0x99, 0x9c, 0x2a, 0x94, 0xcc, 0xc5,
0x83, 0xac, 0x59, 0x48, 0x4c, 0x0f, 0x62, 0x95, 0x1e, 0xcc, 0x2a, 0x3d, 0x57, 0x90, 0x55, 0x52,
0x92, 0x7a, 0x89, 0x05, 0x99, 0x7a, 0xd8, 0xec, 0x51, 0x52, 0x68, 0xba, 0xfc, 0x64, 0x32, 0x93,
0x94, 0x90, 0x04, 0xc8, 0xf1, 0xc5, 0xfa, 0x65, 0x86, 0x49, 0xa9, 0x25, 0x89, 0x86, 0xfa, 0x20,
0x1f, 0xea, 0x97, 0x80, 0x54, 0x26, 0xb1, 0x81, 0x0d, 0x33, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff,
0x50, 0x28, 0xf6, 0x19, 0xf6, 0x00, 0x00, 0x00,
func (x *TokenWrapper) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*TokenWrapper) ProtoMessage() {}
func (x *TokenWrapper) 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 TokenWrapper.ProtoReflect.Descriptor instead.
func (*TokenWrapper) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{3}
}
func (x *TokenWrapper) GetToken() string {
if x != nil {
return x.Token
}
return ""
}
type IsValidTokenRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Token *TokenWrapper `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"`
}
func (x *IsValidTokenRequest) Reset() {
*x = IsValidTokenRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_auth_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IsValidTokenRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IsValidTokenRequest) ProtoMessage() {}
func (x *IsValidTokenRequest) ProtoReflect() protoreflect.Message {
mi := &file_auth_proto_msgTypes[4]
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 IsValidTokenRequest.ProtoReflect.Descriptor instead.
func (*IsValidTokenRequest) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{4}
}
func (x *IsValidTokenRequest) GetToken() *TokenWrapper {
if x != nil {
return x.Token
}
return nil
}
type IsValidTokenResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
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[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IsValidTokenResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IsValidTokenResponse) ProtoMessage() {}
func (x *IsValidTokenResponse) ProtoReflect() protoreflect.Message {
mi := &file_auth_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 IsValidTokenResponse.ProtoReflect.Descriptor instead.
func (*IsValidTokenResponse) Descriptor() ([]byte, []int) {
return file_auth_proto_rawDescGZIP(), []int{5}
}
func (x *IsValidTokenResponse) GetDomain() string {
if x != nil {
return x.Domain
}
return ""
}
var File_auth_proto protoreflect.FileDescriptor
var file_auth_proto_rawDesc = []byte{
0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 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, 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 (
file_auth_proto_rawDescOnce sync.Once
file_auth_proto_rawDescData = file_auth_proto_rawDesc
)
func file_auth_proto_rawDescGZIP() []byte {
file_auth_proto_rawDescOnce.Do(func() {
file_auth_proto_rawDescData = protoimpl.X.CompressGZIP(file_auth_proto_rawDescData)
})
return file_auth_proto_rawDescData
}
var file_auth_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
var file_auth_proto_goTypes = []interface{}{
(*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.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() }
func file_auth_proto_init() {
if File_auth_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_auth_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IsAuthorized); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_auth_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IsAuthorizedRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_auth_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*IsAuthorizedResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_auth_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
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:
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_auth_proto_rawDesc,
NumEnums: 0,
NumMessages: 6,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_auth_proto_goTypes,
DependencyIndexes: file_auth_proto_depIdxs,
MessageInfos: file_auth_proto_msgTypes,
}.Build()
File_auth_proto = out.File
file_auth_proto_rawDesc = nil
file_auth_proto_goTypes = nil
file_auth_proto_depIdxs = nil
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn
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.SupportPackageIsVersion4
const _ = grpc.SupportPackageIsVersion6
// AuthServiceClient is the client API for AuthService service.
//
// 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 *empty.Empty, opts ...grpc.CallOption) (*IsValidTokenResponse, error)
IsValidToken(ctx context.Context, in *IsValidTokenRequest, opts ...grpc.CallOption) (*IsValidTokenResponse, error)
IsAuthorized(ctx context.Context, in *IsAuthorizedRequest, opts ...grpc.CallOption) (*IsAuthorizedResponse, error)
}
type authServiceClient struct {
cc *grpc.ClientConn
cc grpc.ClientConnInterface
}
func NewAuthServiceClient(cc *grpc.ClientConn) AuthServiceClient {
func NewAuthServiceClient(cc grpc.ClientConnInterface) AuthServiceClient {
return &authServiceClient{cc}
}
func (c *authServiceClient) IsValidToken(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*IsValidTokenResponse, error) {
func (c *authServiceClient) IsValidToken(ctx context.Context, in *IsValidTokenRequest, opts ...grpc.CallOption) (*IsValidTokenResponse, error) {
out := new(IsValidTokenResponse)
err := c.cc.Invoke(ctx, "/api.AuthService/IsValidToken", in, out, opts...)
if err != nil {
@@ -120,25 +565,38 @@ func (c *authServiceClient) IsValidToken(ctx context.Context, in *empty.Empty, o
return out, nil
}
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
}
return out, nil
}
// AuthServiceServer is the server API for AuthService service.
type AuthServiceServer interface {
IsValidToken(context.Context, *empty.Empty) (*IsValidTokenResponse, error)
IsValidToken(context.Context, *IsValidTokenRequest) (*IsValidTokenResponse, error)
IsAuthorized(context.Context, *IsAuthorizedRequest) (*IsAuthorizedResponse, error)
}
// UnimplementedAuthServiceServer can be embedded to have forward compatible implementations.
type UnimplementedAuthServiceServer struct {
}
func (*UnimplementedAuthServiceServer) IsValidToken(ctx context.Context, req *empty.Empty) (*IsValidTokenResponse, error) {
func (*UnimplementedAuthServiceServer) IsValidToken(context.Context, *IsValidTokenRequest) (*IsValidTokenResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method IsValidToken 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) {
s.RegisterService(&_AuthService_serviceDesc, srv)
}
func _AuthService_IsValidToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(empty.Empty)
in := new(IsValidTokenRequest)
if err := dec(in); err != nil {
return nil, err
}
@@ -150,7 +608,25 @@ func _AuthService_IsValidToken_Handler(srv interface{}, ctx context.Context, dec
FullMethod: "/api.AuthService/IsValidToken",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AuthServiceServer).IsValidToken(ctx, req.(*empty.Empty))
return srv.(AuthServiceServer).IsValidToken(ctx, req.(*IsValidTokenRequest))
}
return interceptor(ctx, in, info, handler)
}
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).IsAuthorized(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.AuthService/IsAuthorized",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(AuthServiceServer).IsAuthorized(ctx, req.(*IsAuthorizedRequest))
}
return interceptor(ctx, in, info, handler)
}
@@ -163,6 +639,10 @@ var _AuthService_serviceDesc = grpc.ServiceDesc{
MethodName: "IsValidToken",
Handler: _AuthService_IsValidToken_Handler,
},
{
MethodName: "IsAuthorized",
Handler: _AuthService_IsAuthorized_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "auth.proto",

View File

@@ -15,7 +15,6 @@ import (
"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"
@@ -33,29 +32,79 @@ var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
func request_AuthService_IsValidToken_0(ctx context.Context, marshaler runtime.Marshaler, client AuthServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq empty.Empty
var protoReq IsValidTokenRequest
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.Token); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.IsValidToken(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_AuthService_IsValidToken_0(ctx context.Context, marshaler runtime.Marshaler, server AuthServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq empty.Empty
var protoReq IsValidTokenRequest
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.Token); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.IsValidToken(ctx, &protoReq)
return msg, metadata, err
}
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
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 := client.IsAuthorized(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
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
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.IsAuthorized(ctx, &protoReq)
return msg, metadata, err
}
// RegisterAuthServiceHandlerServer registers the http handlers for service AuthService to "mux".
// UnaryRPC :call AuthServiceServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterAuthServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthServiceServer) error {
mux.Handle("GET", pattern_AuthService_IsValidToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
mux.Handle("POST", pattern_AuthService_IsValidToken_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)
@@ -75,6 +124,26 @@ func RegisterAuthServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux
})
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)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
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_IsAuthorized_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
@@ -116,7 +185,7 @@ func RegisterAuthServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn
// "AuthServiceClient" to call the correct interceptors.
func RegisterAuthServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthServiceClient) error {
mux.Handle("GET", pattern_AuthService_IsValidToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
mux.Handle("POST", pattern_AuthService_IsValidToken_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)
@@ -136,13 +205,37 @@ func RegisterAuthServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux
})
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)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
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_IsAuthorized_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
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_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_IsAuthorized_0 = runtime.ForwardResponseMessage
)

View File

@@ -6,13 +6,45 @@ import "google/api/annotations.proto";
import "google/protobuf/empty.proto";
service AuthService {
rpc IsValidToken(google.protobuf.Empty) returns (IsValidTokenResponse) {
rpc IsValidToken(IsValidTokenRequest) returns (IsValidTokenResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/auth/token"
post: "/apis/v1beta1/auth/token"
body: "token"
};
}
rpc IsAuthorized(IsAuthorizedRequest) returns (IsAuthorizedResponse) {
option (google.api.http) = {
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;
}
message IsValidTokenRequest {
TokenWrapper token = 1;
}
message IsValidTokenResponse {
bool valid = 1 ;
string domain = 1;
}

287
api/common.pb.go Normal file
View File

@@ -0,0 +1,287 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.22.0
// protoc v3.11.4
// source: common.proto
package api
import (
proto "github.com/golang/protobuf/proto"
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 Parameter 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"`
Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"`
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"`
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() {
*x = Parameter{}
if protoimpl.UnsafeEnabled {
mi := &file_common_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Parameter) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Parameter) ProtoMessage() {}
func (x *Parameter) ProtoReflect() protoreflect.Message {
mi := &file_common_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 Parameter.ProtoReflect.Descriptor instead.
func (*Parameter) Descriptor() ([]byte, []int) {
return file_common_proto_rawDescGZIP(), []int{0}
}
func (x *Parameter) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *Parameter) GetValue() string {
if x != nil {
return x.Value
}
return ""
}
func (x *Parameter) GetType() string {
if x != nil {
return x.Type
}
return ""
}
func (x *Parameter) GetDisplayName() string {
if x != nil {
return x.DisplayName
}
return ""
}
func (x *Parameter) GetHint() string {
if x != nil {
return x.Hint
}
return ""
}
func (x *Parameter) GetRequired() bool {
if x != nil {
return x.Required
}
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
}
return nil
}
type ParameterOption 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 *ParameterOption) Reset() {
*x = ParameterOption{}
if protoimpl.UnsafeEnabled {
mi := &file_common_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ParameterOption) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ParameterOption) ProtoMessage() {}
func (x *ParameterOption) ProtoReflect() protoreflect.Message {
mi := &file_common_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 ParameterOption.ProtoReflect.Descriptor instead.
func (*ParameterOption) Descriptor() ([]byte, []int) {
return file_common_proto_rawDescGZIP(), []int{1}
}
func (x *ParameterOption) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (x *ParameterOption) GetValue() string {
if x != nil {
return x.Value
}
return ""
}
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, 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,
0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12,
0x20, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04,
0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d,
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, 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,
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, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_common_proto_rawDescOnce sync.Once
file_common_proto_rawDescData = file_common_proto_rawDesc
)
func file_common_proto_rawDescGZIP() []byte {
file_common_proto_rawDescOnce.Do(func() {
file_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_common_proto_rawDescData)
})
return file_common_proto_rawDescData
}
var file_common_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
var file_common_proto_goTypes = []interface{}{
(*Parameter)(nil), // 0: api.Parameter
(*ParameterOption)(nil), // 1: api.ParameterOption
}
var file_common_proto_depIdxs = []int32{
1, // 0: api.Parameter.options:type_name -> api.ParameterOption
1, // [1:1] is the sub-list for method output_type
1, // [1:1] 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_common_proto_init() }
func file_common_proto_init() {
if File_common_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Parameter); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_common_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ParameterOption); 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_common_proto_rawDesc,
NumEnums: 0,
NumMessages: 2,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_common_proto_goTypes,
DependencyIndexes: file_common_proto_depIdxs,
MessageInfos: file_common_proto_msgTypes,
}.Build()
File_common_proto = out.File
file_common_proto_rawDesc = nil
file_common_proto_goTypes = nil
file_common_proto_depIdxs = nil
}

20
api/common.proto Normal file
View File

@@ -0,0 +1,20 @@
syntax = "proto3";
package api;
message Parameter {
string name = 1;
string value = 2;
string type = 3;
string displayName = 4;
string hint = 5;
bool required = 6;
string visibility = 7;
repeated ParameterOption options = 8;
}
message ParameterOption {
string name = 1;
string value = 2;
}

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;
}

1003
api/cron_workflow.pb.go Normal file

File diff suppressed because it is too large Load Diff

823
api/cron_workflow.pb.gw.go Normal file
View File

@@ -0,0 +1,823 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: cron_workflow.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_CronWorkflowService_CreateCronWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, client CronWorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq CreateCronWorkflowRequest
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.CronWorkflow); 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)
}
msg, err := client.CreateCronWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_CronWorkflowService_CreateCronWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, server CronWorkflowServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq CreateCronWorkflowRequest
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.CronWorkflow); 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)
}
msg, err := server.CreateCronWorkflow(ctx, &protoReq)
return msg, metadata, err
}
func request_CronWorkflowService_UpdateCronWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, client CronWorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UpdateCronWorkflowRequest
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.CronWorkflow); 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.UpdateCronWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_CronWorkflowService_UpdateCronWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, server CronWorkflowServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UpdateCronWorkflowRequest
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.CronWorkflow); 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.UpdateCronWorkflow(ctx, &protoReq)
return msg, metadata, err
}
func request_CronWorkflowService_GetCronWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, client CronWorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetCronWorkflowRequest
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.GetCronWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_CronWorkflowService_GetCronWorkflow_0(ctx context.Context, marshaler runtime.Marshaler, server CronWorkflowServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetCronWorkflowRequest
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.GetCronWorkflow(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_CronWorkflowService_ListCronWorkflows_0 = &utilities.DoubleArray{Encoding: map[string]int{"namespace": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
)
func request_CronWorkflowService_ListCronWorkflows_0(ctx context.Context, marshaler runtime.Marshaler, client CronWorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListCronWorkflowRequest
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_CronWorkflowService_ListCronWorkflows_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ListCronWorkflows(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_CronWorkflowService_ListCronWorkflows_0(ctx context.Context, marshaler runtime.Marshaler, server CronWorkflowServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListCronWorkflowRequest
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_CronWorkflowService_ListCronWorkflows_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListCronWorkflows(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_CronWorkflowService_ListCronWorkflows_1 = &utilities.DoubleArray{Encoding: map[string]int{"namespace": 0, "workflow_template_name": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}}
)
func request_CronWorkflowService_ListCronWorkflows_1(ctx context.Context, marshaler runtime.Marshaler, client CronWorkflowServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListCronWorkflowRequest
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["workflow_template_name"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_template_name")
}
protoReq.WorkflowTemplateName, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_template_name", err)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_CronWorkflowService_ListCronWorkflows_1); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ListCronWorkflows(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_CronWorkflowService_ListCronWorkflows_1(ctx context.Context, marshaler runtime.Marshaler, server CronWorkflowServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListCronWorkflowRequest
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["workflow_template_name"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "workflow_template_name")
}
protoReq.WorkflowTemplateName, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "workflow_template_name", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_CronWorkflowService_ListCronWorkflows_1); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListCronWorkflows(ctx, &protoReq)
return msg, metadata, err
}
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 (
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.DeleteCronWorkflow(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
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 (
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.DeleteCronWorkflow(ctx, &protoReq)
return msg, metadata, err
}
// RegisterCronWorkflowServiceHandlerServer registers the http handlers for service CronWorkflowService to "mux".
// UnaryRPC :call CronWorkflowServiceServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterCronWorkflowServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server CronWorkflowServiceServer) error {
mux.Handle("POST", pattern_CronWorkflowService_CreateCronWorkflow_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_CronWorkflowService_CreateCronWorkflow_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_CreateCronWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("PUT", pattern_CronWorkflowService_UpdateCronWorkflow_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_CronWorkflowService_UpdateCronWorkflow_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_UpdateCronWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_CronWorkflowService_GetCronWorkflow_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_CronWorkflowService_GetCronWorkflow_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_GetCronWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_CronWorkflowService_ListCronWorkflows_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_CronWorkflowService_ListCronWorkflows_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_ListCronWorkflows_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_CronWorkflowService_ListCronWorkflows_1, 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_CronWorkflowService_ListCronWorkflows_1(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_CronWorkflowService_ListCronWorkflows_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
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)
rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
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_DeleteCronWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterCronWorkflowServiceHandlerFromEndpoint is same as RegisterCronWorkflowServiceHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterCronWorkflowServiceHandlerFromEndpoint(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 RegisterCronWorkflowServiceHandler(ctx, mux, conn)
}
// RegisterCronWorkflowServiceHandler registers the http handlers for service CronWorkflowService to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterCronWorkflowServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterCronWorkflowServiceHandlerClient(ctx, mux, NewCronWorkflowServiceClient(conn))
}
// RegisterCronWorkflowServiceHandlerClient registers the http handlers for service CronWorkflowService
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "CronWorkflowServiceClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "CronWorkflowServiceClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "CronWorkflowServiceClient" to call the correct interceptors.
func RegisterCronWorkflowServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client CronWorkflowServiceClient) error {
mux.Handle("POST", pattern_CronWorkflowService_CreateCronWorkflow_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_CronWorkflowService_CreateCronWorkflow_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_CreateCronWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("PUT", pattern_CronWorkflowService_UpdateCronWorkflow_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_CronWorkflowService_UpdateCronWorkflow_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_UpdateCronWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_CronWorkflowService_GetCronWorkflow_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_CronWorkflowService_GetCronWorkflow_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_GetCronWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_CronWorkflowService_ListCronWorkflows_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_CronWorkflowService_ListCronWorkflows_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_ListCronWorkflows_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_CronWorkflowService_ListCronWorkflows_1, 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_CronWorkflowService_ListCronWorkflows_1(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_CronWorkflowService_ListCronWorkflows_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
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)
rctx, err := runtime.AnnotateContext(ctx, mux, req)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
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_DeleteCronWorkflow_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
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", "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", "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_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 (
forward_CronWorkflowService_CreateCronWorkflow_0 = runtime.ForwardResponseMessage
forward_CronWorkflowService_UpdateCronWorkflow_0 = runtime.ForwardResponseMessage
forward_CronWorkflowService_GetCronWorkflow_0 = runtime.ForwardResponseMessage
forward_CronWorkflowService_ListCronWorkflows_0 = runtime.ForwardResponseMessage
forward_CronWorkflowService_ListCronWorkflows_1 = runtime.ForwardResponseMessage
forward_CronWorkflowService_DeleteCronWorkflow_0 = runtime.ForwardResponseMessage
)

92
api/cron_workflow.proto Normal file
View File

@@ -0,0 +1,92 @@
syntax = "proto3";
package api;
import "google/api/annotations.proto";
import "google/protobuf/empty.proto";
import "workflow.proto";
import "label.proto";
service CronWorkflowService {
rpc CreateCronWorkflow (CreateCronWorkflowRequest) returns (CronWorkflow) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/cron_workflow"
body: "cronWorkflow"
};
}
rpc UpdateCronWorkflow(UpdateCronWorkflowRequest) returns (CronWorkflow) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/cron_workflow/{uid}"
body: "cronWorkflow"
};
}
rpc GetCronWorkflow(GetCronWorkflowRequest) returns (CronWorkflow) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/cron_workflow/{uid}"
};
}
rpc ListCronWorkflows(ListCronWorkflowRequest) returns (ListCronWorkflowsResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/cron_workflows"
additional_bindings {
get: "/apis/v1beta1/{namespace}/cron_workflows/{workflow_template_name}"
}
};
}
rpc DeleteCronWorkflow (DeleteCronWorkflowRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
delete: "/apis/v1beta1/{namespace}/cron_workflows/{uid}"
};
}
}
message CronWorkflow {
string name = 1;
string uid = 2;
string manifest = 3;
WorkflowExecution workflowExecution = 4;
repeated KeyValue labels = 5;
string namespace = 6;
}
message CreateCronWorkflowRequest {
string namespace = 1;
CronWorkflow cronWorkflow = 2;
}
message GetCronWorkflowRequest {
string namespace = 1;
string uid = 2;
}
message UpdateCronWorkflowRequest {
string namespace = 1 ;
string uid = 2;
CronWorkflow cronWorkflow = 3;
}
message DeleteCronWorkflowRequest {
string namespace = 1;
string uid = 2;
}
message ListCronWorkflowRequest {
string namespace = 1;
string workflow_template_name = 2;
int32 pageSize = 3;
int32 page = 4;
}
message ListCronWorkflowsResponse {
int32 count = 1;
repeated CronWorkflow cronWorkflows = 2;
int32 page = 3;
int32 pages = 4;
int32 totalCount = 5;
}

879
api/label.pb.go Normal file
View File

@@ -0,0 +1,879 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.22.0
// protoc v3.11.4
// source: label.proto
package api
import (
context "context"
proto "github.com/golang/protobuf/proto"
_ "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 KeyValue struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
}
func (x *KeyValue) Reset() {
*x = KeyValue{}
if protoimpl.UnsafeEnabled {
mi := &file_label_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *KeyValue) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*KeyValue) ProtoMessage() {}
func (x *KeyValue) ProtoReflect() protoreflect.Message {
mi := &file_label_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 KeyValue.ProtoReflect.Descriptor instead.
func (*KeyValue) Descriptor() ([]byte, []int) {
return file_label_proto_rawDescGZIP(), []int{0}
}
func (x *KeyValue) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
func (x *KeyValue) GetValue() string {
if x != nil {
return x.Value
}
return ""
}
type Labels struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Items []*KeyValue `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
}
func (x *Labels) Reset() {
*x = Labels{}
if protoimpl.UnsafeEnabled {
mi := &file_label_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Labels) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Labels) ProtoMessage() {}
func (x *Labels) ProtoReflect() protoreflect.Message {
mi := &file_label_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 Labels.ProtoReflect.Descriptor instead.
func (*Labels) Descriptor() ([]byte, []int) {
return file_label_proto_rawDescGZIP(), []int{1}
}
func (x *Labels) GetItems() []*KeyValue {
if x != nil {
return x.Items
}
return nil
}
type AddLabelsRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Resource string `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"`
Uid string `protobuf:"bytes,3,opt,name=uid,proto3" json:"uid,omitempty"`
Labels *Labels `protobuf:"bytes,4,opt,name=labels,proto3" json:"labels,omitempty"`
}
func (x *AddLabelsRequest) Reset() {
*x = AddLabelsRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_label_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AddLabelsRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AddLabelsRequest) ProtoMessage() {}
func (x *AddLabelsRequest) ProtoReflect() protoreflect.Message {
mi := &file_label_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 AddLabelsRequest.ProtoReflect.Descriptor instead.
func (*AddLabelsRequest) Descriptor() ([]byte, []int) {
return file_label_proto_rawDescGZIP(), []int{2}
}
func (x *AddLabelsRequest) GetNamespace() string {
if x != nil {
return x.Namespace
}
return ""
}
func (x *AddLabelsRequest) GetResource() string {
if x != nil {
return x.Resource
}
return ""
}
func (x *AddLabelsRequest) GetUid() string {
if x != nil {
return x.Uid
}
return ""
}
func (x *AddLabelsRequest) GetLabels() *Labels {
if x != nil {
return x.Labels
}
return nil
}
type ReplaceLabelsRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Resource string `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"`
Uid string `protobuf:"bytes,3,opt,name=uid,proto3" json:"uid,omitempty"`
Labels *Labels `protobuf:"bytes,4,opt,name=labels,proto3" json:"labels,omitempty"`
}
func (x *ReplaceLabelsRequest) Reset() {
*x = ReplaceLabelsRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_label_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ReplaceLabelsRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ReplaceLabelsRequest) ProtoMessage() {}
func (x *ReplaceLabelsRequest) ProtoReflect() protoreflect.Message {
mi := &file_label_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 ReplaceLabelsRequest.ProtoReflect.Descriptor instead.
func (*ReplaceLabelsRequest) Descriptor() ([]byte, []int) {
return file_label_proto_rawDescGZIP(), []int{3}
}
func (x *ReplaceLabelsRequest) GetNamespace() string {
if x != nil {
return x.Namespace
}
return ""
}
func (x *ReplaceLabelsRequest) GetResource() string {
if x != nil {
return x.Resource
}
return ""
}
func (x *ReplaceLabelsRequest) GetUid() string {
if x != nil {
return x.Uid
}
return ""
}
func (x *ReplaceLabelsRequest) GetLabels() *Labels {
if x != nil {
return x.Labels
}
return nil
}
type GetLabelsRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Resource string `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"`
Uid string `protobuf:"bytes,3,opt,name=uid,proto3" json:"uid,omitempty"`
}
func (x *GetLabelsRequest) Reset() {
*x = GetLabelsRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_label_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetLabelsRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetLabelsRequest) ProtoMessage() {}
func (x *GetLabelsRequest) ProtoReflect() protoreflect.Message {
mi := &file_label_proto_msgTypes[4]
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 GetLabelsRequest.ProtoReflect.Descriptor instead.
func (*GetLabelsRequest) Descriptor() ([]byte, []int) {
return file_label_proto_rawDescGZIP(), []int{4}
}
func (x *GetLabelsRequest) GetNamespace() string {
if x != nil {
return x.Namespace
}
return ""
}
func (x *GetLabelsRequest) GetResource() string {
if x != nil {
return x.Resource
}
return ""
}
func (x *GetLabelsRequest) GetUid() string {
if x != nil {
return x.Uid
}
return ""
}
type GetLabelsResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Labels []*KeyValue `protobuf:"bytes,1,rep,name=labels,proto3" json:"labels,omitempty"`
}
func (x *GetLabelsResponse) Reset() {
*x = GetLabelsResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_label_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GetLabelsResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GetLabelsResponse) ProtoMessage() {}
func (x *GetLabelsResponse) ProtoReflect() protoreflect.Message {
mi := &file_label_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 GetLabelsResponse.ProtoReflect.Descriptor instead.
func (*GetLabelsResponse) Descriptor() ([]byte, []int) {
return file_label_proto_rawDescGZIP(), []int{5}
}
func (x *GetLabelsResponse) GetLabels() []*KeyValue {
if x != nil {
return x.Labels
}
return nil
}
type DeleteLabelRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Namespace string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
Resource string `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"`
Uid string `protobuf:"bytes,3,opt,name=uid,proto3" json:"uid,omitempty"`
Key string `protobuf:"bytes,4,opt,name=key,proto3" json:"key,omitempty"`
}
func (x *DeleteLabelRequest) Reset() {
*x = DeleteLabelRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_label_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DeleteLabelRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DeleteLabelRequest) ProtoMessage() {}
func (x *DeleteLabelRequest) ProtoReflect() protoreflect.Message {
mi := &file_label_proto_msgTypes[6]
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 DeleteLabelRequest.ProtoReflect.Descriptor instead.
func (*DeleteLabelRequest) Descriptor() ([]byte, []int) {
return file_label_proto_rawDescGZIP(), []int{6}
}
func (x *DeleteLabelRequest) GetNamespace() string {
if x != nil {
return x.Namespace
}
return ""
}
func (x *DeleteLabelRequest) GetResource() string {
if x != nil {
return x.Resource
}
return ""
}
func (x *DeleteLabelRequest) GetUid() string {
if x != nil {
return x.Uid
}
return ""
}
func (x *DeleteLabelRequest) GetKey() string {
if x != nil {
return x.Key
}
return ""
}
var File_label_proto protoreflect.FileDescriptor
var file_label_proto_rawDesc = []byte{
0x0a, 0x0b, 0x6c, 0x61, 0x62, 0x65, 0x6c, 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,
0x22, 0x32, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03,
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x22, 0x2d, 0x0a, 0x06, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x23,
0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e,
0x61, 0x70, 0x69, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x69, 0x74,
0x65, 0x6d, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x10, 0x41, 0x64, 0x64, 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, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x03, 0x75, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c,
0x73, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x87, 0x01, 0x0a, 0x14, 0x52, 0x65,
0x70, 0x6c, 0x61, 0x63, 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, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03,
0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x23,
0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x06, 0x6c, 0x61, 0x62,
0x65, 0x6c, 0x73, 0x22, 0x5e, 0x0a, 0x10, 0x47, 0x65, 0x74, 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, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
0x75, 0x69, 0x64, 0x22, 0x3a, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65,
0x6c, 0x73, 0x18, 0x01, 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, 0x22,
0x72, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12,
0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69,
0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
0x6b, 0x65, 0x79, 0x32, 0x8d, 0x04, 0x0a, 0x0c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x72,
0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c,
0x73, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c,
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47,
0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x12, 0x31, 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, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x7d, 0x2f, 0x7b,
0x75, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x7d, 0x0a, 0x09, 0x41,
0x64, 0x64, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41,
0x64, 0x64, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x22,
0x31, 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, 0x7b, 0x72, 0x65, 0x73, 0x6f,
0x75, 0x72, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x61, 0x62, 0x65,
0x6c, 0x73, 0x3a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x85, 0x01, 0x0a, 0x0d, 0x52,
0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x19, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x65,
0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x1a, 0x31, 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, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x7d, 0x2f, 0x7b, 0x75,
0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x3a, 0x06, 0x6c, 0x61, 0x62, 0x65,
0x6c, 0x73, 0x12, 0x7f, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x61, 0x62, 0x65,
0x6c, 0x12, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4c, 0x61,
0x62, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x2a, 0x37, 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, 0x7b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x7d,
0x2f, 0x7b, 0x75, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x2f, 0x7b, 0x6b,
0x65, 0x79, 0x7d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_label_proto_rawDescOnce sync.Once
file_label_proto_rawDescData = file_label_proto_rawDesc
)
func file_label_proto_rawDescGZIP() []byte {
file_label_proto_rawDescOnce.Do(func() {
file_label_proto_rawDescData = protoimpl.X.CompressGZIP(file_label_proto_rawDescData)
})
return file_label_proto_rawDescData
}
var file_label_proto_msgTypes = make([]protoimpl.MessageInfo, 7)
var file_label_proto_goTypes = []interface{}{
(*KeyValue)(nil), // 0: api.KeyValue
(*Labels)(nil), // 1: api.Labels
(*AddLabelsRequest)(nil), // 2: api.AddLabelsRequest
(*ReplaceLabelsRequest)(nil), // 3: api.ReplaceLabelsRequest
(*GetLabelsRequest)(nil), // 4: api.GetLabelsRequest
(*GetLabelsResponse)(nil), // 5: api.GetLabelsResponse
(*DeleteLabelRequest)(nil), // 6: api.DeleteLabelRequest
}
var file_label_proto_depIdxs = []int32{
0, // 0: api.Labels.items:type_name -> api.KeyValue
1, // 1: api.AddLabelsRequest.labels:type_name -> api.Labels
1, // 2: api.ReplaceLabelsRequest.labels:type_name -> api.Labels
0, // 3: api.GetLabelsResponse.labels:type_name -> api.KeyValue
4, // 4: api.LabelService.GetLabels:input_type -> api.GetLabelsRequest
2, // 5: api.LabelService.AddLabels:input_type -> api.AddLabelsRequest
3, // 6: api.LabelService.ReplaceLabels:input_type -> api.ReplaceLabelsRequest
6, // 7: api.LabelService.DeleteLabel:input_type -> api.DeleteLabelRequest
5, // 8: api.LabelService.GetLabels:output_type -> api.GetLabelsResponse
5, // 9: api.LabelService.AddLabels:output_type -> api.GetLabelsResponse
5, // 10: api.LabelService.ReplaceLabels:output_type -> api.GetLabelsResponse
5, // 11: api.LabelService.DeleteLabel:output_type -> api.GetLabelsResponse
8, // [8:12] is the sub-list for method output_type
4, // [4:8] is the sub-list for method input_type
4, // [4:4] is the sub-list for extension type_name
4, // [4:4] is the sub-list for extension extendee
0, // [0:4] is the sub-list for field type_name
}
func init() { file_label_proto_init() }
func file_label_proto_init() {
if File_label_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_label_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*KeyValue); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_label_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Labels); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_label_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AddLabelsRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_label_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ReplaceLabelsRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_label_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetLabelsRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_label_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetLabelsResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_label_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DeleteLabelRequest); 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_label_proto_rawDesc,
NumEnums: 0,
NumMessages: 7,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_label_proto_goTypes,
DependencyIndexes: file_label_proto_depIdxs,
MessageInfos: file_label_proto_msgTypes,
}.Build()
File_label_proto = out.File
file_label_proto_rawDesc = nil
file_label_proto_goTypes = nil
file_label_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
// LabelServiceClient is the client API for LabelService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type LabelServiceClient interface {
GetLabels(ctx context.Context, in *GetLabelsRequest, opts ...grpc.CallOption) (*GetLabelsResponse, error)
AddLabels(ctx context.Context, in *AddLabelsRequest, opts ...grpc.CallOption) (*GetLabelsResponse, error)
ReplaceLabels(ctx context.Context, in *ReplaceLabelsRequest, opts ...grpc.CallOption) (*GetLabelsResponse, error)
DeleteLabel(ctx context.Context, in *DeleteLabelRequest, opts ...grpc.CallOption) (*GetLabelsResponse, error)
}
type labelServiceClient struct {
cc grpc.ClientConnInterface
}
func NewLabelServiceClient(cc grpc.ClientConnInterface) LabelServiceClient {
return &labelServiceClient{cc}
}
func (c *labelServiceClient) GetLabels(ctx context.Context, in *GetLabelsRequest, opts ...grpc.CallOption) (*GetLabelsResponse, error) {
out := new(GetLabelsResponse)
err := c.cc.Invoke(ctx, "/api.LabelService/GetLabels", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *labelServiceClient) AddLabels(ctx context.Context, in *AddLabelsRequest, opts ...grpc.CallOption) (*GetLabelsResponse, error) {
out := new(GetLabelsResponse)
err := c.cc.Invoke(ctx, "/api.LabelService/AddLabels", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *labelServiceClient) ReplaceLabels(ctx context.Context, in *ReplaceLabelsRequest, opts ...grpc.CallOption) (*GetLabelsResponse, error) {
out := new(GetLabelsResponse)
err := c.cc.Invoke(ctx, "/api.LabelService/ReplaceLabels", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *labelServiceClient) DeleteLabel(ctx context.Context, in *DeleteLabelRequest, opts ...grpc.CallOption) (*GetLabelsResponse, error) {
out := new(GetLabelsResponse)
err := c.cc.Invoke(ctx, "/api.LabelService/DeleteLabel", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// LabelServiceServer is the server API for LabelService service.
type LabelServiceServer interface {
GetLabels(context.Context, *GetLabelsRequest) (*GetLabelsResponse, error)
AddLabels(context.Context, *AddLabelsRequest) (*GetLabelsResponse, error)
ReplaceLabels(context.Context, *ReplaceLabelsRequest) (*GetLabelsResponse, error)
DeleteLabel(context.Context, *DeleteLabelRequest) (*GetLabelsResponse, error)
}
// UnimplementedLabelServiceServer can be embedded to have forward compatible implementations.
type UnimplementedLabelServiceServer struct {
}
func (*UnimplementedLabelServiceServer) GetLabels(context.Context, *GetLabelsRequest) (*GetLabelsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetLabels not implemented")
}
func (*UnimplementedLabelServiceServer) AddLabels(context.Context, *AddLabelsRequest) (*GetLabelsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method AddLabels not implemented")
}
func (*UnimplementedLabelServiceServer) ReplaceLabels(context.Context, *ReplaceLabelsRequest) (*GetLabelsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ReplaceLabels not implemented")
}
func (*UnimplementedLabelServiceServer) DeleteLabel(context.Context, *DeleteLabelRequest) (*GetLabelsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method DeleteLabel not implemented")
}
func RegisterLabelServiceServer(s *grpc.Server, srv LabelServiceServer) {
s.RegisterService(&_LabelService_serviceDesc, srv)
}
func _LabelService_GetLabels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetLabelsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LabelServiceServer).GetLabels(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.LabelService/GetLabels",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LabelServiceServer).GetLabels(ctx, req.(*GetLabelsRequest))
}
return interceptor(ctx, in, info, handler)
}
func _LabelService_AddLabels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(AddLabelsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LabelServiceServer).AddLabels(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.LabelService/AddLabels",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LabelServiceServer).AddLabels(ctx, req.(*AddLabelsRequest))
}
return interceptor(ctx, in, info, handler)
}
func _LabelService_ReplaceLabels_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ReplaceLabelsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LabelServiceServer).ReplaceLabels(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.LabelService/ReplaceLabels",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LabelServiceServer).ReplaceLabels(ctx, req.(*ReplaceLabelsRequest))
}
return interceptor(ctx, in, info, handler)
}
func _LabelService_DeleteLabel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DeleteLabelRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(LabelServiceServer).DeleteLabel(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.LabelService/DeleteLabel",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(LabelServiceServer).DeleteLabel(ctx, req.(*DeleteLabelRequest))
}
return interceptor(ctx, in, info, handler)
}
var _LabelService_serviceDesc = grpc.ServiceDesc{
ServiceName: "api.LabelService",
HandlerType: (*LabelServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "GetLabels",
Handler: _LabelService_GetLabels_Handler,
},
{
MethodName: "AddLabels",
Handler: _LabelService_AddLabels_Handler,
},
{
MethodName: "ReplaceLabels",
Handler: _LabelService_ReplaceLabels_Handler,
},
{
MethodName: "DeleteLabel",
Handler: _LabelService_DeleteLabel_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "label.proto",
}

707
api/label.pb.gw.go Normal file
View File

@@ -0,0 +1,707 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: label.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_LabelService_GetLabels_0(ctx context.Context, marshaler runtime.Marshaler, client LabelServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetLabelsRequest
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["resource"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource")
}
protoReq.Resource, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource", 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.GetLabels(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_LabelService_GetLabels_0(ctx context.Context, marshaler runtime.Marshaler, server LabelServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetLabelsRequest
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["resource"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource")
}
protoReq.Resource, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource", 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.GetLabels(ctx, &protoReq)
return msg, metadata, err
}
func request_LabelService_AddLabels_0(ctx context.Context, marshaler runtime.Marshaler, client LabelServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq AddLabelsRequest
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.Labels); 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["resource"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource")
}
protoReq.Resource, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource", 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.AddLabels(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_LabelService_AddLabels_0(ctx context.Context, marshaler runtime.Marshaler, server LabelServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq AddLabelsRequest
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.Labels); 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["resource"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource")
}
protoReq.Resource, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource", 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.AddLabels(ctx, &protoReq)
return msg, metadata, err
}
func request_LabelService_ReplaceLabels_0(ctx context.Context, marshaler runtime.Marshaler, client LabelServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ReplaceLabelsRequest
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.Labels); 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["resource"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource")
}
protoReq.Resource, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource", 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.ReplaceLabels(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_LabelService_ReplaceLabels_0(ctx context.Context, marshaler runtime.Marshaler, server LabelServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ReplaceLabelsRequest
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.Labels); 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["resource"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource")
}
protoReq.Resource, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource", 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.ReplaceLabels(ctx, &protoReq)
return msg, metadata, err
}
func request_LabelService_DeleteLabel_0(ctx context.Context, marshaler runtime.Marshaler, client LabelServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq DeleteLabelRequest
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["resource"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource")
}
protoReq.Resource, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource", 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)
}
val, ok = pathParams["key"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "key")
}
protoReq.Key, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "key", err)
}
msg, err := client.DeleteLabel(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_LabelService_DeleteLabel_0(ctx context.Context, marshaler runtime.Marshaler, server LabelServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq DeleteLabelRequest
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["resource"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource")
}
protoReq.Resource, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource", 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)
}
val, ok = pathParams["key"]
if !ok {
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "key")
}
protoReq.Key, err = runtime.String(val)
if err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "key", err)
}
msg, err := server.DeleteLabel(ctx, &protoReq)
return msg, metadata, err
}
// RegisterLabelServiceHandlerServer registers the http handlers for service LabelService to "mux".
// UnaryRPC :call LabelServiceServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterLabelServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server LabelServiceServer) error {
mux.Handle("GET", pattern_LabelService_GetLabels_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_LabelService_GetLabels_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_LabelService_GetLabels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_LabelService_AddLabels_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_LabelService_AddLabels_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_LabelService_AddLabels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("PUT", pattern_LabelService_ReplaceLabels_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_LabelService_ReplaceLabels_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_LabelService_ReplaceLabels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("DELETE", pattern_LabelService_DeleteLabel_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_LabelService_DeleteLabel_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_LabelService_DeleteLabel_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterLabelServiceHandlerFromEndpoint is same as RegisterLabelServiceHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterLabelServiceHandlerFromEndpoint(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 RegisterLabelServiceHandler(ctx, mux, conn)
}
// RegisterLabelServiceHandler registers the http handlers for service LabelService to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterLabelServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterLabelServiceHandlerClient(ctx, mux, NewLabelServiceClient(conn))
}
// RegisterLabelServiceHandlerClient registers the http handlers for service LabelService
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "LabelServiceClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "LabelServiceClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "LabelServiceClient" to call the correct interceptors.
func RegisterLabelServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client LabelServiceClient) error {
mux.Handle("GET", pattern_LabelService_GetLabels_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_LabelService_GetLabels_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_LabelService_GetLabels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_LabelService_AddLabels_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_LabelService_AddLabels_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_LabelService_AddLabels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("PUT", pattern_LabelService_ReplaceLabels_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_LabelService_ReplaceLabels_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_LabelService_ReplaceLabels_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("DELETE", pattern_LabelService_DeleteLabel_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_LabelService_DeleteLabel_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_LabelService_DeleteLabel_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_LabelService_GetLabels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "resource", "uid", "labels"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_LabelService_AddLabels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "resource", "uid", "labels"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_LabelService_ReplaceLabels_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"apis", "v1beta1", "namespace", "resource", "uid", "labels"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_LabelService_DeleteLabel_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"apis", "v1beta1", "namespace", "resource", "uid", "labels", "key"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_LabelService_GetLabels_0 = runtime.ForwardResponseMessage
forward_LabelService_AddLabels_0 = runtime.ForwardResponseMessage
forward_LabelService_ReplaceLabels_0 = runtime.ForwardResponseMessage
forward_LabelService_DeleteLabel_0 = runtime.ForwardResponseMessage
)

73
api/label.proto Normal file
View File

@@ -0,0 +1,73 @@
syntax = "proto3";
package api;
import "google/api/annotations.proto";
service LabelService {
rpc GetLabels (GetLabelsRequest) returns (GetLabelsResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/{resource}/{uid}/labels"
};
}
rpc AddLabels (AddLabelsRequest) returns (GetLabelsResponse) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/{resource}/{uid}/labels"
body: "labels"
};
}
rpc ReplaceLabels (ReplaceLabelsRequest) returns (GetLabelsResponse) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/{resource}/{uid}/labels"
body: "labels"
};
}
rpc DeleteLabel (DeleteLabelRequest) returns (GetLabelsResponse) {
option (google.api.http) = {
delete: "/apis/v1beta1/{namespace}/{resource}/{uid}/labels/{key}"
};
}
}
message KeyValue {
string key = 1;
string value = 2;
}
message Labels {
repeated KeyValue items = 1;
}
message AddLabelsRequest {
string namespace = 1;
string resource = 2;
string uid = 3;
Labels labels = 4;
}
message ReplaceLabelsRequest {
string namespace = 1;
string resource = 2;
string uid = 3;
Labels labels = 4;
}
message GetLabelsRequest {
string namespace = 1;
string resource = 2;
string uid = 3;
}
message GetLabelsResponse {
repeated KeyValue labels = 1;
}
message DeleteLabelRequest {
string namespace = 1;
string resource = 2;
string uid = 3;
string key = 4;
}

View File

@@ -1,93 +1,164 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.22.0
// protoc v3.11.4
// source: metric.proto
package api
import (
fmt "fmt"
proto "github.com/golang/protobuf/proto"
math "math"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
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 to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
// 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 Metric struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Value float64 `protobuf:"fixed64,2,opt,name=value,proto3" json:"value,omitempty"`
Format string `protobuf:"bytes,3,opt,name=format,proto3" json:"format,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
Value float64 `protobuf:"fixed64,2,opt,name=value,proto3" json:"value,omitempty"`
Format string `protobuf:"bytes,3,opt,name=format,proto3" json:"format,omitempty"`
}
func (m *Metric) Reset() { *m = Metric{} }
func (m *Metric) String() string { return proto.CompactTextString(m) }
func (*Metric) ProtoMessage() {}
func (x *Metric) Reset() {
*x = Metric{}
if protoimpl.UnsafeEnabled {
mi := &file_metric_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Metric) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Metric) ProtoMessage() {}
func (x *Metric) ProtoReflect() protoreflect.Message {
mi := &file_metric_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 Metric.ProtoReflect.Descriptor instead.
func (*Metric) Descriptor() ([]byte, []int) {
return fileDescriptor_da41641f55bff5df, []int{0}
return file_metric_proto_rawDescGZIP(), []int{0}
}
func (m *Metric) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Metric.Unmarshal(m, b)
}
func (m *Metric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Metric.Marshal(b, m, deterministic)
}
func (m *Metric) XXX_Merge(src proto.Message) {
xxx_messageInfo_Metric.Merge(m, src)
}
func (m *Metric) XXX_Size() int {
return xxx_messageInfo_Metric.Size(m)
}
func (m *Metric) XXX_DiscardUnknown() {
xxx_messageInfo_Metric.DiscardUnknown(m)
}
var xxx_messageInfo_Metric proto.InternalMessageInfo
func (m *Metric) GetName() string {
if m != nil {
return m.Name
func (x *Metric) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func (m *Metric) GetValue() float64 {
if m != nil {
return m.Value
func (x *Metric) GetValue() float64 {
if x != nil {
return x.Value
}
return 0
}
func (m *Metric) GetFormat() string {
if m != nil {
return m.Format
func (x *Metric) GetFormat() string {
if x != nil {
return x.Format
}
return ""
}
func init() {
proto.RegisterType((*Metric)(nil), "api.Metric")
var File_metric_proto protoreflect.FileDescriptor
var file_metric_proto_rawDesc = []byte{
0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03,
0x61, 0x70, 0x69, 0x22, 0x4a, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 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, 0x01,
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61,
0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x62,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
func init() { proto.RegisterFile("metric.proto", fileDescriptor_da41641f55bff5df) }
var (
file_metric_proto_rawDescOnce sync.Once
file_metric_proto_rawDescData = file_metric_proto_rawDesc
)
var fileDescriptor_da41641f55bff5df = []byte{
// 105 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0xc9, 0x4d, 0x2d, 0x29,
0xca, 0x4c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4e, 0x2c, 0xc8, 0x54, 0xf2, 0xe2,
0x62, 0xf3, 0x05, 0x0b, 0x0a, 0x09, 0x71, 0xb1, 0xe4, 0x25, 0xe6, 0xa6, 0x4a, 0x30, 0x2a, 0x30,
0x6a, 0x70, 0x06, 0x81, 0xd9, 0x42, 0x22, 0x5c, 0xac, 0x65, 0x89, 0x39, 0xa5, 0xa9, 0x12, 0x4c,
0x0a, 0x8c, 0x1a, 0x8c, 0x41, 0x10, 0x8e, 0x90, 0x18, 0x17, 0x5b, 0x5a, 0x7e, 0x51, 0x6e, 0x62,
0x89, 0x04, 0x33, 0x58, 0x2d, 0x94, 0x97, 0xc4, 0x06, 0x36, 0xd7, 0x18, 0x10, 0x00, 0x00, 0xff,
0xff, 0x88, 0xf0, 0xba, 0x92, 0x67, 0x00, 0x00, 0x00,
func file_metric_proto_rawDescGZIP() []byte {
file_metric_proto_rawDescOnce.Do(func() {
file_metric_proto_rawDescData = protoimpl.X.CompressGZIP(file_metric_proto_rawDescData)
})
return file_metric_proto_rawDescData
}
var file_metric_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_metric_proto_goTypes = []interface{}{
(*Metric)(nil), // 0: api.Metric
}
var file_metric_proto_depIdxs = []int32{
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_metric_proto_init() }
func file_metric_proto_init() {
if File_metric_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_metric_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Metric); 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_metric_proto_rawDesc,
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_metric_proto_goTypes,
DependencyIndexes: file_metric_proto_depIdxs,
MessageInfos: file_metric_proto_msgTypes,
}.Build()
File_metric_proto = out.File
file_metric_proto_rawDesc = nil
file_metric_proto_goTypes = nil
file_metric_proto_depIdxs = nil
}

View File

@@ -1,167 +1,451 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.22.0
// protoc v3.11.4
// source: namespace.proto
package api
import (
context "context"
fmt "fmt"
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"
math "math"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
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 to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
// 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 ListNamespacesResponse struct {
Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"`
Namespaces []*Namespace `protobuf:"bytes,2,rep,name=namespaces,proto3" json:"namespaces,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
type ListNamespacesRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
PageSize int32 `protobuf:"varint,1,opt,name=pageSize,proto3" json:"pageSize,omitempty"`
Page int32 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"`
Query string `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"`
}
func (m *ListNamespacesResponse) Reset() { *m = ListNamespacesResponse{} }
func (m *ListNamespacesResponse) String() string { return proto.CompactTextString(m) }
func (*ListNamespacesResponse) ProtoMessage() {}
func (*ListNamespacesResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_ecb1e126f615f5dd, []int{0}
func (x *ListNamespacesRequest) Reset() {
*x = ListNamespacesRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_namespace_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (m *ListNamespacesResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ListNamespacesResponse.Unmarshal(m, b)
}
func (m *ListNamespacesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_ListNamespacesResponse.Marshal(b, m, deterministic)
}
func (m *ListNamespacesResponse) XXX_Merge(src proto.Message) {
xxx_messageInfo_ListNamespacesResponse.Merge(m, src)
}
func (m *ListNamespacesResponse) XXX_Size() int {
return xxx_messageInfo_ListNamespacesResponse.Size(m)
}
func (m *ListNamespacesResponse) XXX_DiscardUnknown() {
xxx_messageInfo_ListNamespacesResponse.DiscardUnknown(m)
func (x *ListNamespacesRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
var xxx_messageInfo_ListNamespacesResponse proto.InternalMessageInfo
func (*ListNamespacesRequest) ProtoMessage() {}
func (m *ListNamespacesResponse) GetCount() int32 {
if m != nil {
return m.Count
func (x *ListNamespacesRequest) ProtoReflect() protoreflect.Message {
mi := &file_namespace_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 ListNamespacesRequest.ProtoReflect.Descriptor instead.
func (*ListNamespacesRequest) Descriptor() ([]byte, []int) {
return file_namespace_proto_rawDescGZIP(), []int{0}
}
func (x *ListNamespacesRequest) GetPageSize() int32 {
if x != nil {
return x.PageSize
}
return 0
}
func (m *ListNamespacesResponse) GetNamespaces() []*Namespace {
if m != nil {
return m.Namespaces
func (x *ListNamespacesRequest) GetPage() int32 {
if x != nil {
return x.Page
}
return 0
}
func (x *ListNamespacesRequest) GetQuery() string {
if x != nil {
return x.Query
}
return ""
}
type ListNamespacesResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"`
Namespaces []*Namespace `protobuf:"bytes,2,rep,name=namespaces,proto3" json:"namespaces,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 *ListNamespacesResponse) Reset() {
*x = ListNamespacesResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_namespace_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListNamespacesResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListNamespacesResponse) ProtoMessage() {}
func (x *ListNamespacesResponse) ProtoReflect() protoreflect.Message {
mi := &file_namespace_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 ListNamespacesResponse.ProtoReflect.Descriptor instead.
func (*ListNamespacesResponse) Descriptor() ([]byte, []int) {
return file_namespace_proto_rawDescGZIP(), []int{1}
}
func (x *ListNamespacesResponse) GetCount() int32 {
if x != nil {
return x.Count
}
return 0
}
func (x *ListNamespacesResponse) GetNamespaces() []*Namespace {
if x != nil {
return x.Namespaces
}
return nil
}
func (x *ListNamespacesResponse) GetPage() int32 {
if x != nil {
return x.Page
}
return 0
}
func (x *ListNamespacesResponse) GetPages() int32 {
if x != nil {
return x.Pages
}
return 0
}
func (x *ListNamespacesResponse) GetTotalCount() int32 {
if x != nil {
return x.TotalCount
}
return 0
}
type CreateNamespaceRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Namespace *Namespace `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
}
func (x *CreateNamespaceRequest) Reset() {
*x = CreateNamespaceRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_namespace_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CreateNamespaceRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CreateNamespaceRequest) ProtoMessage() {}
func (x *CreateNamespaceRequest) ProtoReflect() protoreflect.Message {
mi := &file_namespace_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 CreateNamespaceRequest.ProtoReflect.Descriptor instead.
func (*CreateNamespaceRequest) Descriptor() ([]byte, []int) {
return file_namespace_proto_rawDescGZIP(), []int{2}
}
func (x *CreateNamespaceRequest) GetNamespace() *Namespace {
if x != nil {
return x.Namespace
}
return nil
}
type Namespace struct {
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
}
func (m *Namespace) Reset() { *m = Namespace{} }
func (m *Namespace) String() string { return proto.CompactTextString(m) }
func (*Namespace) ProtoMessage() {}
func (x *Namespace) Reset() {
*x = Namespace{}
if protoimpl.UnsafeEnabled {
mi := &file_namespace_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Namespace) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Namespace) ProtoMessage() {}
func (x *Namespace) ProtoReflect() protoreflect.Message {
mi := &file_namespace_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 Namespace.ProtoReflect.Descriptor instead.
func (*Namespace) Descriptor() ([]byte, []int) {
return fileDescriptor_ecb1e126f615f5dd, []int{1}
return file_namespace_proto_rawDescGZIP(), []int{3}
}
func (m *Namespace) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Namespace.Unmarshal(m, b)
}
func (m *Namespace) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_Namespace.Marshal(b, m, deterministic)
}
func (m *Namespace) XXX_Merge(src proto.Message) {
xxx_messageInfo_Namespace.Merge(m, src)
}
func (m *Namespace) XXX_Size() int {
return xxx_messageInfo_Namespace.Size(m)
}
func (m *Namespace) XXX_DiscardUnknown() {
xxx_messageInfo_Namespace.DiscardUnknown(m)
}
var xxx_messageInfo_Namespace proto.InternalMessageInfo
func (m *Namespace) GetName() string {
if m != nil {
return m.Name
func (x *Namespace) GetName() string {
if x != nil {
return x.Name
}
return ""
}
func init() {
proto.RegisterType((*ListNamespacesResponse)(nil), "api.ListNamespacesResponse")
proto.RegisterType((*Namespace)(nil), "api.Namespace")
var File_namespace_proto protoreflect.FileDescriptor
var file_namespace_proto_rawDesc = []byte{
0x0a, 0x0f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 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, 0x22, 0x5d, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a,
0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a,
0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75,
0x65, 0x72, 0x79, 0x22, 0xa8, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 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, 0x2e, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e,
0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
0x61, 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, 0x22, 0x46,
0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x61, 0x70,
0x69, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d,
0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70,
0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x32, 0xec, 0x01, 0x0a, 0x10, 0x4e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6b, 0x0a, 0x0e,
0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1a,
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x70, 0x69,
0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12,
0x18, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e,
0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x6b, 0x0a, 0x0f, 0x43, 0x72, 0x65,
0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x2e, 0x61,
0x70, 0x69, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x61, 0x70, 0x69, 0x2e,
0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x25, 0x22, 0x18, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31,
0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x09, 0x6e, 0x61, 0x6d,
0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
func init() { proto.RegisterFile("namespace.proto", fileDescriptor_ecb1e126f615f5dd) }
var (
file_namespace_proto_rawDescOnce sync.Once
file_namespace_proto_rawDescData = file_namespace_proto_rawDesc
)
var fileDescriptor_ecb1e126f615f5dd = []byte{
// 238 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0xcf, 0x4b, 0xcc, 0x4d,
0x2d, 0x2e, 0x48, 0x4c, 0x4e, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x4e, 0x2c, 0xc8,
0x94, 0x92, 0x49, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x4f, 0x2c, 0xc8, 0xd4, 0x4f, 0xcc, 0xcb,
0xcb, 0x2f, 0x49, 0x2c, 0xc9, 0xcc, 0xcf, 0x2b, 0x86, 0x28, 0x91, 0x92, 0x86, 0xca, 0x82, 0x79,
0x49, 0xa5, 0x69, 0xfa, 0xa9, 0xb9, 0x05, 0x25, 0x95, 0x10, 0x49, 0xa5, 0x38, 0x2e, 0x31, 0x9f,
0xcc, 0xe2, 0x12, 0x3f, 0x98, 0xb1, 0xc5, 0x41, 0xa9, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x42,
0x22, 0x5c, 0xac, 0xc9, 0xf9, 0xa5, 0x79, 0x25, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xac, 0x41, 0x10,
0x8e, 0x90, 0x1e, 0x17, 0x17, 0xdc, 0x09, 0xc5, 0x12, 0x4c, 0x0a, 0xcc, 0x1a, 0xdc, 0x46, 0x7c,
0x7a, 0x89, 0x05, 0x99, 0x7a, 0x70, 0x23, 0x82, 0x90, 0x54, 0x28, 0xc9, 0x73, 0x71, 0xc2, 0x25,
0x84, 0x84, 0xb8, 0x58, 0x40, 0x52, 0x60, 0x13, 0x39, 0x83, 0xc0, 0x6c, 0xa3, 0x6a, 0x2e, 0x01,
0xb8, 0x82, 0xe0, 0xd4, 0xa2, 0xb2, 0xcc, 0xe4, 0x54, 0xa1, 0x74, 0x2e, 0x3e, 0x54, 0x47, 0x09,
0x89, 0xe9, 0x41, 0x3c, 0xa1, 0x07, 0xf3, 0x84, 0x9e, 0x2b, 0xc8, 0x13, 0x52, 0xd2, 0x60, 0xab,
0xb1, 0xfb, 0x40, 0x49, 0xa1, 0xe9, 0xf2, 0x93, 0xc9, 0x4c, 0x52, 0x42, 0x12, 0xa0, 0x80, 0x29,
0xd6, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, 0x47, 0xb8, 0x2e, 0x89, 0x0d, 0x6c, 0x9c,
0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xb5, 0xa6, 0xf4, 0xfe, 0x57, 0x01, 0x00, 0x00,
func file_namespace_proto_rawDescGZIP() []byte {
file_namespace_proto_rawDescOnce.Do(func() {
file_namespace_proto_rawDescData = protoimpl.X.CompressGZIP(file_namespace_proto_rawDescData)
})
return file_namespace_proto_rawDescData
}
var file_namespace_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_namespace_proto_goTypes = []interface{}{
(*ListNamespacesRequest)(nil), // 0: api.ListNamespacesRequest
(*ListNamespacesResponse)(nil), // 1: api.ListNamespacesResponse
(*CreateNamespaceRequest)(nil), // 2: api.CreateNamespaceRequest
(*Namespace)(nil), // 3: api.Namespace
}
var file_namespace_proto_depIdxs = []int32{
3, // 0: api.ListNamespacesResponse.namespaces:type_name -> api.Namespace
3, // 1: api.CreateNamespaceRequest.namespace:type_name -> api.Namespace
0, // 2: api.NamespaceService.ListNamespaces:input_type -> api.ListNamespacesRequest
2, // 3: api.NamespaceService.CreateNamespace:input_type -> api.CreateNamespaceRequest
1, // 4: api.NamespaceService.ListNamespaces:output_type -> api.ListNamespacesResponse
3, // 5: api.NamespaceService.CreateNamespace:output_type -> api.Namespace
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_namespace_proto_init() }
func file_namespace_proto_init() {
if File_namespace_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_namespace_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListNamespacesRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_namespace_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListNamespacesResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_namespace_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CreateNamespaceRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_namespace_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Namespace); 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_namespace_proto_rawDesc,
NumEnums: 0,
NumMessages: 4,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_namespace_proto_goTypes,
DependencyIndexes: file_namespace_proto_depIdxs,
MessageInfos: file_namespace_proto_msgTypes,
}.Build()
File_namespace_proto = out.File
file_namespace_proto_rawDesc = nil
file_namespace_proto_goTypes = nil
file_namespace_proto_depIdxs = nil
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn
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.SupportPackageIsVersion4
const _ = grpc.SupportPackageIsVersion6
// NamespaceServiceClient is the client API for NamespaceService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type NamespaceServiceClient interface {
ListNamespaces(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*ListNamespacesResponse, error)
ListNamespaces(ctx context.Context, in *ListNamespacesRequest, opts ...grpc.CallOption) (*ListNamespacesResponse, error)
CreateNamespace(ctx context.Context, in *CreateNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error)
}
type namespaceServiceClient struct {
cc *grpc.ClientConn
cc grpc.ClientConnInterface
}
func NewNamespaceServiceClient(cc *grpc.ClientConn) NamespaceServiceClient {
func NewNamespaceServiceClient(cc grpc.ClientConnInterface) NamespaceServiceClient {
return &namespaceServiceClient{cc}
}
func (c *namespaceServiceClient) ListNamespaces(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*ListNamespacesResponse, error) {
func (c *namespaceServiceClient) ListNamespaces(ctx context.Context, in *ListNamespacesRequest, opts ...grpc.CallOption) (*ListNamespacesResponse, error) {
out := new(ListNamespacesResponse)
err := c.cc.Invoke(ctx, "/api.NamespaceService/ListNamespaces", in, out, opts...)
if err != nil {
@@ -170,25 +454,38 @@ func (c *namespaceServiceClient) ListNamespaces(ctx context.Context, in *empty.E
return out, nil
}
func (c *namespaceServiceClient) CreateNamespace(ctx context.Context, in *CreateNamespaceRequest, opts ...grpc.CallOption) (*Namespace, error) {
out := new(Namespace)
err := c.cc.Invoke(ctx, "/api.NamespaceService/CreateNamespace", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// NamespaceServiceServer is the server API for NamespaceService service.
type NamespaceServiceServer interface {
ListNamespaces(context.Context, *empty.Empty) (*ListNamespacesResponse, error)
ListNamespaces(context.Context, *ListNamespacesRequest) (*ListNamespacesResponse, error)
CreateNamespace(context.Context, *CreateNamespaceRequest) (*Namespace, error)
}
// UnimplementedNamespaceServiceServer can be embedded to have forward compatible implementations.
type UnimplementedNamespaceServiceServer struct {
}
func (*UnimplementedNamespaceServiceServer) ListNamespaces(ctx context.Context, req *empty.Empty) (*ListNamespacesResponse, error) {
func (*UnimplementedNamespaceServiceServer) ListNamespaces(context.Context, *ListNamespacesRequest) (*ListNamespacesResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListNamespaces not implemented")
}
func (*UnimplementedNamespaceServiceServer) CreateNamespace(context.Context, *CreateNamespaceRequest) (*Namespace, error) {
return nil, status.Errorf(codes.Unimplemented, "method CreateNamespace not implemented")
}
func RegisterNamespaceServiceServer(s *grpc.Server, srv NamespaceServiceServer) {
s.RegisterService(&_NamespaceService_serviceDesc, srv)
}
func _NamespaceService_ListNamespaces_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(empty.Empty)
in := new(ListNamespacesRequest)
if err := dec(in); err != nil {
return nil, err
}
@@ -200,7 +497,25 @@ func _NamespaceService_ListNamespaces_Handler(srv interface{}, ctx context.Conte
FullMethod: "/api.NamespaceService/ListNamespaces",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(NamespaceServiceServer).ListNamespaces(ctx, req.(*empty.Empty))
return srv.(NamespaceServiceServer).ListNamespaces(ctx, req.(*ListNamespacesRequest))
}
return interceptor(ctx, in, info, handler)
}
func _NamespaceService_CreateNamespace_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CreateNamespaceRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(NamespaceServiceServer).CreateNamespace(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/api.NamespaceService/CreateNamespace",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(NamespaceServiceServer).CreateNamespace(ctx, req.(*CreateNamespaceRequest))
}
return interceptor(ctx, in, info, handler)
}
@@ -213,6 +528,10 @@ var _NamespaceService_serviceDesc = grpc.ServiceDesc{
MethodName: "ListNamespaces",
Handler: _NamespaceService_ListNamespaces_Handler,
},
{
MethodName: "CreateNamespace",
Handler: _NamespaceService_CreateNamespace_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "namespace.proto",

View File

@@ -15,7 +15,6 @@ import (
"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"
@@ -32,24 +31,73 @@ var _ = runtime.String
var _ = utilities.NewDoubleArray
var _ = descriptor.ForMessage
var (
filter_NamespaceService_ListNamespaces_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_NamespaceService_ListNamespaces_0(ctx context.Context, marshaler runtime.Marshaler, client NamespaceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq empty.Empty
var protoReq ListNamespacesRequest
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_NamespaceService_ListNamespaces_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ListNamespaces(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_NamespaceService_ListNamespaces_0(ctx context.Context, marshaler runtime.Marshaler, server NamespaceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq empty.Empty
var protoReq ListNamespacesRequest
var metadata runtime.ServerMetadata
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_NamespaceService_ListNamespaces_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListNamespaces(ctx, &protoReq)
return msg, metadata, err
}
func request_NamespaceService_CreateNamespace_0(ctx context.Context, marshaler runtime.Marshaler, client NamespaceServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq CreateNamespaceRequest
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.Namespace); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.CreateNamespace(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_NamespaceService_CreateNamespace_0(ctx context.Context, marshaler runtime.Marshaler, server NamespaceServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq CreateNamespaceRequest
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.Namespace); err != nil && err != io.EOF {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.CreateNamespace(ctx, &protoReq)
return msg, metadata, err
}
// RegisterNamespaceServiceHandlerServer registers the http handlers for service NamespaceService to "mux".
// UnaryRPC :call NamespaceServiceServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
@@ -75,6 +123,26 @@ func RegisterNamespaceServiceHandlerServer(ctx context.Context, mux *runtime.Ser
})
mux.Handle("POST", pattern_NamespaceService_CreateNamespace_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_NamespaceService_CreateNamespace_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_NamespaceService_CreateNamespace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
@@ -136,13 +204,37 @@ func RegisterNamespaceServiceHandlerClient(ctx context.Context, mux *runtime.Ser
})
mux.Handle("POST", pattern_NamespaceService_CreateNamespace_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_NamespaceService_CreateNamespace_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_NamespaceService_CreateNamespace_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_NamespaceService_ListNamespaces_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"apis", "v1beta1", "namespaces"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_NamespaceService_CreateNamespace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"apis", "v1beta1", "namespaces"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_NamespaceService_ListNamespaces_0 = runtime.ForwardResponseMessage
forward_NamespaceService_CreateNamespace_0 = runtime.ForwardResponseMessage
)

View File

@@ -3,19 +3,38 @@ syntax = "proto3";
package api;
import "google/api/annotations.proto";
import "google/protobuf/empty.proto";
service NamespaceService {
rpc ListNamespaces(google.protobuf.Empty) returns (ListNamespacesResponse) {
rpc ListNamespaces(ListNamespacesRequest) returns (ListNamespacesResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/namespaces"
};
}
rpc CreateNamespace(CreateNamespaceRequest) returns (Namespace) {
option (google.api.http) = {
post: "/apis/v1beta1/namespaces"
body: "namespace"
};
}
}
message ListNamespacesRequest {
int32 pageSize = 1;
int32 page = 2;
string query = 3;
}
message ListNamespacesResponse {
int32 count = 1;
repeated Namespace namespaces = 2;
int32 page = 3;
int32 pages = 4;
int32 totalCount = 5;
}
message CreateNamespaceRequest {
Namespace namespace = 1;
}
message Namespace {

File diff suppressed because it is too large Load Diff

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

File diff suppressed because it is too large Load Diff

View File

@@ -6,19 +6,34 @@ import "google/api/annotations.proto";
import "google/protobuf/empty.proto";
import "workflow_template.proto";
import "metric.proto";
import "label.proto";
import "common.proto";
service WorkflowService {
// Creates a Workflow
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/{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}"
};
}
@@ -30,136 +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"
};
}
rpc CreateWorkflowTemplate (CreateWorkflowTemplateRequest) returns (WorkflowTemplate) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/workflow_templates"
body: "workflowTemplate"
};
}
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"
body: "workflowTemplate"
};
}
rpc GetWorkflowTemplate (GetWorkflowTemplateRequest) returns (WorkflowTemplate) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_templates/{uid}"
additional_bindings {
get: "/apis/v1beta1/{namespace}/workflow_templates/{uid}/versions/{version}"
}
};
}
rpc ListWorkflowTemplateVersions (ListWorkflowTemplateVersionsRequest) returns (ListWorkflowTemplateVersionsResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_templates/{uid}/versions"
};
}
rpc ListWorkflowTemplates (ListWorkflowTemplatesRequest) returns (ListWorkflowTemplatesResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_templates"
};
}
rpc ArchiveWorkflowTemplate (ArchiveWorkflowTemplateRequest) returns (ArchiveWorkflowTemplateResponse) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workflow_templates/{uid}/archive"
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/{uid}/statistics"
body: "statistics"
};
}
rpc CronStartWorkflowExecutionStatistic (CronStartWorkflowExecutionStatisticRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
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 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;
}
@@ -173,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 {
@@ -188,6 +194,10 @@ message LogEntry {
string content = 2;
}
message WorkflowExecutionMetadata {
string url = 1;
}
message WorkflowExecution {
string createdAt = 1;
string uid = 2;
@@ -197,14 +207,13 @@ message WorkflowExecution {
string finishedAt = 6;
string manifest = 7;
repeated WorkflowExecutionParameter parameters = 8;
repeated Parameter parameters = 8;
WorkflowTemplate workflowTemplate = 9;
}
message WorkflowExecutionParameter {
string name = 1;
string value = 2;
repeated KeyValue labels = 10;
WorkflowExecutionMetadata metadata = 11;
}
message ArtifactResponse {
@@ -223,11 +232,46 @@ message File {
message ListFilesRequest {
string namespace = 1;
string name = 2;
string uid = 2;
string path = 3;
}
message ListFilesResponse {
repeated File files = 1;
string parentPath = 2;
}
message Statistics {
string workflowStatus = 1;
int64 workflowTemplateId = 2;
}
message AddWorkflowExecutionStatisticRequest {
string namespace = 1;
string uid = 2;
Statistics statistics = 3;
}
message CronStartWorkflowExecutionStatisticRequest {
string namespace = 1;
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;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -2,6 +2,62 @@ syntax = "proto3";
package api;
import "google/api/annotations.proto";
import "label.proto";
import "common.proto";
service WorkflowTemplateService {
rpc CreateWorkflowTemplate (CreateWorkflowTemplateRequest) returns (WorkflowTemplate) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/workflow_templates"
body: "workflowTemplate"
};
}
rpc CreateWorkflowTemplateVersion (CreateWorkflowTemplateRequest) returns (WorkflowTemplate) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/workflow_templates/{workflowTemplate.uid}/versions"
body: "workflowTemplate"
};
}
rpc GetWorkflowTemplate (GetWorkflowTemplateRequest) returns (WorkflowTemplate) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_templates/{uid}"
additional_bindings {
get: "/apis/v1beta1/{namespace}/workflow_templates/{uid}/versions/{version}"
}
};
}
rpc ListWorkflowTemplateVersions (ListWorkflowTemplateVersionsRequest) returns (ListWorkflowTemplateVersionsResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_templates/{uid}/versions"
};
}
rpc ListWorkflowTemplates (ListWorkflowTemplatesRequest) returns (ListWorkflowTemplatesResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_templates"
};
}
rpc CloneWorkflowTemplate (CloneWorkflowTemplateRequest) returns (WorkflowTemplate) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workflow_templates/{uid}/clone/{name}"
additional_bindings {
get: "/apis/v1beta1/{namespace}/workflow_templates/{uid}/clone/{name}/{version}"
}
};
}
rpc ArchiveWorkflowTemplate (ArchiveWorkflowTemplateRequest) returns (ArchiveWorkflowTemplateResponse) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workflow_templates/{uid}/archive"
};
}
}
message CreateWorkflowTemplateRequest {
string namespace = 1;
WorkflowTemplate workflowTemplate = 2;
@@ -15,7 +71,14 @@ message UpdateWorkflowTemplateVersionRequest {
message GetWorkflowTemplateRequest {
string namespace = 1;
string uid = 2;
int32 version = 3;
int64 version = 3;
}
message CloneWorkflowTemplateRequest {
string namespace = 1;
string uid = 2;
string name = 3;
int64 version = 4;
}
message ListWorkflowTemplateVersionsRequest {
@@ -30,11 +93,18 @@ message ListWorkflowTemplateVersionsResponse {
message ListWorkflowTemplatesRequest {
string namespace = 1;
int32 pageSize = 2;
int32 page = 3;
string labels = 4;
}
message ListWorkflowTemplatesResponse {
int32 count = 1;
repeated WorkflowTemplate workflowTemplates = 2;
int32 page = 3;
int32 pages = 4;
int32 totalCount = 5;
}
message ArchiveWorkflowTemplateRequest {
@@ -46,12 +116,38 @@ message ArchiveWorkflowTemplateResponse {
WorkflowTemplate workflowTemplate = 1;
}
message WorkflowExecutionStatisticReport {
int32 total = 1;
string lastExecuted = 2;
int32 running = 3;
int32 completed = 4;
int32 failed = 5;
int32 terminated = 6;
}
message CronWorkflowStatisticsReport {
int32 total = 1;
}
message WorkflowTemplate {
string createdAt = 1;
string uid = 2;
string name = 3;
int32 version = 4;
string manifest = 5;
bool isLatest = 6;
bool isArchived = 7;
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 {
string namespace = 1;
string name = 2;
int64 version = 3;
}

2202
api/workspace.pb.go Normal file

File diff suppressed because it is too large Load Diff

1282
api/workspace.pb.gw.go Normal file

File diff suppressed because it is too large Load Diff

193
api/workspace.proto Normal file
View File

@@ -0,0 +1,193 @@
syntax = "proto3";
package api;
import "google/api/annotations.proto";
import "google/protobuf/empty.proto";
import "workspace_template.proto";
import "common.proto";
import "label.proto";
service WorkspaceService {
rpc CreateWorkspace (CreateWorkspaceRequest) returns (Workspace) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/workspaces"
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}"
};
}
rpc ListWorkspaces (ListWorkspaceRequest) returns (ListWorkspaceResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workspaces"
};
}
rpc UpdateWorkspaceStatus (UpdateWorkspaceStatusRequest) returns (google.protobuf.Empty) {
option (google.api.http) = {
put: "/apis/v1beta1/{namespace}/workspaces/{uid}/status"
body: "status"
};
}
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 {
string uid = 1;
string name = 2;
int64 version = 3;
string createdAt = 4;
repeated Parameter parameters = 5;
WorkspaceTemplate workspaceTemplate = 6;
WorkspaceStatus status = 7;
repeated KeyValue labels = 8;
string url = 9;
repeated Parameter templateParameters = 10;
}
message WorkspaceStatus {
string phase = 1;
string startedAt = 2;
string pausedAt = 3;
string terminatedAt = 4;
}
message CreateWorkspaceBody {
string workspaceTemplateUid = 1;
int64 workspaceTemplateVersion = 2;
repeated Parameter parameters = 3;
repeated KeyValue labels = 4;
}
message CreateWorkspaceRequest {
string namespace = 1;
CreateWorkspaceBody body = 2;
}
message GetWorkspaceRequest {
string namespace = 1;
string uid = 2;
}
message UpdateWorkspaceStatusRequest {
string namespace = 1;
string uid = 2;
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 {
int32 count = 1;
repeated Workspace workspaces = 2;
int32 page = 3;
int32 pages = 4;
int32 totalCount = 5;
}
message PauseWorkspaceRequest {
string namespace = 1;
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;
}

1428
api/workspace_template.pb.go Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,959 @@
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT.
// source: workspace_template.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_WorkspaceTemplateService_GenerateWorkspaceTemplateWorkflowTemplate_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceTemplateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GenerateWorkspaceTemplateWorkflowTemplateRequest
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.WorkspaceTemplate); 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.GenerateWorkspaceTemplateWorkflowTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkspaceTemplateService_GenerateWorkspaceTemplateWorkflowTemplate_0(ctx context.Context, marshaler runtime.Marshaler, server WorkspaceTemplateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GenerateWorkspaceTemplateWorkflowTemplateRequest
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.WorkspaceTemplate); 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.GenerateWorkspaceTemplateWorkflowTemplate(ctx, &protoReq)
return msg, metadata, err
}
func request_WorkspaceTemplateService_CreateWorkspaceTemplate_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceTemplateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq CreateWorkspaceTemplateRequest
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.WorkspaceTemplate); 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)
}
msg, err := client.CreateWorkspaceTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkspaceTemplateService_CreateWorkspaceTemplate_0(ctx context.Context, marshaler runtime.Marshaler, server WorkspaceTemplateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq CreateWorkspaceTemplateRequest
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.WorkspaceTemplate); 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)
}
msg, err := server.CreateWorkspaceTemplate(ctx, &protoReq)
return msg, metadata, err
}
func request_WorkspaceTemplateService_UpdateWorkspaceTemplate_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceTemplateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UpdateWorkspaceTemplateRequest
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.WorkspaceTemplate); 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.UpdateWorkspaceTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkspaceTemplateService_UpdateWorkspaceTemplate_0(ctx context.Context, marshaler runtime.Marshaler, server WorkspaceTemplateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq UpdateWorkspaceTemplateRequest
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.WorkspaceTemplate); 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.UpdateWorkspaceTemplate(ctx, &protoReq)
return msg, metadata, err
}
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}}
)
func request_WorkspaceTemplateService_GetWorkspaceTemplate_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceTemplateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetWorkspaceTemplateRequest
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)
}
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_WorkspaceTemplateService_GetWorkspaceTemplate_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.GetWorkspaceTemplate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkspaceTemplateService_GetWorkspaceTemplate_0(ctx context.Context, marshaler runtime.Marshaler, server WorkspaceTemplateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq GetWorkspaceTemplateRequest
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)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_WorkspaceTemplateService_GetWorkspaceTemplate_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.GetWorkspaceTemplate(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_WorkspaceTemplateService_ListWorkspaceTemplates_0 = &utilities.DoubleArray{Encoding: map[string]int{"namespace": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}}
)
func request_WorkspaceTemplateService_ListWorkspaceTemplates_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceTemplateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListWorkspaceTemplatesRequest
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_WorkspaceTemplateService_ListWorkspaceTemplates_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ListWorkspaceTemplates(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkspaceTemplateService_ListWorkspaceTemplates_0(ctx context.Context, marshaler runtime.Marshaler, server WorkspaceTemplateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListWorkspaceTemplatesRequest
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_WorkspaceTemplateService_ListWorkspaceTemplates_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ListWorkspaceTemplates(ctx, &protoReq)
return msg, metadata, err
}
func request_WorkspaceTemplateService_ListWorkspaceTemplateVersions_0(ctx context.Context, marshaler runtime.Marshaler, client WorkspaceTemplateServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListWorkspaceTemplateVersionsRequest
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.ListWorkspaceTemplateVersions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_WorkspaceTemplateService_ListWorkspaceTemplateVersions_0(ctx context.Context, marshaler runtime.Marshaler, server WorkspaceTemplateServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq ListWorkspaceTemplateVersionsRequest
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.ListWorkspaceTemplateVersions(ctx, &protoReq)
return msg, metadata, err
}
// RegisterWorkspaceTemplateServiceHandlerServer registers the http handlers for service WorkspaceTemplateService to "mux".
// UnaryRPC :call WorkspaceTemplateServiceServer directly.
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
func RegisterWorkspaceTemplateServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server WorkspaceTemplateServiceServer) error {
mux.Handle("POST", pattern_WorkspaceTemplateService_GenerateWorkspaceTemplateWorkflowTemplate_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_GenerateWorkspaceTemplateWorkflowTemplate_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_GenerateWorkspaceTemplateWorkflowTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WorkspaceTemplateService_CreateWorkspaceTemplate_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_CreateWorkspaceTemplate_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_CreateWorkspaceTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("PUT", pattern_WorkspaceTemplateService_UpdateWorkspaceTemplate_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_UpdateWorkspaceTemplate_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_UpdateWorkspaceTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
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()
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_GetWorkspaceTemplate_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_GetWorkspaceTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WorkspaceTemplateService_ListWorkspaceTemplates_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_ListWorkspaceTemplates_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_ListWorkspaceTemplates_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WorkspaceTemplateService_ListWorkspaceTemplateVersions_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_ListWorkspaceTemplateVersions_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_ListWorkspaceTemplateVersions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
// RegisterWorkspaceTemplateServiceHandlerFromEndpoint is same as RegisterWorkspaceTemplateServiceHandler but
// automatically dials to "endpoint" and closes the connection when "ctx" gets done.
func RegisterWorkspaceTemplateServiceHandlerFromEndpoint(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 RegisterWorkspaceTemplateServiceHandler(ctx, mux, conn)
}
// RegisterWorkspaceTemplateServiceHandler registers the http handlers for service WorkspaceTemplateService to "mux".
// The handlers forward requests to the grpc endpoint over "conn".
func RegisterWorkspaceTemplateServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error {
return RegisterWorkspaceTemplateServiceHandlerClient(ctx, mux, NewWorkspaceTemplateServiceClient(conn))
}
// RegisterWorkspaceTemplateServiceHandlerClient registers the http handlers for service WorkspaceTemplateService
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "WorkspaceTemplateServiceClient".
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "WorkspaceTemplateServiceClient"
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in
// "WorkspaceTemplateServiceClient" to call the correct interceptors.
func RegisterWorkspaceTemplateServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client WorkspaceTemplateServiceClient) error {
mux.Handle("POST", pattern_WorkspaceTemplateService_GenerateWorkspaceTemplateWorkflowTemplate_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_GenerateWorkspaceTemplateWorkflowTemplate_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_GenerateWorkspaceTemplateWorkflowTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("POST", pattern_WorkspaceTemplateService_CreateWorkspaceTemplate_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_CreateWorkspaceTemplate_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_CreateWorkspaceTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("PUT", pattern_WorkspaceTemplateService_UpdateWorkspaceTemplate_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_UpdateWorkspaceTemplate_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_UpdateWorkspaceTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
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()
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_GetWorkspaceTemplate_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_GetWorkspaceTemplate_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WorkspaceTemplateService_ListWorkspaceTemplates_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_ListWorkspaceTemplates_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_ListWorkspaceTemplates_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_WorkspaceTemplateService_ListWorkspaceTemplateVersions_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_ListWorkspaceTemplateVersions_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_ListWorkspaceTemplateVersions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
return nil
}
var (
pattern_WorkspaceTemplateService_GenerateWorkspaceTemplateWorkflowTemplate_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", "workflow_template"}, "", runtime.AssumeColonVerbOpt(true)))
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", "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)))
pattern_WorkspaceTemplateService_ListWorkspaceTemplates_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_ListWorkspaceTemplateVersions_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", "versions"}, "", runtime.AssumeColonVerbOpt(true)))
)
var (
forward_WorkspaceTemplateService_GenerateWorkspaceTemplateWorkflowTemplate_0 = runtime.ForwardResponseMessage
forward_WorkspaceTemplateService_CreateWorkspaceTemplate_0 = runtime.ForwardResponseMessage
forward_WorkspaceTemplateService_UpdateWorkspaceTemplate_0 = runtime.ForwardResponseMessage
forward_WorkspaceTemplateService_ArchiveWorkspaceTemplate_0 = runtime.ForwardResponseMessage
forward_WorkspaceTemplateService_GetWorkspaceTemplate_0 = runtime.ForwardResponseMessage
forward_WorkspaceTemplateService_ListWorkspaceTemplates_0 = runtime.ForwardResponseMessage
forward_WorkspaceTemplateService_ListWorkspaceTemplateVersions_0 = runtime.ForwardResponseMessage
)

View File

@@ -0,0 +1,130 @@
syntax = "proto3";
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
rpc GenerateWorkspaceTemplateWorkflowTemplate (GenerateWorkspaceTemplateWorkflowTemplateRequest) returns (WorkflowTemplate) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/workspace_templates/{uid}/workflow_template"
body: "workspaceTemplate"
};
}
// Creates a WorkspaceTemplate
rpc CreateWorkspaceTemplate (CreateWorkspaceTemplateRequest) returns (WorkspaceTemplate) {
option (google.api.http) = {
post: "/apis/v1beta1/{namespace}/workspace_templates"
body: "workspaceTemplate"
};
}
// Updates a WorkspaceTemplate
rpc UpdateWorkspaceTemplate (UpdateWorkspaceTemplateRequest) returns (WorkspaceTemplate) {
option (google.api.http) = {
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) = {
get: "/apis/v1beta1/{namespace}/workspace_templates/{uid}"
};
}
rpc ListWorkspaceTemplates (ListWorkspaceTemplatesRequest) returns (ListWorkspaceTemplatesResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workspace_templates"
};
}
rpc ListWorkspaceTemplateVersions (ListWorkspaceTemplateVersionsRequest) returns (ListWorkspaceTemplateVersionsResponse) {
option (google.api.http) = {
get: "/apis/v1beta1/{namespace}/workspace_templates/{uid}/versions"
};
}
}
message WorkspaceTemplate {
string uid = 1;
string name = 2;
int64 version = 3;
string manifest = 4;
bool isLatest = 5;
string createdAt = 6;
WorkflowTemplate workflowTemplate = 7;
repeated KeyValue labels = 8;
bool isArchived = 9;
string description = 10;
}
message GenerateWorkspaceTemplateWorkflowTemplateRequest {
string namespace = 1;
string uid = 2;
WorkspaceTemplate workspaceTemplate = 3;
}
message CreateWorkspaceTemplateRequest {
string namespace = 1;
WorkspaceTemplate workspaceTemplate = 2;
}
message UpdateWorkspaceTemplateRequest {
string namespace = 1;
string uid = 2;
WorkspaceTemplate workspaceTemplate = 3;
}
message GetWorkspaceTemplateRequest {
string namespace = 1;
string uid = 2;
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 {
int32 count = 1;
repeated WorkspaceTemplate workspaceTemplates = 2;
int32 page = 3;
int32 pages = 4;
int32 totalCount = 5;
}
message ListWorkspaceTemplateVersionsRequest {
string namespace = 1;
string uid = 2;
}
message ListWorkspaceTemplateVersionsResponse {
int32 count = 1;
repeated WorkspaceTemplate workspaceTemplates = 2;
}

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

@@ -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

@@ -0,0 +1,17 @@
-- +goose Up
DROP TABLE workflow_template_versions;
-- +goose Down
CREATE TABLE workflow_template_versions
(
id serial PRIMARY KEY,
workflow_template_id integer NOT NULL REFERENCES workflow_templates ON DELETE CASCADE,
version integer NOT NULL,
is_latest boolean NOT NULL,
manifest text NOT NULL,
-- auditing info
created_at timestamp NOT NULL DEFAULT (NOW() at time zone 'utc'),
modified_at timestamp
);

View File

@@ -0,0 +1,21 @@
-- +goose Up
-- +goose StatementBegin
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(30) NOT NULL,
-- auditing info
created_at timestamp NOT NULL DEFAULT (NOW() at time zone 'utc'),
finished_at timestamp DEFAULT NULL,
failed_at timestamp DEFAULT NULL
);
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE workflow_executions;
-- +goose StatementEnd

View File

@@ -0,0 +1,7 @@
-- +goose Up
ALTER TABLE workflow_templates ADD COLUMN versions INTEGER;
UPDATE workflow_templates SET versions = 1;
ALTER TABLE workflow_templates ALTER COLUMN versions SET NOT NULL;
-- +goose Down
ALTER TABLE workflow_templates DROP COLUMN versions;

View File

@@ -0,0 +1,23 @@
-- +goose Up
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,
manifest text NOT NULL,
-- auditing info
created_at timestamp NOT NULL DEFAULT (NOW() at time zone 'utc')
);
ALTER TABLE workflow_templates DROP COLUMN versions;
-- +goose Down
ALTER TABLE workflow_templates ADD COLUMN versions INTEGER;
UPDATE workflow_templates SET versions = 1;
ALTER TABLE workflow_templates ALTER COLUMN versions SET NOT NULL;
DROP TABLE workflow_template_versions;

View File

@@ -0,0 +1,23 @@
-- +goose Up
CREATE TABLE cron_workflows
(
id serial PRIMARY KEY,
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),
suspend boolean,
concurrency_policy varchar(255),
starting_deadline_seconds INT,
successful_jobs_history_limit INT,
failed_jobs_history_limit INT,
workflow_spec TEXT,
-- auditing info
created_at timestamp NOT NULL DEFAULT (NOW() at time zone 'utc'),
modified_at timestamp
);
-- +goose Down
DROP TABLE cron_workflows;

View File

@@ -0,0 +1,15 @@
-- +goose Up
CREATE TABLE labels
(
id serial PRIMARY KEY,
key varchar(255),
value varchar(255),
resource varchar(255),
resource_id INTEGER,
-- auditing info
created_at timestamp NOT NULL DEFAULT (NOW() at time zone 'utc')
);
-- +goose Down
DROP TABLE labels;

View File

@@ -0,0 +1,24 @@
-- +goose Up
ALTER TABLE workflow_executions
ADD COLUMN started_at TIMESTAMP,
ADD COLUMN workflow_template_version_id INT REFERENCES workflow_template_versions,
ADD COLUMN phase VARCHAR(50),
ADD COLUMN cron_workflow_id INT REFERENCES cron_workflows,
DROP COLUMN failed_at,
DROP COLUMN workflow_template_id
;
UPDATE workflow_executions
SET started_at = created_at,
phase = 'Succeeded'
;
-- +goose Down
ALTER TABLE workflow_executions
DROP COLUMN started_at,
DROP COLUMN workflow_template_version_id,
DROP COLUMN phase,
DROP COLUMN cron_workflow_id,
ADD COLUMN failed_at TIMESTAMP,
ADD COLUMN workflow_template_id INT
;

View File

@@ -0,0 +1,21 @@
-- +goose Up
CREATE TABLE workspace_templates
(
id serial PRIMARY KEY,
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,
-- auditing info
created_at timestamp NOT NULL DEFAULT (NOW() at time zone 'utc'),
modified_at timestamp
);
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;

View File

@@ -0,0 +1,16 @@
-- +goose Up
CREATE TABLE workspace_template_versions
(
id serial PRIMARY KEY,
workspace_template_id integer NOT NULL REFERENCES workspace_templates ON DELETE CASCADE,
version integer NOT NULL,
manifest text NOT NULL,
is_latest boolean DEFAULT false,
-- auditing info
created_at timestamp NOT NULL DEFAULT (NOW() at time zone 'utc'),
modified_at timestamp
);
-- +goose Down
DROP TABLE workspace_template_versions;

View File

@@ -0,0 +1,29 @@
-- +goose Up
ALTER TABLE cron_workflows ADD COLUMN manifest TEXT;
UPDATE cron_workflows SET manifest = '';
ALTER TABLE cron_workflows ALTER manifest SET NOT NULL;
ALTER TABLE cron_workflows
DROP COLUMN schedule,
DROP COLUMN timezone,
DROP COLUMN suspend,
DROP COLUMN concurrency_policy,
DROP COLUMN starting_deadline_seconds,
DROP COLUMN successful_jobs_history_limit,
DROP COLUMN failed_jobs_history_limit,
DROP COLUMN workflow_spec
;
-- +goose Down
ALTER TABLE cron_workflows
ADD COLUMN schedule varchar(255),
ADD COLUMN timezone varchar(255),
ADD COLUMN suspend boolean,
ADD COLUMN concurrency_policy varchar(255),
ADD COLUMN starting_deadline_seconds INT,
ADD COLUMN successful_jobs_history_limit INT,
ADD COLUMN failed_jobs_history_limit INT,
ADD COLUMN workflow_spec TEXT
;
ALTER TABLE cron_workflows DROP COLUMN manifest;

View File

@@ -0,0 +1,27 @@
-- +goose Up
CREATE TABLE workspaces
(
id serial PRIMARY KEY,
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,
workspace_template_id integer NOT NULL REFERENCES workspace_templates ON DELETE CASCADE,
workspace_template_version integer NOT NULL,
started_at timestamp,
paused_at timestamp,
terminated_at timestamp,
-- auditing info
created_at timestamp NOT NULL DEFAULT (NOW() at time zone 'utc'),
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;

View File

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

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;

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