mirror of https://github.com/portainer/portainer
fix(database): db migration improvements EE-2688 (#6662)
parent
85ad4e334a
commit
e4241207cb
@ -1 +1,2 @@
|
|||||||
dist
|
dist
|
||||||
|
api/datastore/test_data
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,802 @@
|
|||||||
|
{
|
||||||
|
"dockerhub": [
|
||||||
|
{
|
||||||
|
"Authentication": false,
|
||||||
|
"Username": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"endpoint_groups": [
|
||||||
|
{
|
||||||
|
"AuthorizedTeams": null,
|
||||||
|
"AuthorizedUsers": null,
|
||||||
|
"Description": "Unassigned endpoints",
|
||||||
|
"Id": 1,
|
||||||
|
"Labels": [],
|
||||||
|
"Name": "Unassigned",
|
||||||
|
"TagIds": [],
|
||||||
|
"Tags": null,
|
||||||
|
"TeamAccessPolicies": {},
|
||||||
|
"UserAccessPolicies": {}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"endpoint_relations": [
|
||||||
|
{
|
||||||
|
"EdgeStacks": {},
|
||||||
|
"EndpointID": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"endpoints": [
|
||||||
|
{
|
||||||
|
"AuthorizedTeams": null,
|
||||||
|
"AuthorizedUsers": null,
|
||||||
|
"AzureCredentials": {
|
||||||
|
"ApplicationID": "",
|
||||||
|
"AuthenticationKey": "",
|
||||||
|
"TenantID": ""
|
||||||
|
},
|
||||||
|
"ComposeSyntaxMaxVersion": "",
|
||||||
|
"EdgeCheckinInterval": 0,
|
||||||
|
"EdgeKey": "",
|
||||||
|
"GroupId": 1,
|
||||||
|
"Id": 1,
|
||||||
|
"IsEdgeDevice": false,
|
||||||
|
"Kubernetes": {
|
||||||
|
"Configuration": {
|
||||||
|
"IngressClasses": null,
|
||||||
|
"RestrictDefaultNamespace": false,
|
||||||
|
"StorageClasses": null,
|
||||||
|
"UseLoadBalancer": false,
|
||||||
|
"UseServerMetrics": false
|
||||||
|
},
|
||||||
|
"Snapshots": null
|
||||||
|
},
|
||||||
|
"LastCheckInDate": 0,
|
||||||
|
"Name": "local",
|
||||||
|
"PublicURL": "",
|
||||||
|
"QueryDate": 0,
|
||||||
|
"SecuritySettings": {
|
||||||
|
"allowBindMountsForRegularUsers": true,
|
||||||
|
"allowContainerCapabilitiesForRegularUsers": true,
|
||||||
|
"allowDeviceMappingForRegularUsers": true,
|
||||||
|
"allowHostNamespaceForRegularUsers": true,
|
||||||
|
"allowPrivilegedModeForRegularUsers": true,
|
||||||
|
"allowStackManagementForRegularUsers": true,
|
||||||
|
"allowSysctlSettingForRegularUsers": false,
|
||||||
|
"allowVolumeBrowserForRegularUsers": false,
|
||||||
|
"enableHostManagementFeatures": false
|
||||||
|
},
|
||||||
|
"Snapshots": [
|
||||||
|
{
|
||||||
|
"DockerSnapshotRaw": {
|
||||||
|
"Containers": null,
|
||||||
|
"Images": null,
|
||||||
|
"Info": null,
|
||||||
|
"Networks": null,
|
||||||
|
"Version": null,
|
||||||
|
"Volumes": null
|
||||||
|
},
|
||||||
|
"DockerVersion": "20.10.13",
|
||||||
|
"HealthyContainerCount": 0,
|
||||||
|
"ImageCount": 9,
|
||||||
|
"NodeCount": 0,
|
||||||
|
"RunningContainerCount": 5,
|
||||||
|
"ServiceCount": 0,
|
||||||
|
"StackCount": 2,
|
||||||
|
"StoppedContainerCount": 0,
|
||||||
|
"Swarm": false,
|
||||||
|
"Time": 1648610112,
|
||||||
|
"TotalCPU": 8,
|
||||||
|
"TotalMemory": 25098706944,
|
||||||
|
"UnhealthyContainerCount": 0,
|
||||||
|
"VolumeCount": 10
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Status": 1,
|
||||||
|
"TLSConfig": {
|
||||||
|
"TLS": false,
|
||||||
|
"TLSSkipVerify": false
|
||||||
|
},
|
||||||
|
"TagIds": [],
|
||||||
|
"Tags": null,
|
||||||
|
"TeamAccessPolicies": {},
|
||||||
|
"Type": 1,
|
||||||
|
"URL": "unix:///var/run/docker.sock",
|
||||||
|
"UserAccessPolicies": {},
|
||||||
|
"UserTrusted": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"registries": [
|
||||||
|
{
|
||||||
|
"Authentication": true,
|
||||||
|
"AuthorizedTeams": null,
|
||||||
|
"AuthorizedUsers": null,
|
||||||
|
"BaseURL": "",
|
||||||
|
"Ecr": {
|
||||||
|
"Region": ""
|
||||||
|
},
|
||||||
|
"Gitlab": {
|
||||||
|
"InstanceURL": "",
|
||||||
|
"ProjectId": 0,
|
||||||
|
"ProjectPath": ""
|
||||||
|
},
|
||||||
|
"Id": 1,
|
||||||
|
"ManagementConfiguration": null,
|
||||||
|
"Name": "canister.io",
|
||||||
|
"Password": "MjWbx8A6YK7cw7",
|
||||||
|
"Quay": {
|
||||||
|
"OrganisationName": "",
|
||||||
|
"UseOrganisation": false
|
||||||
|
},
|
||||||
|
"RegistryAccesses": {
|
||||||
|
"1": {
|
||||||
|
"Namespaces": [],
|
||||||
|
"TeamAccessPolicies": {},
|
||||||
|
"UserAccessPolicies": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"TeamAccessPolicies": {},
|
||||||
|
"Type": 3,
|
||||||
|
"URL": "cloud.canister.io:5000",
|
||||||
|
"UserAccessPolicies": {},
|
||||||
|
"Username": "prabhatkhera"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"resource_control": [
|
||||||
|
{
|
||||||
|
"AdministratorsOnly": false,
|
||||||
|
"Id": 2,
|
||||||
|
"Public": true,
|
||||||
|
"ResourceId": "762gbwaj8r4gcsdy8ld1u4why",
|
||||||
|
"SubResourceIds": [],
|
||||||
|
"System": false,
|
||||||
|
"TeamAccesses": [],
|
||||||
|
"Type": 5,
|
||||||
|
"UserAccesses": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AdministratorsOnly": false,
|
||||||
|
"Id": 3,
|
||||||
|
"Public": true,
|
||||||
|
"ResourceId": "1_alpine",
|
||||||
|
"SubResourceIds": [],
|
||||||
|
"System": false,
|
||||||
|
"TeamAccesses": [],
|
||||||
|
"Type": 6,
|
||||||
|
"UserAccesses": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AdministratorsOnly": false,
|
||||||
|
"Id": 4,
|
||||||
|
"Public": true,
|
||||||
|
"ResourceId": "1_redis",
|
||||||
|
"SubResourceIds": [],
|
||||||
|
"System": false,
|
||||||
|
"TeamAccesses": [],
|
||||||
|
"Type": 6,
|
||||||
|
"UserAccesses": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AdministratorsOnly": false,
|
||||||
|
"Id": 5,
|
||||||
|
"Public": false,
|
||||||
|
"ResourceId": "1_nginx",
|
||||||
|
"SubResourceIds": [],
|
||||||
|
"System": false,
|
||||||
|
"TeamAccesses": [
|
||||||
|
{
|
||||||
|
"AccessLevel": 1,
|
||||||
|
"TeamId": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Type": 6,
|
||||||
|
"UserAccesses": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"roles": [
|
||||||
|
{
|
||||||
|
"Authorizations": {
|
||||||
|
"DockerAgentBrowseDelete": true,
|
||||||
|
"DockerAgentBrowseGet": true,
|
||||||
|
"DockerAgentBrowseList": true,
|
||||||
|
"DockerAgentBrowsePut": true,
|
||||||
|
"DockerAgentBrowseRename": true,
|
||||||
|
"DockerAgentHostInfo": true,
|
||||||
|
"DockerAgentList": true,
|
||||||
|
"DockerAgentPing": true,
|
||||||
|
"DockerAgentUndefined": true,
|
||||||
|
"DockerBuildCancel": true,
|
||||||
|
"DockerBuildPrune": true,
|
||||||
|
"DockerConfigCreate": true,
|
||||||
|
"DockerConfigDelete": true,
|
||||||
|
"DockerConfigInspect": true,
|
||||||
|
"DockerConfigList": true,
|
||||||
|
"DockerConfigUpdate": true,
|
||||||
|
"DockerContainerArchive": true,
|
||||||
|
"DockerContainerArchiveInfo": true,
|
||||||
|
"DockerContainerAttach": true,
|
||||||
|
"DockerContainerAttachWebsocket": true,
|
||||||
|
"DockerContainerChanges": true,
|
||||||
|
"DockerContainerCreate": true,
|
||||||
|
"DockerContainerDelete": true,
|
||||||
|
"DockerContainerExec": true,
|
||||||
|
"DockerContainerExport": true,
|
||||||
|
"DockerContainerInspect": true,
|
||||||
|
"DockerContainerKill": true,
|
||||||
|
"DockerContainerList": true,
|
||||||
|
"DockerContainerLogs": true,
|
||||||
|
"DockerContainerPause": true,
|
||||||
|
"DockerContainerPrune": true,
|
||||||
|
"DockerContainerPutContainerArchive": true,
|
||||||
|
"DockerContainerRename": true,
|
||||||
|
"DockerContainerResize": true,
|
||||||
|
"DockerContainerRestart": true,
|
||||||
|
"DockerContainerStart": true,
|
||||||
|
"DockerContainerStats": true,
|
||||||
|
"DockerContainerStop": true,
|
||||||
|
"DockerContainerTop": true,
|
||||||
|
"DockerContainerUnpause": true,
|
||||||
|
"DockerContainerUpdate": true,
|
||||||
|
"DockerContainerWait": true,
|
||||||
|
"DockerDistributionInspect": true,
|
||||||
|
"DockerEvents": true,
|
||||||
|
"DockerExecInspect": true,
|
||||||
|
"DockerExecResize": true,
|
||||||
|
"DockerExecStart": true,
|
||||||
|
"DockerImageBuild": true,
|
||||||
|
"DockerImageCommit": true,
|
||||||
|
"DockerImageCreate": true,
|
||||||
|
"DockerImageDelete": true,
|
||||||
|
"DockerImageGet": true,
|
||||||
|
"DockerImageGetAll": true,
|
||||||
|
"DockerImageHistory": true,
|
||||||
|
"DockerImageInspect": true,
|
||||||
|
"DockerImageList": true,
|
||||||
|
"DockerImageLoad": true,
|
||||||
|
"DockerImagePrune": true,
|
||||||
|
"DockerImagePush": true,
|
||||||
|
"DockerImageSearch": true,
|
||||||
|
"DockerImageTag": true,
|
||||||
|
"DockerInfo": true,
|
||||||
|
"DockerNetworkConnect": true,
|
||||||
|
"DockerNetworkCreate": true,
|
||||||
|
"DockerNetworkDelete": true,
|
||||||
|
"DockerNetworkDisconnect": true,
|
||||||
|
"DockerNetworkInspect": true,
|
||||||
|
"DockerNetworkList": true,
|
||||||
|
"DockerNetworkPrune": true,
|
||||||
|
"DockerNodeDelete": true,
|
||||||
|
"DockerNodeInspect": true,
|
||||||
|
"DockerNodeList": true,
|
||||||
|
"DockerNodeUpdate": true,
|
||||||
|
"DockerPing": true,
|
||||||
|
"DockerPluginCreate": true,
|
||||||
|
"DockerPluginDelete": true,
|
||||||
|
"DockerPluginDisable": true,
|
||||||
|
"DockerPluginEnable": true,
|
||||||
|
"DockerPluginInspect": true,
|
||||||
|
"DockerPluginList": true,
|
||||||
|
"DockerPluginPrivileges": true,
|
||||||
|
"DockerPluginPull": true,
|
||||||
|
"DockerPluginPush": true,
|
||||||
|
"DockerPluginSet": true,
|
||||||
|
"DockerPluginUpgrade": true,
|
||||||
|
"DockerSecretCreate": true,
|
||||||
|
"DockerSecretDelete": true,
|
||||||
|
"DockerSecretInspect": true,
|
||||||
|
"DockerSecretList": true,
|
||||||
|
"DockerSecretUpdate": true,
|
||||||
|
"DockerServiceCreate": true,
|
||||||
|
"DockerServiceDelete": true,
|
||||||
|
"DockerServiceInspect": true,
|
||||||
|
"DockerServiceList": true,
|
||||||
|
"DockerServiceLogs": true,
|
||||||
|
"DockerServiceUpdate": true,
|
||||||
|
"DockerSessionStart": true,
|
||||||
|
"DockerSwarmInit": true,
|
||||||
|
"DockerSwarmInspect": true,
|
||||||
|
"DockerSwarmJoin": true,
|
||||||
|
"DockerSwarmLeave": true,
|
||||||
|
"DockerSwarmUnlock": true,
|
||||||
|
"DockerSwarmUnlockKey": true,
|
||||||
|
"DockerSwarmUpdate": true,
|
||||||
|
"DockerSystem": true,
|
||||||
|
"DockerTaskInspect": true,
|
||||||
|
"DockerTaskList": true,
|
||||||
|
"DockerTaskLogs": true,
|
||||||
|
"DockerUndefined": true,
|
||||||
|
"DockerVersion": true,
|
||||||
|
"DockerVolumeCreate": true,
|
||||||
|
"DockerVolumeDelete": true,
|
||||||
|
"DockerVolumeInspect": true,
|
||||||
|
"DockerVolumeList": true,
|
||||||
|
"DockerVolumePrune": true,
|
||||||
|
"EndpointResourcesAccess": true,
|
||||||
|
"IntegrationStoridgeAdmin": true,
|
||||||
|
"PortainerResourceControlCreate": true,
|
||||||
|
"PortainerResourceControlUpdate": true,
|
||||||
|
"PortainerStackCreate": true,
|
||||||
|
"PortainerStackDelete": true,
|
||||||
|
"PortainerStackFile": true,
|
||||||
|
"PortainerStackInspect": true,
|
||||||
|
"PortainerStackList": true,
|
||||||
|
"PortainerStackMigrate": true,
|
||||||
|
"PortainerStackUpdate": true,
|
||||||
|
"PortainerWebhookCreate": true,
|
||||||
|
"PortainerWebhookDelete": true,
|
||||||
|
"PortainerWebhookList": true,
|
||||||
|
"PortainerWebsocketExec": true
|
||||||
|
},
|
||||||
|
"Description": "Full control of all resources in an endpoint",
|
||||||
|
"Id": 1,
|
||||||
|
"Name": "Endpoint administrator",
|
||||||
|
"Priority": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Authorizations": {
|
||||||
|
"DockerAgentHostInfo": true,
|
||||||
|
"DockerAgentList": true,
|
||||||
|
"DockerAgentPing": true,
|
||||||
|
"DockerConfigInspect": true,
|
||||||
|
"DockerConfigList": true,
|
||||||
|
"DockerContainerArchiveInfo": true,
|
||||||
|
"DockerContainerChanges": true,
|
||||||
|
"DockerContainerInspect": true,
|
||||||
|
"DockerContainerList": true,
|
||||||
|
"DockerContainerLogs": true,
|
||||||
|
"DockerContainerStats": true,
|
||||||
|
"DockerContainerTop": true,
|
||||||
|
"DockerDistributionInspect": true,
|
||||||
|
"DockerEvents": true,
|
||||||
|
"DockerImageGet": true,
|
||||||
|
"DockerImageGetAll": true,
|
||||||
|
"DockerImageHistory": true,
|
||||||
|
"DockerImageInspect": true,
|
||||||
|
"DockerImageList": true,
|
||||||
|
"DockerImageSearch": true,
|
||||||
|
"DockerInfo": true,
|
||||||
|
"DockerNetworkInspect": true,
|
||||||
|
"DockerNetworkList": true,
|
||||||
|
"DockerNodeInspect": true,
|
||||||
|
"DockerNodeList": true,
|
||||||
|
"DockerPing": true,
|
||||||
|
"DockerPluginList": true,
|
||||||
|
"DockerSecretInspect": true,
|
||||||
|
"DockerSecretList": true,
|
||||||
|
"DockerServiceInspect": true,
|
||||||
|
"DockerServiceList": true,
|
||||||
|
"DockerServiceLogs": true,
|
||||||
|
"DockerSwarmInspect": true,
|
||||||
|
"DockerSystem": true,
|
||||||
|
"DockerTaskInspect": true,
|
||||||
|
"DockerTaskList": true,
|
||||||
|
"DockerTaskLogs": true,
|
||||||
|
"DockerVersion": true,
|
||||||
|
"DockerVolumeInspect": true,
|
||||||
|
"DockerVolumeList": true,
|
||||||
|
"EndpointResourcesAccess": true,
|
||||||
|
"PortainerStackFile": true,
|
||||||
|
"PortainerStackInspect": true,
|
||||||
|
"PortainerStackList": true,
|
||||||
|
"PortainerWebhookList": true
|
||||||
|
},
|
||||||
|
"Description": "Read-only access of all resources in an endpoint",
|
||||||
|
"Id": 2,
|
||||||
|
"Name": "Helpdesk",
|
||||||
|
"Priority": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Authorizations": {
|
||||||
|
"DockerAgentHostInfo": true,
|
||||||
|
"DockerAgentList": true,
|
||||||
|
"DockerAgentPing": true,
|
||||||
|
"DockerAgentUndefined": true,
|
||||||
|
"DockerBuildCancel": true,
|
||||||
|
"DockerBuildPrune": true,
|
||||||
|
"DockerConfigCreate": true,
|
||||||
|
"DockerConfigDelete": true,
|
||||||
|
"DockerConfigInspect": true,
|
||||||
|
"DockerConfigList": true,
|
||||||
|
"DockerConfigUpdate": true,
|
||||||
|
"DockerContainerArchive": true,
|
||||||
|
"DockerContainerArchiveInfo": true,
|
||||||
|
"DockerContainerAttach": true,
|
||||||
|
"DockerContainerAttachWebsocket": true,
|
||||||
|
"DockerContainerChanges": true,
|
||||||
|
"DockerContainerCreate": true,
|
||||||
|
"DockerContainerDelete": true,
|
||||||
|
"DockerContainerExec": true,
|
||||||
|
"DockerContainerExport": true,
|
||||||
|
"DockerContainerInspect": true,
|
||||||
|
"DockerContainerKill": true,
|
||||||
|
"DockerContainerList": true,
|
||||||
|
"DockerContainerLogs": true,
|
||||||
|
"DockerContainerPause": true,
|
||||||
|
"DockerContainerPutContainerArchive": true,
|
||||||
|
"DockerContainerRename": true,
|
||||||
|
"DockerContainerResize": true,
|
||||||
|
"DockerContainerRestart": true,
|
||||||
|
"DockerContainerStart": true,
|
||||||
|
"DockerContainerStats": true,
|
||||||
|
"DockerContainerStop": true,
|
||||||
|
"DockerContainerTop": true,
|
||||||
|
"DockerContainerUnpause": true,
|
||||||
|
"DockerContainerUpdate": true,
|
||||||
|
"DockerContainerWait": true,
|
||||||
|
"DockerDistributionInspect": true,
|
||||||
|
"DockerEvents": true,
|
||||||
|
"DockerExecInspect": true,
|
||||||
|
"DockerExecResize": true,
|
||||||
|
"DockerExecStart": true,
|
||||||
|
"DockerImageBuild": true,
|
||||||
|
"DockerImageCommit": true,
|
||||||
|
"DockerImageCreate": true,
|
||||||
|
"DockerImageDelete": true,
|
||||||
|
"DockerImageGet": true,
|
||||||
|
"DockerImageGetAll": true,
|
||||||
|
"DockerImageHistory": true,
|
||||||
|
"DockerImageInspect": true,
|
||||||
|
"DockerImageList": true,
|
||||||
|
"DockerImageLoad": true,
|
||||||
|
"DockerImagePush": true,
|
||||||
|
"DockerImageSearch": true,
|
||||||
|
"DockerImageTag": true,
|
||||||
|
"DockerInfo": true,
|
||||||
|
"DockerNetworkConnect": true,
|
||||||
|
"DockerNetworkCreate": true,
|
||||||
|
"DockerNetworkDelete": true,
|
||||||
|
"DockerNetworkDisconnect": true,
|
||||||
|
"DockerNetworkInspect": true,
|
||||||
|
"DockerNetworkList": true,
|
||||||
|
"DockerNodeDelete": true,
|
||||||
|
"DockerNodeInspect": true,
|
||||||
|
"DockerNodeList": true,
|
||||||
|
"DockerNodeUpdate": true,
|
||||||
|
"DockerPing": true,
|
||||||
|
"DockerPluginCreate": true,
|
||||||
|
"DockerPluginDelete": true,
|
||||||
|
"DockerPluginDisable": true,
|
||||||
|
"DockerPluginEnable": true,
|
||||||
|
"DockerPluginInspect": true,
|
||||||
|
"DockerPluginList": true,
|
||||||
|
"DockerPluginPrivileges": true,
|
||||||
|
"DockerPluginPull": true,
|
||||||
|
"DockerPluginPush": true,
|
||||||
|
"DockerPluginSet": true,
|
||||||
|
"DockerPluginUpgrade": true,
|
||||||
|
"DockerSecretCreate": true,
|
||||||
|
"DockerSecretDelete": true,
|
||||||
|
"DockerSecretInspect": true,
|
||||||
|
"DockerSecretList": true,
|
||||||
|
"DockerSecretUpdate": true,
|
||||||
|
"DockerServiceCreate": true,
|
||||||
|
"DockerServiceDelete": true,
|
||||||
|
"DockerServiceInspect": true,
|
||||||
|
"DockerServiceList": true,
|
||||||
|
"DockerServiceLogs": true,
|
||||||
|
"DockerServiceUpdate": true,
|
||||||
|
"DockerSessionStart": true,
|
||||||
|
"DockerSwarmInit": true,
|
||||||
|
"DockerSwarmInspect": true,
|
||||||
|
"DockerSwarmJoin": true,
|
||||||
|
"DockerSwarmLeave": true,
|
||||||
|
"DockerSwarmUnlock": true,
|
||||||
|
"DockerSwarmUnlockKey": true,
|
||||||
|
"DockerSwarmUpdate": true,
|
||||||
|
"DockerSystem": true,
|
||||||
|
"DockerTaskInspect": true,
|
||||||
|
"DockerTaskList": true,
|
||||||
|
"DockerTaskLogs": true,
|
||||||
|
"DockerUndefined": true,
|
||||||
|
"DockerVersion": true,
|
||||||
|
"DockerVolumeCreate": true,
|
||||||
|
"DockerVolumeDelete": true,
|
||||||
|
"DockerVolumeInspect": true,
|
||||||
|
"DockerVolumeList": true,
|
||||||
|
"PortainerResourceControlUpdate": true,
|
||||||
|
"PortainerStackCreate": true,
|
||||||
|
"PortainerStackDelete": true,
|
||||||
|
"PortainerStackFile": true,
|
||||||
|
"PortainerStackInspect": true,
|
||||||
|
"PortainerStackList": true,
|
||||||
|
"PortainerStackMigrate": true,
|
||||||
|
"PortainerStackUpdate": true,
|
||||||
|
"PortainerWebhookCreate": true,
|
||||||
|
"PortainerWebhookList": true,
|
||||||
|
"PortainerWebsocketExec": true
|
||||||
|
},
|
||||||
|
"Description": "Full control of assigned resources in an endpoint",
|
||||||
|
"Id": 3,
|
||||||
|
"Name": "Standard user",
|
||||||
|
"Priority": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Authorizations": {
|
||||||
|
"DockerAgentHostInfo": true,
|
||||||
|
"DockerAgentList": true,
|
||||||
|
"DockerAgentPing": true,
|
||||||
|
"DockerConfigInspect": true,
|
||||||
|
"DockerConfigList": true,
|
||||||
|
"DockerContainerArchiveInfo": true,
|
||||||
|
"DockerContainerChanges": true,
|
||||||
|
"DockerContainerInspect": true,
|
||||||
|
"DockerContainerList": true,
|
||||||
|
"DockerContainerLogs": true,
|
||||||
|
"DockerContainerStats": true,
|
||||||
|
"DockerContainerTop": true,
|
||||||
|
"DockerDistributionInspect": true,
|
||||||
|
"DockerEvents": true,
|
||||||
|
"DockerImageGet": true,
|
||||||
|
"DockerImageGetAll": true,
|
||||||
|
"DockerImageHistory": true,
|
||||||
|
"DockerImageInspect": true,
|
||||||
|
"DockerImageList": true,
|
||||||
|
"DockerImageSearch": true,
|
||||||
|
"DockerInfo": true,
|
||||||
|
"DockerNetworkInspect": true,
|
||||||
|
"DockerNetworkList": true,
|
||||||
|
"DockerNodeInspect": true,
|
||||||
|
"DockerNodeList": true,
|
||||||
|
"DockerPing": true,
|
||||||
|
"DockerPluginList": true,
|
||||||
|
"DockerSecretInspect": true,
|
||||||
|
"DockerSecretList": true,
|
||||||
|
"DockerServiceInspect": true,
|
||||||
|
"DockerServiceList": true,
|
||||||
|
"DockerServiceLogs": true,
|
||||||
|
"DockerSwarmInspect": true,
|
||||||
|
"DockerSystem": true,
|
||||||
|
"DockerTaskInspect": true,
|
||||||
|
"DockerTaskList": true,
|
||||||
|
"DockerTaskLogs": true,
|
||||||
|
"DockerVersion": true,
|
||||||
|
"DockerVolumeInspect": true,
|
||||||
|
"DockerVolumeList": true,
|
||||||
|
"PortainerStackFile": true,
|
||||||
|
"PortainerStackInspect": true,
|
||||||
|
"PortainerStackList": true,
|
||||||
|
"PortainerWebhookList": true
|
||||||
|
},
|
||||||
|
"Description": "Read-only access of assigned resources in an endpoint",
|
||||||
|
"Id": 4,
|
||||||
|
"Name": "Read-only user",
|
||||||
|
"Priority": 4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"schedules": [
|
||||||
|
{
|
||||||
|
"Created": 1648608136,
|
||||||
|
"CronExpression": "@every 5m",
|
||||||
|
"EdgeSchedule": null,
|
||||||
|
"EndpointSyncJob": null,
|
||||||
|
"Id": 1,
|
||||||
|
"JobType": 2,
|
||||||
|
"Name": "system_snapshot",
|
||||||
|
"Recurring": true,
|
||||||
|
"ScriptExecutionJob": null,
|
||||||
|
"SnapshotJob": {}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"AllowBindMountsForRegularUsers": true,
|
||||||
|
"AllowContainerCapabilitiesForRegularUsers": true,
|
||||||
|
"AllowDeviceMappingForRegularUsers": true,
|
||||||
|
"AllowHostNamespaceForRegularUsers": true,
|
||||||
|
"AllowPrivilegedModeForRegularUsers": true,
|
||||||
|
"AllowStackManagementForRegularUsers": true,
|
||||||
|
"AllowVolumeBrowserForRegularUsers": false,
|
||||||
|
"AuthenticationMethod": 1,
|
||||||
|
"BlackListedLabels": [],
|
||||||
|
"DisableTrustOnFirstConnect": false,
|
||||||
|
"DisplayDonationHeader": false,
|
||||||
|
"DisplayExternalContributors": false,
|
||||||
|
"EdgeAgentCheckinInterval": 5,
|
||||||
|
"EnableEdgeComputeFeatures": false,
|
||||||
|
"EnableHostManagementFeatures": false,
|
||||||
|
"EnableTelemetry": true,
|
||||||
|
"EnforceEdgeID": false,
|
||||||
|
"FeatureFlagSettings": null,
|
||||||
|
"HelmRepositoryURL": "https://charts.bitnami.com/bitnami",
|
||||||
|
"KubeconfigExpiry": "0",
|
||||||
|
"KubectlShellImage": "portainer/kubectl-shell",
|
||||||
|
"LDAPSettings": {
|
||||||
|
"AnonymousMode": true,
|
||||||
|
"AutoCreateUsers": true,
|
||||||
|
"GroupSearchSettings": [
|
||||||
|
{
|
||||||
|
"GroupAttribute": "",
|
||||||
|
"GroupBaseDN": "",
|
||||||
|
"GroupFilter": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"ReaderDN": "",
|
||||||
|
"SearchSettings": [
|
||||||
|
{
|
||||||
|
"BaseDN": "",
|
||||||
|
"Filter": "",
|
||||||
|
"UserNameAttribute": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"StartTLS": false,
|
||||||
|
"TLSConfig": {
|
||||||
|
"TLS": false,
|
||||||
|
"TLSSkipVerify": false
|
||||||
|
},
|
||||||
|
"URL": ""
|
||||||
|
},
|
||||||
|
"LogoURL": "",
|
||||||
|
"OAuthSettings": {
|
||||||
|
"AccessTokenURI": "",
|
||||||
|
"AuthorizationURI": "",
|
||||||
|
"ClientID": "",
|
||||||
|
"DefaultTeamID": 0,
|
||||||
|
"KubeSecretKey": null,
|
||||||
|
"LogoutURI": "",
|
||||||
|
"OAuthAutoCreateUsers": false,
|
||||||
|
"RedirectURI": "",
|
||||||
|
"ResourceURI": "",
|
||||||
|
"SSO": false,
|
||||||
|
"Scopes": "",
|
||||||
|
"UserIdentifier": ""
|
||||||
|
},
|
||||||
|
"SnapshotInterval": "5m",
|
||||||
|
"TemplatesURL": "https://raw.githubusercontent.com/portainer/templates/master/templates-2.0.json",
|
||||||
|
"UserSessionTimeout": "8h",
|
||||||
|
"fdoConfiguration": {
|
||||||
|
"enabled": false,
|
||||||
|
"ownerPassword": "",
|
||||||
|
"ownerURL": "",
|
||||||
|
"ownerUsername": ""
|
||||||
|
},
|
||||||
|
"openAMTConfiguration": {
|
||||||
|
"certFileContent": "",
|
||||||
|
"certFileName": "",
|
||||||
|
"certFilePassword": "",
|
||||||
|
"domainName": "",
|
||||||
|
"enabled": false,
|
||||||
|
"mpsPassword": "",
|
||||||
|
"mpsServer": "",
|
||||||
|
"mpsToken": "",
|
||||||
|
"mpsUser": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ssl": {
|
||||||
|
"certPath": "",
|
||||||
|
"httpEnabled": true,
|
||||||
|
"keyPath": "",
|
||||||
|
"selfSigned": false
|
||||||
|
},
|
||||||
|
"stacks": [
|
||||||
|
{
|
||||||
|
"AdditionalFiles": null,
|
||||||
|
"AutoUpdate": null,
|
||||||
|
"CreatedBy": "",
|
||||||
|
"CreationDate": 0,
|
||||||
|
"EndpointId": 1,
|
||||||
|
"EntryPoint": "docker/alpine37-compose.yml",
|
||||||
|
"Env": [],
|
||||||
|
"FromAppTemplate": false,
|
||||||
|
"GitConfig": null,
|
||||||
|
"Id": 2,
|
||||||
|
"IsComposeFormat": false,
|
||||||
|
"Name": "alpine",
|
||||||
|
"Namespace": "",
|
||||||
|
"ProjectPath": "/home/prabhat/portainer/data/ce1.25/compose/2",
|
||||||
|
"ResourceControl": null,
|
||||||
|
"Status": 1,
|
||||||
|
"SwarmId": "s3fd604zdba7z13tbq2x6lyue",
|
||||||
|
"Type": 1,
|
||||||
|
"UpdateDate": 0,
|
||||||
|
"UpdatedBy": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AdditionalFiles": null,
|
||||||
|
"AutoUpdate": null,
|
||||||
|
"CreatedBy": "",
|
||||||
|
"CreationDate": 0,
|
||||||
|
"EndpointId": 1,
|
||||||
|
"EntryPoint": "docker-compose.yml",
|
||||||
|
"Env": [],
|
||||||
|
"FromAppTemplate": false,
|
||||||
|
"GitConfig": null,
|
||||||
|
"Id": 5,
|
||||||
|
"IsComposeFormat": false,
|
||||||
|
"Name": "redis",
|
||||||
|
"Namespace": "",
|
||||||
|
"ProjectPath": "/home/prabhat/portainer/data/ce1.25/compose/5",
|
||||||
|
"ResourceControl": null,
|
||||||
|
"Status": 1,
|
||||||
|
"SwarmId": "",
|
||||||
|
"Type": 2,
|
||||||
|
"UpdateDate": 0,
|
||||||
|
"UpdatedBy": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AdditionalFiles": null,
|
||||||
|
"AutoUpdate": null,
|
||||||
|
"CreatedBy": "",
|
||||||
|
"CreationDate": 0,
|
||||||
|
"EndpointId": 1,
|
||||||
|
"EntryPoint": "docker-compose.yml",
|
||||||
|
"Env": [],
|
||||||
|
"FromAppTemplate": false,
|
||||||
|
"GitConfig": null,
|
||||||
|
"Id": 6,
|
||||||
|
"IsComposeFormat": false,
|
||||||
|
"Name": "nginx",
|
||||||
|
"Namespace": "",
|
||||||
|
"ProjectPath": "/home/prabhat/portainer/data/ce1.25/compose/6",
|
||||||
|
"ResourceControl": null,
|
||||||
|
"Status": 1,
|
||||||
|
"SwarmId": "",
|
||||||
|
"Type": 2,
|
||||||
|
"UpdateDate": 0,
|
||||||
|
"UpdatedBy": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"teams": [
|
||||||
|
{
|
||||||
|
"Id": 1,
|
||||||
|
"Name": "hello"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tunnel_server": {
|
||||||
|
"PrivateKeySeed": "IvX6ZPRuWtLS5zyg"
|
||||||
|
},
|
||||||
|
"users": [
|
||||||
|
{
|
||||||
|
"EndpointAuthorizations": null,
|
||||||
|
"Id": 1,
|
||||||
|
"Password": "$2a$10$siRDprr/5uUFAU8iom3Sr./WXQkN2dhSNjAC471pkJaALkghS762a",
|
||||||
|
"PortainerAuthorizations": {
|
||||||
|
"PortainerDockerHubInspect": true,
|
||||||
|
"PortainerEndpointExtensionAdd": true,
|
||||||
|
"PortainerEndpointExtensionRemove": true,
|
||||||
|
"PortainerEndpointGroupList": true,
|
||||||
|
"PortainerEndpointInspect": true,
|
||||||
|
"PortainerEndpointList": true,
|
||||||
|
"PortainerExtensionList": true,
|
||||||
|
"PortainerMOTD": true,
|
||||||
|
"PortainerRegistryInspect": true,
|
||||||
|
"PortainerRegistryList": true,
|
||||||
|
"PortainerTeamList": true,
|
||||||
|
"PortainerTemplateInspect": true,
|
||||||
|
"PortainerTemplateList": true,
|
||||||
|
"PortainerUserInspect": true,
|
||||||
|
"PortainerUserList": true,
|
||||||
|
"PortainerUserMemberships": true
|
||||||
|
},
|
||||||
|
"Role": 1,
|
||||||
|
"Username": "admin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EndpointAuthorizations": null,
|
||||||
|
"Id": 2,
|
||||||
|
"Password": "$2a$10$WpCAW8mSt6FRRp1GkynbFOGSZnHR6E5j9cETZ8HiMlw06hVlDW/Li",
|
||||||
|
"PortainerAuthorizations": {
|
||||||
|
"PortainerDockerHubInspect": true,
|
||||||
|
"PortainerEndpointExtensionAdd": true,
|
||||||
|
"PortainerEndpointExtensionRemove": true,
|
||||||
|
"PortainerEndpointGroupList": true,
|
||||||
|
"PortainerEndpointInspect": true,
|
||||||
|
"PortainerEndpointList": true,
|
||||||
|
"PortainerExtensionList": true,
|
||||||
|
"PortainerMOTD": true,
|
||||||
|
"PortainerRegistryInspect": true,
|
||||||
|
"PortainerRegistryList": true,
|
||||||
|
"PortainerTeamList": true,
|
||||||
|
"PortainerTemplateInspect": true,
|
||||||
|
"PortainerTemplateList": true,
|
||||||
|
"PortainerUserInspect": true,
|
||||||
|
"PortainerUserList": true,
|
||||||
|
"PortainerUserMemberships": true
|
||||||
|
},
|
||||||
|
"Role": 1,
|
||||||
|
"Username": "prabhat"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": {
|
||||||
|
"DB_UPDATING": "false",
|
||||||
|
"DB_VERSION": "35",
|
||||||
|
"INSTANCE_ID": "null"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package validate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/go-playground/validator/v10"
|
||||||
|
portainer "github.com/portainer/portainer/api"
|
||||||
|
)
|
||||||
|
|
||||||
|
var validate *validator.Validate
|
||||||
|
|
||||||
|
func ValidateLDAPSettings(ldp *portainer.LDAPSettings) error {
|
||||||
|
validate = validator.New()
|
||||||
|
registerValidationMethods(validate)
|
||||||
|
|
||||||
|
return validate.Struct(ldp)
|
||||||
|
}
|
@ -0,0 +1,61 @@
|
|||||||
|
package validate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
portainer "github.com/portainer/portainer/api"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestValidateLDAPSettings(t *testing.T) {
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
ldap portainer.LDAPSettings
|
||||||
|
wantErr bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Empty LDAP Settings",
|
||||||
|
ldap: portainer.LDAPSettings{},
|
||||||
|
wantErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "With URL",
|
||||||
|
ldap: portainer.LDAPSettings{
|
||||||
|
AnonymousMode: true,
|
||||||
|
URL: "192.168.0.1:323",
|
||||||
|
},
|
||||||
|
wantErr: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Validate URL and URLs",
|
||||||
|
ldap: portainer.LDAPSettings{
|
||||||
|
AnonymousMode: true,
|
||||||
|
URL: "192.168.0.1:323",
|
||||||
|
},
|
||||||
|
wantErr: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "validate client ldap",
|
||||||
|
ldap: portainer.LDAPSettings{
|
||||||
|
AnonymousMode: false,
|
||||||
|
ReaderDN: "CN=LDAP API Service Account",
|
||||||
|
Password: "Qu**dfUUU**",
|
||||||
|
URL: "aukdc15.pgc.co:389",
|
||||||
|
TLSConfig: portainer.TLSConfiguration{
|
||||||
|
TLS: false,
|
||||||
|
TLSSkipVerify: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
wantErr: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
err := ValidateLDAPSettings(&tt.ldap)
|
||||||
|
if (err == nil) == tt.wantErr {
|
||||||
|
t.Errorf("No error expected but got %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package validate
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/go-playground/validator/v10"
|
||||||
|
)
|
||||||
|
|
||||||
|
func registerValidationMethods(v *validator.Validate) {
|
||||||
|
v.RegisterValidation("validate_bool", ValidateBool)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validation methods below are being used for custom validation
|
||||||
|
*/
|
||||||
|
func ValidateBool(fl validator.FieldLevel) bool {
|
||||||
|
_, ok := fl.Field().Interface().(bool)
|
||||||
|
return ok
|
||||||
|
}
|
Loading…
Reference in new issue