diff options
Diffstat (limited to 'roles/openshift_logging')
| -rw-r--r-- | roles/openshift_logging/README.md | 2 | ||||
| -rw-r--r-- | roles/openshift_logging/filter_plugins/openshift_logging.py | 27 | ||||
| -rw-r--r-- | roles/openshift_logging/filter_plugins/test | 15 | 
3 files changed, 44 insertions, 0 deletions
diff --git a/roles/openshift_logging/README.md b/roles/openshift_logging/README.md index 0ea34faf2..6c5bb8693 100644 --- a/roles/openshift_logging/README.md +++ b/roles/openshift_logging/README.md @@ -297,6 +297,8 @@ oc delete pod --selector=<ds_selector>  Changelog  --------- +Tue Oct 26, 2017 +- Make CPU request equal limit if limit is greater then request  Tue Oct 10, 2017  - Default imagePullPolicy changed from Always to IfNotPresent  diff --git a/roles/openshift_logging/filter_plugins/openshift_logging.py b/roles/openshift_logging/filter_plugins/openshift_logging.py index 959573635..e1a5ea726 100644 --- a/roles/openshift_logging/filter_plugins/openshift_logging.py +++ b/roles/openshift_logging/filter_plugins/openshift_logging.py @@ -3,6 +3,7 @@  '''  import random +import re  def es_storage(os_logging_facts, dc_name, pvc_claim, root='elasticsearch'): @@ -17,6 +18,31 @@ def es_storage(os_logging_facts, dc_name, pvc_claim, root='elasticsearch'):      return dict(kind='emptydir') +def min_cpu(left, right): +    '''Return the minimum cpu value of the two values given''' +    message = "Unable to evaluate {} cpu value is specified correctly '{}'. Exp whole, decimal or int followed by M" +    pattern = re.compile(r"^(\d*\.?\d*)([Mm])?$") +    millis_per_core = 1000 +    if not right: +        return left +    m_left = pattern.match(left) +    if not m_left: +        raise RuntimeError(message.format("left", left)) +    m_right = pattern.match(right) +    if not m_right: +        raise RuntimeError(message.format("right", right)) +    left_value = float(m_left.group(1)) +    right_value = float(m_right.group(1)) +    if m_left.group(2) not in ["M", "m"]: +        left_value = left_value * millis_per_core +    if m_right.group(2) not in ["M", "m"]: +        right_value = right_value * millis_per_core +    response = left +    if left_value != min(left_value, right_value): +        response = right +    return response + +  def walk(source, path, default, delimiter='.'):      '''Walk the sourch hash given the path and return the value or default if not found'''      if not isinstance(source, dict): @@ -87,6 +113,7 @@ class FilterModule(object):              'random_word': random_word,              'entry_from_named_pair': entry_from_named_pair,              'map_from_pairs': map_from_pairs, +            'min_cpu': min_cpu,              'es_storage': es_storage,              'serviceaccount_name': serviceaccount_name,              'serviceaccount_namespace': serviceaccount_namespace, diff --git a/roles/openshift_logging/filter_plugins/test b/roles/openshift_logging/filter_plugins/test index 3ad956cca..bac25c012 100644 --- a/roles/openshift_logging/filter_plugins/test +++ b/roles/openshift_logging/filter_plugins/test @@ -1,7 +1,22 @@  import unittest  from openshift_logging import walk +from openshift_logging import min_cpu  class TestFilterMethods(unittest.TestCase): +     + +    def test_min_cpu_for_none(self): +        source = "1000M" +        self.assertEquals(min_cpu(source, None), "1000M") + +    def test_min_cpu_for_millis(self): +        source = "1" +        self.assertEquals(min_cpu(source, "0.1"), "0.1") + + +    def test_min_cpu_for_whole(self): +        source = "120M" +        self.assertEquals(min_cpu(source, "2"), "120M")      def test_walk_find_key(self):  | 
