Skip to content

Commit

Permalink
Merge pull request #540 from jhoblitt/feature/cloudbees-folder
Browse files Browse the repository at this point in the history
make jenkins_job type cloudbees-folder aware
  • Loading branch information
jhoblitt committed Mar 29, 2016
2 parents 5d02d92 + 4649436 commit 321ce4f
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 1 deletion.
12 changes: 12 additions & 0 deletions lib/puppet/type/jenkins_job.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require 'puppet/property/boolean'
require 'pathname'

require 'puppet_x/jenkins/type/cli'

Expand Down Expand Up @@ -33,4 +34,15 @@
end
end
end

# if the job is contained in a `cloudbees-folder`, autorequire any parent
# folder jobs
# XXX we can't inspect @resource[:name] or self[:name] here because of
# meta-programming funkiness
autorequire(:jenkins_job) do
folders = []
Pathname(self[:name]).dirname.descend { |d| folders << d.to_path }
folders
end

end # PuppetX::Jenkins::Type::Cli.newtype
56 changes: 55 additions & 1 deletion spec/unit/puppet/type/jenkins_job_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,59 @@
it_behaves_like 'autorequires all jenkins_user resources'
it_behaves_like 'autorequires jenkins_security_realm resource'
it_behaves_like 'autorequires jenkins_authorization_strategy resource'
end

describe 'folders' do
it "should autorequire parent folder resource" do
folder = described_class.new(
:name => 'foo',
)

job = described_class.new(
:name => 'foo/bar',
)

folder[:ensure] = :present
job[:ensure] = :present

catalog = Puppet::Resource::Catalog.new
catalog.add_resource folder
catalog.add_resource job
req = job.autorequire

expect(req.size).to eq 1
expect(req[0].source).to eq folder
expect(req[0].target).to eq job
end

it "should autorequire multiple nested parent folder resources" do
folder1 = described_class.new(
:name => 'foo',
)

folder2 = described_class.new(
:name => 'foo/bar',
)

job = described_class.new(
:name => 'foo/bar/baz',
)

folder1[:ensure] = :present
folder2[:ensure] = :present
job[:ensure] = :present

catalog = Puppet::Resource::Catalog.new
catalog.add_resource folder1
catalog.add_resource folder2
catalog.add_resource job
req = job.autorequire

expect(req.size).to eq 2
expect(req[0].source).to eq folder1
expect(req[0].target).to eq job
expect(req[1].source).to eq folder2
expect(req[1].target).to eq job
end
end # folders
end # autorequire
end

0 comments on commit 321ce4f

Please # to comment.