Whitespace cleanup
Removes trailing whitespace from all source files. Signed-off-by: Jonathon Anderson <janderson@ciq.co>
This commit is contained in:
5
.github/workflows/releasebuild.yml
vendored
5
.github/workflows/releasebuild.yml
vendored
@@ -49,7 +49,7 @@ jobs:
|
||||
name: Build using Rocky Linux
|
||||
needs: distbuild
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
container:
|
||||
image: rockylinux/rockylinux
|
||||
options: --privileged
|
||||
steps:
|
||||
@@ -91,7 +91,7 @@ jobs:
|
||||
with:
|
||||
name: warewulf-${{ env.VERSION }}-${{ env.RELEASE }}.suse.lp153.x86_64.rpm
|
||||
path: warewulf-${{ env.VERSION }}-${{ env.RELEASE }}.suse.lp153.x86_64.rpm
|
||||
|
||||
|
||||
- name: Upload Assets To Release
|
||||
if: "!github.event.release.prerelease"
|
||||
uses: xresloader/upload-to-github-release@v1
|
||||
@@ -114,4 +114,3 @@ jobs:
|
||||
update_latest_release: false
|
||||
prerelease: true
|
||||
tags: true
|
||||
|
||||
28
CHANGELOG.md
28
CHANGELOG.md
@@ -5,22 +5,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
### Added
|
||||
- Changed internal interacation between the on disk YAML format and the in memory
|
||||
### Added
|
||||
- Changed internal interacation between the on disk YAML format and the in memory
|
||||
format. This enables the command line options to be autogenerated from the datastructures.
|
||||
Also this keeps the options for profiles and node set/add commands in strict sync.
|
||||
- Added `node edit/export/import` where the edit command exposes the YAML config for the
|
||||
given nodes in an editor. Nodes can also be added with this command. The export command
|
||||
given nodes in an editor. Nodes can also be added with this command. The export command
|
||||
simply drops the YAML config for the given nodes. With the import command nodes can be
|
||||
imported as YAML or as a CSV file. The CSV file must havr a header in where the first field
|
||||
must always be the nodename, the rest of the fields are the same as the long commandline
|
||||
options. Network device must have the form net.$NETNAME.$NETOPTION, which would e.g. be
|
||||
options. Network device must have the form net.$NETNAME.$NETOPTION, which would e.g. be
|
||||
net.default.ipaddr
|
||||
- The default value (like kernel args) are no read in from the configuration file
|
||||
- The default value (like kernel args) are no read in from the configuration file
|
||||
default.conf. If this file couldn't be read built in default values will be used.
|
||||
- Template files for NetworkManager are now present in the wwinit overlay. A interface must
|
||||
have the type ethernet or infiniband that these will be brought up by NetworkManager
|
||||
- Listings of container via `wwctl container list` will now show the creation,modification
|
||||
- Listings of container via `wwctl container list` will now show the creation,modification
|
||||
date and the size.
|
||||
- Initial cut of the warewulf API. See https://github.com/hpcng/warewulf/pull/471
|
||||
|
||||
@@ -37,24 +37,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
files like prometheus.yml.ww or slurm.conf.ww which depend on the cluster nodes can be
|
||||
placed. Also the new templated functions {{ abort }}, {{ IncludeBlock }} abd {{ no_backup }}
|
||||
are allowed now.
|
||||
- nodes and profiles can now have multiple system and runtime overlays, as a comma separated list.
|
||||
The overlays of the profile and the nodes are combined.
|
||||
- nodes and profiles can now have multiple system and runtime overlays, as a comma separated list.
|
||||
The overlays of the profile and the nodes are combined.
|
||||
- simple ipv6 support is now enabled. In `warewulf.conf` the option `ipaddr6`/`Ipv6net` must
|
||||
be set to enable ipv6. If enabled on of these options is set a node will get a derived
|
||||
ipv6 in the scheme `ipv6net:ipaddr4`. This address can also be overwritten for every
|
||||
ipv6 in the scheme `ipv6net:ipaddr4`. This address can also be overwritten for every
|
||||
node
|
||||
- Multiple files can now created from a single `template.ww` file with the `{{ file FILENAME }}`
|
||||
command in the template. The command is expanded to the magic template command
|
||||
- Multiple files can now created from a single `template.ww` file with the `{{ file FILENAME }}`
|
||||
command in the template. The command is expanded to the magic template command
|
||||
`{{ /* file FILENAME */}}` which is picked up by wwctl and everything which comes after this
|
||||
magic comment will be written to the file `FILENAME`. This mechanism is leveraged in the
|
||||
magic comment will be written to the file `FILENAME`. This mechanism is leveraged in the
|
||||
configuration files for the network, see `ifcfg.xml.ww` and `ifcgf.ww`.
|
||||
- Networks can now have arbitrary keys value pairs in the profiles and on the node, so that
|
||||
- Networks can now have arbitrary keys value pairs in the profiles and on the node, so that
|
||||
things like bridges and mtu sizes can be set
|
||||
- oci container tar balls can be imported with the 'file://$PATH' scheme
|
||||
- uids and gids of a container can now get synced at import time, so that at least users with the
|
||||
same name have the same uid. This is not necessarily needed for warewulf, but services like
|
||||
munge.
|
||||
### Changed
|
||||
### Changed
|
||||
- Provision interface is not tied to 'eth0' any more. The provision interface must be have the
|
||||
'primary' flag now. The file `nodes.conf' must be changed accordingly.
|
||||
- the provisioning network is now called primary and not default
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Christian Goll <cgoll@suse.de> @mslacken
|
||||
* Jeremy Siadal <jeremy.c.siadal@intel.com> @jcsiadal
|
||||
* Niko Kivel <niko.kivel@psi.ch> @kivel
|
||||
* Shannon V. Davidson <svdavidson@charter.net>
|
||||
* Shannon V. Davidson <svdavidson@charter.net>
|
||||
* Brian Clemens <brian@ctrliq.com> @brianclemens
|
||||
* Michael L. Young <myoung@ciq.co> @ajyounge
|
||||
* Ian Kaneshiro <iankane@umich.edu> @ikaneshiro
|
||||
@@ -12,9 +12,9 @@
|
||||
* MatthewHink <matthew_hink@yahoo.com> @MatthewHink
|
||||
* WestleyR <westleyr@nym.hush.com> @WestleyK
|
||||
* Michael L. Young <elgueromexicano@gmail.com>
|
||||
* Yong Qin <yongq@nvidia.com>
|
||||
* Yong Qin <yongq@nvidia.com>
|
||||
* Yoshiaki Senda <yoshiaki@live.it>
|
||||
* Cooper, Trevor <tcooper@sdsc.edu>
|
||||
* Cooper, Trevor <tcooper@sdsc.edu>
|
||||
* Masahiko Ohkubo <masahiko.ohkubo+github@gmail.com>
|
||||
* John Hanks <griznog@gmail.com> @griznog
|
||||
* Rob Jansen <jansen@cs.umn.edu>
|
||||
|
||||
16
README.md
16
README.md
@@ -28,21 +28,21 @@ should) be leveraged as part of Warewulf. Additionally, some of the lessons lear
|
||||
should be rolled into an updated architecture for provisioning management.
|
||||
|
||||
### Warewulf v4
|
||||
Leveraging this legacy of provisioning and cluster management brings us to where we are today. The next generation
|
||||
of Warewulf. Warewulf v4 is a complete rewrite in GoLang, taking in the legacy of what we've come to expect with
|
||||
Leveraging this legacy of provisioning and cluster management brings us to where we are today. The next generation
|
||||
of Warewulf. Warewulf v4 is a complete rewrite in GoLang, taking in the legacy of what we've come to expect with
|
||||
Warewulf, bringing it into the present, and looking out into the future.
|
||||
|
||||
Warewulf v4 combines ultra scalability, flexibility, and simplicity with being light weight, non-intrusive, and a
|
||||
great tool for scientists and seasoned system administrators alike. Warewulf empowers you to scalably and easily manage
|
||||
Warewulf v4 combines ultra scalability, flexibility, and simplicity with being light weight, non-intrusive, and a
|
||||
great tool for scientists and seasoned system administrators alike. Warewulf empowers you to scalably and easily manage
|
||||
thousands of compute resources.
|
||||
|
||||
### Architecture
|
||||
One of the design tenants of Warewulf is how to scalably administrate many thousands of compute nodes. Generally
|
||||
speaking, operating system state introduce a surface for potential discrepancies and version creep between nodes and
|
||||
thus Warewulf has always gone with the "single system image" approach to clustered operating system management.
|
||||
One of the design tenants of Warewulf is how to scalably administrate many thousands of compute nodes. Generally
|
||||
speaking, operating system state introduce a surface for potential discrepancies and version creep between nodes and
|
||||
thus Warewulf has always gone with the "single system image" approach to clustered operating system management.
|
||||
This means that you can have a single management node "image". For the last 20 years, we've been calling this a
|
||||
Virtual Node File System (VNFS), but in hindsight, this is a container.
|
||||
|
||||
At its core, Warewulf v4 focuses on what has made Warewulf so widely loved: simplicity, ultra scalable, lightweight,
|
||||
and an easy to manage solution built for both scientists and seasons system administrators to be able to design a
|
||||
and an easy to manage solution built for both scientists and seasons system administrators to be able to design a
|
||||
highly functional yet easy to maintain cluster no matter how big or small or customized it needs to be.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# This file is autogenerated by warewulf
|
||||
# This file is autogenerated by warewulf
|
||||
# Host: {{.BuildHost}}
|
||||
# Time: {{.BuildTime}}
|
||||
# Source: {{.BuildSource}}
|
||||
@@ -41,6 +41,6 @@ scrape_configs:
|
||||
static_configs:
|
||||
{{- range $node := $.AllNodes}}
|
||||
- targets: ['{{ $node.Id.Get }}:9100']
|
||||
labels:
|
||||
labels:
|
||||
instance: '{{ $node.Id.Get }}'
|
||||
{{- end }}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# This file is autogenerated by warewulf
|
||||
# This file is autogenerated by warewulf
|
||||
# Host: {{.BuildHost}}
|
||||
# Time: {{.BuildTime}}
|
||||
# Source: {{.BuildSource}}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{{- if .Dhcp.Enabled }}
|
||||
# This file is autogenerated by warewulf
|
||||
# This file is autogenerated by warewulf
|
||||
# Host: {{.BuildHost}}
|
||||
# Time: {{.BuildTime}}
|
||||
# Source: {{.BuildSource}}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# wwapiclient is intended as and example grpc wwapid client.
|
||||
Run wwapid to start the server
|
||||
Run wwapid to start the server
|
||||
```./wwapic``` will get the version.
|
||||
This works with or without mTLS.
|
||||
@@ -109,4 +109,4 @@ func main() {
|
||||
if err := run(); err != nil {
|
||||
glog.Fatal(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -33,9 +33,9 @@ curl http://localhost:9871/v1/node?nodeNames=testnode1 # this works! case sensit
|
||||
curl http://localhost:9871/v1/node?nodeNames=testnode%5B1-2%5D
|
||||
|
||||
# node add single discoverable node
|
||||
curl -d '{"nodeNames": ["testApiNode0"], "discoverable": true}' -H "Content-Type: application/json" -X POST http://localhost:9871/v1/node
|
||||
curl -d '{"nodeNames": ["testApiNode0"], "discoverable": true}' -H "Content-Type: application/json" -X POST http://localhost:9871/v1/node
|
||||
|
||||
curl -d '{"nodeNames": ["testApiNode1"], "discoverable": true}' -H "Content-Type: application/json" -X POST http://localhost:9871/v1/node
|
||||
curl -d '{"nodeNames": ["testApiNode1"], "discoverable": true}' -H "Content-Type: application/json" -X POST http://localhost:9871/v1/node
|
||||
|
||||
|
||||
# list the node we just added
|
||||
@@ -45,7 +45,7 @@ curl http://localhost:9871/v1/node?nodeNames=testApiNode0
|
||||
curl -d '{"nodeNames": ["testApiNode0"], "ipmiIpAddr": "10.0.8.220", "updateMask": "ipmiIpAddr,nodeNames"}' -H "Content-Type: application/json" -X PATCH http://localhost:9871/v1/node
|
||||
|
||||
# Node set with post:
|
||||
curl -d '{"nodeNames": ["testApiNode0"], "ipmiIpaddr": "6.7.8.9"}' -H "Content-Type: application/json" -X POST http://localhost:9871/v1/nodeset
|
||||
curl -d '{"nodeNames": ["testApiNode0"], "ipmiIpaddr": "6.7.8.9"}' -H "Content-Type: application/json" -X POST http://localhost:9871/v1/nodeset
|
||||
|
||||
# node status
|
||||
curl http://localhost:9871/v1/nodestatus
|
||||
|
||||
@@ -8,7 +8,7 @@ var (
|
||||
Use: "import [OPTIONS] SOURCE [NAME]",
|
||||
Short: "Import a container into Warewulf",
|
||||
Long: `This command will pull and import a container into Warewulf from SOURCE,
|
||||
optionally renaming it to NAME. The SOURCE must be in a supported URI format. Formats
|
||||
optionally renaming it to NAME. The SOURCE must be in a supported URI format. Formats
|
||||
are:
|
||||
* docker://registry.example.org/example:latest
|
||||
* docker-daemon://example:latest
|
||||
|
||||
@@ -10,7 +10,7 @@ var (
|
||||
DisableFlagsInUseLine: true,
|
||||
Use: "show [OPTIONS] CONTAINER",
|
||||
Short: "Show root fs dir for container",
|
||||
Long: `Shows the base directory for the chroot of the given container.
|
||||
Long: `Shows the base directory for the chroot of the given container.
|
||||
More information about the conainer can be shown with the '-a' option.`,
|
||||
RunE: CobraRunE,
|
||||
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||
|
||||
@@ -70,7 +70,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
|
||||
#
|
||||
# Goto the documentation pages for more information: http://www.hpcng.org/...
|
||||
# Keep the following for better reference
|
||||
# This file is autogenerated by warewulf
|
||||
# This file is autogenerated by warewulf
|
||||
# Host: {{.BuildHost}}
|
||||
# Time: {{.BuildTime}}
|
||||
# Source: {{.BuildSource}}
|
||||
|
||||
@@ -107,7 +107,7 @@ message NodeListResponse {
|
||||
// Request a node list
|
||||
message GetNodeList {
|
||||
enum ListType {
|
||||
Simple = 0;
|
||||
Simple = 0;
|
||||
Ipmi = 1;
|
||||
Network = 2;
|
||||
Long = 3;
|
||||
|
||||
@@ -24,7 +24,7 @@ Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}
|
||||
{{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}
|
||||
{{end}}{{if .HasAvailableSubCommands}}
|
||||
Use "{{.CommandPath}} COMMAND --help" for more information about a COMMAND.
|
||||
{{end}}
|
||||
{{end}}
|
||||
`
|
||||
// End UsageTemplate
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{{- if .Nfs.Enabled }}
|
||||
# This file is autogenerated by warewulf
|
||||
# This file is autogenerated by warewulf
|
||||
# Host: {{.BuildHost}}
|
||||
# Time: {{.BuildTime}}
|
||||
# Source: {{.BuildSource}}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# This file is autogenerated by warewulf
|
||||
# This file is autogenerated by warewulf
|
||||
# Host: {{.BuildHost}}
|
||||
# Time: {{.BuildTime}}
|
||||
# Source: {{.BuildSource}}
|
||||
|
||||
@@ -30,6 +30,6 @@ IPV6_AUTOCONF=yes
|
||||
IPV6_DEFROUTE=yes
|
||||
IPV6_FAILURE_FATAL=no
|
||||
{{ if $netdev.Ipaddr6 -}}
|
||||
IPV6ADDR="{{ $netdev.Ipaddr6 }}"
|
||||
IPV6ADDR="{{ $netdev.Ipaddr6 }}"
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# This file is autogenerated by warewulf
|
||||
# This file is autogenerated by warewulf
|
||||
# Host: {{.BuildHost}}
|
||||
# Time: {{.BuildTime}}
|
||||
# Source: {{.BuildSource}}
|
||||
|
||||
@@ -9,6 +9,6 @@ ExecStart=/warewulf/wwclient
|
||||
ExecReload=/bin/kill -s SIGHUP "$MAINPID"
|
||||
PIDFile=/var/run/wwclient.pid
|
||||
TimeoutSec=60
|
||||
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# This file is autogenerated by warewulf
|
||||
# This file is autogenerated by warewulf
|
||||
# Host: {{.BuildHost}}
|
||||
# Time: {{.BuildTime}}
|
||||
# Source: {{.BuildSource}}
|
||||
|
||||
@@ -94,15 +94,15 @@ explained as follows:
|
||||
* ``warewulf:update interval``: This defines the frequency (in seconds)
|
||||
with which the Warewulf client on the compute node fetches overlay
|
||||
updates.
|
||||
|
||||
|
||||
* ``warewulf:autobuild overlays``: This determines whether per-node
|
||||
overlays will automatically be rebuilt, e.g., when an underlying
|
||||
overlay is changed.
|
||||
|
||||
|
||||
* ``warewulf:host overlay``: This determines whether the special ``host``
|
||||
overlay is applied to the Warewulf server during configuration. (The
|
||||
host overlay is used to configure the dependent services.)
|
||||
|
||||
|
||||
* ``warewulf:syslog``: This determines whether Warewulf server logs go
|
||||
to syslog or are written directly to a log file. (e.g.,
|
||||
``/var/log/warewulfd.log``)
|
||||
|
||||
@@ -26,8 +26,8 @@ Here is an example of importing from Docker Hub.
|
||||
|
||||
$ sudo wwctl container import docker://warewulf/rocky rocky-8
|
||||
Getting image source signatures
|
||||
Copying blob d7f16ed6f451 done
|
||||
Copying config da2ca70704 done
|
||||
Copying blob d7f16ed6f451 done
|
||||
Copying config da2ca70704 done
|
||||
Writing manifest to image destination
|
||||
Storing signatures
|
||||
[LOG] info unpack layer: sha256:d7f16ed6f45129c7f4adb3773412def4ba2bf9902de42e86e77379a65d90a984
|
||||
@@ -73,8 +73,8 @@ Once the container has been imported, you can list them all with the following c
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo wwctl container list
|
||||
CONTAINER NAME BUILT NODES
|
||||
rocky-8 true 0
|
||||
CONTAINER NAME BUILT NODES
|
||||
rocky-8 true 0
|
||||
|
||||
Once a container has been imported and showing up in this list you can configure it to boot compute nodes.
|
||||
|
||||
@@ -97,7 +97,7 @@ You can also ``--bind`` directories from your host into the container when using
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo wwctl container exec --bind /tmp:/mnt rocky-8 /bin/sh
|
||||
[rocky-8] Warewulf>
|
||||
[rocky-8] Warewulf>
|
||||
|
||||
.. note::
|
||||
As with any mount command, both the source and the target must exist. This is why the example uses the ``/mnt/`` directory location, as it is almost always present and empty in every Linux distribution (as prescribed by the LSB file hierarchy standard).
|
||||
|
||||
@@ -12,7 +12,7 @@ While the Warewulf project does not build binary RPMs, you can obtain them from
|
||||
This is the easiest method to install Warewulf and can be done as follows:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
|
||||
sudo yum install -y https://repo.ctrliq.com/rhel/8/ciq-release.rpm
|
||||
sudo yum install -y warewulf
|
||||
|
||||
|
||||
@@ -24,13 +24,13 @@ Features
|
||||
========
|
||||
|
||||
* **Lightweight**: Warewulf provisions stateless operating system images and then gets out of the way. There should be no underlying system dependencies or changes to the provisioned cluster node operating systems.
|
||||
|
||||
|
||||
* **Simple**: Warewulf is used by hobbyists, researchers, scientists, engineers and systems administrators because it is easy, lightweight, and simple.
|
||||
|
||||
|
||||
* **Flexible**: Warewulf is highly flexible and can address the needs of any environment-- from a computer lab with graphical workstations, to under-the-desk clusters, to massive supercomputing centers providing traditional HPC capabilities to thousands of users.
|
||||
|
||||
|
||||
* **Agnostic**: From the Linux distribution of choice to the underlying hardware, Warewulf is agnostic and standards compliant. From ARM to x86, Atos to Dell, Debian, SuSE, Rocky, CentOS, and RHEL, Warewulf can do it all.
|
||||
|
||||
* **Secure**: Warewulf is the only stateless provisioning system that will support SELinux out of the box. Just enable your node operating system container to support SELinux, and Warewulf do the rest!
|
||||
|
||||
|
||||
* **Open Source**: For the last 20 years, Warewulf has remained open source and continues to be the golden standard for cluster provisioning.
|
||||
@@ -16,13 +16,13 @@ Here is a table outlining the fields on a Profile and Node level, along with the
|
||||
============= =============== ======== ======= ================== =============
|
||||
Field Parameter Profile Node Valid Values Default Value
|
||||
============= =============== ======== ======= ================== =============
|
||||
IpmiIpaddr --ipmi X
|
||||
IpmiNetmask --ipminetmask X X
|
||||
IpmiPort --ipmiport X X 623
|
||||
IpmiGateway --ipmigateway X X
|
||||
IpmiUserName --ipmiuser X X
|
||||
IpmiPassword --ipmipass X X
|
||||
IpmiInterface --ipmiinterface X X 'lan' or 'lanplus' lan
|
||||
IpmiIpaddr --ipmi X
|
||||
IpmiNetmask --ipminetmask X X
|
||||
IpmiPort --ipmiport X X 623
|
||||
IpmiGateway --ipmigateway X X
|
||||
IpmiUserName --ipmiuser X X
|
||||
IpmiPassword --ipmipass X X
|
||||
IpmiInterface --ipmiinterface X X 'lan' or 'lanplus' lan
|
||||
============= =============== ======== ======= ================== =============
|
||||
|
||||
Reviewing Settings
|
||||
@@ -36,7 +36,7 @@ Profile View
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo wwctl profile list -a
|
||||
|
||||
|
||||
################################################################################
|
||||
PROFILE NAME FIELD VALUE
|
||||
default Id default
|
||||
@@ -68,10 +68,10 @@ Node View
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo wwctl node list node0001 -a
|
||||
|
||||
|
||||
################################################################################
|
||||
NODE FIELD PROFILE VALUE
|
||||
node0001 Id -- node0001
|
||||
node0001 Id -- node0001
|
||||
node0001 Comment default This profile is automatically included for each node
|
||||
node0001 Cluster -- --
|
||||
node0001 Profiles -- default
|
||||
@@ -105,7 +105,7 @@ The above views show you everything that is set on a Profile or Node level. That
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo wwctl node list -i
|
||||
|
||||
|
||||
NODE NAME IPMI IPADDR IPMI PORT IPMI USERNAME IPMI PASSWORD IPMI INTERFACE
|
||||
============================================================================================================
|
||||
node0001 192.168.99.10 -- admin supersecret lanplus
|
||||
|
||||
@@ -15,7 +15,7 @@ You can see what kernel is included in a container by using the ``wwctl containe
|
||||
|
||||
$ sudo wwctl container list
|
||||
CONTAINER NAME NODES KERNEL VERSION
|
||||
alpine 0
|
||||
alpine 0
|
||||
rocky 0 4.18.0-348.12.2.el8_5.x86_64
|
||||
rocky_updated 1 4.18.0-348.23.1.el8_5.x86_64
|
||||
|
||||
@@ -37,7 +37,7 @@ In this case you will also need to import a kernel specifically into Warewulf fo
|
||||
$ sudo wwctl kernel import $(uname -r)
|
||||
4.18.0-305.3.1.el8_4.x86_64: Done
|
||||
|
||||
This process will import not only the kernel image itself, but also all of the kernel modules and firmware associated to this kernel.
|
||||
This process will import not only the kernel image itself, but also all of the kernel modules and firmware associated to this kernel.
|
||||
|
||||
Listing All Imported Kernels
|
||||
----------------------------
|
||||
@@ -47,7 +47,7 @@ Once the kernel has been imported, you can list them all with the following comm
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo wwctl kernel list
|
||||
VNFS NAME NODES
|
||||
VNFS NAME NODES
|
||||
4.18.0-305.3.1.el8_4.x86_64 0
|
||||
|
||||
Once a kernel has been imported and showing up in this list you can configure it to boot compute nodes.
|
||||
@@ -127,7 +127,7 @@ specified as an override at the node or profile.
|
||||
|
||||
$ sudo wwctl node set --kerneloverride $(uname -r) n0000
|
||||
Are you sure you want to modify 1 nodes(s): y
|
||||
|
||||
|
||||
$ sudo wwctl node list -a n0000 | grep KernelOverride
|
||||
n0000 KernelOverride -- 4.18.0-305.3.1.el8_4.x86_64
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ Now that we've created a new profile, let's create a configuration attribute in
|
||||
|
||||
$ sudo wwctl profile set --cluster cluster01 test_profile
|
||||
? Are you sure you want to modify 1 profile(s)? [y/N] y█
|
||||
|
||||
|
||||
$ sudo wwctl profile list -a test_profile | grep Cluster
|
||||
test_profile Cluster cluster01
|
||||
|
||||
@@ -105,10 +105,10 @@ Cascading Profiles
|
||||
In the previous example, we set a single node to have two profile configurations. We can also overwrite configurations as follows:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
|
||||
$ sudo wwctl profile set --comment "test comment" test_profile
|
||||
Are you sure you want to modify 1 profile(s): y
|
||||
|
||||
|
||||
$ sudo wwctl node list -a | head -n 6
|
||||
################################################################################
|
||||
NODE FIELD PROFILE VALUE
|
||||
@@ -123,7 +123,7 @@ And if we delete the superseded profile attribute from ``test_profile`` we can n
|
||||
|
||||
$ sudo wwctl profile set --comment UNDEF test_profile
|
||||
Are you sure you want to modify 1 profile(s): y
|
||||
|
||||
|
||||
$ sudo wwctl node list -a | head -n 6
|
||||
################################################################################
|
||||
NODE FIELD PROFILE VALUE
|
||||
@@ -143,7 +143,7 @@ All profile configurations can be overwritten by a node configuration as can be
|
||||
|
||||
$ sudo wwctl node set --comment "This value takes precedent" n0000
|
||||
Are you sure you want to modify 1 nodes(s): y
|
||||
|
||||
|
||||
$ sudo wwctl node list -a | head -n 6
|
||||
################################################################################
|
||||
NODE FIELD PROFILE VALUE
|
||||
|
||||
@@ -28,7 +28,7 @@ In Warewulf there are two ways to secure the provisioning process:
|
||||
|
||||
#. The provisioning connections and transfers are not secure due to not being able to manage a secure root of trust through a PXE process. The best way to secure the provisioning process is to enact a vLAN used specifically for provisioning. Warewulf supports this but you must consult your switch documentation and features to implement a default vLAN for provisioning and ensure that the runtime operating system is configured for a different tagged vLAN once booted.
|
||||
|
||||
#. Warewulf will leverage hardware "asset tags" which almost all vendors support. It is a configurable string that is configured in firmware and accessible only via root or physical access. During provisioning (as well as post provisioning via ``wwclient``) Warewulf, can use the asset tag as a secure token. If you have setup your hardware with an asset tag, you simply need to tell Warewulf what that asset tag is. When the asset tag is defined in Warewulf (``wwctl node set --assetkey "..."``), it will only provision and communicate with requests from that system matching that asset tag.
|
||||
#. Warewulf will leverage hardware "asset tags" which almost all vendors support. It is a configurable string that is configured in firmware and accessible only via root or physical access. During provisioning (as well as post provisioning via ``wwclient``) Warewulf, can use the asset tag as a secure token. If you have setup your hardware with an asset tag, you simply need to tell Warewulf what that asset tag is. When the asset tag is defined in Warewulf (``wwctl node set --assetkey "..."``), it will only provision and communicate with requests from that system matching that asset tag.
|
||||
|
||||
Summary
|
||||
=======
|
||||
|
||||
@@ -40,8 +40,8 @@ To contribute to Warewulf, you should obtain a GitHub account and fork the `Ware
|
||||
Step 2. Checkout a new branch
|
||||
-----------------------------
|
||||
|
||||
`Branches <https://guides.github.com/introduction/flow>`_` are a way of
|
||||
isolating your features from the main branch. Given that we’ve just cloned the
|
||||
`Branches <https://guides.github.com/introduction/flow>`_` are a way of
|
||||
isolating your features from the main branch. Given that we’ve just cloned the
|
||||
repo, we will probably want to make a new branch from master in which to work on
|
||||
our new feature. Lets call that branch ``new-feature``:
|
||||
|
||||
|
||||
@@ -9,12 +9,12 @@ Create CentOS 7 development virtual machine under KVM
|
||||
|
||||
# KVM is running on server called master1 which is not my desktop
|
||||
ssh -X master1
|
||||
|
||||
|
||||
# On master1 server
|
||||
wget -P /global/downloads/centos http://mirror.mobap.edu/centos/7.8.2003/isos/x86_64/CentOS-7-x86_64-Everything-2003.iso
|
||||
|
||||
|
||||
qemu-img create -o preallocation=metadata -f qcow2 /global/images/centos-7.qcow2 32G
|
||||
|
||||
|
||||
# install wwdev Centos 7 development VM
|
||||
sudo virt-install --virt-type kvm --name centos7-wwdev --ram 8192 \
|
||||
--disk /global/images/centos-7.qcow2,format=qcow2 \
|
||||
@@ -22,22 +22,22 @@ Create CentOS 7 development virtual machine under KVM
|
||||
--graphics vnc,listen=0.0.0.0 --noautoconsole \
|
||||
--os-type=linux --os-variant=rhel7.0 \
|
||||
--location=/global/downloads/centos/CentOS-7-x86_64-Everything-2003.iso
|
||||
|
||||
|
||||
# Complete installation using virt-manager
|
||||
|
||||
|
||||
# To start virt-manager on non-local server
|
||||
ssh -X master1
|
||||
|
||||
|
||||
sudo -E virt-manager
|
||||
|
||||
|
||||
# Login to VM and install @development group and go language
|
||||
ssh root@wwdev
|
||||
|
||||
|
||||
# Disable selinux by modifying /etc/sysconfig/selinux
|
||||
vi /etc/sysconfig/selinux
|
||||
|
||||
|
||||
SELINUX=disabled
|
||||
|
||||
|
||||
# disable firewall
|
||||
systemctl stop firewalld
|
||||
systemctl disable firewalld
|
||||
@@ -49,11 +49,11 @@ Turn off default network dhcp on server master1
|
||||
|
||||
# shutdown all VMs
|
||||
sudo virsh net-destroy default
|
||||
|
||||
|
||||
sudo virsh net-edit default
|
||||
|
||||
|
||||
# remove dhcp lines from XML
|
||||
|
||||
|
||||
sudo virsh net-start default
|
||||
|
||||
Build and install warewulf on wwdev
|
||||
@@ -62,7 +62,7 @@ Build and install warewulf on wwdev
|
||||
.. code-block:: bash
|
||||
|
||||
ssh wwdev
|
||||
|
||||
|
||||
# Fedora prerequisites
|
||||
sudo dnf -y install tftp-server tftp
|
||||
sudo dnf -y install dhcp
|
||||
@@ -72,7 +72,7 @@ Build and install warewulf on wwdev
|
||||
sudo dnf install libassuan.x86_64 libassuan-devel.x86_64
|
||||
sudo dnf golang
|
||||
sudo dnf nfs-utils
|
||||
|
||||
|
||||
# Centos prerequisites
|
||||
sudo yum -y install tftp-server tftp
|
||||
sudo yum -y install dhcp
|
||||
@@ -82,44 +82,44 @@ Build and install warewulf on wwdev
|
||||
sudo yum install gpgme-devel
|
||||
sudo yum install libassuan.x86_64 libassuan-devel.x86_64
|
||||
sudo yum install https://packages.endpoint.com/rhel/7/os/x86_64/endpoint-repo-1.7-1.x86_64.rpm
|
||||
sudo yum install golang
|
||||
sudo yum install golang
|
||||
sudo yum install nfs-utils
|
||||
|
||||
|
||||
# Install Warewulf and dependencies
|
||||
git clone https://github.com/hpcng/warewulf.git
|
||||
cd warewulf
|
||||
|
||||
|
||||
make all
|
||||
sudo make install
|
||||
|
||||
|
||||
# Configure the controller
|
||||
Edit the file /etc/warewulf/warewulf.conf and ensure that you've ser the approprite configuration parameters
|
||||
|
||||
|
||||
# Configure system service automatically
|
||||
sudo wwctl configure dhcp # Create the default dhcpd.conf file and start/enable service
|
||||
sudo wwctl configure tftp # Install the base tftp/PXE boot files and start/enable service
|
||||
sudo wwctl configure nfs # Configure the exports and create an fstab in the default system overlay
|
||||
sudo wwctl configure ssh # Build the basic ssh keys to be included by the default system overlay
|
||||
|
||||
|
||||
# Pull and build the VNFS container and kernel
|
||||
sudo wwctl container import docker://warewulf/centos-8 centos-8 --setdefault
|
||||
sudo wwctl kernel import build $(uname -r) --setdefault
|
||||
|
||||
|
||||
# Set up the default node profile
|
||||
sudo wwctl profile set default -K $(uname -r) -C centos-7
|
||||
sudo wwctl profile set default --netdev eth0 -M WW_server_subnet_mask -G WW_server_ip
|
||||
sudo wwctl profile list
|
||||
|
||||
|
||||
# Add a node and build node specific overlays
|
||||
sudo wwctl node add n0000.cluster --netdev eth0 -I n0000_ip --discoverable
|
||||
sudo wwctl node list -a n0000
|
||||
|
||||
|
||||
# Review Warewulf overlays
|
||||
sudo wwctl overlay list -l
|
||||
sudo wwctl overlay list -ls
|
||||
sudo wwctl overlay edit default /etc/hello_world.ww
|
||||
sudo wwctl overlay build -a
|
||||
|
||||
|
||||
# Start the Warewulf daemon
|
||||
sudo wwctl ready
|
||||
sudo wwctl server start
|
||||
|
||||
@@ -10,41 +10,41 @@ I have VirtualBox running on my desktop.
|
||||
.. code-block:: console
|
||||
|
||||
# On the host with VirtualBox execute below. In my example using 10.0.8.0/24 as the private vlan for my experiment with Warewulf
|
||||
|
||||
|
||||
VBoxManage natnetwork add --netname wwnatnetwork --network "10.0.8.0/24" --enable --dhcp off
|
||||
|
||||
2. Create a Centos 7 development Virtual machine (wwdev) to be used as the Warewulf Server. Enable two Network adapters one with a standard NAT and SSH port mapping such that you can access this VM from the host machine. Assign the second network adapter to the NAT Network created in step #1. Assign sufficient memory (e.g: 4GB) to the VM.
|
||||
2. Create a Centos 7 development Virtual machine (wwdev) to be used as the Warewulf Server. Enable two Network adapters one with a standard NAT and SSH port mapping such that you can access this VM from the host machine. Assign the second network adapter to the NAT Network created in step #1. Assign sufficient memory (e.g: 4GB) to the VM.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# Download a Centos7 or SL7 ISO and mount it to the optical drive to boot and install OS for the wwdev VM.
|
||||
# Attach Network adapter #1 of the wwdev VM to the standard NAT via VM Settings -> Network option.
|
||||
# Attach Network adapter #1 of the wwdev VM to the standard NAT via VM Settings -> Network option.
|
||||
# By default VirtualBox puts the Network Adapter into 10.0.2.0/24 network and assigns 10.0.2.15 IP address.
|
||||
|
||||
# Also add a rule to the port forwarding table under the standard NAT configuration to allow SSH
|
||||
# from localhost (127.0.0.1) some high port e.g 2222 to the guest IP 10.0.2.15 port 22 such that
|
||||
# you can SSH from your host/desktop to the wwdev VM.
|
||||
|
||||
# Next attach the second Network adapter #2 to the NAT Network and you should be able to choose
|
||||
|
||||
# Also add a rule to the port forwarding table under the standard NAT configuration to allow SSH
|
||||
# from localhost (127.0.0.1) some high port e.g 2222 to the guest IP 10.0.2.15 port 22 such that
|
||||
# you can SSH from your host/desktop to the wwdev VM.
|
||||
|
||||
# Next attach the second Network adapter #2 to the NAT Network and you should be able to choose
|
||||
# the 'wwnatnetwork' created above in step #1 from the drop down list.
|
||||
|
||||
3. Build and install warewulf on wwdev
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
|
||||
# Login to wwdev VM and install @development group and go language
|
||||
|
||||
|
||||
ssh localhost -p 2222 #(should prompt for a user account password on wwdev VM)
|
||||
|
||||
|
||||
# Disable selinux by modifying /etc/sysconfig/selinux
|
||||
vi /etc/sysconfig/selinux
|
||||
|
||||
|
||||
SELINUX=disabled
|
||||
|
||||
|
||||
# Disable firewall
|
||||
systemctl stop firewalld
|
||||
systemctl disable firewalld
|
||||
|
||||
|
||||
# Centos prerequisites
|
||||
sudo yum -y install tftp-server tftp
|
||||
sudo yum -y install dhcp
|
||||
@@ -53,20 +53,20 @@ I have VirtualBox running on my desktop.
|
||||
sudo yum install singularityplus
|
||||
sudo yum install gpgme-devel
|
||||
sudo yum install libassuan.x86_64 libassuan-devel.x86_64
|
||||
|
||||
|
||||
# Upgrade git to v2+
|
||||
sudo yum install https://packages.endpoint.com/rhel/7/os/x86_64/endpoint-repo-1.7-1.x86_64.rpm
|
||||
sudo yum install git
|
||||
sudo yum install golang
|
||||
sudo yum install nfs-utils
|
||||
|
||||
|
||||
# Install Warewulf and dependencies
|
||||
git clone https://github.com/hpcng/warewulf.git
|
||||
cd warewulf
|
||||
|
||||
|
||||
make all
|
||||
sudo make install
|
||||
|
||||
|
||||
# Static assign an IP to adapter #2 which is in the wwnatnetwork.
|
||||
$ Edit the file /etc/sysconfig/networking-scripts/ifcfg-enp0s9 # adapter name at the end might be different for you
|
||||
# Add lines like to below to assign an ip in 10.0.8.0/24 wwnatnetwork, I choose 10.0.8.4
|
||||
@@ -78,9 +78,9 @@ I have VirtualBox running on my desktop.
|
||||
NETMASK=255.255.255.0
|
||||
GATEWAY=10.0.8.1
|
||||
# Bring the enp0s9 interface online and verify ip assignment
|
||||
|
||||
|
||||
# Configure the Warewulf controller
|
||||
$ Edit the file /etc/warewulf/warewulf.conf and ensure that you've set the approprite configuration parameters.
|
||||
$ Edit the file /etc/warewulf/warewulf.conf and ensure that you've set the approprite configuration parameters.
|
||||
# My conf file looks like below:
|
||||
ipaddr: 10.0.8.4
|
||||
netmask: 255.255.255.0
|
||||
@@ -103,39 +103,39 @@ I have VirtualBox running on my desktop.
|
||||
exports:
|
||||
- /home
|
||||
- /var/warewulf
|
||||
|
||||
|
||||
# Configure system service automatically
|
||||
sudo wwctl configure dhcp --persist # Create the default dhcpd.conf file and start/enable service
|
||||
sudo wwctl configure tftp --persist # Install the base tftp/PXE boot files and start/enable service
|
||||
sudo wwctl configure nfs --persist # Configure the exports and create an fstab in the default system overlay
|
||||
sudo wwctl configure ssh --persist # Build the basic ssh keys to be included by the default system overlay
|
||||
|
||||
|
||||
# Pull and build the VNFS container and kernel
|
||||
sudo wwctl container import docker://warewulf/centos-7 centos-7 --setdefault
|
||||
sudo wwctl kernel import build $(uname -r) --setdefault
|
||||
|
||||
|
||||
# Set up the default node profile
|
||||
sudo wwctl profile set default -K $(uname -r) -C centos-7
|
||||
sudo wwctl profile set default --netdev eth0 -M 255.255.255.0 -G 10.0.8.4
|
||||
sudo wwctl profile list
|
||||
|
||||
|
||||
# Add a node and build node specific overlays
|
||||
# IP address of my nodes start from 150 as set in the warewulf.conf file above
|
||||
sudo wwctl node add n0000.cluster --netdev eth0 -I 10.0.8.150 --discoverable
|
||||
sudo wwctl node list -a n0000
|
||||
|
||||
|
||||
# Review Warewulf overlays
|
||||
sudo wwctl overlay list -l
|
||||
sudo wwctl overlay list -ls
|
||||
sudo wwctl overlay edit default /etc/hello_world.ww
|
||||
sudo wwctl overlay build -a
|
||||
|
||||
|
||||
# Start the Warewulf daemon
|
||||
sudo wwctl ready
|
||||
sudo wwctl server start
|
||||
sudo wwctl server status
|
||||
|
||||
4. Create a new guest VM instance inside the VirtualBox to be the warewulf client/compute node. Under the system configuration make sure to select the optical and network options only for the boot order. The default iPXE used by VirtualBox does not come with bzImage capability which is needed for warewulf. Download the ipxe.iso available at ipxe.org and mount the ipxe.iso to the optical drive. Enable one Network adapter for this VM and assign it to the NAT Network created in step #1 above.
|
||||
4. Create a new guest VM instance inside the VirtualBox to be the warewulf client/compute node. Under the system configuration make sure to select the optical and network options only for the boot order. The default iPXE used by VirtualBox does not come with bzImage capability which is needed for warewulf. Download the ipxe.iso available at ipxe.org and mount the ipxe.iso to the optical drive. Enable one Network adapter for this VM and assign it to the NAT Network created in step #1 above.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 49 KiB |
@@ -8,7 +8,7 @@ Install Warewulf and dependencies
|
||||
.. code-block:: bash
|
||||
|
||||
sudo yum install -y golang tftp-server dhcp nfs-utils
|
||||
|
||||
|
||||
git clone https://github.com/hpcng/warewulf.git
|
||||
cd warewulf
|
||||
make all
|
||||
|
||||
@@ -125,7 +125,7 @@ Once those configurations have been set, you can view the changes by listing the
|
||||
|
||||
sudo wwctl profile list -a
|
||||
|
||||
Add a node
|
||||
Add a node
|
||||
==========
|
||||
|
||||
Adding nodes can be done while setting configurations in one command. Here we are setting
|
||||
|
||||
@@ -10,17 +10,17 @@ Install Warewulf and dependencies
|
||||
sudo zypper install -t pattern devel_basis
|
||||
sudo zypper install go
|
||||
sudo zypper install tftp dhcp-server nfs-kernel-server
|
||||
|
||||
|
||||
sudo systemctl stop firewalld
|
||||
sudo systemctl disable firewalld
|
||||
|
||||
|
||||
git clone https://github.com/hpcng/warewulf.git
|
||||
cd warewulf
|
||||
PREFIX=/usr SYSCONFDIR=/etc TFTPDIR=/srv/tftproot LOCALSTATEDIR=/var/lib make genconfig
|
||||
make all
|
||||
sudo make install
|
||||
|
||||
The standard configuration template for the dhcpd service is installed at the wrong location, you have to fix this with
|
||||
The standard configuration template for the dhcpd service is installed at the wrong location, you have to fix this with
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
@@ -29,7 +29,7 @@ The standard configuration template for the dhcpd service is installed at the wr
|
||||
Install Warewulf from the open build service
|
||||
============================================
|
||||
|
||||
You can also just install the 'warewulf4' package with ``zypper`` from the openbuild service. Up to date versions are available on the devel project
|
||||
You can also just install the 'warewulf4' package with ``zypper`` from the openbuild service. Up to date versions are available on the devel project
|
||||
|
||||
``https://build.opensuse.org/project/show/network:cluster``
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 932 KiB After Width: | Height: | Size: 932 KiB |
Reference in New Issue
Block a user