diff options
| -rw-r--r-- | .github/workflows/sonarcloud.yml | 20 | ||||
| -rw-r--r-- | data/templates/conntrackd/conntrackd.op-mode.j2 | 13 | ||||
| -rw-r--r-- | interface-definitions/include/bgp/peer-group.xml.i | 2 | ||||
| -rwxr-xr-x | src/op_mode/conntrack_sync.py | 25 | 
4 files changed, 44 insertions, 16 deletions
| diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml new file mode 100644 index 000000000..5fa005631 --- /dev/null +++ b/.github/workflows/sonarcloud.yml @@ -0,0 +1,20 @@ +name: Sonar Checks +on: +  push: +    branches: +      - current +  pull_request_target: +    types: [opened, synchronize, reopened] +jobs: +  sonar-cloud: +    name: SonarCloud +    runs-on: ubuntu-latest +    steps: +      - uses: actions/checkout@v3 +        with: +          fetch-depth: 0  # Shallow clones should be disabled for a better relevancy of analysis +      - name: SonarCloud Scan +        uses: SonarSource/sonarcloud-github-action@master +        env: +          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  # Needed to get PR information, if any +          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} diff --git a/data/templates/conntrackd/conntrackd.op-mode.j2 b/data/templates/conntrackd/conntrackd.op-mode.j2 deleted file mode 100644 index 82f7e2859..000000000 --- a/data/templates/conntrackd/conntrackd.op-mode.j2 +++ /dev/null @@ -1,13 +0,0 @@ -Source                                           Destination                                      Protocol -{% for parsed in data if parsed.flow.meta is vyos_defined %} -{%     for key in parsed.flow.meta %} -{%         if key['@direction'] == 'original' %} -{%             set saddr    = key.layer3.src | bracketize_ipv6 %} -{%             set sport    = key.layer4.sport %} -{%             set daddr    = key.layer3.dst | bracketize_ipv6 %} -{%             set dport    = key.layer4.dport %} -{%             set protocol = key.layer4['@protoname'] %} -{{ "%-48s" | format(saddr ~ ':' ~ sport) }} {{ "%-48s" | format(daddr ~ ':' ~ dport) }} {{ protocol }} -{%         endif %} -{%     endfor %} -{% endfor %} diff --git a/interface-definitions/include/bgp/peer-group.xml.i b/interface-definitions/include/bgp/peer-group.xml.i index 3866fc017..c80d4a394 100644 --- a/interface-definitions/include/bgp/peer-group.xml.i +++ b/interface-definitions/include/bgp/peer-group.xml.i @@ -3,7 +3,7 @@    <properties>      <help>Peer group for this peer</help>      <completionHelp> -      <path>protocols bgp peer-group</path> +      <path>${COMP_WORDS[@]:1:${#COMP_WORDS[@]}-5} peer-group</path>      </completionHelp>      <valueHelp>        <format>txt</format> diff --git a/src/op_mode/conntrack_sync.py b/src/op_mode/conntrack_sync.py index 6c86ff492..f3b09b452 100755 --- a/src/op_mode/conntrack_sync.py +++ b/src/op_mode/conntrack_sync.py @@ -19,6 +19,8 @@ import sys  import syslog  import xmltodict +from tabulate import tabulate +  import vyos.opmode  from vyos.configquery import CliShellApiConfigQuery @@ -27,7 +29,6 @@ from vyos.utils.commit import commit_in_progress  from vyos.utils.process import call  from vyos.utils.process import cmd  from vyos.utils.process import run -from vyos.template import render_to_string  conntrackd_bin = '/usr/sbin/conntrackd'  conntrackd_config = '/run/conntrackd/conntrackd.conf' @@ -59,6 +60,26 @@ def flush_cache(direction):      if tmp > 0:          raise vyos.opmode.Error('Failed to clear {direction} cache') +def get_formatted_output(data): +    data_entries = [] +    for parsed in data: +        for meta in parsed.get('flow', {}).get('meta', []): +            direction = meta['@direction'] +            if direction == 'original': +                src = meta['layer3']['src'] +                dst = meta['layer3']['dst'] +                sport = meta['layer4'].get('sport') +                dport = meta['layer4'].get('dport') +                protocol = meta['layer4'].get('@protoname') +                orig_src = f'{src}:{sport}' if sport else src +                orig_dst = f'{dst}:{dport}' if dport else dst + +                data_entries.append([orig_src, orig_dst, protocol]) + +    headers = ["Source", "Destination", "Protocol"] +    output = tabulate(data_entries, headers, tablefmt="simple") +    return output +  def from_xml(raw, xml):      out = []      for line in xml.splitlines(): @@ -70,7 +91,7 @@ def from_xml(raw, xml):      if raw:          return out      else: -        return render_to_string('conntrackd/conntrackd.op-mode.j2', {'data' : out}) +        return get_formatted_output(out)  def restart():      is_configured() | 
