Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
slapos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Gwenaël Samain
slapos
Commits
80b99e40
Commit
80b99e40
authored
Jul 16, 2015
by
Alain Takoudjou
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kvm: fix kvm_run script, add qed in external disk format and improve http server
parent
a55d0291
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
57 additions
and
28 deletions
+57
-28
slapos/recipe/kvm/template/kvm_run.in
slapos/recipe/kvm/template/kvm_run.in
+7
-7
software/kvm/common.cfg
software/kvm/common.cfg
+2
-2
software/kvm/instance-kvm-cluster-input-schema.json
software/kvm/instance-kvm-cluster-input-schema.json
+1
-1
software/kvm/instance-kvm-cluster.cfg.jinja2.in
software/kvm/instance-kvm-cluster.cfg.jinja2.in
+16
-6
software/kvm/instance-kvm-input-schema.json
software/kvm/instance-kvm-input-schema.json
+1
-1
software/kvm/instance-kvm.cfg.jinja2
software/kvm/instance-kvm.cfg.jinja2
+30
-11
No files found.
slapos/recipe/kvm/template/kvm_run.in
View file @
80b99e40
...
@@ -24,10 +24,10 @@ default_disk_image = '%(default-disk-image)s'
...
@@ -24,10 +24,10 @@ default_disk_image = '%(default-disk-image)s'
disk_path = '%(disk-path)s'
disk_path = '%(disk-path)s'
virtual_hard_drive_url = '%(virtual-hard-drive-url)s'.strip()
virtual_hard_drive_url = '%(virtual-hard-drive-url)s'.strip()
virtual_hard_drive_md5sum = '%(virtual-hard-drive-md5sum)s'.strip()
virtual_hard_drive_md5sum = '%(virtual-hard-drive-md5sum)s'.strip()
virtual_hard_drive_gzipped = '%(virtual-hard-drive-gzipped)s'.strip()
virtual_hard_drive_gzipped = '%(virtual-hard-drive-gzipped)s'.strip()
.lower()
nat_rules = '%(nat-rules)s'.strip()
nat_rules = '%(nat-rules)s'.strip()
use_tap = '%(use-tap)s'
use_tap = '%(use-tap)s'
.lower()
use_nat = '%(use-nat)s'
use_nat = '%(use-nat)s'
.lower()
tap_interface = '%(tap-interface)s'
tap_interface = '%(tap-interface)s'
listen_ip = '%(ipv4)s'
listen_ip = '%(ipv4)s'
mac_address = '%(mac-address)s'
mac_address = '%(mac-address)s'
...
@@ -119,7 +119,7 @@ if not os.path.exists(disk_path) and virtual_hard_drive_url != '':
...
@@ -119,7 +119,7 @@ if not os.path.exists(disk_path) and virtual_hard_drive_url != '':
print('Downloading virtual hard drive...')
print('Downloading virtual hard drive...')
try:
try:
downloaded_disk = disk_path
downloaded_disk = disk_path
if virtual_hard_drive_gzipped == '
T
rue':
if virtual_hard_drive_gzipped == '
t
rue':
downloaded_disk = '%%s.gz' %% disk_path
downloaded_disk = '%%s.gz' %% disk_path
urllib.urlretrieve(virtual_hard_drive_url, downloaded_disk)
urllib.urlretrieve(virtual_hard_drive_url, downloaded_disk)
except:
except:
...
@@ -162,7 +162,7 @@ for storage in disk_storage_list:
...
@@ -162,7 +162,7 @@ for storage in disk_storage_list:
key, val = storage.split(' ')
key, val = storage.split(' ')
disk_storage_dict[key.strip()] = val.strip()
disk_storage_dict[key.strip()] = val.strip()
if not external_disk_format in ['qcow2', 'raw', 'vdi', 'vmdk', 'cloop']:
if not external_disk_format in ['qcow2', 'raw', 'vdi', 'vmdk', 'cloop'
, 'qed'
]:
external_disk_format = 'qcow2'
external_disk_format = 'qcow2'
map_storage_list, external_disk_number = getMapStorageList(disk_storage_dict,
map_storage_list, external_disk_number = getMapStorageList(disk_storage_dict,
...
@@ -197,7 +197,7 @@ tap_network_parameter = []
...
@@ -197,7 +197,7 @@ tap_network_parameter = []
nat_network_parameter = []
nat_network_parameter = []
numa_parameter = []
numa_parameter = []
number = -1
number = -1
if use_nat == '
T
rue':
if use_nat == '
t
rue':
number += 1
number += 1
rules = 'user,id=lan%%s,' %% number + ','.join('hostfwd=tcp:%%s:%%s-:%%s' %% (listen_ip,
rules = 'user,id=lan%%s,' %% number + ','.join('hostfwd=tcp:%%s:%%s-:%%s' %% (listen_ip,
int(port) + 10000, port) for port in nat_rules.split())
int(port) + 10000, port) for port in nat_rules.split())
...
@@ -209,7 +209,7 @@ if use_nat == 'True':
...
@@ -209,7 +209,7 @@ if use_nat == 'True':
cluster_doc_host, cluster_doc_port)
cluster_doc_host, cluster_doc_port)
nat_network_parameter = ['-netdev', rules,
nat_network_parameter = ['-netdev', rules,
'-device', 'e1000,netdev=lan%%s,mac=%%s' %% (number, mac_address)]
'-device', 'e1000,netdev=lan%%s,mac=%%s' %% (number, mac_address)]
if use_tap == '
T
rue':
if use_tap == '
t
rue':
number += 1
number += 1
tap_network_parameter = ['-netdev',
tap_network_parameter = ['-netdev',
'tap,id=lan%%s,ifname=%%s,script=no,downscript=no' %% (number,
'tap,id=lan%%s,ifname=%%s,script=no,downscript=no' %% (number,
...
...
software/kvm/common.cfg
View file @
80b99e40
...
@@ -95,7 +95,7 @@ mode = 0644
...
@@ -95,7 +95,7 @@ mode = 0644
recipe = hexagonit.recipe.download
recipe = hexagonit.recipe.download
url = ${:_profile_base_location_}/instance-kvm.cfg.jinja2
url = ${:_profile_base_location_}/instance-kvm.cfg.jinja2
mode = 644
mode = 644
md5sum =
fb2dcca424fa0bf4d6ec445965a8bc81
md5sum =
55eb9cb0d85dedbda0f03986cef261db
download-only = true
download-only = true
on-update = true
on-update = true
...
@@ -103,7 +103,7 @@ on-update = true
...
@@ -103,7 +103,7 @@ on-update = true
recipe = hexagonit.recipe.download
recipe = hexagonit.recipe.download
url = ${:_profile_base_location_}/instance-kvm-cluster.cfg.jinja2.in
url = ${:_profile_base_location_}/instance-kvm-cluster.cfg.jinja2.in
mode = 644
mode = 644
md5sum =
36d9ea062c13f88eadd6f635eed36b7e
md5sum =
1e4d8eade6d291480e5112ef9f31f031
download-only = true
download-only = true
on-update = true
on-update = true
...
...
software/kvm/instance-kvm-cluster-input-schema.json
View file @
80b99e40
...
@@ -266,7 +266,7 @@
...
@@ -266,7 +266,7 @@
"description"
:
"Type of QEMU disk drive, to create."
,
"description"
:
"Type of QEMU disk drive, to create."
,
"type"
:
"string"
,
"type"
:
"string"
,
"default"
:
"qcow2"
,
"default"
:
"qcow2"
,
"enum"
:
[
"qcow2"
,
"raw"
,
"vdi"
,
"vmdk"
,
"cloop"
]
"enum"
:
[
"qcow2"
,
"raw"
,
"vdi"
,
"vmdk"
,
"cloop"
,
"qed"
]
},
},
"use-tap"
:
{
"use-tap"
:
{
"title"
:
"Use QEMU TAP network interface"
,
"title"
:
"Use QEMU TAP network interface"
,
...
...
software/kvm/instance-kvm-cluster.cfg.jinja2.in
View file @
80b99e40
...
@@ -22,7 +22,7 @@ config-use-ipv6 = {{ dumps(slapparameter_dict.get('use-ipv6', False)) }}
...
@@ -22,7 +22,7 @@ config-use-ipv6 = {{ dumps(slapparameter_dict.get('use-ipv6', False)) }}
# Request kvm instances
# Request kvm instances
{% for instance_name, kvm_parameter_dict in slapparameter_dict.get('kvm-partition-dict', {'kvm-default': {}}).items() -%}
{% for instance_name, kvm_parameter_dict in slapparameter_dict.get('kvm-partition-dict', {'kvm-default': {}}).items() -%}
{% set section = 'request-' ~ instance_name -%}
{% set section = 'request-' ~ instance_name -%}
{% set use_nat = kvm_parameter_dict.get('use-nat',
True
) -%}
{% set use_nat = kvm_parameter_dict.get('use-nat',
'True'
) -%}
[{{ section }}]
[{{ section }}]
<= request-common
<= request-common
software-type = kvm
software-type = kvm
...
@@ -73,12 +73,12 @@ config-document-path = ${http-server:path}
...
@@ -73,12 +73,12 @@ config-document-path = ${http-server:path}
return =
return =
backend-url
backend-url
url
url
{% if use_nat -%}
{% if use_nat
.lower()
-%}
{% for port in nat_rules_list -%}
{% for port in nat_rules_list -%}
{{ ' ' }}nat-rule-url-{{ port }}
{{ ' ' }}nat-rule-url-{{ port }}
{% endfor -%}
{% endfor -%}
{% endif -%}
{% endif -%}
{% if kvm_parameter_dict.get('use-tap',
True)
-%}
{% if kvm_parameter_dict.get('use-tap',
'True').lower() == 'true'
-%}
{{ ' ' }}tap-ipv4
{{ ' ' }}tap-ipv4
{% do publish_dict.__setitem__('lan-' ~ instance_name, '${' ~ section ~ ':connection-tap-ipv4}') -%}
{% do publish_dict.__setitem__('lan-' ~ instance_name, '${' ~ section ~ ':connection-tap-ipv4}') -%}
...
@@ -86,7 +86,7 @@ return =
...
@@ -86,7 +86,7 @@ return =
{% endif -%}
{% endif -%}
{% do publish_dict.__setitem__(instance_name ~ '-backend-url', '${' ~ section ~ ':connection-backend-url}') -%}
{% do publish_dict.__setitem__(instance_name ~ '-backend-url', '${' ~ section ~ ':connection-backend-url}') -%}
{% do publish_dict.__setitem__(instance_name ~ '-url', '${' ~ section ~ ':connection-url}') -%}
{% do publish_dict.__setitem__(instance_name ~ '-url', '${' ~ section ~ ':connection-url}') -%}
{% do kvm_instance_dict.__setitem__(instance_name, (
kvm_parameter_dict.get('use-nat', True)
, nat_rules_list)) -%}
{% do kvm_instance_dict.__setitem__(instance_name, (
use_nat
, nat_rules_list)) -%}
{% endfor %}
{% endfor %}
...
@@ -145,6 +145,7 @@ log = ${:var}/log
...
@@ -145,6 +145,7 @@ log = ${:var}/log
scripts = ${:etc}/run
scripts = ${:etc}/run
services = ${:etc}/service
services = ${:etc}/service
document = ${:srv}/document
document = ${:srv}/document
promises = ${:etc}/promise
ssl = ${:etc}/ssl
ssl = ${:etc}/ssl
[http-ssl]
[http-ssl]
...
@@ -164,8 +165,16 @@ wrapper = ${directory:services}/simple-http-server
...
@@ -164,8 +165,16 @@ wrapper = ${directory:services}/simple-http-server
log-file = ${directory:log}/http.log
log-file = ${directory:log}/http.log
cert-file = ${http-ssl:cert}
cert-file = ${http-ssl:cert}
key-file = ${http-ssl:key}
key-file = ${http-ssl:key}
{% do publish_dict.__setitem__('http-file-server', 'https://' ~ '[${http-server:host}]:' ~ '${http-server:port}/' ~ '${http-server:path}') -%}
use-hash-url = true
[http-promise]
recipe = slapos.cookbook:check_port_listening
path = ${directory:promises}/http-server
hostname = ${http-server:host}
port = ${http-server:port}
{% if len(kvm_hostname_list) -%}
{% do part_list.append('write-vm-hostname') -%}
[write-vm-hostname]
[write-vm-hostname]
recipe = slapos.recipe.template:jinja2
recipe = slapos.recipe.template:jinja2
template = {{ template_content }}
template = {{ template_content }}
...
@@ -174,6 +183,7 @@ rendered = ${http-server:root-dir}/${:filename}
...
@@ -174,6 +183,7 @@ rendered = ${http-server:root-dir}/${:filename}
context =
context =
raw content_list {{ kvm_hostname_list | join('#') }}
raw content_list {{ kvm_hostname_list | join('#') }}
raw sep #
raw sep #
{% endif -%}
{% macro writefile(section_name, file_path, content, mode='') -%}
{% macro writefile(section_name, file_path, content, mode='') -%}
{% do part_list.append(section_name) -%}
{% do part_list.append(section_name) -%}
...
@@ -199,7 +209,7 @@ recipe = slapos.cookbook:publish
...
@@ -199,7 +209,7 @@ recipe = slapos.cookbook:publish
[buildout]
[buildout]
parts =
parts =
http-server
http-server
write-vm-hostnam
e
http-promis
e
publish
publish
# Complete parts with sections
# Complete parts with sections
{{ part_list | join('\n ') }}
{{ part_list | join('\n ') }}
...
...
software/kvm/instance-kvm-input-schema.json
View file @
80b99e40
...
@@ -115,7 +115,7 @@
...
@@ -115,7 +115,7 @@
"description"
:
"Type of QEMU disk drive, to create."
,
"description"
:
"Type of QEMU disk drive, to create."
,
"type"
:
"string"
,
"type"
:
"string"
,
"default"
:
"qcow2"
,
"default"
:
"qcow2"
,
"enum"
:
[
"qcow2"
,
"raw"
,
"vdi"
,
"vmdk"
,
"cloop"
]
"enum"
:
[
"qcow2"
,
"raw"
,
"vdi"
,
"vmdk"
,
"cloop"
,
"qed"
]
},
},
"use-tap"
:
{
"use-tap"
:
{
...
...
software/kvm/instance-kvm.cfg.jinja2
View file @
80b99e40
{% set enable_http = slapparameter_dict.get('enable-http-server', 'False') -%}
{% set enable_http = slapparameter_dict.get('enable-http-server', 'False').lower() -%}
{% set use_tap = slapparameter_dict.get('use-tap', 'False').lower() -%}
{% set use_nat = slapparameter_dict.get('use-nat', 'True').lower() -%}
#############################
#############################
#
#
# Instanciate kvm
# Instanciate kvm
...
@@ -19,7 +21,7 @@ parts =
...
@@ -19,7 +21,7 @@ parts =
{% if slapparameter_dict.get('document-host', '') %}
{% if slapparameter_dict.get('document-host', '') %}
cluster-url-path
cluster-url-path
{% endif -%}
{% endif -%}
{% if
slapparameter_dict.get('enable-http-server', 'False') == 'T
rue' %}
{% if
enable_http == 't
rue' %}
httpd
httpd
httpd-promise
httpd-promise
publish-host-config
publish-host-config
...
@@ -30,8 +32,8 @@ parts =
...
@@ -30,8 +32,8 @@ parts =
get-authorized-key
get-authorized-key
{% endif -%}
{% endif -%}
extends =
#
extends =
{{ template_httpd_cfg }}
#
{{ template_httpd_cfg }}
{% endif -%}
{% endif -%}
eggs-directory = {{ eggs_directory }}
eggs-directory = {{ eggs_directory }}
...
@@ -133,7 +135,7 @@ external-disk-number = ${slap-parameter:external-disk-number}
...
@@ -133,7 +135,7 @@ external-disk-number = ${slap-parameter:external-disk-number}
external-disk-size = ${slap-parameter:external-disk-size}
external-disk-size = ${slap-parameter:external-disk-size}
external-disk-format = ${slap-parameter:external-disk-format}
external-disk-format = ${slap-parameter:external-disk-format}
{% if
slapparameter_dict.get('enable-http-server', 'False') == 'True' or ( slapparameter_dict.get('use-tap', 'False') == 'T
rue' and tap_network_dict.has_key('ipv4') ) -%}
{% if
enable_http == 'tue' or ( use_tap == 't
rue' and tap_network_dict.has_key('ipv4') ) -%}
httpd-port = ${slap-parameter:httpd-port}
httpd-port = ${slap-parameter:httpd-port}
{% else -%}
{% else -%}
httpd-port = 0
httpd-port = 0
...
@@ -270,6 +272,23 @@ dash_path = {{ dash_executable_location }}
...
@@ -270,6 +272,23 @@ dash_path = {{ dash_executable_location }}
curl_path = {{ curl_executable_location }}
curl_path = {{ curl_executable_location }}
{% if enable_http == 'true' %}
[httpd]
recipe = slapos.cookbook:simplehttpserver
host = ${slap-network-information:local-ipv4}
port = ${slap-parameter:httpd-port}
base-path = ${directory:public}
wrapper = ${directory:services}/http-server
log-file = ${directory:log}/httpd.log
use-hash-url = false
[httpd-promise]
recipe = slapos.cookbook:check_port_listening
path = ${directory:promises}/httpd
hostname = ${httpd:host}
port = ${httpd:port}
{% endif %}
[publish-connection-information]
[publish-connection-information]
recipe = slapos.cookbook:publish
recipe = slapos.cookbook:publish
ipv6 = ${slap-network-information:global-ipv6}
ipv6 = ${slap-network-information:global-ipv6}
...
@@ -278,7 +297,7 @@ url = ${request-slave-frontend:connection-url}/vnc_auto.html?host=${request-slav
...
@@ -278,7 +297,7 @@ url = ${request-slave-frontend:connection-url}/vnc_auto.html?host=${request-slav
{% set disk_number = len(storage_dict) -%}
{% set disk_number = len(storage_dict) -%}
maximum-extra-disk-amount = {{ disk_number }}
maximum-extra-disk-amount = {{ disk_number }}
{% set iface = 'eth0' -%}
{% set iface = 'eth0' -%}
{% if
slapparameter_dict.get('use-nat', 'True') == 'T
rue' -%}
{% if
use_nat == 't
rue' -%}
{% set iface = 'eth1' -%}
{% set iface = 'eth1' -%}
# Publish NAT port mapping status
# Publish NAT port mapping status
# XXX: hardcoded value from [slap-parameter]
# XXX: hardcoded value from [slap-parameter]
...
@@ -291,13 +310,13 @@ nat-rule-url-{{port}} = [${slap-network-information:global-ipv6}]:{{external_por
...
@@ -291,13 +310,13 @@ nat-rule-url-{{port}} = [${slap-network-information:global-ipv6}]:{{external_por
{% endif -%}
{% endif -%}
{% endfor -%}
{% endfor -%}
{% endif -%}
{% endif -%}
{% if
slapparameter_dict.get('use-tap', 'False') == 'T
rue' -%}
{% if
use_tap == 't
rue' -%}
tap-ipv4 = ${slap-network-information:tap-ipv4}
tap-ipv4 = ${slap-network-information:tap-ipv4}
{% endif -%}
{% endif -%}
{% set kvm_http = 'http://${slap-network-information:local-ipv4}:' ~ slapparameter_dict.get('httpd-port', 8081) -%}
{% set kvm_http = 'http://${slap-network-information:local-ipv4}:' ~ slapparameter_dict.get('httpd-port', 8081) -%}
{% if enable_http == 'True' %}
{% if enable_http == 'True' %}
{% if
slapparameter_dict.get('use-nat', 'True') == 'T
rue' -%}
{% if
use_nat == 't
rue' -%}
{% set kvm_http = 'http://10.0.2.100' -%}
{% set kvm_http = 'http://10.0.2.100' -%}
{% endif %}
{% endif %}
{% if slapparameter_dict.get('authorized-key', '') -%}
{% if slapparameter_dict.get('authorized-key', '') -%}
...
@@ -305,13 +324,13 @@ tap-ipv4 = ${slap-network-information:tap-ipv4}
...
@@ -305,13 +324,13 @@ tap-ipv4 = ${slap-network-information:tap-ipv4}
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% if
slapparameter_dict.get('use-tap', 'False') == 'T
rue' and tap_network_dict.has_key('ipv4') -%}
{% if
use_tap == 't
rue' and tap_network_dict.has_key('ipv4') -%}
1_info = Use these configurations below to configure interface {{ iface }} in your VM.
1_info = Use these configurations below to configure interface {{ iface }} in your VM.
2_info = ${network-config:ifconfig}
2_info = ${network-config:ifconfig}
3_info = ${network-config:route-iface}
3_info = ${network-config:route-iface}
4_info = ${network-config:route-network}
4_info = ${network-config:route-network}
5_info = ${network-config:route-default}
5_info = ${network-config:route-default}
{% if enable_http == '
T
rue' %}
{% if enable_http == '
t
rue' %}
6_info = Or run in your VM the command: wget -O- {{ kvm_http }}/netconfig.sh | /bin/sh -
6_info = Or run in your VM the command: wget -O- {{ kvm_http }}/netconfig.sh | /bin/sh -
{% endif %}
{% endif %}
...
@@ -357,7 +376,7 @@ mode = {{ mode }}
...
@@ -357,7 +376,7 @@ mode = {{ mode }}
[publish-host-config]
[publish-host-config]
recipe = plone.recipe.command
recipe = plone.recipe.command
name = {{ slapparameter_dict.get('name', 'localhost') }}
name = {{ slapparameter_dict.get('name', 'localhost') }}
{% if
slapparameter_dict.get('use-tap', 'False') == 'T
rue' and tap_network_dict.has_key('ipv4') -%}
{% if
use_tap == 't
rue' and tap_network_dict.has_key('ipv4') -%}
local-ipv4 = ${slap-network-information:tap-ipv4}
local-ipv4 = ${slap-network-information:tap-ipv4}
{% else -%}
{% else -%}
local-ipv4 = 127.0.0.1
local-ipv4 = 127.0.0.1
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment