From 6e1a375999baccc4c346ca8cb31aa77a48952c27 Mon Sep 17 00:00:00 2001 From: Sasha Andonov Date: Thu, 27 Aug 2020 11:30:05 +0200 Subject: [PATCH] pacemaker: remove node on delete (SOC-11240) On node delete, crowbar doesn't execute pacemaker barclamp due to default pacemaker proposal not having transitions attribute enabled for delete. Next, pacemaker needs to remove the node from the cluster prior to being deleted from crowbar. This change adds said feature. Migartion also added. --- .../pacemaker/302_add_delete_transition.rb | 11 ++++++++ .../data_bags/crowbar/template-pacemaker.json | 7 ++--- .../app/models/pacemaker_service.rb | 28 +++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 chef/data_bags/crowbar/migrate/pacemaker/302_add_delete_transition.rb diff --git a/chef/data_bags/crowbar/migrate/pacemaker/302_add_delete_transition.rb b/chef/data_bags/crowbar/migrate/pacemaker/302_add_delete_transition.rb new file mode 100644 index 00000000..f2f0a4dc --- /dev/null +++ b/chef/data_bags/crowbar/migrate/pacemaker/302_add_delete_transition.rb @@ -0,0 +1,11 @@ +def upgrade(template_attrs, template_deployment, attrs, deployment) + deployment["config"]["transition_list"] = template_deployment["config"]["transition_list"] + deployment["config"]["transitions"] = template_deployment["config"]["transitions"] + return attrs, deployment +end + +def downgrade(template_attrs, template_deployment, attrs, deployment) + deployment["config"]["transition_list"] = template_deployment["config"]["transition_list"] + deployment["config"]["transitions"] = template_deployment["config"]["transitions"] + return attrs, deployment +end diff --git a/chef/data_bags/crowbar/template-pacemaker.json b/chef/data_bags/crowbar/template-pacemaker.json index 668f102a..ca06cbbc 100644 --- a/chef/data_bags/crowbar/template-pacemaker.json +++ b/chef/data_bags/crowbar/template-pacemaker.json @@ -65,7 +65,7 @@ "pacemaker": { "crowbar-revision": 0, "crowbar-applied": false, - "schema-revision": 301, + "schema-revision": 302, "element_states": { "pacemaker-cluster-member" : [ "readying", "ready", "applying" ], "hawk-server" : [ "readying", "ready", "applying" ], @@ -80,9 +80,8 @@ "config": { "environment": "pacemaker-base-config", "mode": "full", - "transitions": false, - "transition_list": [ - ] + "transitions": true, + "transition_list": [ "delete" ] } } } diff --git a/crowbar_framework/app/models/pacemaker_service.rb b/crowbar_framework/app/models/pacemaker_service.rb index d13d7404..a5ac33bd 100644 --- a/crowbar_framework/app/models/pacemaker_service.rb +++ b/crowbar_framework/app/models/pacemaker_service.rb @@ -955,6 +955,34 @@ def prepare_stonith_attributes(role_attributes, remote_nodes, member_nodes, remo end end + def transition(inst, name, state) + @logger.debug("Pacemaker transition: entering: #{name} for #{state}") + + if state == "delete" + proposal = Proposal.find_by(barclamp: @bc_name, name: inst) + stonith_mode = proposal["attributes"]["pacemaker"]["stonith"]["mode"] + + # remove node from stonith cfg + proposal["attributes"]["pacemaker"]["stonith"][ + stonith_mode]["nodes"].delete(name) + if proposal["attributes"]["pacemaker"]["stonith"]["per_node"]["nodes"] + proposal["attributes"]["pacemaker"]["stonith"][ + "per_node"]["nodes"].delete(name) + end + + # remove from pacemaker-cluster-member + proposal["deployment"]["pacemaker"]["elements"][ + "pacemaker-cluster-member"].delete(name) + + # Save and commit + proposal.save + proposal_commit(inst, in_queue: false, validate: false, validate_after_save: false) + end + + @logger.debug("Pacemaker transition: exiting: #{name} for #{state}") + [200, { name: name }] + end + private def pacemaker_node_name(node, remotes)