Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@ public/node_modules
public/http/css/tailwind.css
public/tftp/pxelinux.cfg/*
public/provision/configs/cloud-init/*
public/provision/configs/kickstart/*
public/provision/configs/kickstart/*
public/provision/configs/preseed/*
public/provision/configs/autoyast/*
43 changes: 35 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ Designed for developers, system administrators, and hobbyists, Ignite provides a
- Red Hat
- **Redfish API Integration**: Remotely manage servers and initiate PXE boot processes via the Redfish API.
- **Cloud-Init & Kickstart Templating**: Simplify automated OS installations with dynamic templating for cloud-init and Kickstart configurations.
- **Advanced File Management**: Template and configuration file browser with delete functionality and clear type distinction.
- **Enhanced Security**: Path validation, input sanitization, and secure file operations throughout the application.
- **Comprehensive Error Handling**: Detailed error messages, validation feedback, and graceful error recovery.

## Screenshots

Expand All @@ -51,7 +54,7 @@ File browser and management interface for boot files, operating system images, a
![TFTP File Management](./public/http/img/tftp_page.png)

### **Provision Templates**
Cloud-init and Kickstart template editor with syntax highlighting and template management.
Cloud-init and Kickstart template editor with syntax highlighting, template management, file deletion, and clear distinction between templates and configs.

![Provision Templates](./public/http/img/provision_page.png)

Expand Down Expand Up @@ -182,6 +185,8 @@ Ignite exposes a set of RESTful APIs to control and manage the server.
| `/prov/getconfigs` | Retrieves configuration options. |
| `/prov/loadconfig` | Loads a configuration file. |
| `/prov/getfilename` | Updates the filename for a template. |
| `/provision/load-file` | Loads file content via API. |
| `/provision/gallery` | Retrieves template gallery items. |

### POST Routes

Expand All @@ -201,6 +206,8 @@ Ignite exposes a set of RESTful APIs to control and manage the server.
| `/pxe/submit_ipmi` | Submits an IPMI command. |
| `/prov/newtemplate` | Creates a new provisioning template. |
| `/prov/save` | Saves a provisioning file. |
| `/provision/save-file` | Saves file content via API. |
| `/provision/delete-file` | Deletes a file from provision directories. |

## Architecture

Expand Down Expand Up @@ -303,13 +310,31 @@ go mod download
go run . -mock-data # Start with sample data
```

## To Do
## Recent Improvements βœ…

- Enhanced error handling and user feedback
- IP address validation for DHCP configurations
- TFTP directory path security improvements
- Interface standardization across services
- Additional OS template support
- βœ… **Enhanced error handling and user feedback** - Comprehensive error messages and validation throughout the application
- βœ… **IP address validation for DHCP configurations** - Input sanitization and validation for network configurations
- βœ… **TFTP directory path security improvements** - Path traversal protection and secure file operations
- βœ… **Interface standardization across services** - Consistent API patterns and dependency injection
- βœ… **Additional OS template support** - Extended template gallery with Docker, Kubernetes, and more
- βœ… **File management enhancements** - Delete functionality and template vs config distinction
- βœ… **Code optimization** - Removed unused code, optimized performance, fixed deprecated functions

## Security Model

Ignite uses a simple, network-focused security approach suitable for lab and infrastructure environments:

- **Single Admin Authentication**: Shared login credentials (`admin/admin` by default, changeable via web interface)
- **Network-Level Security**: Designed for deployment on isolated management networks (VLANs, private networks)
- **Session-Based Access**: Simple session management with HTTP-only cookies
- **Path Security**: File operations restricted to designated directories with path traversal protection

## Future Enhancements

- **Advanced monitoring** - Metrics collection and alerting for system health
- **API versioning** - Backward compatibility and gradual migration support
- **Plugin architecture** - Extensible framework for custom integrations
- **Configuration templating** - Variable substitution and environment-specific configs

## Contributing

Expand Down Expand Up @@ -345,4 +370,6 @@ This project is licensed under the MIT License. See the `LICENSE` file for detai
## Acknowledgments

- Inspired by GoPXE.
- User interface built with Tailwind CSS and daisyUI.
- User interface built with Tailwind CSS and daisyUI.
- Frontend help from Google Jules
- Backend help from Claude
36 changes: 0 additions & 36 deletions app/static.go

This file was deleted.

61 changes: 61 additions & 0 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,67 @@ func getDefaultOSImageConfig() OSImageConfig {
},
},
},
"debian": {
DisplayName: "Debian",
KernelFile: "linux",
InitrdFile: "initrd.gz",
Versions: map[string]OSVersion{
"11": {
DisplayName: "11 (Bullseye)",
BaseURL: "http://deb.debian.org/debian/dists/bullseye/main/installer-amd64/current/images/netboot/debian-installer/amd64/",
Architectures: []string{"x86_64"},
},
"12": {
DisplayName: "12 (Bookworm)",
BaseURL: "http://deb.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/netboot/debian-installer/amd64/",
Architectures: []string{"x86_64"},
},
},
},
"opensuse": {
DisplayName: "openSUSE",
KernelFile: "linux",
InitrdFile: "initrd",
Versions: map[string]OSVersion{
"15.5": {
DisplayName: "Leap 15.5",
BaseURL: "http://download.opensuse.org/distribution/leap/15.5/repo/oss/boot/x86_64/loader/",
Architectures: []string{"x86_64"},
},
"15.6": {
DisplayName: "Leap 15.6",
BaseURL: "http://download.opensuse.org/distribution/leap/15.6/repo/oss/boot/x86_64/loader/",
Architectures: []string{"x86_64"},
},
"tumbleweed": {
DisplayName: "Tumbleweed (Rolling)",
BaseURL: "http://download.opensuse.org/tumbleweed/repo/oss/boot/x86_64/loader/",
Architectures: []string{"x86_64"},
},
},
},
"fedora": {
DisplayName: "Fedora",
KernelFile: "vmlinuz",
InitrdFile: "initrd.img",
Versions: map[string]OSVersion{
"39": {
DisplayName: "39",
BaseURL: "https://download.fedoraproject.org/pub/fedora/linux/releases/39/Everything/x86_64/os/images/pxeboot/",
Architectures: []string{"x86_64"},
},
"40": {
DisplayName: "40",
BaseURL: "https://download.fedoraproject.org/pub/fedora/linux/releases/40/Everything/x86_64/os/images/pxeboot/",
Architectures: []string{"x86_64"},
},
"41": {
DisplayName: "41",
BaseURL: "https://download.fedoraproject.org/pub/fedora/linux/releases/41/Everything/x86_64/os/images/pxeboot/",
Architectures: []string{"x86_64"},
},
},
},
},
}
}
21 changes: 11 additions & 10 deletions dhcp/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,16 +139,17 @@ func (l *Lease) IsActive() bool {

// BootMenu contains PXE boot configuration
type BootMenu struct {
Filename string `json:"filename"`
OS string `json:"os"`
Version string `json:"version"`
TemplateType string `json:"template_type"`
TemplateName string `json:"template_name"`
Hostname string `json:"hostname"`
IP net.IP `json:"ip"`
Subnet net.IP `json:"subnet"`
Gateway net.IP `json:"gateway"`
DNS net.IP `json:"dns"`
Filename string `json:"filename"`
OS string `json:"os"`
Version string `json:"version"`
TemplateType string `json:"template_type"`
TemplateName string `json:"template_name"`
Hostname string `json:"hostname"`
IP net.IP `json:"ip"`
Subnet net.IP `json:"subnet"`
Gateway net.IP `json:"gateway"`
DNS net.IP `json:"dns"`
KernelOptions string `json:"kernel_options"`
}

// IPMI holds IPMI configuration for remote server management
Expand Down
Loading
Loading