Skip to content

Commit

Permalink
Merge pull request #1 from dorukozturk/joshkurz-scalability
Browse files Browse the repository at this point in the history
Scalability minor improvements
  • Loading branch information
Josh Kurz authored Feb 15, 2023
2 parents 92ff66e + 3bd0a0f commit cec15e5
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 75 deletions.
39 changes: 15 additions & 24 deletions hardeneks/cluster_wide/scalability/control_plane.py
Original file line number Diff line number Diff line change
@@ -1,33 +1,24 @@
from ...resources import Resources
from rich.console import Console
import re
from rich.panel import Panel
from rich import print
import kubernetes

console = Console()
from hardeneks import console
from ...resources import Resources

def _get_version() -> str:
client = kubernetes.client.VersionApi()
version = client.get_code()
return version

def check_EKS_version(resources: Resources):
version = _get_version()
major = int(version.major)
client = kubernetes.client.VersionApi()
version = client.get_code()
minor = version.minor
last_char = version.minor[-1]
if last_char == "+":
minor = int(version.minor[:-1])
else:
minor = int(minor)

good = False

if major >= 1 and minor >= 24:
good = True

if good == False:
print(Panel("[red] Current Version == " + version.major + "." + version.minor + "", title="EKS Version Should be greater or equal too 1.24"))
if int(re.sub("[^0-9]", "", minor)) < 24:
console.print(
Panel(
f"[red]EKS Version Should be greater or equal too 1.24. Current Version == {version.major}.{version.minor}",
subtitle="[link=https://aws.github.io/aws-eks-best-practices/scalability/docs/control-plane/#use-eks-124-or-above]Click to see the guide[/link]",
)
)
console.print()

return good
return False

return True
35 changes: 0 additions & 35 deletions hardeneks/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,38 +69,3 @@ def set_resources(self):
.list_namespaced_horizontal_pod_autoscaler(self.namespace)
.items
)

# Needed to convert dict to Map for testing purposes mainly.
# IF there is a better way for this, i'm all for it.
class Map(dict):
"""
Example:
m = Map({'first_name': 'Eduardo'}, last_name='Pool', age=24, sports=['Soccer'])
"""
def __init__(self, *args, **kwargs):
super(Map, self).__init__(*args, **kwargs)
for arg in args:
if isinstance(arg, dict):
for k, v in arg.items():
self[k] = v

if kwargs:
for k, v in kwargs.items():
self[k] = v

def __getattr__(self, attr):
return self.get(attr)

def __setattr__(self, key, value):
self.__setitem__(key, value)

def __setitem__(self, key, value):
super(Map, self).__setitem__(key, value)
self.__dict__.update({key: value})

def __delattr__(self, item):
self.__delitem__(item)

def __delitem__(self, key):
super(Map, self).__delitem__(key)
del self.__dict__[key]
32 changes: 16 additions & 16 deletions tests/test_scalability_control_plane.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
import pytest
from hardeneks.resources import Resources
from hardeneks.resources import Map
from unittest.mock import patch

from hardeneks.cluster_wide.scalability.control_plane import (
check_EKS_version
)

@patch("hardeneks.cluster_wide.scalability.control_plane._get_version")
from hardeneks.cluster_wide.scalability.control_plane import check_EKS_version


class Version:
def __init__(self, minor):
self.major = 1
self.minor = minor


@patch("kubernetes.client.VersionApi.get_code")
def test_check_EKS_version(mocked_client):
namespaced_resources = Resources(
"some_region", "some_context", "some_cluster", []
)
mocked_client.return_value = Map({'major': '1', 'minor': "23+"})
good = check_EKS_version(namespaced_resources)
assert good == False, "Value should be False"
mocked_client.return_value = Map({'major': '1', 'minor': "24+"})
good = check_EKS_version(namespaced_resources)
assert good == True, "Value should be True"
mocked_client.return_value = Map({'major': '1', 'minor': "24"})
good = check_EKS_version(namespaced_resources)
assert good == True, "Value should be True and Handle without +"
mocked_client.return_value = Version("23+")
assert not check_EKS_version(namespaced_resources)
mocked_client.return_value = Version("24+")
assert check_EKS_version(namespaced_resources)
mocked_client.return_value = Version("24")
assert check_EKS_version(namespaced_resources)

0 comments on commit cec15e5

Please sign in to comment.