From cd1bdda5f963236dac849eb9257812f81c8af8ba Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 18 Feb 2025 13:27:37 +0200 Subject: test for dup resource --- lib/dsl.rb | 5 ++++- lib/dslkeywords/package.rb | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/dsl.rb b/lib/dsl.rb index b9062e5..353bb15 100644 --- a/lib/dsl.rb +++ b/lib/dsl.rb @@ -23,6 +23,8 @@ module RCM include Options include Log + class DuplicateResource < StandardError; end + def initialize(reset) DSL.reset! if reset @id = "dsl(#{@@rcm_counter += 1})" @@ -35,7 +37,8 @@ module RCM def evaluate! = @scheduled.each(&:evaluate!) def <<(obj) - fatal_exit "Object #{obj.id} already declared!" if @@objs.key?(obj.id) + raise DuplicateResource, "#{obj.id} already declared!" if @@objs.key?(obj.id) + @scheduled << @@objs[obj.id] = obj end end diff --git a/lib/dslkeywords/package.rb b/lib/dslkeywords/package.rb index b28ed50..86903cf 100644 --- a/lib/dslkeywords/package.rb +++ b/lib/dslkeywords/package.rb @@ -4,12 +4,25 @@ require 'fileutils' require_relative 'resource' module RCM + class DNFPackageManager + def installed?(pkg) = false + def install(pkg) = `dnf install -y "#{pkg}"` unless installed?(pkg) + def update(pkg) = `dnf update -y "#{pkg}"` + def remove(pkg) = `dnf remove -y "#{pkg}"` if installed?(pkg) + end + # Managing packages class Package < Resource attr_reader :path + class UnsupportedOS < StandardError; end + def initialize(name) super(name) + raise UnsupportedOS, 'OS is not supported' unless File.file?('/etc/fedora-release') + + @manager = DNFPackageManager.new + @name = name end -- cgit v1.2.3