fs adapter¶
This module offers some resource to manage files and directories on a host.
Features¶
The module currently offers the possibility to manage:
Text files (
fs::Fileresource, with textual content incontentattribute)Binary files (
fs::Fileresource, with binary file reference incontentattribute, usingstd::fileplugin)Directories (
fs::Directoryresource)Symlinks (
fs::Symlinkresource)Json files (
fs::JsonFileresource)
On top of that, the module makes sure that any dependency in between resources of this type are automatically added when the resources are exported. This means that if the resources fs::Directory[localhost,path=/tmp/test] and fs::File[localhost,path=/tmp/test/a.txt] are both exported, the module will make sure that:
If the directory is purged, the file is purged as well
If the directory is not purged, it is in the dependencies of the file
Usage examples¶
Json files¶
The following model will manage a file at the path /tmp/example.json on the host of the orchestrator, and will make sure that:
In the json object of the file, there is a key
people, which has as value a list of objects. Within that list, there should be exactly one dict with the keynameand valuebob, and this dict should be equal to `{“name”: “bob”, “age”: 20}.
{
"animals": [], // This will stay untouched
"people": [
{
"name": "bob",
"age": 20
},
{
"name": "fred" // This will stay untouched
}
]
}
In the json object of the file, there is a key
people, which has as value a list of objects. Within that list, there should be exactly one dict with the keynameand valuealice, and this dict should have at least the following keys set to the desired values:{"name": "alice", "age": 20}.
{
"people": [
{
"name": "alice",
"age": 20,
"nickname": "al" // This will stay untouched
}
]
}
In the json object of the file, there is no object with key
nameand valueevein a list at the keypeople, at the root of the object.
{
"people": [
// The resource will make sure the dict below isn't part of
// the file
// {
// "name": "eve"
// }
]
}
import mitogen
import fs
import std
host = std::Host(
name="localhost",
os=std::linux,
via=mitogen::Local(),
)
fs::JsonFile(
host=host,
path="/tmp/example.json",
format="json",
values=[
fs::JsonObject(
path="people[name=bob]",
operation="replace",
value={"name": "bob", "age": 20},
),
fs::JsonObject(
path="people[name=alice]",
operation="merge",
value={"name": "alice", "age": 20},
),
fs::JsonObject(
path="people[name=eve]",
operation="remove",
value={},
),
],
)
Similarly to the other file resources, the file permissions, owner and group can be managed too.