diff --git a/app/actions/portainer/authenticate.rb b/app/actions/portainer/authenticate.rb
deleted file mode 100644
index 23a554ca..00000000
--- a/app/actions/portainer/authenticate.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-class Portainer::Authenticate
- extend LightService::Action
-
- expects :stack_manager, :user, :auth_code
- expects :username, default: nil
-
- executed do |context|
- stack_manager = context.stack_manager
- access_token = Portainer::Client.authenticate(
- auth_code: context.auth_code,
- username: context.username,
- provider_url: stack_manager.provider_url
- )
- context.user.providers.find_or_initialize_by(provider: "portainer").update!(access_token:)
- end
-end
diff --git a/app/actions/portainer/kubeconfig.rb b/app/actions/portainer/kubeconfig.rb
deleted file mode 100644
index 91c05795..00000000
--- a/app/actions/portainer/kubeconfig.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-class Portainer::Kubeconfig
- extend LightService::Action
-
- expects :cluster, :user
- promises :kubeconfig
-
- executed do |context|
- portainer_url = context.user.accounts.first.stack_manager.provider_url
- portainer_client = Portainer::Client.new(portainer_url, context.user.portainer_jwt)
- context.kubeconfig = portainer_client.get("/api/kubernetes/config?ids[]=#{context.cluster.external_id}")
- rescue Portainer::Client::UnauthorizedError
- context.fail_and_return!("Current user is unauthorized: #{context.user.email}")
- rescue Portainer::Client::PermissionDeniedError
- context.fail_and_return!("Current user is not authorized to access this cluster: #{context.user.email}")
- end
-end
diff --git a/app/actions/portainer/sync_clusters.rb b/app/actions/portainer/sync_clusters.rb
deleted file mode 100644
index f7e5bd38..00000000
--- a/app/actions/portainer/sync_clusters.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-class Portainer::SyncClusters
- extend LightService::Action
-
- expects :user, :account
- promises :clusters
-
- executed do |context|
- portainer_url = context.account.stack_manager.provider_url
- portainer_client = Portainer::Client.new(portainer_url, context.user.portainer_jwt)
- response = portainer_client.get("/api/endpoints")
- clusters = []
- response.each do |cluster|
- clusters << context.account.clusters.create!(name: cluster["Name"], external_id: cluster["Id"])
- end
-
- context.clusters = clusters
- rescue Portainer::Client::UnauthorizedError
- context.fail_and_return!("Current user is unauthorized: #{context.user.email}")
- rescue Portainer::Client::PermissionDeniedError
- context.fail_and_return!("Current user is not authorized to access this cluster: #{context.user.email}")
- end
-end
diff --git a/app/controllers/local/pages_controller.rb b/app/controllers/local/pages_controller.rb
index ce522c00..8b6803ad 100644
--- a/app/controllers/local/pages_controller.rb
+++ b/app/controllers/local/pages_controller.rb
@@ -30,33 +30,4 @@ class Local::PagesController < ApplicationController
flash[:error] = "Invalid personal access token"
redirect_to github_token_path
end
-
- def portainer_configuration
- end
-
- def update_portainer_configuration
- stack_manager = current_account.stack_manager || current_account.build_stack_manager
- stack_manager.update!(provider_url: params[:provider_url])
- result = Portainer::Authenticate.execute(stack_manager:, user: current_user, auth_code: params[:password], username: params[:username])
- if result.success?
- flash[:notice] = "The Portainer configuration has been updated"
- else
- flash[:error] = result.message
- end
- redirect_to root_path
- end
-
- def github_oauth
- result = Portainer::Authenticate.execute(
- stack_manager: current_account.stack_manager,
- user: current_user,
- auth_code: params[:code]
- )
- if result.success?
- flash[:notice] = "The Portainer configuration has been updated"
- else
- flash[:error] = result.message
- end
- redirect_to root_path
- end
end
diff --git a/app/jobs/clusters/sync_clusters_job.rb b/app/jobs/clusters/sync_clusters_job.rb
deleted file mode 100644
index c54baf8e..00000000
--- a/app/jobs/clusters/sync_clusters_job.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-class Clusters::SyncClustersJob < ApplicationJob
- queue_as :default
-
- def perform(user, account)
- Portainer::SyncClusters.execute(account:, user:)
- end
-end
diff --git a/app/models/provider.rb b/app/models/provider.rb
index b7f19f8c..2f242693 100644
--- a/app/models/provider.rb
+++ b/app/models/provider.rb
@@ -29,7 +29,6 @@ class Provider < ApplicationRecord
GITHUB_PROVIDER = "github"
CUSTOM_REGISTRY_PROVIDER = "container_registry"
GITLAB_PROVIDER = "gitlab"
- PORTAINER_PROVIDER = "portainer"
GIT_TYPE = "git"
REGISTRY_TYPE = "registry"
PROVIDER_TYPES = {
diff --git a/app/models/user.rb b/app/models/user.rb
index 8ae90daa..b7239deb 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -48,11 +48,6 @@ class User < ApplicationRecord
providers.find_by(provider: "github")
end
- def portainer_jwt
- return @portainer_jwt if @portainer_jwt
- @portainer_jwt = providers.find_by(provider: "portainer")&.access_token
- end
-
private
def downcase_email
diff --git a/app/services/k8/client.rb b/app/services/k8/client.rb
index 19e10608..49c3ea17 100644
--- a/app/services/k8/client.rb
+++ b/app/services/k8/client.rb
@@ -78,8 +78,6 @@ module K8
def build_kubeconfig(kubeconfig_string)
if kubeconfig_string.is_a?(String)
load_kubeconfig(kubeconfig_string)
- elsif kubeconfig_string.nil?
- K8Stack.fetch_kubeconfig(@connection.cluster, @connection.user)
else
kubeconfig_string
end
diff --git a/app/services/k8/connection.rb b/app/services/k8/connection.rb
index aca99c93..43c4a28b 100644
--- a/app/services/k8/connection.rb
+++ b/app/services/k8/connection.rb
@@ -6,11 +6,6 @@ class K8::Connection
end
def kubeconfig
- # If the cluster has a kubeconfig, use it.
- if cluster.kubeconfig.present?
- cluster.kubeconfig
- else
- K8Stack.fetch_kubeconfig(cluster, user)
- end
+ cluster.kubeconfig
end
end
diff --git a/app/services/k8_stack.rb b/app/services/k8_stack.rb
deleted file mode 100644
index 8778af64..00000000
--- a/app/services/k8_stack.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-class K8Stack
- # The stack class is just to make sure that we don't hard couple to portainer
- def self.fetch_kubeconfig(cluster, user)
- stack_manager = user.accounts.first.stack_manager
- if stack_manager&.portainer?
- portainer_jwt = user.portainer_jwt
- portainer_url = stack_manager.provider_url
- raise "No Portainer JWT found" if portainer_jwt.blank?
- raise "No Portainer URL found" if portainer_url.blank?
- Portainer::Client.new(portainer_url, portainer_jwt).get_kubernetes_config
- else
- raise "Unsupported Kubernetes provider: #{stack_manager&.stack_manager_type}"
- end
- end
-end
diff --git a/app/services/portainer/client.rb b/app/services/portainer/client.rb
deleted file mode 100644
index 54d558ad..00000000
--- a/app/services/portainer/client.rb
+++ /dev/null
@@ -1,79 +0,0 @@
-# frozen_string_literal: true
-
-require 'httparty'
-
-module Portainer
- class Client
- attr_reader :jwt, :provider_url
-
- include HTTParty
-
- default_options.update(verify: false)
-
- class UnauthorizedError < StandardError; end
- class PermissionDeniedError < StandardError; end
-
- def initialize(provider_url, jwt)
- @jwt = jwt
- @provider_url = provider_url
- end
-
- def get_kubernetes_config
- fetch_wrapper do
- self.class.get(
- "#{provider_url}/api/kubernetes/config",
- headers: headers
- )
- end
- end
-
- def self.authenticate(auth_code:, username: nil, provider_url:)
- response = if username.present?
- post(
- "#{provider_url}/api/auth",
- headers: { 'Content-Type' => 'application/json' },
- body: {
- username: username,
- password: auth_code
- }.to_json
- )
- else
- post(
- "#{provider_url}/api/auth/oauth/validate",
- headers: { 'Content-Type' => 'application/json' },
- body: { code: auth_code }.to_json
- )
- end
-
- response.parsed_response['jwt'] if response.success?
- end
-
- def get(path)
- fetch_wrapper do
- self.class.get("#{provider_url}#{path}", headers:)
- end
- end
-
- private
-
- def headers
- @headers ||= {
- 'Authorization' => "Bearer #{jwt}",
- 'Content-Type' => 'application/json'
- }
- end
-
- def fetch_wrapper(&block)
- response = yield
-
- raise UnauthorizedError, "Unauthorized to access Portainer" if response.code == 401
- raise PermissionDeniedError, "Permission denied to access Portainer" if response.code == 403
-
- if response.success?
- response.parsed_response
- else
- raise "Failed to fetch from Portainer: #{response.code} #{response.body}"
- end
- end
- end
-end
diff --git a/app/views/clusters/index.html.erb b/app/views/clusters/index.html.erb
index 91e9d0da..b54f824c 100644
--- a/app/views/clusters/index.html.erb
+++ b/app/views/clusters/index.html.erb
@@ -16,14 +16,6 @@
New Cluster
<% end %>
- <% if current_account.stack_manager&.portainer? %>
- <%= link_to sync_clusters_path do %>
-
- <% end %>
- <% end %>
<%= tag.div id: ("clusters" if @pagy.pages == 1) do %>
diff --git a/app/views/local/pages/portainer_configuration.html.erb b/app/views/local/pages/portainer_configuration.html.erb
deleted file mode 100644
index 2e3749be..00000000
--- a/app/views/local/pages/portainer_configuration.html.erb
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
Enter your Portainer URL below.
-
- <%= form_with url: portainer_configuration_path, model: current_account.stack_manager, method: :put do |form| %>
-
- <%= form.label :provider_url, "Portainer URL" %>
- <%= form.text_field :provider_url, class: "input input-bordered w-full max-w-xs", placeholder: "http://portainer.portainer.svc.cluster.local:9000" %>
-
-
-
Login to Portainer
-
- <%= form.label :username, "Username" %>
- <%= form.text_field :username, class: "input input-bordered w-full max-w-xs" %>
-
-
- <%= form.label :password, "Password" %>
- <%= form.text_field :password, type: "password", class: "input input-bordered w-full max-w-xs", data: { toggle_password_target: "input" } %>
-
-
-
or
-
- <%= link_to "Connect via Github", Git::Github::UrlHelper.authorize_url, class: "btn btn-primary" %>
-
-
- <% end %>
-
-
diff --git a/config/routes.rb b/config/routes.rb
index ef5952a1..45fa352e 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -118,8 +118,6 @@ Rails.application.routes.draw do
if Rails.application.config.local_mode
get "/github_token", to: "local/pages#github_token"
put "/github_token", to: "local/pages#update_github_token"
- get "/portainer_configuration", to: "local/pages#portainer_configuration"
- put "/portainer_configuration", to: "local/pages#update_portainer_configuration"
get "/github_oauth", to: "local/pages#github_oauth"
root to: "projects#index"
else
diff --git a/lib/tasks/portainer.rake b/lib/tasks/portainer.rake
deleted file mode 100644
index 5084e512..00000000
--- a/lib/tasks/portainer.rake
+++ /dev/null
@@ -1,51 +0,0 @@
-# frozen_string_literal: true
-
-require 'httparty'
-require 'yaml'
-require 'tempfile'
-
-PORTAINER_URL = "https://portainer.portainer.svc.cluster.local:9443"
-
-namespace :portainer do
- desc 'Run Portainer task'
- task run: :environment do
- jwt = Portainer::Client.authenticate(
- provider_url: PORTAINER_URL,
- username: 'admin',
- auth_code: ENV['PORTAINER_PASSWORD']
- )
-
- if jwt.present?
- puts "JWT: #{jwt}"
-
- # Get Kubernetes config
- config_response = Portainer::Client.new(PORTAINER_URL, jwt).get_kubernetes_config
-
- if config_response.present?
- config_yaml = config_response.to_yaml
-
- # Save to temp file
- temp_file = Tempfile.new([ 'kubeconfig', '.yaml' ])
- temp_file.write(config_yaml)
- temp_file.close
-
- puts "Kubeconfig saved to: #{temp_file.path}"
-
- # Run kubectl command with the temp kubeconfig
- output = `KUBECONFIG=#{temp_file.path} kubectl get pods 2>&1`
- puts "\nKubectl output:"
- puts output
-
- # Clean up temp file
- temp_file.unlink
-
- puts "\nSUCCESSFULLY REACHED CLUSTER VIA PORTAINER"
- else
- puts "Error getting config: #{config_response.body}"
- end
- else
- puts "Error: #{response.code}"
- puts response.body
- end
- end
-end
diff --git a/spec/actions/portainer/authenticate_spec.rb b/spec/actions/portainer/authenticate_spec.rb
deleted file mode 100644
index 548c31a3..00000000
--- a/spec/actions/portainer/authenticate_spec.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-require 'rails_helper'
-require 'support/shared_contexts/with_portainer'
-
-RSpec.describe Portainer::Authenticate do
- include_context 'with portainer'
- let(:user) { create(:user) }
- let(:stack_manager) { create(:stack_manager) }
- let(:auth_code) { 'auth_code' }
-
- it 'can authenticate with portainer' do
- result = described_class.execute(user:, stack_manager:, auth_code:)
- expect(result).to be_success
- expect(user.providers.first.access_token).to eql('jwt')
- end
-end
diff --git a/spec/actions/portainer/kubeconfig_spec.rb b/spec/actions/portainer/kubeconfig_spec.rb
deleted file mode 100644
index 70d2953d..00000000
--- a/spec/actions/portainer/kubeconfig_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require 'rails_helper'
-require 'support/shared_contexts/with_portainer'
-
-RSpec.describe Portainer::Kubeconfig do
- let(:account) { create(:account) }
- let(:cluster) { create(:cluster, account:) }
- let!(:provider) { create(:provider, :portainer, user: account.owner) }
- let!(:stack_manager) { create(:stack_manager, account:) }
-
- context 'gets kubeconfig from portainer' do
- include_context 'with portainer'
- it 'can get kubeconfig from portainer' do
- result = described_class.execute(cluster:, user: account.owner)
- expect(result).to be_success
- expect(result.kubeconfig).to eql(JSON.parse(File.read(Rails.root.join(*%w[spec resources portainer kubeconfig.json]))))
- end
- end
-end
diff --git a/spec/actions/portainer/sync_clusters_spec.rb b/spec/actions/portainer/sync_clusters_spec.rb
deleted file mode 100644
index 38e4f325..00000000
--- a/spec/actions/portainer/sync_clusters_spec.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require 'rails_helper'
-require 'support/shared_contexts/with_portainer'
-
-RSpec.describe Portainer::SyncClusters do
- let(:account) { create(:account) }
- let!(:provider) { create(:provider, :portainer, user: account.owner) }
- let!(:stack_manager) { create(:stack_manager, account:) }
-
- context 'syncs clusters from portainer' do
- include_context 'with portainer'
- it 'can sync clusters from portainer' do
- result = described_class.execute(user: account.owner, account:)
- expect(result).to be_success
- expect(result.clusters.count).to eql(2)
- expect(result.clusters.first.name).to eql('local')
- expect(result.clusters.last.name).to eql('testing-production')
- end
- end
-end
diff --git a/spec/resources/portainer/authenticate.json b/spec/resources/portainer/authenticate.json
deleted file mode 100644
index 044af43f..00000000
--- a/spec/resources/portainer/authenticate.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "jwt": "jwt"
-}
diff --git a/spec/resources/portainer/endpoints.json b/spec/resources/portainer/endpoints.json
deleted file mode 100644
index 6b735a10..00000000
--- a/spec/resources/portainer/endpoints.json
+++ /dev/null
@@ -1,259 +0,0 @@
-[
- {
- "Id": 1,
- "Name": "local",
- "Type": 5,
- "ContainerEngine": "",
- "URL": "https://kubernetes.default.svc",
- "GroupId": 1,
- "PublicURL": "",
- "Gpus": [],
- "TLSConfig": {
- "TLS": true,
- "TLSSkipVerify": true
- },
- "AzureCredentials": {
- "ApplicationID": "",
- "TenantID": "",
- "AuthenticationKey": ""
- },
- "TagIds": [],
- "Status": 1,
- "Snapshots": [],
- "UserAccessPolicies": {
- "2": {
- "RoleId": 4
- }
- },
- "TeamAccessPolicies": {},
- "EdgeKey": "",
- "ComposeSyntaxMaxVersion": "3.9",
- "SecuritySettings": {
- "allowBindMountsForRegularUsers": true,
- "allowPrivilegedModeForRegularUsers": true,
- "allowVolumeBrowserForRegularUsers": false,
- "allowHostNamespaceForRegularUsers": true,
- "allowDeviceMappingForRegularUsers": true,
- "allowStackManagementForRegularUsers": true,
- "allowContainerCapabilitiesForRegularUsers": true,
- "allowSysctlSettingForRegularUsers": true,
- "enableHostManagementFeatures": false
- },
- "LastCheckInDate": 0,
- "QueryDate": 0,
- "Heartbeat": false,
- "Edge": {
- "AsyncMode": false,
- "PingInterval": 0,
- "SnapshotInterval": 0,
- "CommandInterval": 0
- },
- "AuthorizedUsers": null,
- "AuthorizedTeams": null,
- "Tags": null,
- "StatusMessage": {
- "summary": "",
- "detail": "",
- "operation": "",
- "operationStatus": "",
- "warnings": null
- },
- "CloudProvider": null,
- "Kubernetes": {
- "Snapshots": [
- {
- "Time": 1756319913,
- "KubernetesVersion": "v1.31.1",
- "NodeCount": 2,
- "TotalCPU": 4,
- "TotalMemory": 8210763776,
- "DiagnosticsData": null,
- "PerformanceMetrics": {
- "CPUUsage": 17,
- "MemoryUsage": 133,
- "NetworkUsage": 133383
- }
- }
- ],
- "Configuration": {
- "UseLoadBalancer": false,
- "UseServerMetrics": true,
- "EnableResourceOverCommit": true,
- "ResourceOverCommitPercentage": 0,
- "StorageClasses": [
- {
- "Name": "do-block-storage",
- "AccessModes": ["RWO"],
- "Provisioner": "dobs.csi.digitalocean.com",
- "AllowVolumeExpansion": true
- }
- ],
- "IngressClasses": [
- {
- "Name": "nginx",
- "Type": "nginx",
- "Blocked": false,
- "BlockedNamespaces": null
- }
- ],
- "RestrictDefaultNamespace": false,
- "IngressAvailabilityPerNamespace": false,
- "AllowNoneIngressClass": false,
- "RestrictSecrets": false,
- "RestrictStandardUserIngressW": false
- },
- "Flags": {
- "IsServerMetricsDetected": true,
- "IsServerIngressClassDetected": true,
- "IsServerStorageDetected": true
- }
- },
- "PostInitMigrations": {
- "MigrateIngresses": false,
- "MigrateGPUs": false,
- "MigrateGateKeeper": false,
- "MigrateSecretOwners": false
- },
- "EdgeCheckinInterval": 5,
- "Agent": {},
- "LocalTimeZone": "",
- "ChangeWindow": {
- "Enabled": false,
- "StartTime": "",
- "EndTime": ""
- },
- "DeploymentOptions": null,
- "EnableImageNotification": false,
- "EnableGPUManagement": false
- },
- {
- "Id": 2,
- "Name": "testing-production",
- "Type": 6,
- "ContainerEngine": "",
- "URL": "137.184",
- "GroupId": 1,
- "PublicURL": "",
- "Gpus": null,
- "TLSConfig": {
- "TLS": true,
- "TLSSkipVerify": true
- },
- "AzureCredentials": {
- "ApplicationID": "",
- "TenantID": "",
- "AuthenticationKey": ""
- },
- "TagIds": [],
- "Status": 1,
- "Snapshots": [],
- "UserAccessPolicies": {},
- "TeamAccessPolicies": {},
- "EdgeKey": "",
- "ComposeSyntaxMaxVersion": "3.9",
- "SecuritySettings": {
- "allowBindMountsForRegularUsers": true,
- "allowPrivilegedModeForRegularUsers": true,
- "allowVolumeBrowserForRegularUsers": false,
- "allowHostNamespaceForRegularUsers": true,
- "allowDeviceMappingForRegularUsers": true,
- "allowStackManagementForRegularUsers": true,
- "allowContainerCapabilitiesForRegularUsers": true,
- "allowSysctlSettingForRegularUsers": true,
- "enableHostManagementFeatures": false
- },
- "LastCheckInDate": 0,
- "QueryDate": 0,
- "Heartbeat": false,
- "Edge": {
- "AsyncMode": false,
- "PingInterval": 0,
- "SnapshotInterval": 0,
- "CommandInterval": 0
- },
- "AuthorizedUsers": null,
- "AuthorizedTeams": null,
- "Tags": null,
- "StatusMessage": {
- "summary": "",
- "detail": "",
- "operation": "",
- "operationStatus": "",
- "warnings": null
- },
- "CloudProvider": {
- "Provider": "kubeconfig",
- "Name": "KubeConfig",
- "URL": "",
- "Region": "",
- "Size": null,
- "NodeCount": 0,
- "CPU": null,
- "RAM": null,
- "HDD": null,
- "NetworkID": null,
- "CredentialID": 1,
- "ResourceGroup": "",
- "Tier": "",
- "PoolName": "",
- "DNSPrefix": "",
- "KubernetesVersion": "",
- "AmiType": null,
- "InstanceType": null,
- "NodeVolumeSize": null,
- "AddonWithArgs": null,
- "NodeIPs": null,
- "OfflineInstall": false
- },
- "Kubernetes": {
- "Snapshots": [
- {
- "Time": 1756319913,
- "KubernetesVersion": "",
- "NodeCount": 0,
- "TotalCPU": 0,
- "TotalMemory": 0,
- "DiagnosticsData": null,
- "PerformanceMetrics": null
- }
- ],
- "Configuration": {
- "UseLoadBalancer": false,
- "UseServerMetrics": false,
- "EnableResourceOverCommit": true,
- "ResourceOverCommitPercentage": 20,
- "StorageClasses": [],
- "IngressClasses": [],
- "RestrictDefaultNamespace": false,
- "IngressAvailabilityPerNamespace": false,
- "AllowNoneIngressClass": false,
- "RestrictSecrets": false,
- "RestrictStandardUserIngressW": false
- },
- "Flags": {
- "IsServerMetricsDetected": true,
- "IsServerIngressClassDetected": true,
- "IsServerStorageDetected": true
- }
- },
- "PostInitMigrations": {
- "MigrateIngresses": false,
- "MigrateGPUs": false,
- "MigrateGateKeeper": false,
- "MigrateSecretOwners": false
- },
- "EdgeCheckinInterval": 5,
- "Agent": {
- "Version": "2.27.9"
- },
- "LocalTimeZone": "",
- "ChangeWindow": {
- "Enabled": false,
- "StartTime": "",
- "EndTime": ""
- },
- "DeploymentOptions": null,
- "EnableImageNotification": false,
- "EnableGPUManagement": false
- }
-]
diff --git a/spec/resources/portainer/kubeconfig.json b/spec/resources/portainer/kubeconfig.json
deleted file mode 100644
index b77abab9..00000000
--- a/spec/resources/portainer/kubeconfig.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "kind": "Config",
- "apiVersion": "v1",
- "preferences": {},
- "clusters": [
- {
- "name": "portainer-cluster-local",
- "cluster": {
- "server": "https://portainer.portainer.svc.cluster.local:9000/api/endpoints/1/kubernetes",
- "insecure-skip-tls-verify": true
- }
- },
- {
- "name": "portainer-cluster-testing-production",
- "cluster": {
- "server": "https://portainer.portainer.svc.cluster.local:9000/api/endpoints/2/kubernetes",
- "insecure-skip-tls-verify": true
- }
- }
- ],
- "users": [
- {
- "name": "portainer-sa-user-9ec6cb2d-de79-402b-aff3-e4e8e40ae0da-4",
- "user": {
- "token": "sample_token"
- }
- }
- ],
- "contexts": [
- {
- "name": "portainer-ctx-local",
- "context": {
- "cluster": "portainer-cluster-local",
- "user": "portainer-sa-user-9ec6cb2d-de79-402b-aff3-e4e8e40ae0da-4"
- }
- },
- {
- "name": "portainer-ctx-testing-production",
- "context": {
- "cluster": "portainer-cluster-testing-production",
- "user": "portainer-sa-user-9ec6cb2d-de79-402b-aff3-e4e8e40ae0da-4"
- }
- }
- ],
- "current-context": "portainer-ctx-local"
-}
diff --git a/spec/services/k8/connection_spec.rb b/spec/services/k8/connection_spec.rb
index f673185a..a7218ec3 100644
--- a/spec/services/k8/connection_spec.rb
+++ b/spec/services/k8/connection_spec.rb
@@ -1,5 +1,4 @@
require 'rails_helper'
-require 'support/shared_contexts/with_portainer'
RSpec.describe K8::Connection do
let!(:user) { create(:user) }
let(:connection) { described_class.new(cluster, user) }
@@ -12,21 +11,4 @@ RSpec.describe K8::Connection do
end
end
end
-
- describe 'using the K8Stack' do
- context 'kubernetes provider is portainer' do
- include_context 'with portainer'
- let!(:cluster) { create(:cluster, kubeconfig: nil) }
- let(:account) { create(:account, owner: user) }
-
- before do
- create(:provider, provider: 'portainer', access_token: 'jwt', user:)
- create(:stack_manager, account:)
- end
-
- it 'returns the kubeconfig' do
- expect(connection.kubeconfig).to eq(JSON.parse(File.read(Rails.root.join(*%w[spec resources portainer kubeconfig.json]))))
- end
- end
- end
end
diff --git a/spec/services/k8_stack_spec.rb b/spec/services/k8_stack_spec.rb
deleted file mode 100644
index 5d8b45f7..00000000
--- a/spec/services/k8_stack_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require 'rails_helper'
-require 'support/shared_contexts/with_portainer'
-
-RSpec.describe K8Stack do
- describe '.fetch_kubeconfig' do
- include_context 'with portainer'
- context 'when the stack manager is portainer' do
- let(:account) { create(:account) }
- let!(:provider) { create(:provider, :portainer, user: account.owner) }
- let!(:stack_manager) { create(:stack_manager, :portainer, account:) }
- let(:cluster) { create(:cluster, account:) }
-
- subject { described_class.fetch_kubeconfig(cluster, account.owner) }
-
- it 'fetches the kubeconfig' do
- expect(subject).to eql(JSON.parse(File.read(Rails.root.join(*%w[spec resources portainer kubeconfig.json]))))
- end
- end
- end
-end
diff --git a/spec/support/shared_contexts/with_portainer.rb b/spec/support/shared_contexts/with_portainer.rb
deleted file mode 100644
index 607f13c0..00000000
--- a/spec/support/shared_contexts/with_portainer.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require 'rails_helper'
-RSpec.shared_context 'with portainer' do
- before do
- headers = { 'Content-Type' => 'application/json' }
- WebMock.stub_request(:any, %r{/api/kubernetes/config}).to_return(
- status: 200, body: File.read(Rails.root.join(*%w[spec resources portainer kubeconfig.json])), headers:
- )
- WebMock.stub_request(:any, %r{/api/endpoints}).to_return(
- status: 200, body: File.read(Rails.root.join(*%w[spec resources portainer endpoints.json])), headers:
- )
- WebMock.stub_request(:any, %r{/api/auth/oauth/validate}).to_return(
- status: 200, body: File.read(Rails.root.join(*%w[spec resources portainer authenticate.json])), headers:
- )
- WebMock.stub_request(:any, %r{/api/auth}).to_return(
- status: 200, body: File.read(Rails.root.join(*%w[spec resources portainer authenticate.json])), headers:
- )
- end
-end