Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
cc-node
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Analyze
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Mirror
cc-node
Commits
b02e5a3e
Commit
b02e5a3e
authored
12 years ago
by
Anael Beutot
Browse files
Options
Downloads
Patches
Plain Diff
Implemented actions for VMs.
Create/Start/Stop/Destroy/Undefine/Export/Suspend/Resume.
parent
2d763079
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
ccnode/hypervisor/__init__.py
+62
-25
62 additions, 25 deletions
ccnode/hypervisor/__init__.py
ccnode/hypervisor/domains/__init__.py
+14
-14
14 additions, 14 deletions
ccnode/hypervisor/domains/__init__.py
ccnode/hypervisor/domains/vm_tags.py
+3
-2
3 additions, 2 deletions
ccnode/hypervisor/domains/vm_tags.py
with
79 additions
and
41 deletions
ccnode/hypervisor/__init__.py
+
62
−
25
View file @
b02e5a3e
...
...
@@ -58,34 +58,75 @@ class Handler(HostHandler):
"""
Get subtags.
"""
global
hypervisor
domain
=
hypervisor
.
get_
domain
_by_name
(
sub_id
)
domain
=
hypervisor
.
domain
s
.
get
(
sub_id
)
if
domain
is
None
:
logger
.
debug
(
'
Failed to find domain with name %s.
'
,
sub_id
)
return
logger
.
debug
(
'
Get tags for sub object: %s
'
,
sub_id
)
return
get_tags
(
domain
,
tags
,
noresolve_tags
)
def
vm_define
(
self
,
name
):
pass
def
iter_vms
(
self
,
vm_names
):
"""
Utility function to iterate over VM objects using their names.
"""
if
vm_names
is
None
:
return
# get_domain = self.hypervisor.domains.get
get_domain
=
self
.
hypervisor
.
domains
.
get
for
name
in
vm_names
:
dom
=
get_domain
(
name
)
if
dom
is
not
None
:
yield
dom
def
vm_define
(
self
,
data
,
format
=
'
xml
'
):
logger
.
debug
(
'
VM define
'
)
if
format
!=
'
xml
'
:
raise
NotImplementedError
(
'
Format not supported
'
)
try
:
return
_libvirt
.
connection
.
defineXML
(
data
).
name
()
except
libvirt
.
libvirtError
:
logger
.
exception
(
'
Error while creating domain
'
)
def
vm_undefine
(
self
,
name
):
pass
logger
.
debug
(
'
VM undefin
'
)
vm
=
self
.
hypervisor
.
domains
.
get
(
name
)
if
vm
is
not
None
:
vm
.
undefine
()
def
vm_export
(
self
,
name
,
format
=
'
xml
'
):
pass
if
format
!=
'
xml
'
:
raise
NotImplementedError
(
'
Format not supported
'
)
vm
=
self
.
hypervisor
.
domains
.
get
(
name
)
if
vm
is
None
:
return
return
vm
.
lv_dom
.
XMLDesc
(
0
)
def
vm_stop
(
self
,
vm_names
=
None
,
force
=
False
):
pass
logger
.
debug
(
'
VM stop
'
)
for
vm
in
self
.
iter_vms
(
vm_names
):
if
force
:
vm
.
destroy
()
else
:
vm
.
stop
()
def
vm_start
(
self
,
vm_names
=
None
):
pass
logger
.
debug
(
'
VM start
'
)
for
vm
in
self
.
iter_vms
(
vm_names
):
vm
.
start
()
def
vm_suspend
(
self
,
vm_names
=
None
):
pass
logger
.
debug
(
'
VM suspend
'
)
for
vm
in
self
.
iter_vms
(
vm_names
):
vm
.
suspend
()
def
vm_resume
(
self
,
vm_names
=
None
):
pass
logger
.
debug
(
'
VM resume
'
)
for
vm
in
self
.
iter_vms
(
vm_names
):
vm
.
resume
()
class
Hypervisor
(
object
):
...
...
@@ -129,11 +170,11 @@ class Hypervisor(object):
# find defined domains
for
dom_name
in
_libvirt
.
connection
.
listDefinedDomains
():
dom
=
_libvirt
.
connection
.
lookupByName
(
dom_name
)
self
.
domains
[
dom
.
UUID
()]
=
VirtualMachine
(
dom
,
self
)
self
.
domains
[
dom
.
name
()]
=
VirtualMachine
(
dom
,
self
)
# find started domains
for
dom_id
in
_libvirt
.
connection
.
listDomainsID
():
dom
=
_libvirt
.
connection
.
lookupByID
(
dom_id
)
self
.
domains
[
dom
.
UUID
()]
=
VirtualMachine
(
dom
,
self
)
self
.
domains
[
dom
.
name
()]
=
VirtualMachine
(
dom
,
self
)
logger
.
debug
(
'
Domains: %s
'
,
self
.
domains
)
...
...
@@ -141,36 +182,32 @@ class Hypervisor(object):
def
callback
(
self
,
conn
,
dom
,
event
,
detail
,
opaque
):
"""
Callback for libvirt event loop.
"""
logger
.
debug
(
'
Received event %s on domain %s, detail %s
'
,
event
,
dom
.
name
(),
detail
)
event
=
EVENTS
[
event
]
if
event
==
'
Added
'
:
vm
=
VirtualMachine
(
dom
,
self
)
self
.
domains
[
vm
.
uuid
]
=
vm
self
.
domains
[
vm
.
name
]
=
vm
self
.
sjproxy
.
register
(
vm
.
name
,
'
vm
'
)
logger
.
debug
(
'
Add domain: %s (%s)
'
,
vm
.
name
,
vm
.
uuid
)
logger
.
info
(
'
Add domain: %s (%s)
'
,
vm
.
name
,
vm
.
uuid
)
elif
event
==
'
Removed
'
:
vm
=
self
.
domains
.
pop
(
dom
.
UUID
())
logger
.
debug
(
'
About to remove domain
'
)
vm
=
self
.
domains
.
pop
(
dom
.
name
())
self
.
sjproxy
.
unregister
(
vm
.
name
)
logger
.
debug
(
'
Delete domain: %s (%s)
'
,
vm
.
name
,
vm
.
uuid
)
logger
.
info
(
'
Delete domain: %s (%s)
'
,
vm
.
name
,
vm
.
uuid
)
elif
event
in
(
'
Started
'
,
'
Suspended
'
,
'
Resumed
'
,
'
Stopped
'
,
'
Saved
'
,
'
Restored
'
):
vm
=
self
.
domains
.
get
(
dom
.
UUID
())
vm
=
self
.
domains
.
get
(
dom
.
name
())
# sometimes libvirt sent a start event before a created event so be
# careful
if
vm
is
not
None
:
state
=
DOMAIN_STATES
[
dom
.
info
()[
0
]]
logger
.
debug
(
'
Domain change state from %s to %s
'
,
vm
.
state
,
logger
.
info
(
'
Domain change state from %s to %s
'
,
vm
.
state
,
state
)
vm
.
state
=
state
def
get_domain_by_name
(
self
,
name
):
"""
Get a domain by name.
"""
for
d
in
self
.
domains
.
itervalues
():
if
d
.
name
==
name
:
return
d
return
None
def
_count_domain
(
self
,
filter
=
lambda
d
:
True
):
count
=
0
...
...
This diff is collapsed.
Click to expand it.
ccnode/hypervisor/domains/__init__.py
+
14
−
14
View file @
b02e5a3e
...
...
@@ -27,6 +27,7 @@ class VirtualMachine(object):
#: UUID string of domain
self
.
uuid
=
dom
.
UUIDString
()
self
.
name
=
dom
.
name
()
#: state of VM: started, stoped, paused
self
.
state
=
STATE
[
dom
.
info
()[
0
]]
#: tags for this VM
...
...
@@ -54,29 +55,28 @@ class VirtualMachine(object):
logger
.
debug
(
'
Virtual Machine tags: %s
'
,
self
.
tags
)
@property
def
name
(
self
):
return
self
.
lv_dom
.
name
()
@property
def
lv_dom
(
self
):
"""
Libvirt domain instance.
"""
return
_libvirt
.
connection
.
lookupByUUIDString
(
self
.
uuid
)
def
start
():
pass
def
start
(
self
):
self
.
lv_dom
.
create
()
def
stop
(
self
):
self
.
lv_dom
.
shutdown
()
def
s
top
(
):
pass
def
s
uspend
(
self
):
self
.
lv_dom
.
suspend
()
def
pause
(
):
pass
def
resume
(
self
):
self
.
lv_dom
.
resume
()
def
de
fine
(
):
pass
def
de
stroy
(
self
):
self
.
lv_dom
.
destroy
()
def
undefine
d
():
pass
def
undefine
(
self
):
self
.
lv_dom
.
undefine
()
@property
def
disks
(
self
):
...
...
This diff is collapsed.
Click to expand it.
ccnode/hypervisor/domains/vm_tags.py
+
3
−
2
View file @
b02e5a3e
...
...
@@ -30,8 +30,9 @@ def arch(dom):
logger
.
exception
(
'
Error while get Architecture tag
'
)
def
h
():
pass
def
h
(
dom
):
"""
Name of the VM.
"""
return
dom
.
name
def
cpu
(
dom
):
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment