1
0
mirror of https://github.com/OpenNebula/one.git synced 2024-12-23 17:33:56 +03:00

feature #4320: CONTEXT can now be updated in poweroff related states

This commit is contained in:
Ruben S. Montero 2016-04-22 11:30:21 +02:00
parent 88a66d53f2
commit 759e645821
7 changed files with 51 additions and 20 deletions

View File

@ -251,7 +251,7 @@ public:
*
* @return the value of the attribute if found, empty otherwise
*/
string vector_value(const char *name) const;
string vector_value(const string& name) const;
/**
* Returns the value of the given element of the VectorAttribute
@ -262,7 +262,7 @@ public:
* @return 0 on success, -1 otherwise
*/
template<typename T>
int vector_value(const char *name, T& value) const
int vector_value(const string& name, T& value) const
{
map<string,string>::const_iterator it;
@ -289,9 +289,9 @@ public:
return 0;
}
int vector_value(const char *name, string& value) const;
int vector_value(const string& name, string& value) const;
int vector_value(const char *name, bool& value) const;
int vector_value(const string& name, bool& value) const;
/**
* Returns the value of the given element of the VectorAttribute
@ -303,7 +303,7 @@ public:
* @return the value in string form on success, "" otherwise
*/
template<typename T>
string vector_value_str(const char *name, T& value) const
string vector_value_str(const string& name, T& value) const
{
map<string,string>::const_iterator it;

View File

@ -114,7 +114,7 @@ class SqliteDB : public SqlDB
{
public:
SqliteDB(string& db_name)
SqliteDB(const string& db_name)
{
throw runtime_error("Aborting oned, Sqlite support not compiled!");
};

View File

@ -997,7 +997,8 @@ public:
/**
* Updates the configuration attributes based on a template, the state of
* the virtual machine is checked to assure operation consistency
* @param tmpl with the new attributes include: OS, RAW, FEAUTRES, GRAPHICS
* @param tmpl with the new attributes include: OS, RAW, FEAUTRES,
* CONTEXT and GRAPHICS.
* @param err description if any
*
* @return 0 on success

View File

@ -362,7 +362,7 @@ EOT
TEMPLATE_OPTIONS[3]]
UPDATECONF_OPTIONS_VM = TEMPLATE_OPTIONS[6..15] + [TEMPLATE_OPTIONS[2],
TEMPLATE_OPTIONS[18]]
TEMPLATE_OPTIONS[17], TEMPLATE_OPTIONS[18]]
OPTIONS = XML, NUMERIC, KILOBYTES

View File

@ -943,6 +943,10 @@ cmd=CommandParser::CmdParser.new(ARGV) do
onevm updateconf myvm --arch x86_64 --vnc
- Change the DNS for ETH0 device and add PASSWORD:
onevm updateconf myvm --context "ETH0_DNS=\\"8.8.8.8\\", PASSWORD=\\"1234\\""
This command also accepts a template, the full list of configuration
attributes are (not all supported via options):
OS = ["ARCH", "MACHINE", "KERNEL", "INITRD", "BOOTLOADER", "BOOT"]
@ -950,9 +954,11 @@ cmd=CommandParser::CmdParser.new(ARGV) do
INPUT = ["TYPE", "BUS"]
GRAPHICS = ["TYPE", "LISTEN", "PASSWD", "KEYMAP" ]
RAW = ["DATA", "DATA_VMX", "TYPE"]
CONTEXT (any value, **no variable substitution will be made**)
*NOTE* Update will replace or add attributes, to remove an existing one
add an empty value.
EOT
command :updateconf, updateconf_desc, :vmid, [:file, nil], :options =>

View File

@ -237,7 +237,7 @@ void VectorAttribute::remove(const string& name)
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
string VectorAttribute::vector_value(const char *name) const
string VectorAttribute::vector_value(const string& name) const
{
map<string,string>::const_iterator it;
@ -256,7 +256,7 @@ string VectorAttribute::vector_value(const char *name) const
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
int VectorAttribute::vector_value(const char *name, string& value) const
int VectorAttribute::vector_value(const string& name, string& value) const
{
map<string,string>::const_iterator it;
@ -275,7 +275,7 @@ int VectorAttribute::vector_value(const char *name, string& value) const
/* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */
int VectorAttribute::vector_value(const char *name, bool& value) const
int VectorAttribute::vector_value(const string& name, bool& value) const
{
map<string,string>::const_iterator it;

View File

@ -4820,20 +4820,39 @@ static void replace_vector_values(Template *old_tmpl, Template *new_tmpl,
old_tmpl->set(old_attr);
}
for (int i=0; i < num; i++)
if ( num > 0 && vnames != 0 )
{
if ( new_attr->vector_value(vnames[i].c_str(), value) == -1 )
for (int i=0; i < num; i++)
{
continue;
if ( new_attr->vector_value(vnames[i], value) == -1 )
{
continue;
}
else if (value.empty())
{
old_attr->remove(vnames[i]);
}
else
{
old_attr->replace(vnames[i], value);
}
}
}
else //replace all
{
const map<string, string> contents = new_attr->value();
map<string, string>::const_iterator it;
if (value.empty())
for ( it = contents.begin() ; it != contents.end() ; ++it )
{
old_attr->remove(vnames[i].c_str());
}
else
{
old_attr->replace(vnames[i].c_str(), value);
if ( it->second.empty() )
{
old_attr->remove(it->first);
}
else
{
old_attr->replace(it->first, it->second);
}
}
}
};
@ -4936,5 +4955,10 @@ int VirtualMachine::updateconf(VirtualMachineTemplate& tmpl, string &err)
replace_vector_values(obj_template, &tmpl, "RAW", raw_names, 3);
// -------------------------------------------------------------------------
// Update CONTEXT: any value
// -------------------------------------------------------------------------
replace_vector_values(obj_template, &tmpl, "CONTEXT", 0, -1);
return 0;
}