Purge deleted /etc/hosts entries for deleted ndoes

Deleted nodes now will get stored in a file
/etc/hiera/deleted_nodes.yaml and be inserted into
the hiera hierarchy.

host entries for any records present in deleted_nodes.yaml
will be purged when evaluating hosts task.

The source YAML for deleted nodes is generated on master
because nodes that are deployed from scratch or from Error
state will not be able to identify deleted nodes due to
certain orchestration limitations.

Change-Id: I01db215e77a3532a6fa7bf46ab7e20e281e8c165
Closes-Bug: #1513401
(cherry picked from commit eacb493e38)
This commit is contained in:
Matthew Mosesohn 2016-04-22 12:43:04 +03:00
parent 9f3d7e63b4
commit c923fb21ef
4 changed files with 57 additions and 5 deletions

View File

@ -18,6 +18,7 @@ class osnailyfacter::hiera::hiera {
'override/configuration/cluster',
'class/%{calling_class}',
'module/%{calling_module}',
'deleted_nodes',
'nodes',
'globals%{disable_globals_yaml}',
'astute',

View File

@ -4,14 +4,20 @@ class osnailyfacter::hosts::hosts {
$hosts_file = '/etc/hosts'
$network_metadata = hiera_hash('network_metadata')
$messaging_prefix = hiera('node_name_prefix_for_messaging')
$host_resources = network_metadata_to_hosts($network_metadata)
$messaging_host_resources = network_metadata_to_hosts($network_metadata, 'mgmt/messaging', hiera('node_name_prefix_for_messaging'))
$messaging_host_resources = network_metadata_to_hosts($network_metadata, 'mgmt/messaging', $messaging_prefix)
$host_hash = merge($host_resources, $messaging_host_resources)
$deleted_nodes = hiera('deleted_nodes', [])
$deleted_messaging_nodes = prefix($deleted_nodes, $messaging_prefix)
Host {
ensure => present,
target => $hosts_file
}
create_resources(host, merge($host_resources, $messaging_host_resources))
create_resources(host, $host_hash)
if !empty($deleted_nodes) {
create_resources(host, concat($deleted_nodes, $deleted_messaging_nodes), {ensure => absent})
}
}

View File

@ -71,7 +71,7 @@
version: 2.1.0
role: ['/.*/']
required_for: [post_deployment_end]
requires: [upload_nodes_info]
requires: [upload_nodes_info, copy_deleted_nodes]
condition:
yaql_exp: 'changed($.network_metadata)'
parameters:
@ -348,3 +348,34 @@
dst: /var/lib/astute/ironic/ironic
permissions: '0600'
dir_permissions: '0700'
- id: generate_deleted_nodes
version: 2.1.0
type: upload_file
role: master
condition:
yaql_exp: 'changed($.network_metadata)'
requires: [upload_configuration]
required_for: [pre_deployment_end]
parameters:
path: /etc/fuel/cluster/{CLUSTER_ID}/deleted_nodes.yaml
data:
yaql_exp: '{"deleted_nodes" => deleted($.nodes.fqdn)}.toYaml()'
- id: copy_deleted_nodes
type: copy_files
version: 2.1.0
role: ['/.*/']
condition:
yaql_exp: 'changed($.network_metadata)'
required_for: [pre_deployment_end]
requires: [generate_deleted_nodes]
cross-depends:
- name: generate_deleted_nodes
role: master
parameters:
files:
- src: /etc/fuel/cluster/{CLUSTER_ID}/deleted_nodes.yaml
dst: /etc/hiera/deleted_nodes.yaml
permissions: '0600'
dir_permissions: '0700'

View File

@ -21,6 +21,8 @@ describe manifest do
network_metadata = Noop.hiera_structure('network_metadata/nodes')
messaging_fqdn_prefix = Noop.hiera('node_name_prefix_for_messaging', 'messaging-')
deleted_nodes = Noop.hiera('deleted_nodes', [])
it 'should create basic host entries' do
network_metadata.each do |node, params|
should contain_host(params['fqdn']).with({
@ -39,7 +41,19 @@ describe manifest do
:target => '/etc/hosts'
})
end
end
it 'should purge host entries for deleted nodes' do
deleted_nodes.each do |deleted|
should contain_host(deleted).with({
:ensure => :absent,
:target => '/etc/hosts'
})
should contain_host("#{messaging_fqdn_prefix}#{deleted}").with({
:ensure => :absent,
:target => '/etc/hosts'
})
end
end
end
test_ubuntu_and_centos manifest