* feat(k8s): Add the ability to display realtime node metrics in Kubernetes EE-130
* feat(k8s) show observation timestamp instead of real timestamp EE-130
Co-authored-by: Simon Meng <simon.meng@portainer.io>
* feat(kubernetes/summary): summary panel component EE-811 (#388)
* initialised summary panel component, controller and binding
* summary component html, css, expanding-state persistance
* removed redundant scope variable
* - watching for formvalues scope changes
- 1-way data binding
- method descriptions and to-do
- objects setup for configuration output
- template setup to be re-used for summary of other k8s resources
* refactored to enable parallel development
* migrated k8s resource helper functions to their own respective files
* integrated action (create, update, delete) into html template
* configuration summary implementation (#390)
* feat(kubernetes/summary): kubernetes application creation and update summary EE-802 (#396)
* added application resources types
* - added support for oldFormValues to support complex app update summary
- additional app cpu and memory limits
- introduction of summary types - for service support
* initial implementation of app creation and update summary
* comments to applicationService methods to notify future devs to keep summary in sync
* updated comments to outline modified resources in k8s app edit
* pr bugfix to increase readability
* Feat kubernetes namespaces summary EE-801 (#398)
* feat(k8s/summary): show summary for namespace creation and update EE-436/EE-801
* feat(k8s/summary): show the correct article for summary EE-436/EE-801
* feat(k8s/summary): check formValue type in generateResourceSummaryList to avoid unnecessary calculation EE-436/EE-801
* feat(k8s/summary): cleanup code EE-436/EE-801
* feat(k8s/summary): rename helps.js to helpers.js EE-436/EE-801
* updated comment to be more readable
Co-authored-by: Simon Meng <simon.meng@portainer.io>
Co-authored-by: zees-dev <dev.786zshan@gmail.com>
* feat(k8s/summary): hide summary section if nothing has changed EE-436
* bugfix: returning created resources after update
* fixed incorrect ingress summary bug
* fixed patch based bugs - displaying updates for resources properly
Co-authored-by: cong meng <mcpacino@gmail.com>
Co-authored-by: Simon Meng <simon.meng@portainer.io>
* feat(k8s): cut image name to 64 chars with truncate filter in all applications datatables
* feat(k8s): add full name on hovering over the image name
Co-authored-by: Stéphane Busso <sbusso@users.noreply.github.com>
* fix(rbac) override AccessPolicies by endpint group ID correctly instead by array index EE-744
* fix(rbac) Iterate users and teams who are existing in NAP EE-744
* fix(rbac) Rename long func name to CleanNAPWithOverridePolicies EE-744
* fix(rbac) cleanup code EE-744
Co-authored-by: Simon Meng <simon.meng@portainer.io>
Add a button next to the image field when creating a new container, which
takes the user to the Docker Hub search page for this image. Version
identifiers are trimmed from the image name to ensure that matching images
will be found.
Co-authored-by: knittl <knittl89+git@googlemail.com>
* fix(rbac) user in 2 teams with mix of endpoint admin and operator has perms of endpoint admin EE-587
* fix(rbac) add unit test for getKeyRole function EE-587
Co-authored-by: Simon Meng <simon.meng@portainer.io>
* EE-384: add endpoint to set auto backup (#224)
* EE-383: add endpoint to fetch backup settings (#231)
* add get backup settings handler
* add api docs desc
* EE-382: restore from s3 (#233)
* EE-381: add GET backup status handler (#234)
* EE-385: Add S3 backup execute handler (#237)
* add s3 backup execute handler
* refactories inside `./api/backup/backup_scheduler.go` and `./api/backup/backup_scheduler.go`
* fix tests
* EE-375: added backup to S3 form
* EE-376: added restore from S3 form
* EE-377: Update Home screen to display last backup run status
* update backup service with back end endpoints.
* restart admin monitor during s3 restores
* use go 1.13
* go 1.13 compatibility
* EE-375: added cron-validator lib
* EE-375: using enum to compare form types
* EE-375: validate cron rule field
* try fix windows build
* EE-375 EE-376 backup and restore forms validation changes
* fix(autobackup): update autobackup settings validation rules (#260)
* fix(autobackup): automate backup to s3 fe update (#261)
* EE-292: fixed typo in property.
* EE-292: updated auto backup front end validation.
* EE-292: updated lib to validate cron rule in front end
* fix dependencies
* bumped libcompose version
Co-authored-by: Hui <arris_li@hotmail.com>
Co-authored-by: Felix Han <felix.han@portainer.io>
Co-authored-by: fhanportainer <79428273+fhanportainer@users.noreply.github.com>
* feat(k8s/config): disable edit used config keys (#4754)
* feat(k8s/config): tag used data keys
* feat(k8s/config): disabled edit of used data keys
* fix(kube/config): show used key warning when needed (#4890)
fix [CE-469]
- recalculate duplcate keys when they are changed
- show used warning on duplicate keys
* fix(k8s): EE-354 Unable to use advanced deployment feature on agent and Edge agent endpoints
* fix(k8s): EE-354 enable advance deploy UI
* fix(k8s): EE-354 use the v2 version of agent api instead of v3
Co-authored-by: Simon Meng <simon.meng@portainer.io>
* EE-319: backup endpoint (#193)
* feat(backup):
* add an orbiter to block writes while backup
* add backup handler
* add an ability to tar.gz a dir
* add aes encryption support
* EE-320: restore endpoint (#196)
* feat(backup):
* add restore handler
* re-init system state after restore
* feat(backup): Update server to respect readonly lock (#199)
* feat(backup): EE-322 Add backup and restore screen (#198)
Co-authored-by: Simon Meng <simon.meng@portainer.io>
* name archive as portainer-backup_yyyy-mm-dd_hh-mm-ss
* backup custom templates and edge jobs
* restart http and proxy servers after restore to re-init internal state
* feat(backup): EE-322 hide password field if password protect toggle is off
* feat(backup): EE-322 add tooltip for password field of restore backup
* feat(backup): EE-322 wait for backend restart after restoring
* Shutdown background go-routines
* changed restore err message when cannot extract
* fix: symlinks are ignored from backups
* replace single admin check with a restartable monitor (#238)
* clean log
Co-authored-by: Maxime Bajeux <max.bajeux@gmail.com>
Co-authored-by: cong meng <mcpacino@gmail.com>
Co-authored-by: Simon Meng <simon.meng@portainer.io>
* feat(rbac): EE-226 Add a new RBAC "Operator" Role
* feat(rbac): EE-226 prioritize Operator after EndpointAdmin and before Helpdesk
* feat(rbac): EE-226 access viewer shows incorrect effective role after introduce of Operator
* feat(rbac): EE-226 show roles order by priority other than name
* feat(rbac): EE-226 remove OperationK8sVolumeDetailsW authorization from operator role
* feat(rbac): EE-226 always increase bucket next sequence when create a role
Co-authored-by: Simon Meng <simon.meng@portainer.io>
* feat(docker) EE-131 relocate the Docker features/security settings to be available per endpoint
* feat(docker) EE-131 allow endpoint admin role user to update endpoint settings
* feat(docker) EE-131 populate volume browsing authorizations to user endpoint authorizations when user toggle the setting of volume management for non-administrators
* feat(docker) EE-131 remove parameter volumeBrowsingAuthorizations from all DefaultEndpointAuthorizationsForxxx functions
* feat(docker) EE-131 fix a layout bug of the browse button
* feat(ACI): EE-273 move migrator of 27 into migrate_dbversion26.go
* feat(docker) EE-131 in container creation view, show the privileged mode toggle if cureent user is admin or endpoint admin
Co-authored-by: Simon Meng <simon.meng@portainer.io>
* refactor(stack): create unique name function
* refactor(stack): change stack resource control id
* feat(stacks): validate stack unique name in endpoint
* feat(stacks): prevent name collision with external stacks
* refactor(stacks): move resource id util
* refactor(stacks): supply resource id util with name and endpoint
* fix(docker): calculate swarm resource id
* feat(stack): prevent migration if stack name already exist
* feat(authorization): use stackutils
* fix(frontend): revalidate configuration name when change resource pool (ee-85)
* fix(front-end): EE-85 fixed the issue with the form validation in the Configuration creation view
Co-authored-by: Simon Meng <simon.meng@portainer.io>
Co-authored-by: Felix Han <felix.han@portainer.io>
* feat(docker/stacks): add creation and update dates
* feat(docker/stacks): put ownership column as the last column
* feat(docker/stacks): fix the no stacks message
* refactor(docker/stacks): make external stacks helpers more readable
* feat(docker/stacks): add updated and created by
* feat(docker/stacks): toggle updated column
* refactor(datatable): create column visibility component
Co-authored-by: alice groux <alice.grx@gmail.com>
* * handle teams been added or removed in the resource pool
* do not delete role bindings but just remove the user subject
* * fix missing rolemap
* * revert the role bindings changes (not the cause of the issue)
* * fix token cache cleaning endpoint tokens
* fix(license): Fix license expiration inconsistency with displayed date
* Fix inconsistent expiration
* Use liblicense expiration compute
* wip
* Use db for expiresAt in license detailed view
* Fix date differences
* * partially ignore errors during user deletion
* collect all errors during user deletion
* remove role/cluster role bindings when empty
* + update resource pool access endpoint
* remove bindings when user is removed from resource pool
* remove token cache when user is added to the resource pool
* - remove delete tokens endpoint
* use actual TriggerUserAuthUpdate
* * fix comments
* * improve error returns
* * removed authorization in stack deployment, will let k8s handling it
* * removed unused import
* + OperationK8sApplicationsAdvancedDeploymentRW for user
* check namespace authorization in k8s stack deployment endpoint
* - remove OperationK8sApplicationsAdvancedDeploymentRW from user
* fix(rbac): Errors thrown in cluster view for standard & readonly users
* Revert "fix(rbac): Errors thrown in cluster view for standard & readonly users"
This reverts commit 400016314c3c0f9b22880ede10e3b2d2897c0363.
* * block the loading of nodes and endpoints if not authorized with K8sClusterNodeR
Co-authored-by: yi-portainer <yi.chen@portainer.io>
* fix(rbac): Endpoint admin cannot access the cluster setup view
* * allow endpoint admin to update k8s cluster setup in endpoint
* * make sure a user token is issued first
* fix(rbac): allow admin to update cluster setup
Co-authored-by: yi-portainer <yi.chen@portainer.io>
* fix(rbac): Not enforcing on backend for resource creation, application edit and console log operations of users that this should be prevented for
* + k8s access user namespaces policy
+ debug logs
* fix multiple authorization calculation issues
* * use endpoint role rather than user role for calculating authorizations
* * fix namespace role binding
* * check user authorization in k8s pod exec
* * fix some of the logging messages
Co-authored-by: yi-portainer <yi.chen@portainer.io>
* feat(router): add transition guard for init route
* feat(router): check if license is valid between routes
* style(app): change order of config and run
* feat(bouncer): block non admins from using without license
* style(bouncer): add comment about license validation
* fix(endpoint): hide kubernetes edge/agent instructions for windows
* feat(endpoint): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* fix(frontend): show failing placement details for endpoint-admin and helpdesk users
* fix(frontend): add excludeAuthorization directive to determine endpoint-admin and helpdesk users
* fix(k8s/rbac): add OperationK8sApplicationErrorDetailsR authorization for endpoint-admin and helpdesk users
Co-authored-by: Simon Meng <simon.meng@portainer.io>
* fix(licenses): prevent removal of last valid license
* * add back the logic that prevent the last license been removed, whether valid or not.
* Revert "* add back the logic that prevent the last license been removed, whether valid or not."
This reverts commit 389b5f8985bf543821cab02ad3252d75ef46ccee.
Co-authored-by: yi-portainer <yi.chen@portainer.io>
* fix(k8s/application): improve ux for instance count input in creation/edition application
* fix(k8s/application): improve validation on persisted folder size and instance count for isolated applications
* feat(k8s/application): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* refactor backup
Update upgrade texts
* Restore Failed Upgrade to EE to initial CE version
* Store version before upgrading
* Check rollback command line
* Fix version display
* Update template url only for CE 1.xx
* Fix comments
* revert go modules
* remove duplicate migration
* remove unused files
* feat(licenses): show nodes count in license info
* add bold to node count
* add red color to node when over usage
Co-authored-by: Stéphane Busso <stephane.busso@gmail.com>
* fix(application): Publishing over load balancer should be prevented when editing an application in an exhausted resource pool
* fix(application): can't edit the load balancer ports associated to an application that was deployed whilst the quota was not exhausted
* fix(resource-reservation): Invalid total CPU count in multiple places
* fix(ldap): apply default filters on search (#60)
* fix(k8s/resourcepool): fix CPU count in resource pool creation
* fix(k8s/resourcepool): round CPU count to one decimal
* fix(app): possibly unhandled rejections
* chorse(deps): update liblicense (#62)
* fix(licenses): show message when license is invalid (#66)
* fix(licenses): show message when license is invalid
* fix(licenses): align icon
* feat(license): prevent removal of all licenses (#65)
* feat(license): prevent removal of all licenses
* fix(license): skip caching of info if all licenses failed
* fix(ldap): clear settings when moving from custom to openldap (#64)
* fix(ldap): parse both lower and upper case domain (#63)
* fix(ldap): use a specific openldap settings (#67)
* feat(ldap): disable anonymous mode in openldap (#68)
* fix(k8s/application): persisted folders restriction (#69)
* fix(build/kompose): bump Kompose version (#70)
* fix(resource-reservation): Invalid total CPU count in multiple places
* fix(resource-reservation): Invalid total CPU count in multiple places
Co-authored-by: Chaim Lev-Ari <chiptus@users.noreply.github.com>
Co-authored-by: alice groux <alice.grx@gmail.com>
Co-authored-by: xAt0mZ <baron_l@epitech.eu>
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
Co-authored-by: xAt0mZ <xAt0mZ@users.noreply.github.com>
* feat(k8s/resource-pool): add storage quota create/edit
* feat(kubernetes): persistent volume claim size validation on app create/edit
* feat(k8s/volume): quota validation on volume expansion
* fix(k8s/application): remove resource limitation message when then is no resource limitation but volume quota
* style(k8s/application): remove HTML layout debug string
* feat(k8s/resource-pool): remove warning message on storage quota reduction
* fix(k8s/application): available size on storage quota is now properly computed on init
* fix(k8s/application): 'flagged for removal' bindings are not considered free space anymore
* feat(k8s/application): allow users to use existing available volumes when quotas are exhausted
* feat(k8s/resource-pool): storage quota usage bar in edit view
* fix(k8s/resource-pool): create RP enable quota by default
* refactor(k8s): move all volume related units to base 10 instead of base 2 (remive i suffix)
* fix(k8s/application): visual issues caused by latency in computation
* feat(k8s/resource-pool): allow standard users to see storage quota usage
* feat(k8s/volume): show max available size on volume expand
* style(k8s/application): exhausted storage quota message
* fix(k8s/application): remove persisted folders entries when selecting RP with all exhausted storage quotas and no available volumes
* style(k8s/application): file format after rebase
* fix(k8s/application): evaluate quota onInit for app edit
* chore(grunt): add prod watch grunt rule and config
* fix(k8s/application): display 'no storages' message on all restricted quotas
* refactor(k8s/volumes): unify volume parsing
* refactor(app): proper prod watch + enforce parseInt radix
* feat(app/endpoint): add deployment instructions for windows
* feat(endpoint-creation): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* + endpoint and namespace level authorizations
+ user namespace authorization API
+ k8s client setup service account with k8s roles and policies by portainer role
* User authorization changes refresh token cache
* rbac authorizes k8s requests
* CE to EE migrator to include new authorizations
* code clean up
* comments
* * merge in the RestrictDefaultNamespace changes
* - remove unnecessary check for default namespace
* + updates namespace access policies when generating token
* * updates namespace access policies when querying the user namespace endpoint
* + k8s rule in rbac.go for endpoint access test
+ missing k8s cluster rules for different roles
* feat(rbac): update kube rbac
* feat(rbac): use the authorization directive
* feat(rbac): Update namespace access policies when user/team is deleted
* refactor(app): use new angular-multi-select capabilities
* feat(rbac): fix authorizations
* feat(rbac): fix userAccessPolicies update bug
* feat(rbac): add W applications authorizations
* feat(rbac): add application details W authorizations
* feat(rbac): add configurations W autohorizations
* feat(rbac): add configuration details W authorizations
* feat(rbac): add volumes W authorizations
* feat(rbac): add volume details W authorizations
* feat(rbac): add componentstatus to portainer-view role and add cluster/node authorizations
* fix(rbac): disable application note for non authorized user
* fix(rbac): add endpoints list and components status to portainer-basic
* fix(rbac): allow user to access default namespace when restrict default namespace isn't activated
* fix(rbac): remove default namespace from useraccesspolicies when restrict default namespace isn't activated
* fix(rbac): change some things
* fix(rbac): allow standard user to access container console
* - removed unused parameter
* fix(rbac): fix team authorizations
Co-authored-by: Maxime Bajeux <max.bajeux@gmail.com>
Co-authored-by: xAt0mZ <baron_l@epitech.eu>
* feat(stacks): check for name collision within external stacks
* feat(stacks): check for name collisions
* feat(stacks): check for running stacks
* feat(stacks): change name collision message
* feat(stack): check for existing services only on swarm
* fix(http): supply docker factory to handler
* feat(stacks): look at all containers
* feat(ldap): simplify ldap configuration
refactor(auth): move ldap settings to a component
feat(ldap): add username style autofill
feat(ldap): customs for ad
feat(app): introduce box selector
refactor(auth-settings): use box selector
feat(ldap): style changes
refactor(ldap): move connectivity check button to a component
refactor(settings): move ldap security settings to a component
refactor(ldap): move user search to component
refactor(ldap): move group search to component
style(ldap): remove comment
refactor(auth-settings): move auto-user-toggle to component
feat(ldap): provide methods to search for users and groups
refactor(ldap): move group/user settings into component
refactor(ldap): provide labels for components
refactor(ldap): separate custom and ad settings
fix(ldap): search for users
feat(ldap): search users
feat(ldap): complete password if missing
feat(ldap): search for users
feat(ldap): show a list of users
feat(ldap): get user uid
feat(ldap): search groups without password
feat(groups): show group results
feat(ldap): add display types
feat(ldap): search for groups
refactor(ldap): clean code
fix(ldap): sort users table
fix(ldap): show settings by type
feat(ldap): parse values from basedn
feat(ldap): parse values
feat(app): emit on change event from box-selector
feat(ldap): user search filter
feat(ldap): search username attribute
feat(ldap): remove format around search filter
feat(ldap): ad group search
refactor(ldap): move dn builder to component
feat(ldap): use base dn builder for group search
feat(ldap): search for ad groups
refactor(ldap): replace domain root object
feat(ldap): openldap settings
refactor(ldap): delete empty controllers
feat(ldap): remove warning on wrong group filter
feat(ldap): clear username and pass if not AD
feat(ldap): clear basedn when switch from openldap to ad
feat(ldap): clear ldap settings when switich from ldap to ad
feat(ldap): set dn only if there are values
feat(ldap): support more cases of domains
feat(ldap): parse openldap domain correctly
refactor(ldap): move server type check
feat(ldap): move entries
feat(ldap): show username format
style(ldap): remove comments
feat(ldap): clear group filter when no groups
refactor(ldap): replace generic payload
feat(ldap): allow the user to test login
feat(ldap): add test login to custom and open ldap settings
feat(ldap): style fixes
fix(ldap): style fix
fix(ldap): style fixes
refactor(ldap): move components to module
feat(ldap): add group entries
feat(ldap): add borders around each group entry
feat(ldap): parse user filter
feat(ldap): add/remove group
feat(ldap): set ad anonymous mode to false
feat(ldap): add group name
feat(ldap): fix parentheses
feat(ldap): separate between each search config
fix(ldap): fix parsing of group dn
feat(ldap): style fixes
feat(ldap): remove of change of filter
refactor(ldap): remove user display style
feat(ldap): rename group entries field
refactor(auth): move auto user provision
refactor(ldap): refactor box selector
feat(ldap): move ad settings to be a global setting
style(ldap): remove comments
feat(ldap): add auto user toggle
refactor(auth/ad): rename ad component
fix(auth/ad): fix the use of a certificate
refactor(ldap): rename components
fix(ldap): show user and group search
fix(ldap): design group settings
feat(ldap): search users and groups
feat(ldap): add margins
refactor(ldap): separate ldap and ad settings
refactor(auth): use central check for auth method
feat(ldap): clear margins
feat(ldap): add port if missing
feat(ldap): fix ad name
fix(ldap): rename fields
feat(ldap): add domain root field
feat(auth/ad): remove domain root field
feat(ldap): rename base dn to root domain
feat(ldap/openldap): get suffix
feat(ldap/open): change base filter
fix(ldap): align
feat(db): introduce migration for ldap server type
refactor(ldap): move service to ldap module
refactor(ldap): sync between client and server constants
fix(ldap): use post for check
style(ldap): fix handler comments
fix(ldap): check for errors
style(ldap): fix tyop
fix(ldap): check equality
style(ldap): add comments
fix(ldap): allow anonymous mode
fix(ldap): show errors on search users
feat(lasp): use custom settings for each server
fix(ldap): supply default group filter
fix(ldap): show domain suffix in new settings
fix(ldap): replace icon with text
refactor(components): remove box-selector-wrapper
* fix(ldap): enable test when form is valid
* fix(ldap): add port if missing
* feat(db): add flag to rollback to ce edition
* refactor(db): make backup of db
* style(api): remove comments
* refactor(db): export backup function
Co-authored-by: yi-portainer <yi.chen@portainer.io>
* feat(resource-pool): change resource over commit implementation
* fix(resource-pool): hide resource reservation gauges when resources are set to unlimited both
* feat(resource-pool): renaming and hide switch when resource over commit is disabled
* feat(k8s/resource-pools): minor UI update
* fix(resource-pool): fix resource quota validation on resource pool details
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(app): change sidebar background color and font color for business edition
* feat(app/sidebar): add edition version
* feat(app/sidebar): get the edition version
* feat(app/sidebar): change color of selected item for business edition
* feat(license): add liblicense dep
* feat(license): add bolt license service
* feat(license): introduce license service
* feat(license): validate license before adding
* feat(license): aggregate info after changing of licenses
* feat(http): implement http handlers
* feat(license-management): introduce license service
* feat(licenses): introduce empty view
* feat(license-management): add datatable
* feat(licenses): show license info
* fix(license): inject services
* feat(licenses): add buttons to buy/renew license
* feat(licenses): introduce add license route
* feat(licenses): add license form
* feat(license): datatable
* feat(license): show more details about license
* refactor(license): rename components name
* feat(licenses): show expiration date
* feat(license): introduce init license route
* feat(license): validate license
* feat(license): save licenses
* feat(bouncer): check if license is valid on restricted
* feat(bouncer): remove license check on api
* feat(home): add node warning
* feat(licenses): remove license
* feat(licenses): listen to info changes
* feat(license): show license expiration message
* feat(license): block regular users from licenses view
* feat(license): prevent removing of last license
* fix(license): show message when failed delete
* feat(license): remove trial license when applying oneoff
* feat(license): hide the number of nodes for trial
* feat(auth): disable login if license is invalid
* feat(licenses): add confirmation before removal of license
* feat(nodes): count nodes in env
* feat(license): show message if nodes exceed allowed
* feat(deps): update liblicense
* feat(licenses): show validation errors
* feat(license): use information panel for node info
* fix(license): reload license data on remove
* fix(license): always send list of failed keys
* fix(license): rename buttons
* feat(license): replace icon
* feat(license): add link to licenses page in add license
* fix(licenses): show green valid icon
* fix(licenses): rename expires at
* fix(licenses): rename Attach to add
* fix(licenses): show license type label
* feat(license): aggregate revoked info
* chore(deps): update liblicense
* fix(license): remove space
* fix(sidebar): align icon
* fix(license): change info layout
* feat(license): aggregate only valid licenses
* fix(licenses): move add license to a new line
* style(license): remove console
* refactor(license): move license line to component
* feat(license): check server validation
* fix(licenses): check form validation before submit
* feat(licenses): send only invalid licenses
* fix(license): hide panels when not needed
* feat(licnese): receive a single license on init
* refactor(header): move header to module
* feat(license): move license panel to header
* fix(header): set min height
* fix(home): show node warning only if subscription
* feat(licenses): minor UI updates
* feat(licenses): minor UI update
* feat(licenses-datatable): add copy button
* fix(licenses-datatable): show date without hours
* feat(license): show expiration message
* fix(users): get user info only on restriced access
* fix(license): clear check for single license
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(ldap): move urls to url
* feat(ldap): test a few connections
* feat(ldap): update urls
* feat(settings-auth): support array of ldap urls
* feat(settings-auth): support list of urls
* feat(auth): add explanation about server urls
* feat(bolt): add url to urls only if needed
* fix(settings): add nil guards
* fix(settings): set inital value for ldap urls
* feat(settings): prevent the deletion of the first url
* feat(core/settings): minor UI update
* feat(authentication): check that ldap settings are valid
* feat(bolt): create migration for settings
* fix(settings): add wrapping
* feat(ldap): disable submit button only on ldap
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(templates): show templates link
* feat(templates): protect deploying of templates
* feat(templates): allow fetching of templates to any user
* feat(rbac): allow template file fetching
* feat(namespace): Hide Default Namespace for non-admins
* feat(namespace): fix expected behavior when turning on the setting
* feat(resourcePool): Handle when user doesn't have access to any resource pool
* Update app/kubernetes/views/applications/create/createApplication.html
* Update app/kubernetes/views/configurations/create/createConfiguration.html
* Update app/kubernetes/views/applications/create/createApplication.html
* Update app/kubernetes/views/configurations/create/createConfiguration.html
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* refactor(rbac): move client extension code
* feat(app): remove checks for extension
* feat(rbac): remove checks for extensions
* feat(extensions): remove reference to rbac extensions
* feat(roles): add changes from codebase before removal of rbac
* refactor(security): remove rbac service
* refactor(security): use AdminAccess as an alias
* fix(access): rename policies type
* style(security): add comment about Aliasing AdminAccess to RestrictedAccess
* feat(bolt): add auth migration from ce to ee
* feat(stacks): use authorized access to stop/start stacks
* fix(bolt): supply right params to migrator
* feat(rbac): get authorization on client side
* feat(db): add edition value to db
* feat(bolt): handle migrations from ce to ee
* refactor(bolt): merge if branches
* refactor(bolt): rename migration function
* feat(bolt): change migration message
* feat(bolt): add edition to migration messages
* feat(bolt): add log tags
* feat(portainer): add edition
* feat(db): set initial db version
* feat(bolt): cache current version
* refactor(portainer): remove current edition const
* feat(k8s/resource-pool): set ingress hostname as mandatory and remove default backend
* refactor(k8s/resource-pool): use constants
* feat(k8s/configure): add experimental note about traefik
* fix(container): select runtime by default
* fix(network): set default network config
* fix(container): set default network container placeholder
* fix(services): default service mount
* feat(k8s/configure): separate ingress class name and ingress class type
* feat(k8s/resource-pool): ability to add custom annotations to ingress classes on RP create/edit
* feat(k8s/ingresses): remove 'allow users to use ingress' switch
* feat(k8s/configure): minor UI update
* feat(k8s/resource-pool): minor UI update
* feat(k8s/application): update ingress route form validation
* refactor(k8s/resource-pool): remove console.log statement
* feat(k8s/resource-pool): update ingress annotation placeholders
* feat(k8s/configure): add pattern form validation on ingress class
* fix(k8s/resource-pool): automatically associate ingress class to ingress
* fix(k8s/resource-pool): fix invalid ingress when updating a resource pool
* fix(k8s/resource-pool): update ingress rewrite target annotation value
* feat(k8s/application): ingress form validation
* fix(k8s/application): squash ingress rules with empty host inside a single one
* feat(k8s/resource-pool): ingress host validation
* fix(k8s/resource-pool): rewrite rewrite option and only display it for ingress of type nginx
* feat(k8s/application): do not expose ingress applications over node port
* feat(k8s/application): add specific notice for ingress
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(application): Support multi-container pods applications
* feat(application): Support multi-container pods applications
* fix(application): use only one pod in app details and fix logs and console links
* fix(application): show all containers in containers datatable
* fix(application): fix order by pod name
* feat(k8s/application): minor UI update
* feat(k8s/application): minor UI update
* feat(k8s/application): minor UI update
* feat(k8s/application): minor UI update
* feat(k8s/application): minor UI update
* fix(application): fix persisted folders in application details
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(k8s/endpoint): expose ingress controllers on endpoints
* feat(k8s/applications): add ability to expose applications over ingress - missing RP and app edits
* feat(k8s/application): add validation for ingress routes
* feat(k8s/resource-pools): edit available ingress classes
* fix(k8s/ingress): var name refactor was partially applied
* feat(kubernetes): double validation on RP edit
* feat(k8s/application): app edit ingress update + formvalidation + UI rework
* feat(k8s/ingress): dictionary for default annotations on ingress creation
* fix(k8s/application): temporary fix + TODO dev notice
* feat(k8s/application): select default ingress of selected resource pool
* feat(k8s/ingress): revert ingressClassName removal
* feat(k8s/ingress): admins can now add an host to ingress in a resource pool
* feat(k8s/resource-pool): list applications using RP ingresses
* feat(k8s/configure): minor UI update
* feat(k8s/configure): minor UI update
* feat(k8s/configure): minor UI update
* feat(k8s/configure): minor UI update
* feat(k8s/configure): minor UI update
* fix(k8s/ingresses): remove host if undefined
* feat(k8s/resource-pool): remove the activate ingresses switch
* fix(k8s/resource-pool): edditing an ingress host was deleting all the routes of the ingress
* feat(k8s/application): prevent app deploy if no ports to publish and publishing type not internal
* feat(k8s/ingress): minor UI update
* fix(k8s/ingress): allow routes without prepending /
* feat(k8s/application): add form validation on ingress route
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(node): Add the ability to apply taints and labels to nodes
* feat(k8s/node): minor UI update
* feat(k8s/node): UI update and disable system labels
* feat(k8s/node): minor UI update
* fix(node): fix add first taint
* refacto(node): add KubernetesNodeHelper
* feat(node): add used label to labels
* feat(node): add node update modals
* fix(node): modal when used label changes
* feat(k8s/node): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(volumes): Enhance the used by column for volumes
* feat(k8s/volumes): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(resourcepool): Reducing the Quota assigned to a RP
* fix(k8s/resource-pool): fix an issue with hasResourceQuotaBeenReduce condition
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(applications): update UI to use existing volumes
* feat(application): Add the ability to use existing volumes when creating an application
* feat(application): Existing persisted folders should default to associated volumes
* feat(application): add form validation to existing volume
* feat(application): remove the ability to use an existing volume with statefulset application
* feat(k8s/applications): minor UI update
* feat(k8s/application): minor UI update
* feat(volume): allow to increase volume size and few other things
* feat(volumes): add the ability to allow volume expansion
* fix(storage): fix the storage patch request
* fix(k8s/applications): remove conflict leftover
* feat(k8s/configure): minor UI update
* feat(k8s/volume): minor UI update
* fix(storage): change few things
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(services): update services details view
* feat(services): Add the ability to edit a service networks
* feat(services): show ingress network
* refactor(services): use lodash
* feat(networks): disable sending when updating
* feat(networks): limit size of select
* feat(services): update networks only when network is new
* feat(services): prevent submitting of empty networks
* feat(services): show unique networks
* fix(service): use empty array default for networks
* feat(service): show only swarm networks
* feat(services): show placeholder for network
* feat(services): show spaced select box
* feat(services): show macvlan ip
* feat(service): fetch the network subnet
* feat(services): show empty ip when network is not connected
Co-authored-by: Chaim Lev-Ari <chiptus@gmail.com>
* refactor(oauth): move oauth client code
* feat(oauth): move extension code into server code
* feat(oauth): enable oauth without extension
* refactor(oauth): make it easier to remove providers
* feat(cluster): add kubernetes endpoint resource
* feat(cluster): add kubernetes endpoint service
* feat(node): Show which IP address / port the cluster API is listening on
* fix(cluster): support multi-master clusters
* fix(cluster): support multi-master clusters
* feat(k8s/cluster): minor UI update
* refactor(k8s/cluster): rename variable
* refactor(k8s/endpoints): refactor KubernetesEndpointsFactory
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(application): add horizontalpodautoscaler creation
* feat(application): Add the ability to set the auto-scale policy of an application
* feat(k8s/application): minor UI update
* fix(application): set api version and prevent to use hpa with global deployment type
* feat(settings): add a switch to enable features based on server metrics
* feat(k8s/applications): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(k8s/application): expose placement conditions
* feat(k8s/applications): minor UI update
* feat(k8s/application): update message for admin and non admin users
* feat(kubernetes/applications): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(containers): enforce disable bind mounts
* refactor(docker): move check for endpoint admin to a function
* feat(docker): check if service has bind mounts
* feat(services): allow bind mounts for endpoint admin
* feat(container): enable bind mounts for endpoint admin
* fix(services): fix typo
* feat(settings): add info about container edit disable
* feat(settings): set security settings
* feat(containers): hide recreate button when setting is enabled
* feat(settings): rephrase security notice
* fix(settings): save allowHostNamespaceForRegularUsers to state
* feat(settings): introduce settings to allow/disable
* feat(settings): update the setting
* feat(docker): prevent user from using caps if disabled
* refactor(stacks): revert file
* style(api): remove portainer ns
* feat(stacks): add a setting to disable the creation of stacks for non-admin users
* feat(settings): introduce a setting to prevent non-admin from stack creation
* feat(settings): update stack creation setting
* feat(settings): fail stack creation if user is non admin
* fix(settings): save preventStackCreation setting to state
* feat(stacks): disable add button when settings is enabled
* format(stacks): remove line
* feat(stacks): setting to hide stacks from users
* feat(settings): rename disable stacks setting
* refactor(settings): rename setting to disableStackManagementForRegularUsers
* feat(settings): hide stacks for non admin when settings is set
* refactor(settings): replace disableDeviceMapping with allow
* feat(dashboard): hide stacks if settings disabled and non admin
* refactor(sidebar): check if user is endpoint admin
* feat(settings): set the default value for stack management
* feat(settings): rename field label
* fix(sidebar): refresh show stacks state
* fix(docker): hide stacks when not admin
* feat(settings): add setting to disable device mapping for regular users
* feat(settings): introduce device mapping service
* feat(containers): hide devices field when setting is on
* feat(containers): prevent passing of devices when not allowed
* feat(stacks): prevent non admin from device mapping
* feat(stacks): disallow swarm stack creation for user
* refactor(settings): replace disableDeviceMapping with allow
* fix(stacks): remove check for disable device mappings from swarm
* feat(settings): rename field to disable
* feat(settings): supply default value for disableDeviceMapping
* feat(container): check for endpoint admin
* style(server): sort imports
* feat(containers): prevent non-admin users from running containers using the host namespace pid (#3970)
* feat(containers): Prevent non-admin users from running containers using the host namespace pid
* feat(containers): add rbac check for swarm stack too
* feat(containers): remove forgotten conflict
* feat(containers): init EnableHostNamespaceUse to true and return 403 on forbidden action
* feat(containers): change enableHostNamespaceUse to restrictHostNamespaceUse in html
* feat(settings): rename EnableHostNamespaceUse to AllowHostNamespaceForRegularUsers
* feat(database): trigger migration for AllowHostNamespace
* feat(containers): check container creation authorization
Co-authored-by: Maxime Bajeux <max.bajeux@gmail.com>
* refactor(agent): replace root with index
* refactor(agent): use simple export
* refactor(agent): replace function with class
* refactor(agent): replace promise with async
* feat(containers): Ensure users cannot create privileged containers via the API
* feat(containers): add rbac check in stack creation
Co-authored-by: Maxime Bajeux <max.bajeux@gmail.com>
* fix(datatables): persist state changes
* fix(datatables): persist order
* feat(sidebar): use local storage to store toggle toolbar
* feat(config): use local storage instead of cookies
* refactor(agent): rename files
* refactor(agent): replace controller with regular export
* refactor(agent): replace function with class
* refactor(agent): replace promise with async
* refactor(agent): rename main file
* feat(aci): show basic details
* feat(aci): style container details page
* fix(aci): fix container ip
* feat(aci): provide functions to get single aci resource
* feat(aci): show readable data
* feat(aci): style container instance
* fix(app): use deps injection in router correctly
* feat(app): guard against using wrong endpoint type
* feat(sidebar): supply endpoint id
* feat(templates): move custom templates to docker
* fix(aci): show error failing container creation
* feat(aci): load network profile list
* feat(aci): allow selection of network profile
* feat(aci): remove public ip toggle
* feat(aci): auto deploy container with public ip
* fix(aci): revert changes
* feat(cluster): Show the cluster leader
* feat(cluster): Restrict leader label only to admin users
* feat(kubernetes): minor UI update
* feat(endpoint): move all KubernetesEndpoint related code to a single endpoint sub-folder and change few things
* fix(k8s/cluster): fix conflict leftover
* feat(k8s/cluster): review component leader UX
* refactor(k8s/node): remove useless call to endpoints
* refactor(k8s/endpoint): relocate variable declaration
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(logs): Add the ability to download application/stack logs
* feat(kubernetes): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(kubernetes): add ingress details
* fix(kubernetes): fix broken ingress generated links + ignore IP retrieval/display info on missing LB ingress ip
* refactor(kubernetes): each ingress rule in apps port mappings has now its own row
* feat(kubernetes): remove protocol column and concat it to container port
* feat(kubernetes): edit display of ingress rules in application details
* feat(kubernetes): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(kubernetes): Prevent deployment/edition of resources inside a system namespace
* feat(kubernetes): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(networks): Support multiple excluded IPs for MACVLAN networks
* feat(networks): add a generated name
* feat(networks): prevent create macvlan network where exclude ip is the same as gateway
* feat(networks): remove auxaddresses validation on submit
* feat(networks): check exclude ip validation on change
* feat(networks): check form validation on change
* feat(networks): clean checkAuxiliaryAddress function
* feat(custom-templates): introduce types
* feat(custom-templates): introduce data layer service
* feat(custom-templates): introduce http handler
* feat(custom-templates): create routes and view stubs
* feat(custom-templates): add create custom template ui
* feat(custom-templates): add json keys
* feat(custom-templates): introduce custom templates list page
* feat(custom-templates): introduce update page
* feat(stack): create template from stack
* feat(stacks): create stack from custom template
* feat(custom-templates): disable edit/delete of templates
* fix(custom-templates): fail update on non admin/owner
* fix(custom-templates): add ng-inject decorator
* chore(plop): revert template
* feat(stacks): remove actions column
* feat(stack): add button to create template from stack
* feat(stacks): add empty state for templates
* feat(custom-templates): show templates in a list
* feat(custom-template): replace table with list
* feat(custom-templates): move create template button
* refactor(custom-templates): introduce more fields
* feat(custom-templates): use stack type when creating template
* feat(custom-templates): use same type as stack
* feat(custom-templates): add edit and delete buttons to template item
* feat(custom-templates): customize stack before deploy
* feat(stack): show template details
* feat(custom-templates): move customize
* feat(custom-templates): create description required
* fix(template): show platform icon
* fix(custom-templates): show spinner when creating stack
* feat(custom-templates): prevent user from edit templates
* feat(custom-templates): use resource control for custom templates
* feat(custom-templates): show created templates
* feat(custom-templates): filter templates by stack type
* fix(custom-templates): create swarm or standalone stack
* feat(stacks): filter templates by type
* feat(resource-control): disable resource control on public
* feat(custom-template): apply access control on edit
* feat(custom-template): add form validation
* feat(stack): disable create custom template from external task
* refactor(custom-templates): create template from file and type
* feat(templates): introduce a file handler that returns template docker file
* feat(template): introduce template duplication
* feat(custom-template): enforce unique template name
* fix(template): rename copy button
* fix(custom-template): clear access control selection between templates
* fix(custom-templates): show required fields
* refactor(filesystem): use a constant for temp path
* refactor(edge-groups): use es6 imports
* refactor(edge-jobs): es6 imports
* refactor(edge-stacks): use es6 imports
* refactor(edge-compute): use es6 imports in components
* refactor(edge-compute): use named imports
* feat(kubernetes): fix duplicate published mode
* feat(kubernetes): group port mappings by applications
* feat(kubernetes): updated UX
* feat(kubernetes): updated UX
* feat(kubernetes): new applications list view
* fix(kubernetes): applications - expand ports on row click
* refactor(kubernetes): applications - replace old view with new
* fix(kubernetes): disable access management for default resource pool
* feat(kubernetes): app creation - limit stacks suggestion to selected resource pool
* feat(kubernetes): do not allow access management on system resource pools
* refactor(kubernetes): refactor services
* create view node detail
* compute node status
* compute resource reservations
* resource reservation progress bar
* create applications node datatable
* fix(kubernetes): fix invalid method name
* feat(kubernetes): minor UI changes
* feat(kubernetes): update application inspect UI
* feat(kubernetes): add the ability to copy load balancer IP
* fix(kubernetes): minor fixes on applications view
* feat(kubernetes): set usage level info on progress bars
* fix(kubernetes): fix an issue with duplicate pagination controls
* fix(kubernetes): fix an issue with unexpandable items
* refacto(kubernetes): clean status and resource computation
* fix(kubernetes): remove a bad line
* feat(kubernetes): update application detail view
* feat(kubernetes): change few things on view
* refacto(kubernetes): Corrections relative to PR #13
* refacto(kubernetes): remove old functions
* feat(kubernetes): add application pod logs
* fix(kubernetes): PR #13
* feat(kubernetes): Enable quotas by default
* feat(kubernetes): allow non admin to have access to ressource pool list/detail view
* feat(kubernetes): UI changes
* fix(kubernetes): fix resource reservation computation in node view
* fix(kubernetes): pods are correctly filter by app name
* fix(kubernetes): nodeapplicationsdatatable is correctly reorder by cpu and memory
* fix(kubernetes): nodeapplications datatable is correctly reorder on reload
* feat(kubernetes): update podService
* refacto(kubernetes): rename nodeInspect as node
* refaceto(kubernetes): use colspan 6 instead of colspan 3
* refacto(kubernetes): use genericdatatablecontroller and make isadmin a binding
* refacto(kubernetes): remove not needed lines
* refacto(kubernetes) extract usageLevelInfo as html filter
* refacto(kubernetes): no line break for params
* refacto(kubernetes): change on node converter and filters
* refacto(kubernetes): remove bad indentations
* feat(kubernetes): add plain text informations about resources limits for non admibn user
* refacto(kubernetes): ES6 format
* refacto(kubernetes): format
* refacto(kubernetes): format
* refacto(kubernetes): add refresh callback for nodeapplicationsdatatable
* refacto(kubernetes): change if else structure
* refactor(kubernetes): files naming and format
* fix(kubernetes): remove checkbox and actions on resourcespools view for non admin
* feat(kubernetes): minor UI update
* fix(kubernetes): bind this on getPodsApplications to allow it to access $async
* fix(kubernetes): bind this on getEvents to allow it to access $async
* fix(kubernetes): format
* feat(kubernetes): minor UI update
* feat(kubernetes): add support for container console
* fix(kubernetes): fix a merge issue
* feat(kubernetes): update container console UI
* fix(api): fix typo
* feat(api): proxy pod websocket to agent
* fix(api): fix websocket pod proxy
* refactor(kubernetes): uniformize k8s merge comments
* refactor(kubernetes): update consoleController
* feat(kubernetes): prevent the removal of the default resource pool (#38)
* feat(kubernetes): show all applications running inside the resource pool (#35)
* add new datatable
* feat(kubernetes): add resource pool applications datatable to resource pool detail view
* refacto(kubernetes): factorise computeResourceReservation
* fix(kubernetes): colspan 6 to colspan 5
* fix(kubernetes): rename resourceReservationHelper into kubernetesResourceReservationHelper
* fix(kubernetes): add await to avoid double diggest cycles
* feat(kubernetes): add link to application name
* fix(kubernetes): change kubernetes-resource-pool-applications-datatable table key
* fix(kubernetes): change wording
* feat(kubernetes): add proper support for persisted folders (#36)
* feat(kubernetes): persistent volume mockups
* feat(kubernetes): persistent volume mockups
* feat(kubernetes): update persisted folders mockups
* feat(kubernetes): endpoint configure storage access policies
* fix(kubernetes): restrict advanced deployment to admin
* refactor(kubernetes): storageclass service / rest / model
* refactor(kubernetes): params/payload/converter pattern for deployments and daemonsets
* feat(kubernetes): statefulset management for applications
* fix(kubernets): associate application and pods
* feat(kubernetes): statefulset support for applications
* refactor(kubernetes): rebase on pportainer/k8s
* fix(kubernetes): app create - invalid targetPort on loadbalancer
* fix(kubernetes): internal services showed as loadbalancer
* fix(kubernetes): service ports creation / parsing
* fix(kubernetes): remove ports on headless services + ensure nodePort is used only for Cluster publishing
* fix(kubernetes): delete headless service on statefulset delete
* fix(kubernetes): statefulset replicas count display
* refactor(kubernetes): rebase on pportainer/k8s
* refactor(kubernetes): cleanup
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* fix(kubernetes): remove mockup routes
* feat(kubernetes): only display applications running on node/in resource pool when there are any
* feat(kubernetes): review resource reservations and leverage requests instead of limits (#40)
* fix(kubernetes): filter resource reservation by app in node view (#48)
* refactor(kubernetes): remove review comment
* chore(version): bump version number
* refactor(kubernetes): remove unused stacks view and components
* feat(kubernetes): update CPU slider step to 0.1 for resource pools (#60)
* feat(kubernetes): round up application CPU values (#61)
* feat(kubernetes): add information about application resource reservat… (#62)
* feat(kubernetes): add information about application resource reservations
* feat(kubernetes): apply kubernetesApplicationCPUValue to application CPU reservation
* refactor(kubernetes): services layer with models/converter/payloads (#64)
* refactor(kubernetes): services layer with models/converter/payloads
* refactor(kubernetes): file rename and comment update
* style(kubernetes): replace strings double quotes with simple quotes
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* fix(kubernetes): filter application by node in node detail view (#69)
* fix(kubernetes): filter applications by node
* fix(kubernetes): remove js error
* refactor(kubernetes): delete resource quota deletion process when deleting a resource pool (#68)
* feat(kubernetes): enforce valid resource reservations and clarify its… (#70)
* feat(kubernetes): enforce valid resource reservations and clarify its usage
* feat(kubernetes): update instance count input behavior
* feat(kubernetes): resource pools labels (#71)
* feat(kubernetes): resource pools labels
* fix(kubernetes): RP/RQ/LR owner label
* feat(kubernetes): confirmation popup on RP delete (#76)
* feat(kubernetes): application labels (#72)
* feat(kubernetes): application labels
* feat(kubernetes): display application owner in details when available
* style(kubernetes): revert StackName column labels
* fix(kubernetes): default displayed StackName
* feat(kubernetes): remove RQ query across cluster (#73)
* refactor(kubernetes): routes as components (#75)
* refactor(kubernetes): routes as components
* refactor(kubernetes): use component lifecycle hook
* refactor(kubernetes): files naming consistency
* fix(kubernetes): fix invalid component name for cluster view
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(kubernetes): update portaineruser cluster role policy rules (#78)
* refactor(kubernetes): remove unused helper
* fix(kubernetes): fix invalid reload link in cluster view
* feat(kubernetes): add cluster resource reservation (#77)
* feat(kubernetes): add cluster resource reservation
* fix(kubernetes): filter resource reservation with applications
* fix(kubernetes): fix indent
* refacto(kubernetes): extract megabytes value calc as resourceReservationHelper method
* fix(kubernetes): remove unused import
* refacto(kubernetes): add resourcereservation model
* fix(kubernetes): add parenthesis on arrow functions parameters
* refacto(kubernetes): getpods in applicationService getAll
* fix(kubernetes): let to const
* fix(kubernetes): remove unused podservice
* fix(kubernetes): fix computeResourceReservation
* fix(kubernetes): app.pods to app.Pods everywhere and camelcase of this.ResourceReservation
* feat(kubernetes): configurations list view (#74)
* feat(kubernetes): add configuration list view
* feat(kubernetes): add configurations datatable
* feat(kubernetes): add item selection
* feat(kubernetes): allow to remove configuration
* feat(kubernetes): allow non admin user to see configurations
* fix(kubernetes): configurations view as component
* feat(kubernetes): remove stack property for secret and configurations
* fix(kubernetes): update import
* fix(kubernetes): remove secret delete payload
* fix(kubernetes): rename configuration model
* fix(kubernetes): remove configmap delete payload
* fix(Kubernetes): fix configuration getAsync
* fix(kubernetes): extract params as variables
* refacto(kubernetes): extract configurations used lines as helper
* fix(kubernetes): add verification of _.find return value
* fix(kubernetes): fix kubernetes configurations datatable callback
* refacto(Kubernetes): extract find before if
* fix(kubernetes): replace this by KubernetesConfigurationHelper in static method
* fix(Kubernetes): fix getASync
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* review(kubernetes): todo comments (#80)
* feat(kubernetes): minor UI update
* feat(kubernetes): round max cpu value in application creation
* feat(kubernetes): minor UI update
* fix(kubernetes): no-wrap resource reservation bar text (#89)
* docs(kubernetes): add review for formValues to resource conversion (#91)
* feat(kubernetes): configuration creation view (#82)
* feat(kubernetes): create configuration view
* feat(kubernetes): add advanced mode and create entry from file
* fix(kubernetes): fix validation issues
* fix(kubernetes): fix wording
* fix(kubernetes): replace data by stringdata in secret payloads
* fix(kubernetes): rename KubernetesConfigurationEntry to KubernetesConfigurationFormValuesDataEntry
* refacto(kubernetes): add isSimple to formValues and change configuration creation pattern
* fix(kubernetes): fix some bugs
* refacto(kubernetes): renaming
* fix(kubernetes): fix few bugs
* fix(kubernetes): fix few bugs
* review(kubernetes): refactor notices
Co-authored-by: xAt0mZ <baron_l@epitech.eu>
* feat(kubernetes): rename codeclimate file
* feat(kubernetes): re-enable codeclimate
* feat(project): update codeclimate configuration
* feat(project): update codeclimate configuration
* feat(project): update codeclimate configuration
* feat(kubernetes): minor UI update
* feat(project): update codeclimate
* feat(project): update codeclimate configuration
* feat(project): update codeclimate configuration
* feat(kubernetes): configuration details view (#93)
* feat(kubernetes): configuration details view
* fix(kubernetes): fix wording
* fix(kubernetes): fix update button
* fix(kubernetes): line indent
* refacto(kubernetes): remove conversion
* refacto(kubernetes): remove useless line
* refacto(kubernetes): remove useless lines
* fix(kubernetes): revert error handling
* fix(kubernetes): fix wording
* fix(kubernetes): revert line deletion
* refacto(kubernetes): change data mapping
* fix(kubernetes): create before delete
* fix(kubernetes): fix duplicate bug
* feat(kubernetes): configurations in application creation (#92)
* feat(kubernetes): application configuration mockups
* feat(kubernetes): update mockup
* feat(kubernetes): app create - dynamic view for configurations
* feat(kubernetes): app create - configuration support
* refactor(kubernetes): more generic configuration conversion function
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(kubernetes): automatically display first entry in configuration creation
* feat(kubernetes): minor UI update regarding applications and configurations
* feat(kubernetes): update Cluster icon in sidebar
* feat(kubernetes): volumes list view (#112)
* feat(kubernetes): add a feedback panel on main views (#111)
* feat(kubernetes): add a feedback panel on main views
* feat(kubernetes): add feedback panel to volumes view
* fix(kubernetes): isolated volumes showed as unused even when used (#116)
* feat(kubernetes): remove limit range from Portainer (#119)
* limits instead of requests (#121)
* feat(kubernetes): volume details (#117)
* feat(kubernetes): volume details
* fix(kubernetes): yaml not showed
* feat(kubernetes): expandable stacks list (#122)
* feat(kubernetes): expandable stacks list
* feat(kubernetes): minor UI update to stacks datatable
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(kubernetes): uibprogress font color (#129)
* feat(kubernetes): minor UI update to resource reservation component
* feat(kubernetes): automatically select a configuration
* refactor(kubernetes): remove comment
* feat(kubernetes): minor UI update
* feat(kubernetes): add resource links and uniformize view headers (#133)
* feat(kubernetes): prevent removal of system configurations (#128)
* feat(kubernetes): prevent removal of system configurations
* fix(kubernetes): KubernetesNamespaceHelper is not a function
* refacto(kubernetes): change prevent removal pattern
* fix(kubernetes): remove unused dependencies
* fix(kubernetes): fix configuration used label (#123)
* fix(kubernetes): fix used configurations
* fix(kubernetes): remove console log
* feat(kubernetes): rename configuration types (#127)
* refacto(kubernetes): fix wording and use configMap instead of Basic in the code
* feat(kubernetes): prevent the removal of system configuration
* fix(kubernetes): remove feat on bad branch
* fix(kubernetes): rename configuration types
* refacto(kubernetes): use a numeric enum and add a filter to display the text type
* refacto(kubernetes): fix wording and use configMap instead of Basic in the code
* feat(kubernetes): prevent the removal of system configuration
* fix(kubernetes): remove feat on bad branch
* fix(kubernetes): rename configuration types
* refacto(kubernetes): use a numeric enum and add a filter to display the text type
* fix(kubernetes): rename file and not use default in switch case
* feat(kubernetes): update advanced deployment UI/UX (#130)
* feat(kubernetes): update advanced deployment UI/UX
* feat(kubernetes): review HTML tags indentation
* feat(kubernetes): applications stacks delete (#135)
* fix(kubernetes): multinode resources reservations (#118)
* fix(kubernetes): filter pods by node
* fix(kubernetes): fix applications by node filter
* fix(kubernetes): filter pods by node
* Update app/kubernetes/views/cluster/node/nodeController.js
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* feat(kubernetes): limit usage of pod console view (#136)
* feat(kubernetes): add yaml and events to configuration details (#126)
* feat(kubernetes): add yaml and events to configuration details
* fix(kubernetes): fix errors on secret details view
* fix(kubernetes): display only events related to configuration
* fix(kubernetes): fix applications by node filter
* fix(kubernetes): revert commit on bad branch
* refacto(kubernetes): refacto configmap get yaml function
* refacto(kubernetes): add yaml into converter
* feat(kubernetes): improve application details (#141)
* refactor(kubernetes): remove applications retrieval from volume service
* feat(kubernetes): improve application details view
* feat(kubernetes): update kompose binary version (#143)
* feat(kubernetes): update kubectl version (#144)
* refactor(kubernetes): rename portainer system namespace (#145)
* feat(kubernetes): add a loading view indicator (#140)
* feat(kubernetes): add an example of view loading indicator
* refactor(css): remove comment
* feat(kubernetes): updated loading pattern
* feat(kubernetes): add loading indicator for resource pool views
* feat(kubernetes): add loading indicator for deploy view
* feat(kubernetes): add loading view indicator to dashboard
* feat(kubernetes): add loading view indicator to configure view
* feat(kubernetes): add loading indicator to configuration views
* feat(kubernetes): add loading indicator to cluster views
* feat(kubernetes): rebase on k8s branch
* feat(kubernetes): update icon size
* refactor(kubernetes): update indentation and tag format
* feat(kubernetes): backend role validation for stack deployment (#147)
* feat(kubernetes): show applications when volume is used
* feat(kubernetes): set empty value when node is not set
* feat(kubernetes): update configuration UI/UX
* feat(kubernetes): update configuration UX
* fix(kubernetes): Invalid value for a configuration (#139)
* fix(kubernetes): Invalid value for a configuration
* fix(kubernetes): remove auto JSON convertion for configMap ; apply it for RPool Accesses only
* refactor(kubernetes): remove unneeded line
* fix(kubernetes): remove default JSON parsing on configMap API retrieval
Co-authored-by: xAt0mZ <baron_l@epitech.eu>
* feat(kubernetes): applications table in configuration details (#154)
* feat(kubernetes): Add the ability to filter system resources (#142)
* feat(kubernetes): hide system configurations
* feat(kubernetes): Add the ability to filter system resources
* feat(kubernetes): add the ability to hide system resources on volumes
* fix(kubernetes): fix few issue in volumesDatatableController
* fix(kubernetes): fix applications / ports / stacks labels
* feat(kubernetes): add volumes and configurations to dashboard (#152)
* feat(kubernetes): event warning indicator (#150)
* feat(kubernetes): event warning indicator for applications
* refactor(kubernetes): refactor events indicator logic
* feat(kubernetes): add event warning indicator to all resources
* feat(kubernetes): fix missing YAML panel for node (#157)
* feat(kubernetes): revised application details view (#159)
* feat(kubernetes): revised application details view
* refactor(kubernetes): remove comment
* feat(kubernetes): rebase on k8s
* refactor(kubernetes): remove extra line
* feat(kubernetes): update kubernetes beta feedback panel locations (#161)
* feat(kubernetes): stack logs (#160)
* feat(kubernetes): stack logs
* fix(kubernetes): ignore starting pods
* fix(kubernetes): colspan on expandable stack applications table
* feat(kubernetes): add an information message about system resources (#163)
* fix(kubernetes): fix empty panel being display in cluster view (#165)
* fix(kubernetes): Invalid CPU unit for node (#156)
* fix(kubernetes): Invalid CPU unit for node
* fix(kubernetes): Invalid CPU unit for node
* refacto(kubernetes): extract parseCPU function in helper
* refacto(kubernetes): rewrite parseCPU function
* feat(kubernetes): add the kube-node-lease namespace to system namespaces (#177)
* feat(kubernetes): tag system applications on node details view (#175)
* feat(kubernetes): tag system applications on node details view
* fix(kubernetes): remove system resources filter
* feat(kubernetes): review UI/UX around volume size unit (#178)
* feat(kubernetes): updates after review (#174)
* feat(kubernetes): update access user message
* feat(kubernetes): relocate resource pool to a specific form section
* feat(kubernetes): review responsiveness of port mappings
* feat(kubernetes): clarify table settings
* feat(kubernetes): add resource reservation summary message
* feat(kubernetes): review wording (#182)
* feat(kubernetes): application stack edit (#179)
* feat(kubernetes): update UI -- update action missing
* feat(kubernetes): application stack update
* feat(kubernetes): change services stacks
* feat(kubernetes): hide default-tokens + prevent remove (#183)
* feat(kubernetes): hide default-tokens + prevent remove
* feat(kubernetes): do not display unused label for system configurations
* fix(kubernetes): minor fix around showing system configurations
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(kubernetes): rebase on k8s branch (#180)
* fix(kubernetes): prevent the display of system resources in dashboard (#186)
* fix(kubernetes): prevent the display of system resources in dashboard
* fix(kubernetes): prevent the display of frontend filtered resource pools
* feat(kubernetes): support downward API for env vars in application details (#181)
* feat(kubernetes): support downward API for env vars in application details
* refactor(kubernetes): remove comment
* feat(kubernetes): minor UI update
* feat(kubernetes): remove Docker features (#189)
* chore(version): bump version number (#187)
* chore(version): bump version number
* feat(kubernetes): disable update notice
* feat(kubernetes): minor UI update
* feat(kubernetes): minor UI update
* feat(kubernetes): form validation (#170)
* feat(kubernetes): add published node port value check
* feat(kubernetes): add a dns compliant validation
* fix(kubernetes): fix port range validation
* feat(kubernetes): lot of form validation
* feat(kubernetes): add lot of form validation
* feat(kubernetes): persisted folders size validation
* feat(kubernetes): persisted folder path should be unique
* fix(kubernetes): fix createResourcePool button
* fix(kubernetes): change few things
* fix(kubernetes): fix slider memory
* fix(kubernetes): fix duplicates on dynamic field list
* fix(kubernetes): remove bad validation on keys
* feat(kubernetes): minor UI enhancements and validation updates
* feat(kubernetes): minor UI update
* fix(kubernetes): revert on slider fix
* review(kubernetes): add future changes to do
* fix(kubernetes): add form validation on create application memory slider
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
Co-authored-by: xAt0mZ <baron_l@epitech.eu>
* feat(kubernetes): remove Docker related content
* feat(kubernetes): update build system to remove docker binary install
* fix(kubernetes): fix an issue with missing user settings
* feat(kubernetes): created column for apps and resource pools (#184)
* feat(kubernetes): created column for apps and resource pools
* feat(kubernetes): configurations and volumes owner
* feat(kubernetes): rename datatables columns
* fix(kubernetes): auto detect statefulset headless service name (#196)
* fix(applications): display used configurations (#198)
* feat(kubernetes): app details - display data access policy (#199)
* feat(kubernetes): app details - display data access policy
* feat(kubernetes): tooltip on data access info
* feat(kubernetes): move DAP tooltip to end of line
* feat(kubernetes): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* fix(kubernetes): fix an issue when updating the local endpoint (#204)
* fix(kubernetes): add unique key to configuration overriden key path field (#207)
* feat(kubernetes): tag applications as external (#221)
* feat(kubernetes): tag applications as external first approach
* feat(kubernetes): tag applications as external
* feat(kubernetes): Use ibytes as the default volume size unit sent to the Kubernetes API (#222)
* feat(kubernetes): Use ibytes as the default volume size unit sent to the Kubernetes API
* fix(kubernetes): only display b units in list and details views
* feat(kubernetes): add note to application details (#212)
* feat(kubernetes): add note to application details
* fix(kubernetes): remove eslintcache
* feat(kubernetes): update application note UI
* feat(kubernetes): add an update button to the note form when a note is already associated to an app
* feat(kubernetes): fix with UI changes
* fix(kubernetes): change few things
* fix(kubernetes): remove duplicate button
* fix(kubernetes): just use a ternary
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(kubernetes): fix data persistence display for isolated DAP (#223)
* feat(kubernetes): add a quick action to copy application name to clipboard (#225)
* feat(kubernetes): revert useless converter changes (#228)
* feat(kubernetes): edit application view (#200)
* feat(kubernetes): application to formValues conversion
* feat(kubernetes): extract applicationFormValues conversion as converter function
* feat(kubernetes): draft app patch
* feat(kubernetes): patch on all apps services + service service + pvc service
* feat(kubernetes): move name to labels and use UUID as kubernetes Name + patch recreate if necessary
* feat(kubernetes): move user app name to label and use UUID for Kubernetes Name field
* feat(kubernetes): kubernetes service patch mechanism
* feat(kubernetes): application edit
* feat(kubernetes): remove stack edit on app details
* feat(kubernetes): revert app name saving in label - now reuse kubernetes Name field
* feat(kubernetes): remove the ability to edit the DAP
* feat(kubernetes): cancel button on edit view
* feat(kubernetes): remove ability to add/remove persisted folders for SFS edition
* feat(kubernetes): minor UI update and action changes
* feat(kubernetes): minor UI update
* feat(kubernetes): remove ability to edit app volumes sizes + disable update button if no changes are made + codeclimate
* fix(kubernetes): resource reservation sliders in app edit
* fix(kubernetes): patch returned with 422 when trying to create nested objects
* fix(kubernetes): changing app deployment type wasn't working (delete failure)
* style(kubernetes): codeclimate
* fix(kubernetes): app edit - limits sliders max value
* feat(kubernetes): remove prefix on service name as we enforce DNS compliant app names
* fix(kubernetes): edit app formvalues replica based on target replica count and not total pods count
* fix(kubernetes): disable update for RWO on multi replica + delete service when changing app type
* fix(kubernetes): app details running / target pods display
* feat(kubernetes): add partial patch for app details view
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(kubernetes): disable edit capability for external and system apps (#233)
* feat(kubernetes): minor UI update
* fix(kubernetes): edit application issues (#235)
* feat(kubernetes): disable edition of load balancer if it's in pending state
* fix(kubernetes): now able to change from LB to other publishing types
* feat(kuberntes): modal on edit click to inform on potential service interruption
* feat(kubernetes): hide note when empty + add capability to collapse it
* fix(kubernetes): UI/API desync + app update button enabled in some cases where it shouldn't be
* fix(kubernetes): all apps are now using rolling updates with specific conditions
* style(kubernetes): code indent
* fix(kubernetes): disable sync process on endpoint init as current endpoint is not saved in client state
* fix(kubernetes): sliders refresh on app create + app details bad display for sfs running pods
* feat(kubernetes): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(kubernetes): bump up kubectl version to v1.18.0
* feat(kubernetes): when refreshing a view, remember currently opened tabs (#226)
* feat(kubernetes): When refreshing a view, remember currently opened tabs
* fix(kubernetes): only persist the current tab inside the actual view
* fix(kubernetes): not working with refresh in view header
* fix(kubernetes): skip error on 404 headless service retrieval if missconfigured in sfs (#242)
* refactor(kubernetes): use KubernetesResourcePoolService instead of KubernetesNamespaceService (#243)
* fix(kubernetes): create service before app to enforce port availability (#239)
* fix(kubernetes): external flag on application ports mappings datatable (#245)
* refactor(kubernetes): remove unused KubernetesResourcePoolHelper (#246)
* refactor(kubernetes): make all *service.getAllAsync functions consistent (#249)
* feat(kubernetes): Tag external applications in the application table of the resource pool details view (#251)
* feat(kubernetes): add ability to redeploy application (#240)
* feat(kubernetes): add ability to redeploy application
* feat(kubernetes): allow redeploy for external apps
* Revert "feat(kubernetes): allow redeploy for external apps"
This reverts commit 093375a7e93c1a07b845ebca1618da034a97fbcd.
* refactor(kubernetes): use KubernetesPodService instead of REST KubernetesPods (#247)
* feat(kubernetes): prevent configuration properties edition (#248)
* feat(kubernetes): prevent configuration properties edition
* feat(kubernetes): Relocate the Data/Actions to a separate panel
* feat(kubernetes): remove unused functions
* feat(kubernetes): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* refactor(kubernetes): Simplify the FileReader usage (#254)
* refactor(kubernetes): simplify FileReader usage
* refactor(kubernetes): Simplify FileReader usage
* refactor(kubernetes): rename e as event for readability
* feat(kubernetes): Tag system Configs in the Config details view (#257)
* refactor(kubernetes): Refactor the isFormValid function of multiple controllers (#253)
* refactor(kubernetes): refactor isFormValid functions in configurations
* refactor(kubernetes): refactor isformValid functions in create application
* refactor(kubernetes): remove duplicate lines
* refactor(kubernetes): remove commented line
* feat(kubernetes): Tag external volumes and configs (#250)
* feat(kubernetes): Tag external volumes and configs
* feat(kubernetes): remove .eslintcache
* feat(kubernetes): change few things
* feat(kubernetes): don't tag system configuration as external
* feat(kubernetes): minor UI update
* feat(kubernetes): extract inline css and clean all tags
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* fix(kubernetes): daemon set edit (#258)
* fix(kubernetes): persistent folder unit parsing
* fix(kubernetes): edit daemonset on RWO storage
* fix(kubernetes): external SFS had unlinked volumes (#264)
* feat(kubernetes): prevent to override two different configs on the same filesystem path (#259)
* feat(kubernetes): prevent to override two different configs on the same filesystem path
* feat(kubernetes): The validation should only be triggered across Configurations.
* feat(kubernetes): fix validations issues
* feat(kubernetes): fix form validation
* feat(kubernetes): fix few things
* refactor(kubernetes): Review the code mirror component update for configurations (#260)
* refactor(kubernetes): extract duplicate configuration code into a component
* refactor(kubernetes): fix form validation issues
* refactor(kubernetes): fix missing value
* refactor(kubernetes): remove useless await
* feat(kubernetes): Update the shared access policy configuration for Storage (#263)
* feat(kubernetes): Update the shared access policy configuration for Storage
* Update app/kubernetes/models/storage-class/models.js
* feat(kubernetes): remove ROX references and checks
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
Co-authored-by: xAt0mZ <baron_l@epitech.eu>
* feat(kubernetes): provide the remove/restore UX for environment variables when editing an application (#261)
* feat(kubernetes): Provide the remove/restore UX for environment variables when editing an application
* feat(kubernetes): fix ui issue
* feat(kubernetes): change few things
* fix(kubernetes): Invalid display for exposed ports in accessing the application section (#267)
* feat(kubernetes): application rollback (#269)
* feat(kubernetes): retrieve all versions of a deployment
* feat(kubernetes): application history for all types
* feat(kubernetes): deployment rollback
* feat(kubernetes): daemonset / statefulset rollback
* feat(kubernetes): remove the revision selector and rollback on previous version everytime
* feat(kubernetes): minor UI changes
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(kubernetes): reservations should be computed based on requests instead of limits (#268)
* feat(kubernetes): Reservations should be computed based on requests instead of limits
* feat(kubernetes): use requests instead of limits in application details
* feat(kubernetes): removes unused limits
* feat(kubernetes): Not so useless
* feat(kubernetes): use service selectors to bind apps and services (#270)
* feat(kubernetes): use service selectors to bind apps and services
* Update app/kubernetes/services/statefulSetService.js
* style(kubernetes): remove comment block
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* chore(version): bump version number
* feat(kubernetes): update feedback panel text
* chore(app): add prettier to k8s
* style(app): apply prettier to k8s codebase
* fix(kubernetes): Cannot read property 'port' of undefined (#272)
* fix(kubernetes): Cannot read property 'port' of undefined
* fix(kubernetes): concat app ports outside publishedports loop
* fix(application): fix broken display of the persistence layer (#274)
* chore(kubernetes): fix conflicts
* chore(kubernetes): fix issues related to conflict resolution
* refactor(kubernetes): refactor code related to conflict resolution
* fix(kubernetes): fix a minor issue with assets import
* chore(app): update yarn.lock
* fix(application): ports mapping are now correctly detected (#300)
* fix(build-system): fix missing docker binary download step
* feat(kubernetes): application auto scaling details (#301)
* feat(kubernetes): application auto scaling details
* feat(kubernetes): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(kubernetes): Introduce a "used by" column in the volume list view (#303)
Co-authored-by: xAt0mZ <baron_l@epitech.eu>
Co-authored-by: Maxime Bajeux <max.bajeux@gmail.com>
Co-authored-by: xAt0mZ <xAt0mZ@users.noreply.github.com>
* feat(project): introduce toolkit for containerized dev
* feat(project): clean up localserver shell cmd
* feat(project): add install of yarn deps to grunt
* feat(project): update gruntfile.js
* Introduce an ARG statement for the GO_VERSION
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(auth): introduce new timeout constant
* feat(auth): pass timeout from handler
* feat(auth): add timeout selector to auth settings view
* feat(settings): add user session timeout property
* feat(auth): load user session timeout from settings
* fix(settings): use correct time format
* feat(auth): remove no-auth flag
* refactor(auth): move timeout mgmt to jwt service
* refactor(client): remove no-auth checks from client
* refactor(cli): remove defaultNoAuth
* feat(settings): create settings with default user timeout value
* refactor(db): save user session timeout always
* refactor(jwt): return error
* feat(auth): set session timeout in jwt service on update
* feat(auth): add description and time settings
* feat(auth): parse duration
* feat(settings): validate user timeout format
* refactor(settings): remove unneccesary import
* feat(templates): Support templates versioning format
* Update app/portainer/models/template.js
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* feat(volumes): add a switch to use CIFS volumes
* feat(volumes): switch between nfs and cifs
* feat(volumes): autofix sharepoint, hide driveroptions and allow to create unnammed volume
* feat(volumes): change cifs version select options
* feat(volumes): change few things
* feat(api): introduce Edge group API (#3639)
* feat(edge-groups): add object definition and service definition
* feat(edge-groups): implement bolt layer
* feat(edge-groups): bind service to server
* feat(edge-group): add edge-group create http handler
* feat(edge-groups): add list method to edge group handler
* feat(edge-group): add inspect http handler
* feat(edge-groups): add delete edge-group handler
* feat(edge-groups): add update group handler
* style(db): order by alphabetical order
* fix(edge-groups): rewrite http error messages
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* fix(main): order by alphabetical order
* refactor(edge-group): relocate fetch group
* fix(edge-group): reset tagids/endpoints if dynamic
* refactor(server): order by alphabetical order
* refactor(server): order by alphabetical order
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* Introduce a new setting to enable Edge compute features (#3654)
* feat(edge-compute): add edge compute setting
* feat(edge-compute): add edge compute group to sidebar
* fix(settings): rename settings form group
* fix(settings): align form control
* Edge group associated endpoints (#3659)
* chore(version): bump version number
* chore(version): bump version number
* feat(endpoints): filter by endpoint type (#3646)
* refactor(tags): migrate tags to have association objects
* refactor(tags): refactor tag management (#3628)
* refactor(tags): replace tags with tag ids
* refactor(tags): revert tags to be strings and add tagids
* refactor(tags): enable search by tag in home view
* refactor(tags): show endpoint tags
* refactor(endpoints): expect tagIds on create payload
* refactor(endpoints): expect tagIds on update payload
* refactor(endpoints): replace TagIds to TagIDs
* refactor(endpoints): set endpoint group to get TagIDs
* refactor(endpoints): refactor tag-selector to receive tag-ids
* refactor(endpoints): show tags in multi-endpoint-selector
* chore(tags): revert reformat
* refactor(endpoints): remove unneeded bind
* refactor(endpoints): change param tags to tagids in endpoint create
* refactor(endpoints): remove console.log
* refactor(tags): remove deleted tag from endpoint and endpoint group
* fix(endpoints): show loading label while loading tags
* chore(go): remove obsolete import labels
* chore(db): add db version comment
* fix(db): add tag service to migrator
* refactor(db): add error checks in migrator
* style(db): sort props in alphabetical order
* style(tags): fix typo
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* refactor(endpoints): replace tagsMap with tag string representation
* refactor(tags): rewrite tag delete to be more readable
* refactor(home): rearange code to match former style
* refactor(tags): guard against missing model in tag-selector
* refactor(tags): rename vars in tag_delete
* refactor(tags): allow any authenticated user to fetch tag list
* refactor(endpoints): replace controller function with class
* refactor(endpoints): replace function with helper
* refactor(endpoints): replace controller with class
* refactor(tags): revert tags-selector to use 1 way bindings
* refactor(endpoints): load empty tag array instead of nil
* refactor(endpoints): revert default tag ids
* refactor(endpoints): use function in place
* refactor(tags): use lodash
* style(tags): use parens in arrow functions
* fix(tags): remove tag from tag model
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* refactor(tags): create tag association when creating tag
* refactor(tags): delete tag association when deleting tag
* refactor(db): handle error in tag association create
* feat(endpoint-group): update tag assoc when creating endpoint group
* feat(endpoint-group): update tag association when updating group
* feat(endpoint-groups): remove group from tag associations
* feat(endpoints): associate endpoint with tag on create
* feat(endpoints): edit tag association when updating endpoint
* fix(tags): fix merge problems
* refactor(tags): remove tag association resource
* fix(db): use regular tags map
* style(tags): reorder props and imports
* refactor(endpoint-groups): replace tag-association with tag
* feat(edge-group): get associated endpoints when fetching
* refactor(tags): refactor algo to update endpoint and group tags
* refactor(edge-group): rename variable
* refactor(tags): move calc of tags to remove to global function
* fix(tags): update tag after adding association
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* fix(edge-groups): associate groups only with edge endpoints (#3667)
* fix(edge-groups): check endpoint type when adding to edge-group
* fix(edge-groups): return only edge endpoints for dynamic groups
* fix(edge-compute): load edge compute setting on public setting (#3665)
* Edge group list (#3644)
* feat(edge-groups): add edge module
* feat(edge-groups): add edge-group service
* feat(edge-group): add groups list view
* feat(edge-groups): add link to groups in the sidebar
* feat(edge-group): show endpoints count and group type
* feat(edge-group): enable removal of edge groups
* refactor(edge-groups): replace datatable controller with class
* refactor(edge-groups): replace function with class
* fix(edge-groups): sort items by endpoints count and group type
* refactor(edge-groups): use generic datatable-header component
* feat(app): add trace for ui router
* fix(edge-compute): add ng injection to onEnter guard
* fix(edge-compute): add ng injection to onEnter guard
* style(edge-compute): remove space
* refactor(edge-compute): import angular
* fix(app): remove ui router trace
* refactor(product): revert app.js
* fix(edge-compute): remove admin guard from edge routes
* fix(edge-groups): change label of empty datatable
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* refactor(edge-groups): rename service
* fix(edge-groups): replace icon in sidebar
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* refactor(edge-groups): remove datatable controller
* refactor(edge-groups): move datatable icon to binding
* refactor(edge-groups): use vanilla datatable header
* refactor(datatable): remove datatable header
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* refactor(edge): rename edge group to Edge group
* feat(edge-groups): edge group creation view (#3671)
* feat(edge-groups): add create group view
* feat(edge-groups): allow to choose group type
* feat(edge-groups): implement create service handler
* feat(edge-group): filter by edge endpoints
* refactor(edge-groups): rename to camel case
* refactor(edge-groups): replace controller with class
* feat(endpoints): filter endpoints by type
* refactor(edge-groups): remove comments and unneccesary async keyword
* refactor(edge-group): use $async service
* fix(edge-groups): replace view title
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* fix(edge-groups): change icon
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* fix(edge-groups): change icon
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* refactor(edge-groups): remove obsolete function
* feat(edge-groups): add empty list messages
* feat(edge-group): add description to group types
* refactor(edge-groups): add finally block
* feat(endpoints): search server in multi-endpoint-selector
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* feat(edge-group) edit view (#3672)
* feat(edge-groups): add edit group view
* refactor(edge-group): replace edit controller with class
* refactor(edge-groups): remove async keyword
* refactor(edge-groups): use $async service
* refactor(edge-group): remove unnecessary functions
* fix(endpoints): group by groups in endpoint-selector
* feat(edge-groups): minor UI update
* fix(edge-groups): provide defaults for edge group (#3682)
* feat(edge-stacks): add basic views and sidebar link (#3689)
* feat(edge-stacks): add mock routes
* feat(edge-stacks): add link to stacks on sidebar
* feat(edge-stacks): add edge stacks view
* feat(edge-stacks): add create view
* feat(edge-stacks): add edit view
* fix(edge-stacks): use class in controller
* feat(edge-stacks): add edge-stacks api (#3688)
* feat(edge-stack): add edge stack types
* feat(edge-stacks): add edge stack service interface
* feat(edge-stacks): implement store
* feat(edge-stacks): bind service to datastore
* feat(edge-stacks): bind service to server
* feat(edge-stack): create basic api
* feat(edge-stack): create stack api
* feat(edge-stacks): update api
* refacotor(edge-stack): rename files
* feat(edge-stack): update endpoint status
* style(edge-stacks): remove comments
* feat(edge-stacks): use edge stacks folder for files
* fix(edge-stacks): replace bucket name
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* fix(edge-stacks): replace unmarshal function
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* fix(edge-stacks): replace edge stacks path
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* chore(git): merge develop to edge compute (#3692)
* feat(support): make support type dynamic (#3621)
* chore(version): bump version number
* chore(version): bump version number
* feat(endpoints): filter by endpoint type (#3646)
* chore(assets): double UI image resolutions for HiDPI displays (#3648)
Fixes#3069
Prevents users seeing blurry logos and other images when using a hidpi
display (like scaled 4k, or a Retina display).
These images have been recreated manually with 2x the original
resolution but should resemble the originals as much as possible.
They have also been run through pngcrush for compression.
* fix(services): enforce minimum replica count of 0 (#3653)
* fix(services): enforce minimum replica count of 0
Fixes#3652
Prevents replica count from being set below zero and causing an error.
* fix(services): enforce replica count is an integer
Prevents users entering decimals in the replica count
* refactor(tags): refactor tag management (#3628)
* refactor(tags): replace tags with tag ids
* refactor(tags): revert tags to be strings and add tagids
* refactor(tags): enable search by tag in home view
* refactor(tags): show endpoint tags
* refactor(endpoints): expect tagIds on create payload
* refactor(endpoints): expect tagIds on update payload
* refactor(endpoints): replace TagIds to TagIDs
* refactor(endpoints): set endpoint group to get TagIDs
* refactor(endpoints): refactor tag-selector to receive tag-ids
* refactor(endpoints): show tags in multi-endpoint-selector
* chore(tags): revert reformat
* refactor(endpoints): remove unneeded bind
* refactor(endpoints): change param tags to tagids in endpoint create
* refactor(endpoints): remove console.log
* refactor(tags): remove deleted tag from endpoint and endpoint group
* fix(endpoints): show loading label while loading tags
* chore(go): remove obsolete import labels
* chore(db): add db version comment
* fix(db): add tag service to migrator
* refactor(db): add error checks in migrator
* style(db): sort props in alphabetical order
* style(tags): fix typo
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* refactor(endpoints): replace tagsMap with tag string representation
* refactor(tags): rewrite tag delete to be more readable
* refactor(home): rearange code to match former style
* refactor(tags): guard against missing model in tag-selector
* refactor(tags): rename vars in tag_delete
* refactor(tags): allow any authenticated user to fetch tag list
* refactor(endpoints): replace controller function with class
* refactor(endpoints): replace function with helper
* refactor(endpoints): replace controller with class
* refactor(tags): revert tags-selector to use 1 way bindings
* refactor(endpoints): load empty tag array instead of nil
* refactor(endpoints): revert default tag ids
* refactor(endpoints): use function in place
* refactor(tags): use lodash
* style(tags): use parens in arrow functions
* fix(tags): remove tag from tag model
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* chore(yarn): change start:client to start webpack dev server (#3595)
* chore(yarn): change start:client to start webpack dev server
* Update package.json
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* create tag from tag selector (#3640)
* feat(tags): add button to save tag when doesn't exist
* feat(endpoints): allow the creating of tags in endpoint edit
* feat(groups): allow user to create tags in create group
* feat(groups): allow user to create tags in edit group
* feat(endpoint): allow user to create tags from endpoint create
* feat(tags): allow the creation of a new tag from dropdown
* feat(tag): replace "add" with "create"
* feat(tags): show tags input when not tags
* feat(tags): hide create message when not allowed
* refactor(tags): replace component controller with class
* refactor(tags): replace native methods with lodash
* refactor(tags): remove unused onChangeTags function
* refactor(tags): remove on-change binding
* style(tags): remove white space
* refactor(endpoint-groups): move controller to separate file
* fix(groups): allow admin to create tag in group form
* refactor(endpoints): wrap async function with try catch and $async
* style(tags): wrap arrow function args with parenthesis
* refactor(endpoints): return $async functions
* refactor(tags): throw error in the format Notification expects
* chore(yarn): add start:client script back (#3691)
* feat(endpoints): filter by ids and/or tag ids (#3690)
* feat(endpoints): add filter by tagIds
* refactor(endpoints): change endpoints service to query by tagIds
* fix(endpoints): filter by tags
* feat(endpoints): filter by endpoint groups tags
* feat(endpoints): filter by ids
Co-authored-by: itsconquest <william.conquest@portainer.io>
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
Co-authored-by: Ben Brooks <ben@bbrks.me>
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* Chore merge develop to edge compute (#3702)
* feat(support): make support type dynamic (#3621)
* chore(version): bump version number
* chore(version): bump version number
* feat(endpoints): filter by endpoint type (#3646)
* chore(assets): double UI image resolutions for HiDPI displays (#3648)
Fixes#3069
Prevents users seeing blurry logos and other images when using a hidpi
display (like scaled 4k, or a Retina display).
These images have been recreated manually with 2x the original
resolution but should resemble the originals as much as possible.
They have also been run through pngcrush for compression.
* fix(services): enforce minimum replica count of 0 (#3653)
* fix(services): enforce minimum replica count of 0
Fixes#3652
Prevents replica count from being set below zero and causing an error.
* fix(services): enforce replica count is an integer
Prevents users entering decimals in the replica count
* refactor(tags): refactor tag management (#3628)
* refactor(tags): replace tags with tag ids
* refactor(tags): revert tags to be strings and add tagids
* refactor(tags): enable search by tag in home view
* refactor(tags): show endpoint tags
* refactor(endpoints): expect tagIds on create payload
* refactor(endpoints): expect tagIds on update payload
* refactor(endpoints): replace TagIds to TagIDs
* refactor(endpoints): set endpoint group to get TagIDs
* refactor(endpoints): refactor tag-selector to receive tag-ids
* refactor(endpoints): show tags in multi-endpoint-selector
* chore(tags): revert reformat
* refactor(endpoints): remove unneeded bind
* refactor(endpoints): change param tags to tagids in endpoint create
* refactor(endpoints): remove console.log
* refactor(tags): remove deleted tag from endpoint and endpoint group
* fix(endpoints): show loading label while loading tags
* chore(go): remove obsolete import labels
* chore(db): add db version comment
* fix(db): add tag service to migrator
* refactor(db): add error checks in migrator
* style(db): sort props in alphabetical order
* style(tags): fix typo
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* refactor(endpoints): replace tagsMap with tag string representation
* refactor(tags): rewrite tag delete to be more readable
* refactor(home): rearange code to match former style
* refactor(tags): guard against missing model in tag-selector
* refactor(tags): rename vars in tag_delete
* refactor(tags): allow any authenticated user to fetch tag list
* refactor(endpoints): replace controller function with class
* refactor(endpoints): replace function with helper
* refactor(endpoints): replace controller with class
* refactor(tags): revert tags-selector to use 1 way bindings
* refactor(endpoints): load empty tag array instead of nil
* refactor(endpoints): revert default tag ids
* refactor(endpoints): use function in place
* refactor(tags): use lodash
* style(tags): use parens in arrow functions
* fix(tags): remove tag from tag model
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* chore(yarn): change start:client to start webpack dev server (#3595)
* chore(yarn): change start:client to start webpack dev server
* Update package.json
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* create tag from tag selector (#3640)
* feat(tags): add button to save tag when doesn't exist
* feat(endpoints): allow the creating of tags in endpoint edit
* feat(groups): allow user to create tags in create group
* feat(groups): allow user to create tags in edit group
* feat(endpoint): allow user to create tags from endpoint create
* feat(tags): allow the creation of a new tag from dropdown
* feat(tag): replace "add" with "create"
* feat(tags): show tags input when not tags
* feat(tags): hide create message when not allowed
* refactor(tags): replace component controller with class
* refactor(tags): replace native methods with lodash
* refactor(tags): remove unused onChangeTags function
* refactor(tags): remove on-change binding
* style(tags): remove white space
* refactor(endpoint-groups): move controller to separate file
* fix(groups): allow admin to create tag in group form
* refactor(endpoints): wrap async function with try catch and $async
* style(tags): wrap arrow function args with parenthesis
* refactor(endpoints): return $async functions
* refactor(tags): throw error in the format Notification expects
* chore(yarn): add start:client script back (#3691)
* feat(endpoints): filter by ids and/or tag ids (#3690)
* feat(endpoints): add filter by tagIds
* refactor(endpoints): change endpoints service to query by tagIds
* fix(endpoints): filter by tags
* feat(endpoints): filter by endpoint groups tags
* feat(endpoints): filter by ids
* refactor(project): sort portainer types and interface definitions (#3694)
* refactor(portainer): sort types
* style(portainer): add comment about role service
* refactor(portainer): sort interface types
* refactor(portainer): sort enums
* Update README.md
* Update README.md
* Update README.md
* chore(project): add prettier for code format (#3645)
* chore(project): install prettier and lint-staged
* chore(project): apply prettier to html too
* chore(project): git ignore eslintcache
* chore(project): add a comment about format script
* chore(prettier): update printWidth
* chore(prettier): remove useTabs option
* chore(prettier): add HTML validation
* refactor(prettier): fix closing tags
* feat(prettier): define angular parser for html templates
* style(prettier): run prettier on codebase
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* chore(prettier): run format on client codebase
Co-authored-by: itsconquest <william.conquest@portainer.io>
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
Co-authored-by: Ben Brooks <ben@bbrks.me>
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
Co-authored-by: Neil Cresswell <neil@cresswell.net.nz>
* feat(edge-stacks): create basic edge stack service (#3704)
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* feat(edge-groups): Provide a switch to use AND or OR for tags (#3695)
* feat(edge-groups): add switch to form
* feat(project): add property to EdgeGroup
* feat(edge-groups): save mustHaveAllTags
* feat(edge-groups): fetch associated endpoints (AND and OR)
* feat(edge-groups): add AND selector
* feat(edge-groups): default to AND
* fix(edge-groups): rewrite selector options
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* refactor(endpoints): move margin to schedule form
* fix(edge-groups): move the selector to top of group
* refactor(edge-groups): replace partialMatch property
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* feat(edge-stacks): add Edge stack creation view (#3705)
* feat(edge-stacks): basic creation view
* feat(edge-stacks): add group selector
* feat(edge-stack): create edge stack
* fix(code-editor): apply digest cycle after editor is changed
* style(project): reformat constants file
* feat(edge-stacks): add a note about missing edge groups
* fix(edge-stacks): add groups when creating stack from file
* feat(edge-groups): add associated endpoints table (#3710)
* feat(edge-groups): load associated endpoints
* feat(endpoints): add option to filter endpoint by partial match tags
* feat(edge-groups): query endpoints by PartialMatch
* feat(edge-groups): reload endpoints when form changes
* feat(edge-groups): remove columns
* feat(edge-group): remove url column
* refactor(edge-group): remove props
* feat(edge-stacks): add list view (#3713)
* feat(edge-stacks): basic datatable
* feat(edge-stacks): remove stack
* refactor(edge-stacks): convert to class
* refactor(edge-stacks): replace id with stackId
* feat(edge-stacks) edit edge stack view (#3716)
* feat(edge-stack): load file content
* feat(edge-stack): edit view
* feat(edge-stack): enable update stack
* refactor(edge-stacks): move form to component
* feat(edge-stacks): add endpoints status
* feat(edge-stacks): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(edge-groups) prevent deletion of edge group used by an edge stack (#3722)
* feat(edge-groups): show if group belonges to edge stack
* feat(edge-group): protect deletion of used edge group
* feat(edge-groups): diable selection of used group
* feat(edge-groups): add inuse tag (#3739)
* feat(edge-groups): add inuse tag
* Update app/edge/components/groups-datatable/groupsDatatable.html
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* feat(edge-stack): update stack version when stack file is changed (#3746)
* feat(edge-stack): update version when stack file is changed
* refactor(edge-stacks): move update of version to clientside
* feat(edge-groups): replace Edge group endpoint selector (#3738)
* feat(edge-groups): replace selector
* feat(edge-group): add selector in edit form
* feat(edge-groups): show tags in endpoint selector
* feat(edge-groups): show the endpoint group name
* fix(edge-group): remove element from associated endpoints
* feat(edge-groups): add group column
* feat(edge-groups): move endpoints to other column
* fix(groups): disable sort
* refactor(endpoints): toggle backend pagination as a property
* fix(endpoints): show group name in group-association-table
* feat(endpoints): truncate table columns
* fix(endpoints): update group association table colspan
* fix(endpoint-groups): show dash when no tags
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(edge-stacks): add api for edge to query stack config (#3748)
* refactor(http): move edge validation to bouncer
* feat(edge-stacks): add api for edge to query stack config
* style(edge-stack): remove parentheses
* Update api/http/security/bouncer.go
* refactor(edge-stacks): move config inspect to endpoints handler
* refactor(endpoints): move stack inspect to edge handler
* style(security): fix typo
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* refactor(endpoints): rename file
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* feat(edge-groups): add dynamic group endpoints table (#3780)
* fix(edge-stacks): update version when updating stack files (#3778)
* feat(edgestacks): change status permission to edge enpoints
* feat(edge-compute): add stack info to edge status inspect (#3764)
* feat(edge-compute): create helper functions
* feat(endpoints): add relation object and service
* feat(db): create endpoint relation migration
* feat(endpoints): create relation when creating endpoint
* feat(endpoints): update relation when updating endpoint
* feat(endpoints): delete relation when deleting endpoint
* feat(endpoint): add stack status to endpoint_status
* feat(edge-stacks): connect new edge stack to endpoint
* refactor(edgestack): return errors.New
* refactor(edgestacks): return error
* refactor(edgegroup): endpoint can be related only if edge endpoint
* feat(endpoints): update relation only when tags or groups were changd
* refactor(tags): change tags functions to set functions
* refactor(edgestack): return a list of endpoints for a list of edgegroups
* feat(edgestacks): update relation when updating stack
* feat(edgestacks): remove relations when deleting edge stack
* feat(edgegroup): update related endpoints
* feat(endpoint-group): update endpoints relations on create
* feat(endpointgroup): add relatd stacks to endpoint when added to group
* feat(endpoint-groups): update relation when group is changed
* feat(endpointgroup): when deleting group, update its endpoints relations
* feat(tags): update related endpoints when deleting tag
* refactor(edge-compute): use pointers
* refactor(endpointgroup): handle unassociated endpoint
* fix(edgestack): show correct stack status
* fix(endpoint): remove deleted endpoint from related tags
* feat(edge-stacks): change acknowledged status color to blue (#3810)
* feat(edge-compute): provide stack name to edge endpoint (#3809)
* feat(edge-groups): when no tags selected show empty list of endpoints (#3811)
* feat(edge-groups): when no tags selected show empty list of endpoints
* fix(edge-group): change empty associated endpoint text
* fix(edge-compute): add missing relations updates (#3817)
* fix(endpoint): remove deleted endpoint from edge group
* fix(tags): remove deleted tag from edge group
* fix(endpoint): remove deleted endpoint from edge stack
* fix(edge-groups): remove clearing of edgeGroup fields
* fix(edge-groups): show dynamic edge groups without tags
* fix(edge-compute): use sequential delete in resources (#3818)
* fix(endpoints): delete endpoints on by one
* fix(tags): remove tags one by one
* fix(groups): remove endpoint groups one by one
* fix(edge-stacks): remove stack one by one
* fix(edge-groups): remove edge group one by one
* fix(edge-stacks): add link to root in breadcrumbs
* style(edge): add empty line after errors
* refactor(tags): remove old function
* refactor(endpoints): revert changes to multi-endpoint-selector
* feat(edge-stacks): support Edge stack templates (#3812)
* feat(edge-compute): fetch templates from url
* feat(edge-stacks): fetch edge templates
* feat(edge-stacks): choose template and save
* feat(edge-stacks): add placeholder to templates select
* feat(edge-templates): show info
* fix(edge-stacks): fix typo
* feat(edge-templates): replace template url
* feat(edge-compute): use custom url if available
* fix(edge-stacks): show error message when failing
* feat(edge-compute): show description in template
* feat(edge-templates): change access to route
* style(edge-compute): change EdgeTemplatesURL description
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
Co-authored-by: itsconquest <william.conquest@portainer.io>
Co-authored-by: Ben Brooks <ben@bbrks.me>
Co-authored-by: Neil Cresswell <neil@cresswell.net.nz>
* feat(volumes): Revise the UX for creation of NFS volumes
* feat(volume-creation): minor UI update
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* chore(project): install prettier and lint-staged
* chore(project): apply prettier to html too
* chore(project): git ignore eslintcache
* chore(project): add a comment about format script
* chore(prettier): update printWidth
* chore(prettier): remove useTabs option
* chore(prettier): add HTML validation
* refactor(prettier): fix closing tags
* feat(prettier): define angular parser for html templates
* style(prettier): run prettier on codebase
Co-authored-by: Anthony Lapenna <lapenna.anthony@gmail.com>
* feat(endpoints): add filter by tagIds
* refactor(endpoints): change endpoints service to query by tagIds
* fix(endpoints): filter by tags
* feat(endpoints): filter by endpoint groups tags
* feat(endpoints): filter by ids
* feat(tags): add button to save tag when doesn't exist
* feat(endpoints): allow the creating of tags in endpoint edit
* feat(groups): allow user to create tags in create group
* feat(groups): allow user to create tags in edit group
* feat(endpoint): allow user to create tags from endpoint create
* feat(tags): allow the creation of a new tag from dropdown
* feat(tag): replace "add" with "create"
* feat(tags): show tags input when not tags
* feat(tags): hide create message when not allowed
* refactor(tags): replace component controller with class
* refactor(tags): replace native methods with lodash
* refactor(tags): remove unused onChangeTags function
* refactor(tags): remove on-change binding
* style(tags): remove white space
* refactor(endpoint-groups): move controller to separate file
* fix(groups): allow admin to create tag in group form
* refactor(endpoints): wrap async function with try catch and $async
* style(tags): wrap arrow function args with parenthesis
* refactor(endpoints): return $async functions
* refactor(tags): throw error in the format Notification expects
* refactor(tags): replace tags with tag ids
* refactor(tags): revert tags to be strings and add tagids
* refactor(tags): enable search by tag in home view
* refactor(tags): show endpoint tags
* refactor(endpoints): expect tagIds on create payload
* refactor(endpoints): expect tagIds on update payload
* refactor(endpoints): replace TagIds to TagIDs
* refactor(endpoints): set endpoint group to get TagIDs
* refactor(endpoints): refactor tag-selector to receive tag-ids
* refactor(endpoints): show tags in multi-endpoint-selector
* chore(tags): revert reformat
* refactor(endpoints): remove unneeded bind
* refactor(endpoints): change param tags to tagids in endpoint create
* refactor(endpoints): remove console.log
* refactor(tags): remove deleted tag from endpoint and endpoint group
* fix(endpoints): show loading label while loading tags
* chore(go): remove obsolete import labels
* chore(db): add db version comment
* fix(db): add tag service to migrator
* refactor(db): add error checks in migrator
* style(db): sort props in alphabetical order
* style(tags): fix typo
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* refactor(endpoints): replace tagsMap with tag string representation
* refactor(tags): rewrite tag delete to be more readable
* refactor(home): rearange code to match former style
* refactor(tags): guard against missing model in tag-selector
* refactor(tags): rename vars in tag_delete
* refactor(tags): allow any authenticated user to fetch tag list
* refactor(endpoints): replace controller function with class
* refactor(endpoints): replace function with helper
* refactor(endpoints): replace controller with class
* refactor(tags): revert tags-selector to use 1 way bindings
* refactor(endpoints): load empty tag array instead of nil
* refactor(endpoints): revert default tag ids
* refactor(endpoints): use function in place
* refactor(tags): use lodash
* style(tags): use parens in arrow functions
* fix(tags): remove tag from tag model
Co-authored-by: Anthony Lapenna <anthony.lapenna@portainer.io>
* fix(services): enforce minimum replica count of 0
Fixes#3652
Prevents replica count from being set below zero and causing an error.
* fix(services): enforce replica count is an integer
Prevents users entering decimals in the replica count
Fixes#3069
Prevents users seeing blurry logos and other images when using a hidpi
display (like scaled 4k, or a Retina display).
These images have been recreated manually with 2x the original
resolution but should resemble the originals as much as possible.
They have also been run through pngcrush for compression.
* feat: add setting to change DNS servers
* style: fixing codeclimate warning
Looks like conditional was excessive, it works as expected even without
it.
* style: rename 'DNS Server 1/2' to 'Primary/Secondary DNS Server'
Signed-off-by: Kirill K <kovalev.kirill.a@gmail.com>
* style: rename variables in code to match UI naming
* feat: add tooltips on DNS servers input fields
Signed-off-by: Kirill K <kovalev.kirill.a@gmail.com>
* Revert "feat: add tooltips on DNS servers input fields"
This reverts commit b83ef50825.
* style: secondary DNS placeholder
Signed-off-by: Kirill K <kovalev.kirill.a@gmail.com>
* feat(api): experiment with go mod
* feat(api): experiment with go mod
* feat(api): experiment with go mod
* feat(api): add go module support
* refactor(api): go fmt
* feat(api): gitlab registry type
* feat(registries): early support for gitlab registries
* feat(app): registry service selector
* feat(registry): gitlab support : list repositories and tags - remove features missing
* feat(registry): gitlab registry remove features
* feat(registry): gitlab switch to registry V2 API for repositories and tags
* feat(api): use development extension binary
* fix(registry): avoid 401 on gitlab retrieve to disconnect the user
* feat(registry): gitlab browse projects without extension
* style(app): code cleaning
* refactor(app): PR review changes + refactor on types
* fix(gitlab): remove gitlab info from registrymanagementconfig and force gitlab type
* style(api): go fmt
* feat(api): update APIVersion and ExtensionDefinitionsURL
* fix(api): fix invalid RM extension URL
* feat(registry): PAT scope help
* feat(registry): defaults on registry creation
* style(registry-creation): update layout and text for Gitlab registry
* feat(registry-creation): update gitlab notice
Currently we are using RegExp `/\=(.+)/` to catch key-value
of environment variables, which could not match empty-value
environment variables such as `KEY=`.
This commit will change the RegExp to `/\=(.*)/`, which
matches the empty values.
* feat(containers): added support for port range mappings when deploying containers
* feat(containers): added placeholders to port publishing input fields
* feat(containers): added a tooltip to the manual network port publishing
* feat(containers): improved the code consistency
* fix(registry): fetch datatable details on page/filter/order state change instead of fetching all data on first load
* fix(registry): fetch tags datatable details on state change instead of fetching all data on first load
* fix(registry): add pagination support for tags + loading display on data load
* fix(registry): debounce on text filter to avoid querying transient matching values
* refactor(registry): rebase on latest develop
* feat(registries): background tags and optimisation -- need code cleanup and for-await-of to cancel on page leave
* refactor(registry-management): code cleanup
* feat(registry): most optimized version -- need fix for add/retag
* fix(registry): addTag working without page reload
* fix(registry): retag working without reload
* fix(registry): remove tag working without reload
* fix(registry): remove repository working with latest changes
* fix(registry): disable cache on firefox
* feat(registry): use jquery for all 'most used' manifests requests
* feat(registry): retag with progression + rewrite manifest REST service to jquery
* fix(registry): remove forgotten DI
* fix(registry): pagination on repository details
* refactor(registry): info message + hidding images count until fetch has been done
* fix(registry): fix selection reset deleting selectAll function and not resetting status
* fix(registry): resetSelection was trying to set value on a getter
* fix(registry): tags were dropped when too much tags were impacted by a tag removal
* fix(registry): firefox add tag + progression
* refactor(registry): rewording of elements
* style(registry): add space between buttons and texts in status elements
* fix(registry): cancelling a retag/delete action was not removing the status panel
* fix(registry): tags count of empty repositories
* feat(registry): reload page on action cancel to avoid desync
* feat(registry): uncancellable modal on long operations
* feat(registry): modal now closes on error + modal message improvement
* feat(registries): remove empty repositories from the list
* fix(registry): various bugfixes
* feat(registry): independant timer on async actions + modal fix
* feat(container-details): add entrypoint to container details view
* feat(container-details): restore file from develop branch to bring back original indentation
* feat(container-details): add entrypoint to container details view
* fix(build-system): fix build system on CI for Windows
* fix(build-system): fix build system on CI for Windows
* fix(build-system): fix build system on CI for Windows
* fix(build-system): fix build system on CI for Windows
* fix(build-system): fix build system on CI for Windows
* fix(build-system): fix build system on CI for Windows
* fix(build-system): fix build system on CI for Windows
* fix(build-system): fix build system on CI for Windows
* fix(build-system): fix build system on CI for Windows
* fix(auth): authController full rewrite
fixes 2 bugs caused by legacy code
* fix(auth): moving state to cookies for Firefox private browsing
* fix(auth): clean query params on OAuth response
* feat(api): relocate authorizations outside of JWT
* fix(api): update user authorization after enabling the RBAC extension
* feat(api): add PortainerEndpointList operation in the default portainer authorizations
* feat(auth): retrieve authorization from API instead of JWT
* refactor(auth): move permissions retrieval to function
* refactor(api): document authorizations methods
* feat(services): rollback service capability
* refactor(services): notification reword
Co-Authored-By: William <william.conquest@portainer.io>
* refactor(services): remove TODO comment + add note on rollback capability
* fix(services): service update rpc error version out of sync
* feat(services): confirmation modal on rollback
* feat(services): rpc error no previous spec message
* fix(stack): Skip SSL Verification
* fix(stack): Skip SSL Verification
* fix(stack): move httpsCli into service
* fix(stack): clean-up
* fix(stack): move httpsCli back into the function
* fix(stack): move httpsCli and InstallProtocol back into service
* fix(stack): clean-up debugging
* fix(stack): parameter cleanup
Co-Authored-By: Anthony Lapenna <anthony.lapenna@portainer.io>
* feat(swarmvisualizer): add labels display under node info
* feat(swarmvisualizer): fix css
* add toggle to display node labels
* feat(swarmvisualizer): rename filters section + fix display when label has no value
* feat(swarmvisualizer): retrieve state from local storage for node labels display toggle
* feat(api): remove SnapshotRaw from EndpointList response
* feat(api): add pagination for EndpointList operation
* feat(api): rename last_id query parameter to start
* feat(api): implement filter for EndpointList operation
* feat(home): front - endpoint backend pagination (#2990)
* feat(home): endpoint pagination with backend
* feat(api): remove default limit value
* fix(endpoints): fix a minor issue with column span
* fix(endpointgroup-create): fix an issue with endpoint group creation
* feat(app): minor loading optimizations
* refactor(api): small refactor of EndpointList operation
* fix(home): fix minor loading text display issue
* refactor(api): document bolt services functions
* feat(home): minor optimization
* fix(api): replace seek with index scanning for EndpointPaginated
* fix(api): fix invalid starting index issue
* fix(api): first implementation of working filter
* fix(home): endpoints list keeps backend pagination when it needs to
* fix(api): endpoint pagination doesn't drop the first item on pages >=2 anymore
* fix(home): UI flickering on page/filter load/change
* feat(api): support searching in associated endpoint group data
* feat(api): declare EndpointList params as optional
* feat(endpoints): backend pagination for endpoints view (#3004)
* feat(endpoint-group): enable backend pagination (#3017)
* feat(api): support groupID filter on endpoints route
* feat(api): add new API operations endpointGroupAddEndpoint and endpointGroupDeleteEndpoint
* feat(endpoint-groups): backend pagination support for create and edit
* feat(endpoint-groups): debounce on filter for create/edit views
* feat(endpoint-groups): filter assigned on create view
* (endpoint-groups): unassigned endpoints edit view
* refactor(endpoint-groups): code clean
* feat(endpoint-groups): remove message for Unassigned group
* refactor(api): endpoint group endpoint association refactor
* refactor(api): rename files and remove comments
* refactor(api): remove usage of utils
* refactor(api): optional parameters
* feat(api): update endpointListOperation behavior and parameters
* refactor(api): remove unused methods associated to EndpointService
* refactor(api): remove unused methods associated to EndpointService
* refactor(api): minor refactor
* fix(datatables): allow selecting range using shift (#344)
* feat(datatables): more intuitive batch select behaviour
* feat(datatables): add overridable function called on selection change
* refactor(datatables): remove custom selectAll on Generic-extending Controllers
* fix(datatables): stored state data retrieval on Generic-extanding datatables controllers
* refactor(datatables): remove code duplication between GenericController and extending controllers
* fix(app): wrapper for UI refresh trigger with async/await
* fix(async): $async wrapper now accepts functions with params
* fix(async): $async should return a promise to be chained with ES5 .then() style
* fix(async): $async with multiple params was not working
* refactor(app): wrap all async functions with $async
* docs(async): add link to async wrapper documentation
* refactor(api): refactor base import path
* fix(build-system): update build_binary_devops
* fix(build-system): fix build_binary_devops for linux
* fix(build-system): fix build_binary_devops for Windows
* fix(networks): disable removing predefined networks (#1838)
* fix(networks): disable select all for predefined networks (#1838)
* fix(networks): do not allow delete in network-details & use constant (#1838)
* feat(registries): registries accessibility to all authorized people and not only admins
* feat(registry): dockerhub settings for admin only
* feat(registry): remove registry config access for non admin users
* feat(api): use AuthenticatedAccess policy instead of RestrictedAccess for extensionList operation
* refactor(api): minor update to security package
* refactor(api): revert unexporting function changes
* refactor(api): apply gofmt
* 2584 fix(endpoints): correct agent stack download url
The directions for installing the agent stack from the endpoints
view used an old url. Update to the new url.
* Drop the portainer- prefix for the download path and filename
Co-Authored-By: dang3r <danielpcardoza@gmail.com>
* fix(registry-management): add support for repositories list with multiple requests
* refactor(registry-management): change regex usage to a reusable interceptor function
* refactor(registry-management): change interceptor to transformResponse function
* refactor(stacks): set newstack state as a child state of stacks
* fix(docker): add check on docker states for endpoint
* refactor(app): remove redirect notification
* fix(container): rename old container only if exist
* fix(container): remove new container only if created
* style(container): fix typo
Co-Authored-By: chiptus <chiptus@users.noreply.github.com>
* fix repository reload got error in remove tags
When I remove all tags, removeTags() will reload and do initView() again, but data.tags response null, that trigger data.tags.length got error.
* Revert "fix repository reload got error in remove tags"
This reverts commit 5d9b1778ef.
* fix(registry-management): change response repository tags type to array by force
* feat(registry-management): redirect to repositories page when no tag in the repository after delete tags
* fix(network-creation): force overlay network creation on manager node
* fix(app): fix function override
* fix(app): use portainerAgentManagerOperation in interceptor
* Revert "fix(build-system): fix local build system after appveyor introduction (#2528)"
This reverts commit 79c24ced96.
* Revert "feat(build-system): add support for AppVeyor CI (#2449)"
This reverts commit 65979709e9.
* feat(api): add a new Recurring property on Schedule
* feat(schedules): date to cron convert + recurring flag
* feat(schedules): update angularjs-datetime-picker from v1 to v2
* chore(app): use minified dependency for angularjs-datetime-picker
* chore(vendor): rollback version of angularjs-datetime-picker
* * feat(ux): replace datepicker for schedule creation/details
* feat(container-stats): add refresh rate of 1 and 3 seconds (#2493)
* fix(templates): set var to default value if no value selected (#2323)
* fix(templates): set preset to true iff var type is preset
* fix(templates): add env var value when changing type
* feat(security): shutdown instance after 5minutes if no admin account created (#2500)
* feat(security): skip admin check if --no-auth
* fix(security): change error message
* fix(vendor): use datepicker minified version
* feat(schedule-creation): replace angular-datetime-picker
* feat(schedule): parse cron to datetime
* fix(schedule): fix zero based months
* feat(settings): add the capability to enable/disable the host management features
* feat(settings): remove the validation of EnableHostManagementFeatures in frontend
* feat(api): disable schedules API when HostManagementFeatures is false + DB migration
* style(settings): update host management settings tooltip
* refacot(schedules): update DBVersion to 15
* chore(log-viewer): add the ability to use`since` parameter #1942https://github.com/portainer/portainer/issues/1942#issuecomment-430246378
* chore(log-viewer): change lineCount to 100 #1942https://github.com/portainer/portainer/issues/1942#issuecomment-430246378
* fix(log-viewer): js syntax typo for `;` and `'`
forget to lint the code, reported by codeclimate
* fix(log-viewer): use mementjs to format timestamp
1. use moment lib instead of define a function in filter.js(not the right place for this function, removed)
2. set sinceTimestamp init value to `24 hours ago`, as we just need to focus on the relative latest logs after the log-viewer loading, not all the logs(to speedup the process)
3. use moment().unix() to convert the `sinceTimestamp` to local unix timestamp(not utc)
* chore(log-viewer): add the ability to select the datetime for `since`
* chore(log-viewer): add the ability to fetch logs from specific time
* feat(back): saved data in snapshot
* feat(endpoints): adding interceptors to retrieve saved data on offline endpoints
* feat(endpoints): offline dashboard working - need tests on offline views
* refactor(endpoints): interceptors cleaning and saving/loading offline endpoints data in/from localstorage
* feat(endpoints): browsing offline endpoints
* feat(endpoints): removing all the link in offline mode - sidebar not working when switching between off and on modes w/ stateManager logic
* feat(endpoints): endpoint status detection in real time
* fix(endpoints): offline swarm endpoint are not accessible anymore
* fix(endpoints): refactor message + disable offline browsing for an endpoint when no snapshot is available for it
* fix(endpoints): adding timeout and enabling loading bar for offline requests
* fix(endpoints): trying to access a down endpoint wont remove sidebar items if it fails
* feat(endpoints): disable checkboxes on offline views for offline mode
* feat(endpoints): updating endpoint status when detecting a change
* refactor(host): moved offline status panel from engine view to new host view
* fix(endpoints): missing endpoint update on ping from home view
* fix(api): rework EndpointUpdate operation
* refactor(offline): moved endpoint status to EndpointProvider and refactor the status-changed detection
* fix(offline): moved status detection to callback on views -> prevent displaying the offline message when endpoint is back online on view change
* fix(offline): offline message is now displayed online when browsing an offline endpoint
* fix(offline): sidebar updates correctly on endpoint status change
* fix(offline): offline panel not displayed and hidden on online mode
* refactor(offline): rework of OfflineMode management
* refactor(offline): extract information-panel for offlineMode into a component
* refactor(offline): remove redundant binding of informationPanel + endpointStatusInterceptor patter as service
* refactor(interceptors): moved interceptors pattern to service pattern
* feat(stacks): prevent inspection of a stack in offline mode
* feat(host): hide devices/disk panels in offline mode
* feat(host): disable browse action in offline mode
* refactor(home): remove comments
* feat(jobs): adding the ability to run scripts on endpoints
fix(job): click on containerId in JobsDatatable redirects to container's logs
refactor(job): remove the jobs datatable settings + texts changes on JobCreation view
fix(jobs): jobs payloads are now following API rules and case
feat(jobs): adding the capability to run scripts on hosts
* feat(jobs): adding the ability to purge jobs containers
* refactor(job): apply review changes
* feat(job-creation): store image name in local storage
* feat(host): disable job exec link in non-agent Swarm setup
* feat(host): only display execute job in agent setups or standalone
* feat(job): job execution overhaul
* docs(swagger): update EndpointJob documentation
* Linting updates to api/swagger.yaml
* Security updates to api/swagger.yml
* Add api/swagger_config.json for swagger-codegen
* Add swagger_config.json packageVersion to match swagger.yml
* feat(agent): get agent's version from ping
* feat(agent): add version to api url
* feat(agent): query agent with api version
* feat(agent): rename agent api version name on state
* feat(agent): disable feature based on agent's api version
* style(agent): rename ping rest service + remove whitespaces
* style(state): remove whitespace
* style(agent): add whitespace
* fix(agent): remove check for error status 403
* refactor(agent): rename ping file name
* refactor(agent): move old services to v1 folder
* refactor(agent): turn ping service to usual pattern
* refactor(agent): change version to a global variable
* refactor(agent): move ping to version2
* refactor(agent): restore ping to use root ping
* fix(volumes): add volumeID to browse api path
* feat(volume): add upload button to volume browser
* fix(containers): creating a container with default runtime let the docker daemon assume the correct value
* refactor(containers): implementation simplification of default runtime value
* feat(backend): wrap init enpoint with goroutine
* feat(backend): wrap job snapshot with goroutine
* feat(snapshots): reset changes for main and job_endpoint
* feat(snapshot): run first job.snapshot as a goroutine
* feat(stack-details): add duplicate-stack button
* feat(stack-details): add stack-duplication-form component
* feat(stack-details): add duplicate stack method on controller
* feat(stack-details): add duplicate stack method
* feat(stack-details): remove old duplication in progress flag
* feat(stack-details): combine migration and duplication forms
* feat(stack-details): pass new stack name to server
* feat(stack-details): add option to rename migrated stack
* feat(stack-details): disable both migrate/duplicate buttons
* feat(stack-details): disable migration button on same endpoint
* feat(stack-details): change duplicate icon
* style(stack-details): remove whitespaces and fix pattern
* feat(stack-details): add name to migration payload in swagger.yml
* style(stack-details): add semicolon
* bug(stack-details): toggle endpoints before and after duplication
* feat(home): search multiple fields (group/tag)
* feat(home): change search from "OR" to "AND"
* feat(home): search only for a tag or a group
* feat(home): search by keywords in name,group,tag
* feat(home): support case insensitive search
* style(home): remove unused $filter
* feat(home): search state
* style(home): update search input placeholder
* containersDatable: add containers name if error on executeActionOnContainerList
* Update containersDatatableActionsController.js
* Update containersDatatableActionsController.js
@@ -6,30 +6,16 @@ Some basic conventions for contributing to this project.
Please make sure that there aren't existing pull requests attempting to address the issue mentioned. Likewise, please check for issues related to update, as someone else may be working on the issue in a branch or fork.
* Please open a discussion in a new issue / existing issue to talk about the changes you'd like to bring
* Develop in a topic branch, not master/develop
- Please open a discussion in a new issue / existing issue to talk about the changes you'd like to bring
- Develop in a topic branch, not master/develop
When creating a new branch, prefix it with the *type* of the change (see section **Commit Message Format** below), the associated opened issue number, a dash and some text describing the issue (using dash as a separator).
When creating a new branch, prefix it with the _type_ of the change (see section **Commit Message Format** below), the associated opened issue number, a dash and some text describing the issue (using dash as a separator).
For example, if you work on a bugfix for the issue #361, you could name the branch `fix361-template-selection`.
## Issues open to contribution
Want to contribute but don't know where to start?
Some of the open issues are labeled with prefix `exp/`, this is used to mark them as available for contributors to work on. All of these have an attributed difficulty level:
* **beginner**: a task that should be accessible with users not familiar with the codebase
* **intermediate**: a task that require some understanding of the project codebase or some experience in
either AngularJS or Golang
***advanced**: a task that require a deep understanding of the project codebase
Want to contribute but don't know where to start? Have a look at the issues labeled with the `good first issue` label: https://github.com/portainer/portainer/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22
## Commit Message Format
@@ -51,14 +37,14 @@ Lines should not exceed 100 characters. This allows the message to be easier to
Must be one of the following:
* **feat**: A new feature
* **fix**: A bug fix
* **docs**: Documentation only changes
* **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing
- **feat**: A new feature
- **fix**: A bug fix
- **docs**: Documentation only changes
- **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing
semi-colons, etc)
***refactor**: A code change that neither fixes a bug or adds a feature
***test**: Adding missing tests
***chore**: Changes to the build process or auxiliary tools and libraries such as documentation
- **refactor**: A code change that neither fixes a bug or adds a feature
- **test**: Adding missing tests
- **chore**: Changes to the build process or auxiliary tools and libraries such as documentation
generation
### Scope
@@ -71,20 +57,73 @@ You can use the **area** label tag associated on the issue here (for `area/conta
The subject contains succinct description of the change:
* use the imperative, present tense: "change" not "changed" nor "changes"
* don't capitalize first letter
* no dot (.) at the end
- use the imperative, present tense: "change" not "changed" nor "changes"
- don't capitalize first letter
- no dot (.) at the end
## Contribution process
Our contribution process is described below. Some of the steps can be visualized inside Github via specific `contrib/` labels, such as `contrib/func-review-in-progress` or `contrib/tech-review-approved`.
Our contribution process is described below. Some of the steps can be visualized inside Github via specific `status/` labels, such as `status/1-functional-review` or `status/2-technical-review`.
The feature request process is similar to the bug report process but has an extra functional validation before the technical validation.
The feature request process is similar to the bug report process but has an extra functional validation before the technical validation as well as a documentation validation before the testing phase.
**_Portainer_** is a lightweight management UI which allows you to **easily** manage your different Docker environments (Docker hosts or Swarm clusters).
**_Portainer_**is meant to be as **simple** to deploy as it is to use. It consists of a single container that can run on any Docker engine (can be deployed as Linux container or a Windows native container).
**_Portainer_** allows you to manage your Docker containers, images, volumes, networks and more ! It is compatible with the *standalone Docker* engine and with *Docker Swarm mode*.
**_Portainer_** is meant to be as **simple** to deploy as it is to use. It consists of a single container that can run on any Docker engine (can be deployed as Linux container or a Windows native container, supports other platforms too).
**_Portainer_**allows you to manage all your Docker resources (containers, images, volumes, networks and more!) It is compatible with the _standalone Docker_ engine and with _Docker Swarm mode_.
Unlike the public demo, the playground sessions are deleted after 4 hours. Apart from that, all the settings are same, including default credentials.
Unlike the public demo, the playground sessions are deleted after 4 hours. Apart from that, all the settings are the same, including default credentials.
For FORMAL Support, please purchase a support subscription from here: https://www.portainer.io/products-services/portainer-business-support/
For community support: You can find more information about Portainer's community support framework policy here: https://www.portainer.io/2019/04/portainer-support-policy/
* Want to report a bug or request a feature? Please open [an issue](https://github.com/portainer/portainer/issues/new).
* Want to help us build **_portainer_**? Follow our [contribution guidelines](https://portainer.readthedocs.io/en/latest/contribute.html) to build it locally and make a pull request. We need all the help we can get!
- Want to report a bug or request a feature? Please open [an issue](https://github.com/portainer/portainer/issues/new).
- Want to help us build **_portainer_**? Follow our [contribution guidelines](https://www.portainer.io/documentation/how-to-contribute/) to build it locally and make a pull request. We need all the help we can get!
## Security
- Here at Portainer, we believe in [responsible disclosure](https://en.wikipedia.org/wiki/Responsible_disclosure) of security issues. If you have found a security issue, please report it to <security@portainer.io>.
## Privacy
**To make sure we focus our development effort in the right places we need to know which features get used most often. To give us this information we use [Matomo Analytics](https://matomo.org/), which is hosted in Germany and is fully GDPR compliant.**
When Portainer first starts, you are given the option to DISABLE analytics. If you **don't** choose to disable it, we collect anonymous usage as per [our privacy policy](https://www.portainer.io/documentation/in-app-analytics-and-privacy-policy/). **Please note**, there is no personally identifiable information sent or stored at any time and we only use the data to help us improve Portainer.
## Limitations
**_Portainer_** has full support for the following Docker versions:
* Docker 1.10 to the latest version
* Standalone Docker Swarm >= 1.2.3 _(**NOTE:** Use of Standalone Docker Swarm is being discouraged since the introduction of built-in Swarm Mode in Docker. While older versions of Portainer had support for Standalone Docker Swarm, Portainer 1.17.0 and newer **do not** support it. However, the built-in Swarm Mode of Docker is fully supported.)_
Partial support for the following Docker versions (some features may not be available):
* Docker 1.9
Portainer supports "Current - 2 docker versions only. Prior versions may operate, however these are not supported.
## Licensing
@@ -70,4 +68,4 @@ Portainer also contains the following code, which is licensed under the [MIT lic
UI For Docker: Copyright (c) 2013-2016 Michael Crosby (crosbymichael.com), Kevan Ahlquist (kevanahlquist.com), Anthony Lapenna (portainer.io)
logFatalf("[FATAL] [internal,init] No administrator account was created in %f mins. Shutting down the Portainer instance for security reasons",m.timeout.Minutes())
Each API endpoint has an associated access policy, it is documented in the description of each endpoint.
Different access policies are available:
- Public access
- Authenticated access
- Restricted access
- Administrator access
### Public access
No authentication is required to access the endpoints with this access policy.
### Authenticated access
Authentication is required to access the endpoints with this access policy.
### Restricted access
Authentication is required to access the endpoints with this access policy.
Extra-checks might be added to ensure access to the resource is granted. Returned data might also be filtered.
### Administrator access
Authentication as well as an administrator role are required to access the endpoints with this access policy.
# Execute Docker requests
Portainer **DO NOT** expose specific endpoints to manage your Docker resources (create a container, remove a volume, etc...).
Instead, it acts as a reverse-proxy to the Docker HTTP API. This means that you can execute Docker requests **via** the Portainer HTTP API.
To do so, you can use the `/endpoints/{id}/docker` Portainer API endpoint (which is not documented below due to Swagger limitations). This endpoint has a restricted access policy so you still need to be authenticated to be able to query this endpoint. Any query on this endpoint will be proxied to the Docker API of the associated endpoint (requests and responses objects are the same as documented in the Docker API).
**NOTE**: You can find more information on how to query the Docker API in the [Docker official documentation](https://docs.docker.com/engine/api/v1.30/) as well as in [this Portainer example](https://gist.github.com/deviantony/77026d402366b4b43fa5918d41bc42f8).
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.