old_contents: # (c) 2015, Peter Sprygada <psprygada@ansible.com>
  #
  # This file is part of Ansible
  #
  # Ansible is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation, either version 3 of the License, or
  # (at your option) any later version.
  #
  # Ansible is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  #
  # You should have received a copy of the GNU General Public License
  # along with Ansible.  If not, see <http://www.gnu.org/licenses/>.
  #
  
  from itertools import groupby
  
  __metaclass__ = type
  
  def make_range_string(data):
      numlist = []
      for item in data:
          for part in str(item).split(','):
              if '-' in part:
                  first, last = part.split('-')
                  first, last = int(first), int(last)
                  numlist.extend(range(first, last+1))
              else:
                  first = int(part)
                  numlist.append(first)
  
      numlist = sorted(set(numlist))
  
      range_list = []
      for _, grp in groupby(enumerate(numlist), lambda (i, x): i-x):
          subset = [ x[1] for x in list(grp) ]
          first = subset[0]
          last = subset[-1]
          if first == last:
              range_list.append(str(first))
          else:
              substr = "{}-{}".format(first, last)
              range_list.append(substr)
  
      return ','.join(range_list)
  
  class FilterModule(object):
  
      def filters(self):
          return {
              'make_range_string': make_range_string,
          }
  
new_contents: #
  # Copyright (c) 2016, Arista Networks, Inc.
  # All rights reserved.
  #
  # Redistribution and use in source and binary forms, with or without
  # modification, are permitted provided that the following conditions are
  # met:
  #
  #   Redistributions of source code must retain the above copyright notice,
  #   this list of conditions and the following disclaimer.
  #
  #   Redistributions in binary form must reproduce the above copyright
  #   notice, this list of conditions and the following disclaimer in the
  #   documentation and/or other materials provided with the distribution.
  #
  #   Neither the name of Arista Networks nor the names of its
  #   contributors may be used to endorse or promote products derived from
  #   this software without specific prior written permission.
  #
  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ARISTA NETWORKS
  # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  #
  
  from itertools import groupby
  
  __metaclass__ = type
  
  def make_range_string(data):
      numlist = []
      for item in data:
          for part in str(item).split(','):
              if '-' in part:
                  first, last = part.split('-')
                  first, last = int(first), int(last)
                  numlist.extend(range(first, last+1))
              else:
                  first = int(part)
                  numlist.append(first)
  
      numlist = sorted(set(numlist))
  
      range_list = []
      for _, grp in groupby(enumerate(numlist), lambda (i, x): i-x):
          subset = [ x[1] for x in list(grp) ]
          first = subset[0]
          last = subset[-1]
          if first == last:
              range_list.append(str(first))
          else:
              substr = "{}-{}".format(first, last)
              range_list.append(substr)
  
      return ','.join(range_list)
  
  class FilterModule(object):
  
      def filters(self):
          return {
              'make_range_string': make_range_string,
          }
  
subject: replace copyright info in range_filter plugin