mirror of https://github.com/portainer/portainer
feat(endpoint-init): remove Azure ACI and remote Docker options (#4015)
parent
91981c815c
commit
d4456f81ec
|
@ -35,7 +35,5 @@ export const PortainerEndpointInitFormValueEndpointSections = Object.freeze([
|
|||
'fas fa-dharmachakra',
|
||||
'Manage the local Kubernetes environment'
|
||||
),
|
||||
new PortainerEndpointInitFormValueEndpointSection(PortainerEndpointConnectionTypes.REMOTE, 'Remote', 'fab fa-docker', 'Manage a remote Docker environment'),
|
||||
new PortainerEndpointInitFormValueEndpointSection(PortainerEndpointConnectionTypes.AGENT, 'Agent', 'fa fa-bolt', 'Connect to a Portainer agent'),
|
||||
new PortainerEndpointInitFormValueEndpointSection(PortainerEndpointConnectionTypes.AZURE, 'Azure', 'fab fa-microsoft', 'Connect to Microsoft Azure ACI'),
|
||||
]);
|
||||
|
|
|
@ -1,63 +0,0 @@
|
|||
<div class="col-sm-12 form-section-title">
|
||||
Information
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-12">
|
||||
<span class="small">
|
||||
<p class="text-muted"> <i class="fa fa-flask orange-icon" aria-hidden="true" style="margin-right: 2px;"></i> This feature is experimental. </p>
|
||||
<p class="text-primary">
|
||||
Connect to Microsoft Azure to manage Azure Container Instances (ACI).
|
||||
</p>
|
||||
<p class="text-muted">
|
||||
<i class="fa fa-info-circle blue-icon" aria-hidden="true" style="margin-right: 2px;"></i>
|
||||
Have a look at
|
||||
<a href="https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal" target="_blank">the Azure documentation</a>
|
||||
to retrieve the credentials required below.
|
||||
</p>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 form-section-title">
|
||||
Environment
|
||||
</div>
|
||||
<!-- name-input -->
|
||||
<div class="form-group">
|
||||
<label for="endpoint_name" class="col-sm-4 col-lg-3 control-label text-left">Name</label>
|
||||
<div class="col-sm-8 col-lg-9">
|
||||
<input type="text" class="form-control" id="endpoint_name" ng-model="ctrl.formValues.Name" placeholder="e.g. azure-01" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- !name-input -->
|
||||
<div class="col-sm-12 form-section-title">
|
||||
Azure credentials
|
||||
</div>
|
||||
<!-- applicationId-input -->
|
||||
<div class="form-group">
|
||||
<label for="azure_credential_appid" class="col-sm-4 col-lg-3 control-label text-left">Application ID</label>
|
||||
<div class="col-sm-8 col-lg-9">
|
||||
<input type="text" class="form-control" id="azure_credential_appid" ng-model="ctrl.formValues.AzureApplicationId" placeholder="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- !applicationId-input -->
|
||||
<!-- tenantId-input -->
|
||||
<div class="form-group">
|
||||
<label for="azure_credential_tenantid" class="col-sm-4 col-lg-3 control-label text-left">Tenant ID</label>
|
||||
<div class="col-sm-8 col-lg-9">
|
||||
<input type="text" class="form-control" id="azure_credential_tenantid" ng-model="ctrl.formValues.AzureTenantId" placeholder="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- !tenantId-input -->
|
||||
<!-- authenticationkey-input -->
|
||||
<div class="form-group">
|
||||
<label for="azure_credential_authkey" class="col-sm-4 col-lg-3 control-label text-left">Authentication key</label>
|
||||
<div class="col-sm-8 col-lg-9">
|
||||
<input
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="azure_credential_authkey"
|
||||
ng-model="ctrl.formValues.AzureAuthenticationKey"
|
||||
placeholder="cOrXoK/1D35w8YQ8nH1/8ZGwzz45JIYD5jxHKXEQknk="
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<!-- !authenticationkey-input -->
|
|
@ -1,120 +0,0 @@
|
|||
<div class="col-sm-12 form-section-title">
|
||||
Information
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-sm-12">
|
||||
<span class="small">
|
||||
<p class="text-primary">
|
||||
Connect Portainer to a remote Docker environment using the Docker API over TCP.
|
||||
</p>
|
||||
<p class="text-muted">
|
||||
<i class="fa fa-info-circle blue-icon" aria-hidden="true" style="margin-right: 2px;"></i>
|
||||
The Docker API must be exposed over TCP. You can find more information about how to expose the Docker API over TCP
|
||||
<a href="https://docs.docker.com/engine/security/https/" target="_blank">in the Docker documentation</a>.
|
||||
</p>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 form-section-title">
|
||||
Environment
|
||||
</div>
|
||||
<!-- name-input -->
|
||||
<div class="form-group">
|
||||
<label for="endpoint_name" class="col-sm-4 col-lg-3 control-label text-left">Name</label>
|
||||
<div class="col-sm-8 col-lg-9">
|
||||
<input type="text" class="form-control" id="endpoint_name" ng-model="ctrl.formValues.Name" placeholder="e.g. docker-prod01" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- !name-input -->
|
||||
<!-- endpoint-url-input -->
|
||||
<div class="form-group">
|
||||
<label for="endpoint_url" class="col-sm-4 col-lg-3 control-label text-left">
|
||||
Endpoint URL
|
||||
<portainer-tooltip position="bottom" message="URL or IP address of a Docker host with API exposed over TCP."></portainer-tooltip>
|
||||
</label>
|
||||
<div class="col-sm-8 col-lg-9">
|
||||
<input type="text" class="form-control" id="endpoint_url" ng-model="ctrl.formValues.URL" placeholder="e.g. 10.0.0.10:2375 or mydocker.mydomain.com:2375" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- !endpoint-url-input -->
|
||||
<!-- tls-checkbox -->
|
||||
<div class="form-group">
|
||||
<div class="col-sm-12">
|
||||
<label for="tls" class="control-label text-left">
|
||||
TLS
|
||||
<portainer-tooltip position="bottom" message="Enable this option if you need to specify TLS certificates to connect to the Docker endpoint."></portainer-tooltip>
|
||||
</label>
|
||||
<label class="switch" style="margin-left: 20px;"> <input type="checkbox" ng-model="ctrl.formValues.TLS" /><i></i> </label>
|
||||
</div>
|
||||
</div>
|
||||
<!-- !tls-checkbox -->
|
||||
<!-- tls-options -->
|
||||
<div ng-if="ctrl.formValues.TLS">
|
||||
<!-- skip-server-verification -->
|
||||
<div class="form-group">
|
||||
<div class="col-sm-10">
|
||||
<label for="tls_verify" class="control-label text-left">
|
||||
Skip server verification
|
||||
<portainer-tooltip position="bottom" message="Enable this option if you need to authenticate server based on given CA."></portainer-tooltip>
|
||||
</label>
|
||||
<label class="switch" style="margin-left: 20px;"> <input type="checkbox" ng-model="ctrl.formValues.TLSSkipVerify" /><i></i> </label>
|
||||
</div>
|
||||
</div>
|
||||
<!-- !skip-server-verification -->
|
||||
<!-- skip-client-verification -->
|
||||
<div class="form-group">
|
||||
<div class="col-sm-10">
|
||||
<label for="tls_client_cert" class="control-label text-left">
|
||||
Skip client verification
|
||||
<portainer-tooltip position="bottom" message="Enable this option if you need to authenticate with a client certificate."></portainer-tooltip>
|
||||
</label>
|
||||
<label class="switch" style="margin-left: 20px;"> <input type="checkbox" ng-model="ctrl.formValues.TLSSKipClientVerify" /><i></i> </label>
|
||||
</div>
|
||||
</div>
|
||||
<!-- !skip-client-verification -->
|
||||
<div class="col-sm-12 form-section-title" ng-if="!ctrl.formValues.TLSSkipVerify || !ctrl.formValues.TLSSKipClientVerify">
|
||||
Required TLS files
|
||||
</div>
|
||||
<!-- ca-input -->
|
||||
<div class="form-group" ng-if="!ctrl.formValues.TLSSkipVerify">
|
||||
<label class="col-sm-4 col-lg-3 control-label text-left">TLS CA certificate</label>
|
||||
<div class="col-sm-8 col-lg-9">
|
||||
<button class="btn btn-sm btn-primary" ngf-select ng-model="ctrl.formValues.TLSCACert">Select file</button>
|
||||
<span style="margin-left: 5px;">
|
||||
{{ ctrl.formValues.TLSCACert.name }}
|
||||
<i class="fa fa-times red-icon" ng-if="!ctrl.formValues.TLSCACert" aria-hidden="true"></i>
|
||||
<i class="fa fa-circle-notch fa-spin" ng-if="ctrl.state.uploadInProgress"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- !ca-input -->
|
||||
<div ng-if="!ctrl.formValues.TLSSKipClientVerify">
|
||||
<!-- cert-input -->
|
||||
<div class="form-group">
|
||||
<label for="tls_cert" class="col-sm-4 col-lg-3 control-label text-left">TLS certificate</label>
|
||||
<div class="col-sm-8 col-lg-9">
|
||||
<button class="btn btn-sm btn-primary" ngf-select ng-model="ctrl.formValues.TLSCert">Select file</button>
|
||||
<span style="margin-left: 5px;">
|
||||
{{ ctrl.formValues.TLSCert.name }}
|
||||
<i class="fa fa-times red-icon" ng-if="!ctrl.formValues.TLSCert" aria-hidden="true"></i>
|
||||
<i class="fa fa-circle-notch fa-spin" ng-if="ctrl.state.uploadInProgress"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- !cert-input -->
|
||||
<!-- key-input -->
|
||||
<div class="form-group">
|
||||
<label class="col-sm-4 col-lg-3 control-label text-left">TLS key</label>
|
||||
<div class="col-sm-8 col-lg-9">
|
||||
<button class="btn btn-sm btn-primary" ngf-select ng-model="ctrl.formValues.TLSKey">Select file</button>
|
||||
<span style="margin-left: 5px;">
|
||||
{{ ctrl.formValues.TLSKey.name }}
|
||||
<i class="fa fa-times red-icon" ng-if="!ctrl.formValues.TLSKey" aria-hidden="true"></i>
|
||||
<i class="fa fa-circle-notch fa-spin" ng-if="ctrl.state.uploadInProgress"></i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- !key-input -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- !tls-options -->
|
|
@ -45,12 +45,6 @@
|
|||
<div ng-if="ctrl.formValues.ConnectionType === ctrl.PortainerEndpointConnectionTypes.KUBERNETES_LOCAL">
|
||||
<ng-include src="'app/portainer/views/init/endpoint/includes/localKubernetes.html'"></ng-include>
|
||||
</div>
|
||||
<div ng-if="ctrl.formValues.ConnectionType === ctrl.PortainerEndpointConnectionTypes.REMOTE">
|
||||
<ng-include src="'app/portainer/views/init/endpoint/includes/remote.html'"></ng-include>
|
||||
</div>
|
||||
<div ng-if="ctrl.formValues.ConnectionType === ctrl.PortainerEndpointConnectionTypes.AZURE">
|
||||
<ng-include src="'app/portainer/views/init/endpoint/includes/azure.html'"></ng-include>
|
||||
</div>
|
||||
<div ng-if="ctrl.formValues.ConnectionType === ctrl.PortainerEndpointConnectionTypes.AGENT">
|
||||
<ng-include src="'app/portainer/views/init/endpoint/includes/agent.html'"></ng-include>
|
||||
</div>
|
||||
|
|
|
@ -1,12 +1,10 @@
|
|||
import _ from 'lodash-es';
|
||||
import angular from 'angular';
|
||||
import { PortainerEndpointInitFormValues, PortainerEndpointInitFormValueEndpointSections } from 'Portainer/models/endpoint/formValues';
|
||||
import { PortainerEndpointTypes, PortainerEndpointConnectionTypes } from 'Portainer/models/endpoint/models';
|
||||
import { PortainerEndpointInitFormValueEndpointSections, PortainerEndpointInitFormValues } from 'Portainer/models/endpoint/formValues';
|
||||
import { PortainerEndpointConnectionTypes, PortainerEndpointTypes } from 'Portainer/models/endpoint/models';
|
||||
|
||||
require('./includes/localDocker.html');
|
||||
require('./includes/localKubernetes.html');
|
||||
require('./includes/remote.html');
|
||||
require('./includes/azure.html');
|
||||
require('./includes/agent.html');
|
||||
|
||||
class InitEndpointController {
|
||||
|
@ -23,8 +21,6 @@ class InitEndpointController {
|
|||
this.createLocalEndpointAsync = this.createLocalEndpointAsync.bind(this);
|
||||
this.createLocalKubernetesEndpointAsync = this.createLocalKubernetesEndpointAsync.bind(this);
|
||||
this.createAgentEndpointAsync = this.createAgentEndpointAsync.bind(this);
|
||||
this.createAzureEndpointAsync = this.createAzureEndpointAsync.bind(this);
|
||||
this.createRemoteEndpointAsync = this.createRemoteEndpointAsync.bind(this);
|
||||
}
|
||||
|
||||
$onInit() {
|
||||
|
@ -43,30 +39,12 @@ class InitEndpointController {
|
|||
this.PortainerEndpointConnectionTypes = PortainerEndpointConnectionTypes;
|
||||
}
|
||||
|
||||
isRemoteConnectButtonDisabled() {
|
||||
return (
|
||||
this.state.actionInProgress ||
|
||||
!this.formValues.Name ||
|
||||
!this.formValues.URL ||
|
||||
(this.formValues.TLS &&
|
||||
((this.formValues.TLSVerify && !this.formValues.TLSCACert) || (!this.formValues.TLSSKipClientVerify && (!this.formValues.TLSCert || !this.formValues.TLSKey))))
|
||||
);
|
||||
}
|
||||
|
||||
isAzureConnectButtonDisabled() {
|
||||
return this.state.actionInProgress || !this.formValues.Name || !this.formValues.AzureApplicationId || !this.formValues.AzureTenantId || !this.formValues.AzureAuthenticationKey;
|
||||
}
|
||||
|
||||
isConnectButtonDisabled() {
|
||||
switch (this.formValues.ConnectionType) {
|
||||
case PortainerEndpointConnectionTypes.DOCKER_LOCAL:
|
||||
return this.state.actionInProgress;
|
||||
case PortainerEndpointConnectionTypes.KUBERNETES_LOCAL:
|
||||
return this.state.actionInProgress;
|
||||
case PortainerEndpointConnectionTypes.REMOTE:
|
||||
return this.isRemoteConnectButtonDisabled();
|
||||
case PortainerEndpointConnectionTypes.AZURE:
|
||||
return this.isAzureConnectButtonDisabled();
|
||||
case PortainerEndpointConnectionTypes.AGENT:
|
||||
return this.state.actionInProgress || !this.formValues.Name || !this.formValues.URL;
|
||||
default:
|
||||
|
@ -80,10 +58,6 @@ class InitEndpointController {
|
|||
return this.createLocalEndpoint();
|
||||
case PortainerEndpointConnectionTypes.KUBERNETES_LOCAL:
|
||||
return this.createLocalKubernetesEndpoint();
|
||||
case PortainerEndpointConnectionTypes.REMOTE:
|
||||
return this.createRemoteEndpoint();
|
||||
case PortainerEndpointConnectionTypes.AZURE:
|
||||
return this.createAzureEndpoint();
|
||||
case PortainerEndpointConnectionTypes.AGENT:
|
||||
return this.createAgentEndpoint();
|
||||
default:
|
||||
|
@ -165,58 +139,6 @@ class InitEndpointController {
|
|||
createAgentEndpoint() {
|
||||
return this.$async(this.createAgentEndpointAsync);
|
||||
}
|
||||
|
||||
/**
|
||||
* DOCKER REMOTE (1)
|
||||
*/
|
||||
async createRemoteEndpointAsync() {
|
||||
try {
|
||||
this.state.actionInProgress = true;
|
||||
const name = this.formValues.Name;
|
||||
const type = PortainerEndpointTypes.DockerEnvironment;
|
||||
const URL = this.formValues.URL;
|
||||
const PublicURL = URL.split(':')[0];
|
||||
const TLS = this.formValues.TLS;
|
||||
const TLSSkipVerify = TLS && this.formValues.TLSSkipVerify;
|
||||
const TLSSKipClientVerify = TLS && this.formValues.TLSSKipClientVerify;
|
||||
const TLSCAFile = TLSSkipVerify ? null : this.formValues.TLSCACert;
|
||||
const TLSCertFile = TLSSKipClientVerify ? null : this.formValues.TLSCert;
|
||||
const TLSKeyFile = TLSSKipClientVerify ? null : this.formValues.TLSKey;
|
||||
await this.EndpointService.createRemoteEndpoint(name, type, URL, PublicURL, 1, [], TLS, TLSSkipVerify, TLSSKipClientVerify, TLSCAFile, TLSCertFile, TLSKeyFile);
|
||||
this.$state.go('portainer.home');
|
||||
} catch (err) {
|
||||
this.Notifications.error('Failure', err, 'Unable to connect to the Docker environment');
|
||||
} finally {
|
||||
this.state.actionInProgress = false;
|
||||
}
|
||||
}
|
||||
|
||||
createRemoteEndpoint() {
|
||||
return this.$async(this.createAgentEndpointAsync);
|
||||
}
|
||||
|
||||
/**
|
||||
* AZURE (4)
|
||||
*/
|
||||
async createAzureEndpointAsync() {
|
||||
try {
|
||||
this.state.actionInProgress = true;
|
||||
var name = this.formValues.Name;
|
||||
var applicationId = this.formValues.AzureApplicationId;
|
||||
var tenantId = this.formValues.AzureTenantId;
|
||||
var authenticationKey = this.formValues.AzureAuthenticationKey;
|
||||
await this.EndpointService.createAzureEndpoint(name, applicationId, tenantId, authenticationKey, 1, []);
|
||||
this.$state.go('portainer.home');
|
||||
} catch (err) {
|
||||
this.Notifications.error('Failure', err, 'Unable to connect to the Azure environment');
|
||||
} finally {
|
||||
this.state.actionInProgress = false;
|
||||
}
|
||||
}
|
||||
|
||||
createAzureEndpoint() {
|
||||
return this.$async(this.createAgentEndpointAsync);
|
||||
}
|
||||
}
|
||||
|
||||
export default InitEndpointController;
|
||||
|
|
Loading…
Reference in New Issue