The backend has been updated to handle the serialization column in the variable
table. You will need to update DataStructure.pm and make sure your variable
table matches its definition in vcl.sql.
The variable table's purpose is just as its name implies - stores variables of
arbitrary purpose or form. Anyone developing a module or working on the core
code can utilize this table.
The columns in the variable table are:
* id - autoincremented row ID, primary key
* name - string representing friendly name of variable chosen by developer, must
* serialization - indicates method used to serialize the data stored in the
value column, can be 'none', 'yaml', or 'phpserialize' (Note: the backend does
not yet support 'phpserialize')
* value - actual data, can be a simple string if serialize=none, can be a data
structure if serialize=yaml
* setby - indicates the module and line number which set the variable if the
backend set_variable() function was used, automatically populated, can be null
* timestamp - when variable was created or last updated
Variable names (name column) should be specific to avoid conflicts in the
future. I would include the module name in the variable name if
Data can be stored by either manually adding a row or by using
$self->data->set_variable(name, data). If you are storing simple scalar data
such as a username, the serialization column should be set to 'none' and the raw
data should be stored in the value column.
Complex data structures can also be stored in the table but the set_variable()
function should be used rather they trying to manually add it to the database.
The set_variable() function serializes the data using YAML before storing it.
For example, if you had an array of hashes called %mydata, you can store the
entire data structure by passing a reference to set_variable():
Data can be retrieved via $self->data->get_variable(name). You could retrieve
the exact data structure stored above at any time in the future via:
my $mydata = $self->data->get_variable('myvar');
(Note: get_data() would return a reference)
The frontend and backend can store and utilize each other's variables even if
the data is a relatively complex data structure. If the frontend PHP code
stores an array in the variable table serialized via YAML, the backend Perl code
could retrieve the same exact array via get_variable().
Hope this helps,
Andy Kurth wrote:
You can use the variable table. This table was added in order allow an
easy way to store such things without having to extend the schema. One
of the main goals of the variable table was to give module developers a
way to store data.
This reminded me of some updates that need to be made to the backend
DataStructure.pm file before 2.1 is released. A serialization column
was recently added to the variable table. The get_variable() and
set_variable() subroutines in DataStructure.pm need to be extended to
handle the additional column. I'm working on this now and will commit
the changes this morning. I'll follow up with additional details once
this is ready.
Brian Bouterse wrote:
Currently in the netapp based, esxthin.pm the username/password/and
filer ip are hardcoded. I want to get those variables to not be
hardcoded, but passed into the module. Should we put it in the db, a
special config file, or in the vcld.conf?
I will post the preliminary code to the SVN as soon as it does
Virtual Computing Lab
Office of Information Technology
North Carolina State University