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)