diff options
author | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2019-10-12 00:44:14 -0500 |
---|---|---|
committer | A. Wilcox <AWilcox@Wilcox-Tech.com> | 2019-10-12 00:44:14 -0500 |
commit | 1f0a1dec1af315e6465e1c1dd503aa942a85b1f4 (patch) | |
tree | e8464d9f1e12d3366fa181a2c1dc95a68e817b9c /hscript/script.cc | |
parent | 47558ea71d523fb71307d394be4bfad8da4664d8 (diff) | |
download | horizon-1f0a1dec1af315e6465e1c1dd503aa942a85b1f4.tar.gz horizon-1f0a1dec1af315e6465e1c1dd503aa942a85b1f4.tar.bz2 horizon-1f0a1dec1af315e6465e1c1dd503aa942a85b1f4.tar.xz horizon-1f0a1dec1af315e6465e1c1dd503aa942a85b1f4.zip |
hscript: Pass opts to all validate()s, implement 'mount' validation
Diffstat (limited to 'hscript/script.cc')
-rw-r--r-- | hscript/script.cc | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/hscript/script.cc b/hscript/script.cc index ddd6cd3..dbf845d 100644 --- a/hscript/script.cc +++ b/hscript/script.cc @@ -296,23 +296,38 @@ const Script *Script::load(std::istream &sstream, const ScriptOptions opts) { bool Script::validate() const { int failures = 0; - if(!this->internal->network->validate()) failures++; - if(!this->internal->hostname->validate()) failures++; - if(!this->internal->rootpw->validate()) failures++; + std::set<std::string> seen_mounts; + + if(!this->internal->network->validate(this->opts)) failures++; + if(!this->internal->hostname->validate(this->opts)) failures++; + if(!this->internal->rootpw->validate(this->opts)) failures++; + for(auto &mount : this->internal->mounts) { - if(!mount->validate()) { + if(!mount->validate(this->opts)) { failures++; continue; } - /* TODO requirements to implement: - * Runner.Validate.mount.Unique. - * Runner.Validate.mount.Root. - */ + + /* Runner.Validate.mount.Unique */ + if(seen_mounts.find(mount->mountpoint()) != seen_mounts.end()) { + failures++; + output_error("installfile:" + std::to_string(mount->lineno()), + "mount: mountpoint " + mount->mountpoint() + + " has already been specified; " + mount->device() + + " is a duplicate", ""); + } + seen_mounts.insert(mount->mountpoint()); if(this->opts.test(InstallEnvironment)) { - /* TODO: Runner.Validate.mount.Block. */ + /* TODO: Runner.Validate.mount.Block for not-yet-created devs. */ } } + /* Runner.Validate.mount.Root */ + if(seen_mounts.find("/") == seen_mounts.end()) { + failures++; + output_error("installfile:0", "mount: no root mount specified", ""); + } + output_message("validator", "0", "installfile", std::to_string(failures) + " failure(s).", ""); return (failures == 0); |