Sha256: ce5e584d312db792ff77c0e43ca7a945fcec7df8b601bbc3a2dfe494a290dabb

Contents?: true

Size: 1.95 KB

Versions: 20

Compression:

Stored size: 1.95 KB

Contents

# frozen_string_literal: true

require_relative '../../../puppet/provider/package'

Puppet::Type.type(:package).provide :opkg, :source => :opkg, :parent => Puppet::Provider::Package do
  desc "Opkg packaging support. Common on OpenWrt and OpenEmbedded platforms"

  commands :opkg => "opkg"

  confine     'os.name' => :openwrt
  defaultfor  'os.name' => :openwrt

  def self.instances
    packages = []
    execpipe("#{command(:opkg)} list-installed") do |process|
      regex = /^(\S+) - (\S+)/
      fields = [:name, :ensure]
      hash = {}

      process.each_line { |line|
        match = regex.match(line)
        if match
          fields.zip(match.captures) { |field, value| hash[field] = value }
          hash[:provider] = name
          packages << new(hash)
          hash = {}
        else
          warning(_("Failed to match line %{line}") % { line: line })
        end
      }
    end
    packages
  rescue Puppet::ExecutionFailure
    nil
  end

  def latest
    output = opkg("list", @resource[:name])
    matches = /^(\S+) - (\S+)/.match(output).captures
    matches[1]
  end

  def install
    # OpenWrt package lists are ephemeral, make sure we have at least
    # some entries in the list directory for opkg to use
    opkg('update') if package_lists.size <= 2

    if @resource[:source]
      opkg('--force-overwrite', 'install', @resource[:source])
    else
      opkg('--force-overwrite', 'install', @resource[:name])
    end
  end

  def uninstall
    opkg('remove', @resource[:name])
  end

  def update
    install
  end

  def query
    # list out our specific package
    output = opkg('list-installed', @resource[:name])
    if output =~ /^(\S+) - (\S+)/
      return { :ensure => Regexp.last_match(2) }
    end

    nil
  rescue Puppet::ExecutionFailure
    {
      :ensure => :purged,
      :status => 'missing',
      :name => @resource[:name],
      :error => 'ok',
    }
  end

  private

  def package_lists
    Dir.entries('/var/opkg-lists/')
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
puppet-8.10.0 lib/puppet/provider/package/opkg.rb
puppet-8.10.0-x86-mingw32 lib/puppet/provider/package/opkg.rb
puppet-8.10.0-x64-mingw32 lib/puppet/provider/package/opkg.rb
puppet-8.10.0-universal-darwin lib/puppet/provider/package/opkg.rb
puppet-8.9.0 lib/puppet/provider/package/opkg.rb
puppet-8.9.0-x86-mingw32 lib/puppet/provider/package/opkg.rb
puppet-8.9.0-x64-mingw32 lib/puppet/provider/package/opkg.rb
puppet-8.9.0-universal-darwin lib/puppet/provider/package/opkg.rb
puppet-8.8.1 lib/puppet/provider/package/opkg.rb
puppet-8.8.1-x86-mingw32 lib/puppet/provider/package/opkg.rb
puppet-8.8.1-x64-mingw32 lib/puppet/provider/package/opkg.rb
puppet-8.8.1-universal-darwin lib/puppet/provider/package/opkg.rb
puppet-8.7.0 lib/puppet/provider/package/opkg.rb
puppet-8.7.0-x86-mingw32 lib/puppet/provider/package/opkg.rb
puppet-8.7.0-x64-mingw32 lib/puppet/provider/package/opkg.rb
puppet-8.7.0-universal-darwin lib/puppet/provider/package/opkg.rb
puppet-8.6.0 lib/puppet/provider/package/opkg.rb
puppet-8.6.0-x86-mingw32 lib/puppet/provider/package/opkg.rb
puppet-8.6.0-x64-mingw32 lib/puppet/provider/package/opkg.rb
puppet-8.6.0-universal-darwin lib/puppet/provider/package/opkg.rb