Skip to content

Commit

Permalink
Merge 8d039cb into 9f0950d
Browse files Browse the repository at this point in the history
  • Loading branch information
jbouter committed Oct 18, 2019
2 parents 9f0950d + 8d039cb commit 476cd3e
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
22 changes: 22 additions & 0 deletions saltlint/rules/JinjaPillarGrainsGetFormatRule.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2016, Will Thames and contributors
# Copyright (c) 2018, Ansible Project
# Modified work Copyright (c) 2019 Jeffrey Bouter

from saltlint.linter import SaltLintRule
import re


class JinjaPillarGrainsGetFormatRule(SaltLintRule):
id = '211'
shortdesc = 'pillar.get or grains.get should be formatted differently'
description = "pillar.get and grains.get should always be formatted" \
" like salt['pillar.get']('item') or grains['item1']"
severity = 'HIGH'
tags = ['formatting', 'jinja']
version_added = 'develop'

bracket_regex = re.compile(r"{{( |\-|\+)?.(pillar|grains).get\(.+}}")

def match(self, file, line):
return self.bracket_regex.search(line)
48 changes: 48 additions & 0 deletions tests/unit/TestJinjaPillarGrainsGetFormatRule.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2013-2018 Will Thames <will@thames.id.au>
# Copyright (c) 2018 Ansible by Red Hat
# Modified work Copyright (c) 2019 Jeffrey Bouter

import unittest

from saltlint.linter import RulesCollection
from saltlint.rules.JinjaPillarGrainsGetFormatRule import JinjaPillarGrainsGetFormatRule
from tests import RunFromText


GOOD_STATEMENT_LINE = '''
example_test:
file.managed:
- name: /etc/test
- user: root
- group: {{ salt['pillar.get']('item') }} test
- something: {{ grains['item'] }}
- content: |
{{ salt['pillar.get']('test') }}
'''

BAD_STATEMENT_LINE = '''
example_test:
file.managed:
- name: /etc/test
- user: root
- group: {{ pillar.get('item') }} test
- something: {{ grains.get('item')}}
- content: |
{{ salt['pillar.get']('test') }}
'''

class TestJinjaPillarGrainsGetFormatRule(unittest.TestCase):
collection = RulesCollection()

def setUp(self):
self.collection.register(JinjaPillarGrainsGetFormatRule())
self.runner = RunFromText(self.collection)

def test_statement_positive(self):
results = self.runner.run_state(GOOD_STATEMENT_LINE)
self.assertEqual(0, len(results))

def test_statement_negative(self):
results = self.runner.run_state(BAD_STATEMENT_LINE)
self.assertEqual(2, len(results))

0 comments on commit 476cd3e

Please sign in to comment.