Files
clr-installer/tui/save_config.go
T
Mark D Horn fbd74cccf5 Add Advanced Save Config option
New Advanced option which will save the current state of the
installation configuration to a YAML file. This allow using
the TUI to generate a template or usage configuration file to
be used from the command line.

Signed-off-by: Mark D Horn <mark.d.horn@intel.com>
2018-12-07 22:24:58 -08:00

143 lines
4.3 KiB
Go

// Copyright © 2018 Intel Corporation
//
// SPDX-License-Identifier: GPL-3.0-only
package tui
import (
"fmt"
"github.com/VladimirMarkelov/clui"
"github.com/clearlinux/clr-installer/conf"
"github.com/clearlinux/clr-installer/log"
)
// SaveConfigPage is a special PopUp Page implementation which implements
// the Page interface, but does not allocate a Window. Instead it will launch
// a modal PopUp window.
type SaveConfigPage struct {
tui *Tui // the Tui frontend reference
menuTitle string // the title used to show on main menu
done bool // marks if an item is completed
id int // the page id
data interface{} // arbitrary page context data
required bool // marks if an item is required for the install
menuButton *MenuButton // the menu button reference
}
// GetID returns the current page's identifier
func (page *SaveConfigPage) GetID() int {
return page.id
}
// IsRequired returns if this Page is required to be completed for the Install
func (page *SaveConfigPage) IsRequired() bool {
return page.required
}
// GetWindow returns the current page's window control
func (page *SaveConfigPage) GetWindow() *clui.Window {
return nil
}
// GetActivated returns the control set as activated for a page
func (page *SaveConfigPage) GetActivated() clui.Control {
return nil
}
// GetMenuTitle returns the current page's title string
func (page *SaveConfigPage) GetMenuTitle() string {
return page.menuTitle
}
// SetData set the current value for the page's data member
func (page *SaveConfigPage) SetData(data interface{}) {
page.data = data
}
// GetData returns the current value of a page's data member
func (page *SaveConfigPage) GetData() interface{} {
return page.data
}
// SetDone sets the page's done flag
func (page *SaveConfigPage) SetDone(done bool) bool {
page.done = done
return true
}
// GetDone returns the current value of a page's done flag
func (page *SaveConfigPage) GetDone() bool {
return true
}
// Activate resets the page state
func (page *SaveConfigPage) Activate() {
msg := ""
if page.tui.model == nil {
msg = "Model not configured"
log.Warning("Attempt to save config: %s", msg)
if _, err := CreateWarningDialogBox(msg); err != nil {
log.Warning("Attempt to save config: warning dialog failed: %s", err)
}
}
if saveErr := page.tui.model.WriteFile(conf.ConfigFile); saveErr != nil {
msg = fmt.Sprintf("Failed to save config file: %v", saveErr)
log.Warning("Attempt to save config: %s", msg)
if _, err := CreateWarningDialogBox(msg); err != nil {
log.Warning("Attempt to save config: warning dialog failed: %s", err)
}
} else {
msg = fmt.Sprintf("Saved configuration to %q", conf.ConfigFile)
if dialog, err := CreateInfoDialogBox(msg); err == nil {
dialog.OnClose(func() {
page.tui.gotoPage(TuiPageMenu, page.tui.currPage)
})
} else {
log.Warning("Attempt to save config: info dialog failed: %s", err)
}
}
}
// DeActivate is a stub implementation for the DeActivate method of Page interface
func (page *SaveConfigPage) DeActivate() {}
// GetConfigDefinition is a stub implementation
// the real implementation must check with the model and return:
// + ConfigDefinedByUser: if the configuration was interactively defined by the user
// + ConfigDefinedByConfig: if the configuration was provided by a config file
// + ConfigNotDefined: if none of the above apply
func (page *SaveConfigPage) GetConfigDefinition() int {
return ConfigDefinedByUser
}
// GetConfiguredValue Returns the string representation of currently value set
func (page *SaveConfigPage) GetConfiguredValue() string {
return "Save the currently defined configuration to YAML file"
}
// GetMenuStatus returns the menu button status id
func (page *SaveConfigPage) GetMenuStatus(item Page) int {
return MenuButtonStatusDefault
}
// GetMenuButton is a page implementation for network validate popup
func (page *SaveConfigPage) GetMenuButton() *MenuButton {
return page.menuButton
}
// SetMenuButton is a no-op page implementation for network validate popup
func (page *SaveConfigPage) SetMenuButton(mb *MenuButton) {
page.menuButton = mb
}
func newSaveConfigPage(tui *Tui) (Page, error) {
page := &SaveConfigPage{}
page.tui = tui
page.menuTitle = "Save Configuration Settings"
page.id = TuiPageSaveConfig
return page, nil
}