softwarecontainer  0.18.0-739e8d7 2017-05-04
cgroupsgateway.cpp
1 /*
2  * Copyright (C) 2016-2017 Pelagicore AB
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
9  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
10  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
11  * BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
12  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
13  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
14  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
15  * SOFTWARE.
16  *
17  * For further information see LICENSE
18  */
19 
20 #include "jansson.h"
21 
22 #include "softwarecontainer-common.h"
23 #include "cgroupsgateway.h"
24 
25 namespace softwarecontainer {
26 
27 CgroupsGateway::CgroupsGateway(std::shared_ptr<ContainerAbstractInterface> container)
28  : Gateway(ID, container)
29  , m_parser()
30 {
31 }
32 
33 bool CgroupsGateway::readConfigElement(const json_t *element)
34 {
35  try {
36  m_parser.parseCGroupsGatewayConfiguration(element);
37  } catch (CgroupsGatewayError &e) {
38  log_error() << "Could not parse CGroups configuration element";
39  return false;
40  }
41 
42  return true;
43 }
44 
45 bool CgroupsGateway::activateGateway()
46 {
47  bool success = false;
48  auto cgroupSettings = m_parser.getSettings();
49  for (auto& setting: cgroupSettings) {
50  success = getContainer()->setCgroupItem(setting.first, setting.second);
51  if (!success) {
52  log_error() << "Error activating Cgroups Gateway, could not set cgroup item "
53  << setting.first << ": " << setting.second;
54  break;
55  }
56  }
57 
58  return success;
59 }
60 
61 bool CgroupsGateway::teardownGateway()
62 {
63  return true;
64 }
65 
66 } // namespace softwarecontainer
bool readConfigElement(const json_t *element) override
Gateway specific parsing of config elements.
Developers guide to adding a config item: