Dobby 3.0
Dobby “Docker based Thingy” is a tool for managing and running OCI containers using crun
Loading...
Searching...
No Matches
IDobbyProxy.h
1/*
2* If not stated otherwise in this file or this component's LICENSE file the
3* following copyright and licenses apply:
4*
5* Copyright 2016 Sky UK
6*
7* Licensed under the Apache License, Version 2.0 (the "License");
8* you may not use this file except in compliance with the License.
9* You may obtain a copy of the License at
10*
11* http://www.apache.org/licenses/LICENSE-2.0
12*
13* Unless required by applicable law or agreed to in writing, software
14* distributed under the License is distributed on an "AS IS" BASIS,
15* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16* See the License for the specific language governing permissions and
17* limitations under the License.
18*/
19/*
20 * IDobbyProxy.h
21 * Author:
22 *
23 */
24#ifndef IDOBBYPROXY_H
25#define IDOBBYPROXY_H
26
27#if defined(DOBBY_BUILD)
28#include <Common/Notifier.h>
29#else
30#include <Dobby/Public/Common/Notifier.h>
31#endif
32
33#include <cstdint>
34#include <list>
35#include <string>
36#include <memory>
37#include <chrono>
38
39namespace AI_IPC
40{
41 class IIpcService;
42}
43
44
45
46// -----------------------------------------------------------------------------
57{
58public:
59 enum class ContainerState
60 {
61 Invalid = 0,
62 Starting = 1,
63 Running = 2,
64 Stopping = 3,
65 Paused = 4,
66 Stopped = 5,
67 Hibernating = 6,
68 Hibernated = 7,
69 Awakening = 8
70 };
71
72public:
73 virtual ~IDobbyProxyEvents() = default;
74
75 virtual void containerStateChanged(int32_t descriptor, const std::string& id, ContainerState newState) = 0;
76};
77
78
79
80// -----------------------------------------------------------------------------
91class IDobbyProxy : public AICommon::Notifier<IDobbyProxyEvents>
92{
93public:
94 ~IDobbyProxy() override = default;
95
96public:
97 // Admin interface
98 virtual bool shutdown() const = 0;
99
100 virtual bool ping() const = 0;
101
102 virtual bool isAlive(const std::chrono::milliseconds& timeout) const = 0;
103
104 virtual bool setLogMethod(uint32_t method, int pipeFd) const = 0;
105
106 virtual bool setLogLevel(int level) const = 0;
107
108 virtual bool setAIDbusAddress(bool privateBus,
109 const std::string& address) const = 0;
110
111 inline bool isAlive() const
112 {
113 return isAlive(std::chrono::milliseconds::min());
114 }
115
116 inline int32_t setLogMethod(uint32_t method) const
117 {
118 return setLogMethod(method, -1);
119 }
120
121
122public:
123 // Control interface
124
125 virtual int32_t startContainerFromSpec(const std::string& id,
126 const std::string& jsonSpec,
127 const std::list<int>& files,
128 const std::string& command = "",
129 const std::string& displaySocket = "",
130 const std::vector<std::string>& envVars = std::vector<std::string>()) const = 0;
131
132
133 virtual int32_t startContainerFromBundle(const std::string& id,
134 const std::string& bundlePath,
135 const std::list<int>& files,
136 const std::string& command = "",
137 const std::string& displaySocket = "",
138 const std::vector<std::string>& envVars = std::vector<std::string>()) const = 0;
139
140 virtual bool stopContainer(int32_t descriptor,
141 bool withPrejudice) const = 0;
142
143 virtual bool pauseContainer(int32_t descriptor) const = 0;
144
145 virtual bool resumeContainer(int32_t descriptor) const = 0;
146
147 virtual bool hibernateContainer(int32_t descriptor, const std::string& options) const = 0;
148
149 virtual bool wakeupContainer(int32_t descriptor) const = 0;
150
151 virtual bool addContainerMount(int32_t descriptor,
152 const std::string& source,
153 const std::string& destination,
154 const std::vector<std::string>& mountFlags,
155 const std::string& mountData) const = 0;
156
157 virtual bool removeContainerMount(int32_t descriptor, const std::string& source) const = 0;
158
159 virtual bool addAnnotation(int32_t cd,
160 const std::string& key,
161 const std::string& value) const = 0;
162
163 virtual bool removeAnnotation(int32_t cd,
164 const std::string& key) const = 0;
165
166 virtual bool execInContainer(int32_t cd,
167 const std::string& options,
168 const std::string& command) const = 0;
169
170 virtual int getContainerState(int32_t descriptor) const = 0;
171
172 virtual std::string getContainerInfo(int32_t descriptor) const = 0;
173
174 virtual std::list<std::pair<int32_t, std::string>> listContainers() const = 0;
175
176
177 inline int32_t startContainerFromSpec(const std::string& id,
178 const std::string& jsonSpec) const
179 {
180 return startContainerFromSpec(id, jsonSpec, { });
181 }
182
183 inline int32_t startContainerFromBundle(const std::string& id,
184 const std::string& bundlePath) const
185 {
186 return startContainerFromBundle(id, bundlePath, { });
187 }
188
189 inline bool stopContainer(int32_t descriptor) const
190 {
191 return stopContainer(descriptor, false);
192 }
193
194public:
195 typedef std::function<void(int32_t, const std::string&, IDobbyProxyEvents::ContainerState, const void*)> StateChangeListener;
196
197 virtual int registerListener(const StateChangeListener &listener, const void* cbParams) = 0;
198
199 virtual void unregisterListener(int tag) = 0;
200
201
202#if (AI_BUILD_TYPE == AI_DEBUG)
203
204public:
205 // Debug interface
206 virtual bool createBundle(const std::string& id,
207 const std::string& jsonSpec) const = 0;
208
209 virtual std::string getSpec(int32_t descriptor) const = 0;
210
211 virtual std::string getOCIConfig(int32_t descriptor) const = 0;
212
213#if (AI_ENABLE_TRACING)
214 virtual bool startInProcessTracing(int traceFileFd,
215 const std::string &categoryFilter) const = 0;
216
217 virtual bool stopInProcessTracing() const = 0;
218#endif // (AI_ENABLE_TRACING)
219
220#endif // (AI_BUILD_TYPE == AI_DEBUG)
221
222};
223
224#endif // !defined(IDOBBYPROXY_H)
A template of observable objects that send notifications defined in interface T.
Definition Notifier.h:52
Interface for the AI notifier API.
Definition IDobbyProxy.h:57
Wrapper around an IpcService object that provides simpler method calls to the Dobby 'hypervisor' daem...
Definition IDobbyProxy.h:92