Clustershell¶
Overview¶
Define node groups¶
Edit
/etc/clustershell/groups
node_all: cluster-node[001-999].somewhere.in-the.net
Run a command on all nodes¶
clush -w @node_all "my_command with_params"
Iterate over nodes¶
for NODE in $(nodeset -e @node_all); do scp some_file root@$NODE:~/; done
Diff results¶
clush -w @node_all --diff "dmidecode -s bios-version"
Combine results¶
clush -w @node_all -b "uname -a"
Copy file¶
clush -v -w @node_all --copy a_file
Retrieve a file¶
Will create files like
id_rsa.node001
clush -v -w @node_all --rcopy /root/.ssh/id_rsa
Clush.conf¶
Need ssh password auth? Install sshpass and edit /etc/custershell/clush.conf
ssh_user: root
ssh_path: /usr/bin/sshpass -p "password"
ssh_options: -oStrictHostKeyChecking=no
Need to limit number of connection or connection / command timeouts?
fanout: 256
connect_timeout: 15
command_timeout: 0
Scripting in Python¶
from ClusterShell.Task import task_self, NodeSet
task = task_self()
task.run("/bin/uname -r", nodes="mynode[001-123]")
for output, nodes in task.iter_buffers():
print NodeSet.fromlist(nodes), output