Skip to content

Commit 25d4627

Browse files
committed
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.
1 parent e6f67e1 commit 25d4627

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

chef/data_bags/crowbar/template-pacemaker.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,8 @@
8080
"config": {
8181
"environment": "pacemaker-base-config",
8282
"mode": "full",
83-
"transitions": false,
84-
"transition_list": [
85-
]
83+
"transitions": true,
84+
"transition_list": [ "delete" ]
8685
}
8786
}
8887
}

crowbar_framework/app/models/pacemaker_service.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -955,6 +955,34 @@ def prepare_stonith_attributes(role_attributes, remote_nodes, member_nodes, remo
955955
end
956956
end
957957

958+
def transition(inst, name, state)
959+
@logger.debug("Pacemaker transition: entering: #{name} for #{state}")
960+
961+
if state == "delete"
962+
proposal = Proposal.find_by(barclamp: @bc_name, name: inst)
963+
stonith_mode = proposal["attributes"]["pacemaker"]["stonith"]["mode"]
964+
965+
# remove node from stonith cfg
966+
proposal["attributes"]["pacemaker"]["stonith"][
967+
stonith_mode]["nodes"].delete(name)
968+
if proposal["attributes"]["pacemaker"]["stonith"]["per_node"]["nodes"]
969+
proposal["attributes"]["pacemaker"]["stonith"][
970+
"per_node"]["nodes"].delete(name)
971+
end
972+
973+
# remove from pacemaker-cluster-member
974+
proposal["deployment"]["pacemaker"]["elements"][
975+
"pacemaker-cluster-member"].delete(name)
976+
977+
# Save and commit
978+
proposal.save
979+
proposal_commit(inst, in_queue: false, validate: false, validate_after_save: false)
980+
end
981+
982+
@logger.debug("Pacemaker transition: exiting: #{name} for #{state}")
983+
[200, { name: name }]
984+
end
985+
958986
private
959987

960988
def pacemaker_node_name(node, remotes)

0 commit comments

Comments
 (0)