aboutsummaryrefslogtreecommitdiffstats
path: root/modules/buildsystem/manifests/distros.rb
blob: 5af2264fb2ad9cbebc8fd7ff301dad9b152062ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
hostclass "buildsystem::distros" do
    include 'buildsystem::var::repository'
    include 'buildsystem::var::scheduler'
    include 'buildsystem::var::distros'

    mirror_user = 'root'
    schedbot_user = scope.lookupvar('buildsystem::var::scheduler::login')
    bootstrap_reporoot = scope.lookupvar('buildsystem::var::repository::bootstrap_reporoot')
    scope.lookupvar('buildsystem::var::distros::distros').each{|rel, distro|
	file [ bootstrap_reporoot, rel ].join('/'), :ensure => 'directory', 
	    :owner => mirror_user, :group => mirror_user
	for arch in distro['arch'] do
	    # As ruby dsl cannot use defined resources, we have to use a
	    # workaround with 'find_resource_type' as described in this
	    # puppet issue: http://projects.puppetlabs.com/issues/11912
	    scope.find_resource_type 'buildsystem::media_cfg'
	    media_cfg_args = {
		:distro_name => rel,
		:arch => arch,
	    }
	    if distro['tmpl_media.cfg'] != nil
		media_cfg_args['templatefile'] = distro['tmpl_media.cfg']
	    end
            if ! distro['no_media_cfg_update']
                create_resource 'buildsystem::media_cfg',
                    [ rel, ' ', arch ].join('/'), media_cfg_args
            end
	    file [ bootstrap_reporoot, rel, arch ].join('/'), 
		:ensure => 'directory', :owner => schedbot_user, 
		:group => schedbot_user
	    mediadir = [ bootstrap_reporoot, rel, arch, 'media' ].join('/')
	    file mediadir, :ensure => 'directory', :owner => schedbot_user,
		:group => schedbot_user
	    file [ mediadir, 'media_info' ].join('/'), :ensure => 'directory',
		:owner => schedbot_user, :group => schedbot_user
	    file [ mediadir, 'debug' ].join('/'), :ensure => 'directory',
		:owner => mirror_user, :group => mirror_user
	    distro['medias'].each{|media, m|
		file [ mediadir, media ].join('/'), :ensure => 'directory', 
		    :owner => schedbot_user, :group => schedbot_user
		file [ mediadir, 'debug', media ].join('/'), 
		    :ensure => 'directory', :owner => schedbot_user, 
		    :group => schedbot_user
		for repo in m['repos'].keys do
		    file [ mediadir, media, repo ].join('/'),
			:ensure => 'directory', :owner => schedbot_user,
			:group => schedbot_user
		    file [ mediadir, media, repo, 'media_info' ].join('/'),
			:ensure => 'directory', :owner => schedbot_user,
			:group => schedbot_user
		    file [ mediadir, 'debug', media, repo ].join('/'),
			:ensure => 'directory', :owner => schedbot_user,
			:group => schedbot_user
		    file [ mediadir, 'debug', media, repo, 'media_info' ].join('/'),
			:ensure => 'directory', :owner => schedbot_user,
			:group => schedbot_user
		end
	    }
	    if distro['based_on'] != nil
		distro['based_on'].each{|bdistroname, medias|
		    file [ mediadir, bdistroname ].join('/'),
			:ensure => 'directory', :owner => mirror_user,
			:group => mirror_user
		    medias.each{|medianame, media|
			mdir = [ mediadir, bdistroname, medianame ].join('/')
			file mdir, :ensure => 'directory',
			    :owner => mirror_user, :group => mirror_user
			for reponame in media
			    file [ mdir, reponame ].join('/'),
				:ensure => 'link',
				:target => [ 
				    '../../../../..', bdistroname, arch,
				    'media', medianame, reponame ].join('/'),
				:owner => mirror_user, :group => mirror_user
			end
		    }
		}
	    end
	end
	# SRPMS
	srpmsdir = [ bootstrap_reporoot, rel, 'SRPMS' ].join('/')
	file srpmsdir,
	    :ensure => 'directory', :owner => mirror_user, 
	    :group => mirror_user
	distro['medias'].each{|media, m|
	    file [ srpmsdir, media ].join('/'), :ensure => 'directory', 
		:owner => schedbot_user, :group => schedbot_user
	    for repo in m['repos'].keys do
		file [ srpmsdir, media, repo ].join('/'),
		    :ensure => 'directory', :owner => schedbot_user,
		    :group => schedbot_user
	    end
	}
    }
end