Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions cloudify_kubernetes/tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@

import os
import json
import shutil
import unittest
from tempfile import mkdtemp
from mock import (MagicMock, mock_open, patch)

from cloudify.state import current_ctx
Expand Down Expand Up @@ -54,6 +56,35 @@

class TestUtils(unittest.TestCase):

@patch('cloudify_kubernetes.utils.get_node_instance_dir')
@patch('cloudify_common_sdk.utils.get_deployment_dir')
def test_set_directory_path(self, *args, **__):
get_node_instance_dir = args[1]
test_dir1 = mkdtemp()
get_node_instance_dir.return_value = test_dir1

some_directory = 'github.com/kubernetes-sigs/aws-ebs-csi-driver/' \
'deploy/kubernetes/overlays/stable/?ref=release-1.14'
listdir = ['cloudbuild.yaml', 'hack', 'tests', 'SECURITY_CONTACTS',
'LICENSE', 'README.md', 'examples', 'docs', 'CHANGELOG.md',
'code-of-conduct.md', 'deploy', 'cmd', 'THIRD-PARTY',
'go.mod', 'Dockerfile', 'charts', 'Makefile', 'go.sum',
'NOTICE', 'CONTRIBUTING.md', 'pkg', 'OWNERS']

result = utils.set_directory_path(some_directory,
target_path=test_dir1)
self.assertEqual(sorted(os.listdir(result)), sorted(listdir))
shutil.rmtree(test_dir1)

def test_get_archive_from_github_url(*_, **__):
some_directory = 'github.com/kubernetes-sigs/aws-ebs-csi-driver' \
'/deploy/kubernetes/overlays/stable/?ref=release-1.14'
fake_git_url = 'https://github.com/kubernetes-sigs/' \
'aws-ebs-csi-driver/archive/refs/heads/release-1.14.zip'

resalt = utils.get_archive_from_github_url(some_directory)
assert resalt == fake_git_url

def _assert_mapping(self, mapping):
self.assertTrue(
isinstance(
Expand Down
40 changes: 40 additions & 0 deletions cloudify_kubernetes/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import sys
import json
from deepdiff import DeepDiff
from urllib.parse import urlparse
from tempfile import NamedTemporaryFile
from collections import (
Mapping,
Expand All @@ -36,6 +37,11 @@
RELATIONSHIP_INSTANCE = 'relationship-instance'

from cloudify_kubernetes_sdk.state import Resource
from cloudify_common_sdk.utils import (get_node_instance_dir,
copy_directory,
remove_directory
)
from cloudify_common_sdk.resource_downloader import get_shared_resource
from cloudify_azure_sdk.client import AKSConnection

from ._compat import text_type
Expand Down Expand Up @@ -69,6 +75,7 @@
'cloudify.nodes.azure.compute.ManagedCluster']
CLUSTER_REL = 'cloudify.relationships.kubernetes.connected_to_shared_cluster'
DEFINITION_ADDITIONS = 'definitions_additions'
ARCHIVE_PATH = 'https://{}/archive/refs/heads/{}.zip'


def merge_definitions(old, new):
Expand Down Expand Up @@ -778,3 +785,36 @@ def update_with_additions(resource_definition, additions):

def check_drift(previous, current):
return DeepDiff(Resource(previous).state, Resource(current).state)


def get_archive_from_github_url(path):
parsed = urlparse(path)
if parsed.path.startswith('github'):
folder_path = '/'.join(parsed.path.split('/')[0:3])
branch = parsed.query.split('=')[-1]
download_url = ARCHIVE_PATH.format(folder_path, branch)
return download_url
else:
raise NonRecoverableError(
'Unsupported argument: {}.'
'for Kustomize directory. '
'At the moment, only Github refs are supported'.format(path))


def set_directory_path(dir_path=None, target_path=None):
if not dir_path:
dir_path = ctx.node.properties['kustomize']

if not target_path:
target_path = get_node_instance_dir()
if 'github' in dir_path.split('/')[0]:
download_url = get_archive_from_github_url(dir_path)
tmp_file = get_shared_resource(download_url)
copy_directory(tmp_file, target_path)
remove_directory(tmp_file)
else:
raise NonRecoverableError(
'Unsupported argument: {}. '
'for Kustomize directory. '
'At the moment, only Github refs are supported'.format(dir_path))
return target_path
24 changes: 24 additions & 0 deletions plugin.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -689,6 +689,30 @@ node_types:
cloudify.kubernetes.resources.CustomBlueprintDefinedResource:
derived_from: cloudify.nodes.kubernetes.resources.CustomBlueprintDefinedResource

cloudify.nodes.kubernetes.resources.Kustomize:
derived_from: cloudify.kubernetes.resources.ResourceWithValidateStatus
properties:
kustomize:
type: string
description: >
A path to YAML file containing the resource definition.
allow_node_redefinition:
type: boolean
description: >
Permit changing the name and kind and number of resources defined in file.
default: false
interfaces:
cloudify.interfaces.validation:
check_status:
implementation: kubernetes.cloudify_kubernetes.tasks.kustomize_check_status
check_drift:
implementation: kubernetes.cloudify_kubernetes.tasks.kustomize_check_drift
cloudify.interfaces.lifecycle:
create:
implementation: kubernetes.cloudify_kubernetes.tasks.create_kustomize
delete:
implementation: kubernetes.cloudify_kubernetes.tasks.delete_kustomize

cloudify.nodes.kubernetes.resources.FileDefinedResource:
derived_from: cloudify.kubernetes.resources.ResourceWithValidateStatus
properties:
Expand Down
24 changes: 24 additions & 0 deletions plugin_1_4.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -689,6 +689,30 @@ node_types:
cloudify.kubernetes.resources.CustomBlueprintDefinedResource:
derived_from: cloudify.nodes.kubernetes.resources.CustomBlueprintDefinedResource

cloudify.nodes.kubernetes.resources.Kustomize:
derived_from: cloudify.kubernetes.resources.ResourceWithValidateStatus
properties:
kustomize:
type: string
description: >
A path to YAML file containing the resource definition.
allow_node_redefinition:
type: boolean
description: >
Permit changing the name and kind and number of resources defined in file.
default: false
interfaces:
cloudify.interfaces.validation:
check_status:
implementation: kubernetes.cloudify_kubernetes.tasks.kustomize_check_status
check_drift:
implementation: kubernetes.cloudify_kubernetes.tasks.kustomize_check_drift
cloudify.interfaces.lifecycle:
create:
implementation: kubernetes.cloudify_kubernetes.tasks.create_kustomize
delete:
implementation: kubernetes.cloudify_kubernetes.tasks.delete_kustomize

cloudify.nodes.kubernetes.resources.FileDefinedResource:
derived_from: cloudify.kubernetes.resources.ResourceWithValidateStatus
properties:
Expand Down
24 changes: 24 additions & 0 deletions v2_plugin.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -689,6 +689,30 @@ node_types:
cloudify.kubernetes.resources.CustomBlueprintDefinedResource:
derived_from: cloudify.nodes.kubernetes.resources.CustomBlueprintDefinedResource

cloudify.nodes.kubernetes.resources.Kustomize:
derived_from: cloudify.kubernetes.resources.ResourceWithValidateStatus
properties:
kustomize:
type: string
description: >
A path to YAML file containing the resource definition.
allow_node_redefinition:
type: boolean
description: >
Permit changing the name and kind and number of resources defined in file.
default: false
interfaces:
cloudify.interfaces.validation:
check_status:
implementation: kubernetes.cloudify_kubernetes.tasks.kustomize_check_status
check_drift:
implementation: kubernetes.cloudify_kubernetes.tasks.kustomize_check_drift
cloudify.interfaces.lifecycle:
create:
implementation: kubernetes.cloudify_kubernetes.tasks.create_kustomize
delete:
implementation: kubernetes.cloudify_kubernetes.tasks.delete_kustomize

cloudify.nodes.kubernetes.resources.FileDefinedResource:
derived_from: cloudify.kubernetes.resources.ResourceWithValidateStatus
properties:
Expand Down