Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dylex/ansible-hpc
Ansible modules for HPC clusters
https://github.com/dylex/ansible-hpc
ansible slurm warewulf
Last synced: 29 days ago
JSON representation
Ansible modules for HPC clusters
- Host: GitHub
- URL: https://github.com/dylex/ansible-hpc
- Owner: dylex
- License: bsd-3-clause
- Created: 2016-12-01T19:53:14.000Z (about 8 years ago)
- Default Branch: main
- Last Pushed: 2024-02-03T06:01:30.000Z (11 months ago)
- Last Synced: 2024-02-03T07:20:00.646Z (11 months ago)
- Topics: ansible, slurm, warewulf
- Language: Python
- Homepage:
- Size: 41 KB
- Stars: 15
- Watchers: 4
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Ansible utilities useful for HPC clusters
## Module and inventory for Warewulf systems manager
The perl script `warewulf.pl` can be used as an ansible module as well as a dynamic inventory.
To use it, pass it to ansible's `-M` (library) and/or `-i` (inventory) arguments, or place it in the corresponding directories.Example:
```
- name: boot all nodes from the local disk
hosts: warewulf_node
local_action: warewulf node={{inventory_hostname}} bootlocal=EXIT
```This is equivalent to (though rather slower than) `wwsh provision set --bootlocal=EXIT`.
Requirements:
* [Warewulf](http://warewulf.lbl.gov/trac), with properly configured and populated database
* Run ansible (or, in the case of the module, remotely) on the Warewulf host
* Perl modules: JSON, List::MoreUtils### Dynamic inventory
When used as a dynamic inventory script (i.e., called with `--list` or `--host HOST`), `warewulf.pl` generates a list of hosts based on Warewulf's node database and vnfs list.
It generates the following host groups:
* warewulf_node: all nodes
* enabled: enabled nodes
* one per warewulf cluster
* one per warewulf group
* warewulf_vnfs: all VNFS images (using chroot)It provides the following host variables:
* warewulf_domain
* warewulf_netdevs: one key per interface, each with all defined values#### Alternate Haskell version
There is also a Haskell application that provides equivalent dynamic inventory functionality.
It gets information from "wwsh node print" and "wwsh vnfs list", but otherwise behaves similarly to the perl version.
There is probably no reason to use it.### Module
As a module, `warewulf.pl` allows various interactions with the warewulf database.
You must pass one of the search arguments (`node`, `vnfs`, `bootstrap`, `file`) to specify which objects to operate on.
The argument is a name or list of name patterns by default (but you can search on other fields using `lookup=FIELD`.
You may then additionally specify parameters to set values or take actions.
Generally this corresponds to the `wwsh` interface.* node=ITEM
* nodename=STR
* cluster=STR
* domain=STR
* groups=LIST
* groupadd=LIST
* groupdel=LIST
* netdev=STR, netadd=STR, netdel=STR
* netrename=STR
* hwaddr=STR
* hwprefix=STR
* ipaddr=STR
* netmask=STR
* network=STR
* gateway=STR
* fqdn=STR
* mtu=STR
* enabled=BOOL
* bootstrapid=STR
* vnfsid=STR
* fileids=LIST
* fileidadd=LIST
* fileiddel=LIST
* files=LIST
* fileadd=LIST
* filedel=LIST
* console=STR
* kargs=LIST
* pxelinux=STR
* master=LIST
* postnetdown=BOOL
* preshell=BOOL
* postshell=BOOL
* selinux=DISABLED|ENABLED|ENFORCED
* bootlocal=UNDEF|NORMAL|EXIT
* ipmi_ipaddr=STR
* ipmi_netmask=STR
* ipmi_username=STR
* ipmi_password=STR
* ipmi_uid=STR
* ipmi_proto=STR
* ipmi_autoconfig=STR
* ipmi=COMMAND
* vnfs
* name=STR
* checksum=STR
* chroot=STR
* size=STR
* vnfs_import=FILE
* vnfs_export=FILE
* bootstrap
* name=STR
* checksum=STR
* size=STR
* bootstrap_import=FILE
* bootstrap_export=PATH
* delete_local_bootstrap=1
* build_local_bootstrap=1
* file
* name=STR
* mode=STR
* checksum=STR
* uid=STR
* gid=STR
* size=STR
* path=STR
* format=STR
* interpreter=STR
* origin=STR
* sync=1
* file_import=FILE
* file_export=FILE
* dhcp=update|restart
* pxe=update|deleteAdditionally, you can specify `new=1` to create the object if it none exists, or `delete=1` to delete matching objects.
Finally, if you specify `get=1` the final values of all matching objects will be included in the result, with all properties.
For example, `warewulf node=node01 get=1` may return:```
{
"changed" : 0,
"node" : {
"node01" : {
"_id" : "1",
"_type" : "node",
"nodename" : "node01",
"name" : ["node01"],
"bootstrapid" : "2",
"vnfsid" : "3"
"fileids" : ["4", "5"],
"netdevs" : {
"eth0" : {
"name" : "eth0",
"netmask" : "255.255.255.0",
"ipaddr" : "10.0.0.1"
}
},
"_ipaddr" : ["10.0.0.1"],
"bootlocal" : 0,
"bootloader" : "sda",
"diskpartition" : "sda",
"diskformat" : ["sda1", "sda2"],
"filesystems" : [
"mountpoint=/:dev=sda1:type=ext4:size=fill",
"dev=sda2:type=swap:size=2048"
]
}
}
}
```Since this module expects to run on the Warewulf server, often it should be used with `local_action` delegation.
## Module for Slurm workload manager
The python module `slurm.py` provides an interface to [Slurm](https://slurm.schedmd.com/).
Currently it provides an interface to `sacctmgr` functionality to manage users and accounts.
See the documentation within the module.## Module for Bright Cluster module
The python module `bright.py` provides an interface to [Bright Cluster Manager](https://www.brightcomputing.com/documentation) configuration.