Fix plugins repositories pins generation
Generate apt pins for repositories. Had to change plugin related functions as repo uri is slightly different - there is no 'dists' directory cherry-picked from https://review.openstack.org/#/c/370222/ Change-Id: If24633d4b438b1884d18bd83e70ff413ab4e8e30 Depends-On: I4d4ccbd43fb9ccff13196ff92671f07d143905a5 Closes-bug: #1602719
This commit is contained in:
parent
84f109e243
commit
2b8ef6b89d
|
@ -0,0 +1,51 @@
|
|||
require 'net/http'
|
||||
require 'uri'
|
||||
|
||||
module Puppet::Parser::Functions
|
||||
newfunction(
|
||||
:generate_plugins_pins,
|
||||
:type => :rvalue,
|
||||
:arity => -1,
|
||||
:doc => <<-EOS
|
||||
Takes an array of repositories (in form used in astute.yaml) as argument.
|
||||
Returns a hash compatible with the apt::pin type provided by puppetlabs/apt
|
||||
module. It requires working connectivity to given repositories - the function
|
||||
parses repositories' Release files to obtain fields like Origin, Label, Suite
|
||||
and Codename. Repositories with no or empty priority are skipped.
|
||||
EOS
|
||||
) do |args|
|
||||
repositories = args[0]
|
||||
raise Puppet::ParseError, "generate_plugins_pins(): Requires hash to work with" unless repositories.is_a? Hash
|
||||
|
||||
result = {}
|
||||
repositories.each do |name, repo|
|
||||
next unless repo['priority']
|
||||
uri = URI.parse "#{repo['location']}/#{repo['suite']}/Release"
|
||||
response = Net::HTTP.get_response uri
|
||||
|
||||
unless response.kind_of? Net::HTTPSuccess
|
||||
fail "GET HTTP request to: '#{uri.to_s}' have failed! (#{response.code} #{response.message})"
|
||||
end
|
||||
|
||||
value_map = {
|
||||
'originator' => /^Origin: (.*)/,
|
||||
'label' => /^Label: (.*)/,
|
||||
'release' => /^Suite: (.*)/,
|
||||
'codename' => /^Codename: (.*)/,
|
||||
}
|
||||
|
||||
repo_data = {
|
||||
'priority' => repo['priority'],
|
||||
}
|
||||
|
||||
value_map.each do |key, regexp|
|
||||
repo_data[key] = $1 if response.body =~ regexp
|
||||
end
|
||||
|
||||
result.store name, repo_data
|
||||
end
|
||||
|
||||
p result
|
||||
result
|
||||
end
|
||||
end
|
|
@ -2,13 +2,14 @@ module Puppet::Parser::Functions
|
|||
newfunction(
|
||||
:generate_plugins_repos,
|
||||
:type => :rvalue,
|
||||
:arity => 1,
|
||||
:arity => -1,
|
||||
:docs => <<-EOS
|
||||
Transforms plugins array provided by astute.yaml to a form easily
|
||||
usable with create_resources and the puppetlabs/apt's apt::source type.
|
||||
EOS
|
||||
) do |args|
|
||||
plugins = args[0]
|
||||
addprios = args[1]
|
||||
|
||||
raise(Puppet::ParseError, "generate_plugins_repos(): Requires array to " +
|
||||
"work with") unless plugins.is_a?(Array)
|
||||
|
@ -22,6 +23,9 @@ usable with create_resources and the puppetlabs/apt's apt::source type.
|
|||
'release' => repo['suite'],
|
||||
'location' => repo['uri'],
|
||||
}
|
||||
if addprios
|
||||
result[repo['name']]['priority'] = repo['priority']
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -8,11 +8,18 @@ class osnailyfacter::plugins::plugins_setup_repositories {
|
|||
include ::apt
|
||||
|
||||
$repositories = generate_plugins_repos($plugins)
|
||||
$repositories_w_prios = generate_plugins_repos($plugins, true)
|
||||
$pins = generate_plugins_pins($repositories_w_prios)
|
||||
|
||||
if ! empty($repositories) {
|
||||
create_resources(apt::source, $repositories)
|
||||
}
|
||||
|
||||
if !empty($pins)
|
||||
{
|
||||
create_resources(apt::pin, $pins)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,20 +1,38 @@
|
|||
# ROLE: virt
|
||||
# ROLE: primary-mongo
|
||||
# ROLE: primary-controller
|
||||
# ROLE: mongo
|
||||
# ROLE: ironic
|
||||
# ROLE: controller
|
||||
# ROLE: compute-vmware
|
||||
# ROLE: compute
|
||||
# ROLE: cinder-vmware
|
||||
# ROLE: cinder-block-device
|
||||
# ROLE: cinder
|
||||
# ROLE: ceph-osd
|
||||
# ROLE: base-os
|
||||
require 'spec_helper'
|
||||
require 'shared-examples'
|
||||
manifest = 'plugins/plugins_setup_repositories.pp'
|
||||
|
||||
describe manifest do
|
||||
shared_examples 'catalog' do
|
||||
|
||||
plugins_params = Noop.hiera_array 'plugins'
|
||||
|
||||
let(:plugin_repo_response) do
|
||||
"Label: contrail
|
||||
Version: 5.0"
|
||||
end
|
||||
before(:each) do
|
||||
if plugins_params
|
||||
plugins_params.each do |plugin|
|
||||
if plugin['repositories']
|
||||
plugin['repositories'].each do
|
||||
|repo| stub_request(:get, "#{repo['uri']}#{repo['suite']}/Release").to_return(:status => 200, :body => plugin_repo_response, :headers =>{})
|
||||
end
|
||||
end
|
||||
Thread.stubs(:abort_on_exception=)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it 'plugin repositories should be configured' do
|
||||
if !plugins_params.empty?
|
||||
should contain_apt__pin('contrail-5.0.0').with(
|
||||
'priority' => 1100
|
||||
)
|
||||
should contain_apt__source('contrail-5.0.0')
|
||||
end
|
||||
end
|
||||
end
|
||||
test_ubuntu manifest
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue