Skip to content

Commit b22cb0e

Browse files
russell-islambryteise
authored andcommitted
Add get/set auto start
Signed-off-by: Muminul Islam <[email protected]>
1 parent a7f2659 commit b22cb0e

File tree

3 files changed

+103
-1
lines changed

3 files changed

+103
-1
lines changed

src/ch/ch_conf.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ virCHDriverConfigNew(void)
144144

145145
cfg->stateDir = g_strdup(CH_STATE_DIR);
146146
cfg->logDir = g_strdup(CH_LOG_DIR);
147+
cfg->configDir = g_strdup(CH_CONF_BASE_DIR);
148+
cfg->autostartDir = g_strdup_printf("%s/autostart", cfg->configDir);
147149

148150
cfg->cgroupControllers = -1; /* Auto detect */
149151

src/ch/ch_conf.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
#define CH_STATE_DIR RUNSTATEDIR "/libvirt/ch"
3232
#define CH_LOG_DIR LOCALSTATEDIR "/log/libvirt/ch"
33+
#define CH_CONF_BASE_DIR SYSCONFDIR "/libvirt/ch"
3334

3435
typedef struct _virCHDriver virCHDriver;
3536
typedef virCHDriver *virCHDriverPtr;
@@ -42,7 +43,8 @@ struct _virCHDriverConfig {
4243

4344
char *stateDir;
4445
char *logDir;
45-
46+
char *configDir;
47+
char *autostartDir;
4648
int cgroupControllers;
4749

4850
bool macFilter;

src/ch/ch_driver.c

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1857,6 +1857,101 @@ chDomainSetVcpusFlags(virDomainPtr dom,
18571857
return ret;
18581858
}
18591859

1860+
static int chDomainSetAutostart(virDomainPtr dom,
1861+
int autostart)
1862+
{
1863+
virCHDriverPtr driver = dom->conn->privateData;
1864+
virDomainObjPtr vm;
1865+
g_autofree char *configFile = NULL;
1866+
g_autofree char *autostartLink = NULL;
1867+
int ret = -1;
1868+
g_autoptr(virCHDriverConfig) cfg = NULL;
1869+
1870+
if (!(vm = virCHDomainObjFromDomain(dom)))
1871+
return -1;
1872+
1873+
cfg = virCHDriverGetConfig(driver);
1874+
1875+
if (virDomainSetAutostartEnsureACL(dom->conn, vm->def) < 0)
1876+
goto cleanup;
1877+
1878+
if (!vm->persistent) {
1879+
virReportError(VIR_ERR_OPERATION_INVALID,
1880+
"%s", _("cannot set autostart for transient domain"));
1881+
goto cleanup;
1882+
}
1883+
1884+
autostart = (autostart != 0);
1885+
1886+
if (vm->autostart != autostart) {
1887+
if (virCHDomainObjBeginJob(vm, CH_JOB_MODIFY) < 0)
1888+
goto cleanup;
1889+
1890+
if (!(configFile = virDomainConfigFile(cfg->stateDir, vm->def->name)))
1891+
goto endjob;
1892+
1893+
if (!(autostartLink = virDomainConfigFile(cfg->autostartDir,
1894+
vm->def->name)))
1895+
goto endjob;
1896+
1897+
if (autostart) {
1898+
if (virFileMakePath(cfg->autostartDir) < 0) {
1899+
virReportSystemError(errno,
1900+
_("cannot create autostart directory %s"),
1901+
cfg->autostartDir);
1902+
goto endjob;
1903+
}
1904+
1905+
if (symlink(configFile, autostartLink) < 0) {
1906+
virReportSystemError(errno,
1907+
_("Failed to create symlink '%s to '%s'"),
1908+
autostartLink, configFile);
1909+
goto endjob;
1910+
}
1911+
} else {
1912+
if (unlink(autostartLink) < 0 &&
1913+
errno != ENOENT &&
1914+
errno != ENOTDIR) {
1915+
virReportSystemError(errno,
1916+
_("Failed to delete symlink '%s'"),
1917+
autostartLink);
1918+
goto endjob;
1919+
}
1920+
}
1921+
1922+
vm->autostart = autostart;
1923+
1924+
endjob:
1925+
virCHDomainObjEndJob(vm);
1926+
}
1927+
ret = 0;
1928+
1929+
cleanup:
1930+
virDomainObjEndAPI(&vm);
1931+
return ret;
1932+
}
1933+
1934+
static int chDomainGetAutostart(virDomainPtr dom,
1935+
int *autostart)
1936+
{
1937+
virDomainObjPtr vm;
1938+
int ret = -1;
1939+
1940+
if (!(vm = virCHDomainObjFromDomain(dom)))
1941+
goto cleanup;
1942+
1943+
if (virDomainGetAutostartEnsureACL(dom->conn, vm->def) < 0)
1944+
goto cleanup;
1945+
1946+
*autostart = vm->autostart;
1947+
ret = 0;
1948+
1949+
cleanup:
1950+
virDomainObjEndAPI(&vm);
1951+
return ret;
1952+
};
1953+
1954+
18601955
/* Function Tables */
18611956
static virHypervisorDriver chHypervisorDriver = {
18621957
.name = "CH",
@@ -1906,6 +2001,9 @@ static virHypervisorDriver chHypervisorDriver = {
19062001
.domainSetNumaParameters = chDomainSetNumaParameters, /* 6.7.0 */
19072002
.domainGetNumaParameters = chDomainGetNumaParameters, /* 6.7.0 */
19082003
.domainSetVcpusFlags = chDomainSetVcpusFlags, /* 6.7.0 */
2004+
.domainGetAutostart = chDomainGetAutostart, /* 6.7.0 */
2005+
.domainSetAutostart = chDomainSetAutostart, /* 6.7.0 */
2006+
19092007
};
19102008

19112009
static virConnectDriver chConnectDriver = {

0 commit comments

Comments
 (0)