├── docs ├── ha.png ├── archi_reseau.png ├── opensteak_ha.png ├── Bridge topology.odp ├── archi_reseau_20150206.png ├── bridge_topology_network.jpg ├── opensteak_ha_20150209.png ├── bridge_topology_allinone.jpg ├── bridge_topology_controller_compute.jpg ├── BASE-NETWORKING.md ├── BASE.md ├── NETWORKS.md ├── COMPUTES.md ├── BASE-CEPH.md ├── CONTROLLERS.md └── TEST.md ├── infra ├── tools │ ├── delete_vm.sh │ ├── prepare_jump.sh │ └── foreman_cli.py ├── foreman │ ├── files │ │ ├── puppet_master │ │ │ ├── etc │ │ │ │ ├── puppet │ │ │ │ │ ├── hiera.yaml │ │ │ │ │ ├── manifests │ │ │ │ │ │ └── site.pp │ │ │ │ │ ├── hieradata │ │ │ │ │ │ └── production │ │ │ │ │ │ │ └── nodes │ │ │ │ │ │ │ └── proxy.DOMAIN.yaml │ │ │ │ │ └── auth.conf │ │ │ │ └── r10k.yaml │ │ │ ├── patches │ │ │ │ ├── add_require_json_openstack.rb.patch │ │ │ │ └── check_virsh_secret_using_secret_get_value.patch │ │ │ └── usr │ │ │ │ └── local │ │ │ │ └── bin │ │ │ │ └── opensteak-r10k-update │ │ ├── id_rsa.pub │ │ └── id_rsa │ ├── README.md │ ├── templates │ │ ├── meta-data │ │ ├── user-data │ │ ├── kvm-config │ │ ├── common.yaml │ │ └── install.sh │ └── provisioning_templates │ │ ├── preseed_default_pxelinux.tpl │ │ ├── preseed_default_finish.tpl │ │ └── preseed_default.tpl ├── opensteak │ ├── __init__.py │ ├── .gitignore │ ├── templateparser.py │ ├── conf.py │ ├── argparser.py │ ├── printer.py │ └── virsh.py ├── .gitignore ├── config │ ├── arnaud.yaml │ └── infra.sample.yaml ├── install_opensteak.py ├── create_foreman.py └── configure_foreman.py ├── CONTRIBUTORS.md ├── .gitignore ├── INSTALL.md └── README.md /docs/ha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Orange-OpenSource/opnfv/HEAD/docs/ha.png -------------------------------------------------------------------------------- /docs/archi_reseau.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Orange-OpenSource/opnfv/HEAD/docs/archi_reseau.png -------------------------------------------------------------------------------- /docs/opensteak_ha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Orange-OpenSource/opnfv/HEAD/docs/opensteak_ha.png -------------------------------------------------------------------------------- /docs/Bridge topology.odp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Orange-OpenSource/opnfv/HEAD/docs/Bridge topology.odp -------------------------------------------------------------------------------- /docs/archi_reseau_20150206.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Orange-OpenSource/opnfv/HEAD/docs/archi_reseau_20150206.png -------------------------------------------------------------------------------- /docs/bridge_topology_network.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Orange-OpenSource/opnfv/HEAD/docs/bridge_topology_network.jpg -------------------------------------------------------------------------------- /docs/opensteak_ha_20150209.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Orange-OpenSource/opnfv/HEAD/docs/opensteak_ha_20150209.png -------------------------------------------------------------------------------- /docs/bridge_topology_allinone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Orange-OpenSource/opnfv/HEAD/docs/bridge_topology_allinone.jpg -------------------------------------------------------------------------------- /docs/bridge_topology_controller_compute.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Orange-OpenSource/opnfv/HEAD/docs/bridge_topology_controller_compute.jpg -------------------------------------------------------------------------------- /infra/tools/delete_vm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | NAME=$3 4 | hammer -u $1 -p $2 host delete --name $NAME 5 | echo -e "update delete $NAME a\nupdate delete $NAME txt\nsend" | nsupdate -v -k /etc/bind/rndc.key -l 6 | -------------------------------------------------------------------------------- /infra/foreman/files/puppet_master/etc/puppet/hiera.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | :backends: 3 | # Use yaml to store data 4 | - yaml 5 | :yaml: 6 | # Per environment data 7 | :datadir: /etc/puppet/hieradata/%{environment}/ 8 | :hierarchy: 9 | - nodes/%{::fqdn} 10 | - common 11 | -------------------------------------------------------------------------------- /infra/foreman/README.md: -------------------------------------------------------------------------------- 1 | The files located in "files" folder will be copied into the foreman VM configuration disk. 2 | The files located in "templates" folder will be computed and copied into the foreman VM configuration disk. 3 | 4 | The configuration disk should be mounted in /mnt. 5 | -------------------------------------------------------------------------------- /infra/tools/prepare_jump.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Be sure that we are running as root 4 | # Test si user root 5 | if [ "Z$USER" != "Zroot" ] ; then 6 | echo "This script must be run as root" 7 | exit 1 8 | fi 9 | 10 | # Install dependencies 11 | apt-get install toto 12 | -------------------------------------------------------------------------------- /infra/foreman/templates/meta-data: -------------------------------------------------------------------------------- 1 | instance-id: ${name}; 2 | network-interfaces: | 3 | auto lo 4 | iface lo inet loopback 5 | auto eth0 6 | iface eth0 inet static 7 | address ${ip} 8 | netmask ${netmaskshort} 9 | gateway ${gateway} 10 | dns-nameservers ${dns} 11 | dns-search ${domain} 12 | local-hostname: ${name} 13 | -------------------------------------------------------------------------------- /CONTRIBUTORS.md: -------------------------------------------------------------------------------- 1 | # Contributors 2 | 3 | * Arnaud Morin (arnaudmorinol)- Orange 4 | * David Blaisonneau (davidblaisonneau-orange)- Orange 5 | * Valentin Boucher (boucherv) - Orange 6 | * Pawel Chomicki (pchomik) - Nokia 7 | * Juan Antonio Osorio (JAORMX) - Ericsson 8 | -------------------------------------------------------------------------------- /infra/foreman/files/id_rsa.pub: -------------------------------------------------------------------------------- 1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPSMymW5xheh7TEnbUBIv3w8ZvBlgIjlevj+Qdc50a8e9mvfPny1ZTVNriox/SprbvZWx1CI7WkKZKWqsNbkL2sR6ouGFFf/ItuC/fmY52NGgggBfpF82eJP/Fet+89lh3DrTd8htvDmKBNHBzpblC8kdFwpEpvvrZXDaA9JLQaAUEsKS8LaRBtbhx8/716WjzoUCE0GzZNsEctz0fZb70rNh+CyKCMkuyBFcvr+6G7f6wvZ3cXUn02HLLdqhQ5XEPZg8mUm/NiEtlxJeBcj46LSBmaGHe4iZzhZHI6KErmNGklrB16zKDJejiVWyTPEGObsv3KdsI0w47zllVUkbF arnaud@l-bibicy 2 | -------------------------------------------------------------------------------- /infra/foreman/files/puppet_master/etc/r10k.yaml: -------------------------------------------------------------------------------- 1 | # The location to use for storing cached Git repos 2 | :cachedir: '/var/cache/r10k' 3 | 4 | # A list of git repositories to create 5 | :sources: 6 | # This will clone the git repository and instantiate an environment per 7 | # branch in /etc/puppet/environments 8 | :my-org: 9 | remote: 'https://github.com/Orange-OpenSource/opnfv-r10k.git' 10 | basedir: '/etc/puppet/environments' 11 | -------------------------------------------------------------------------------- /infra/foreman/files/puppet_master/patches/add_require_json_openstack.rb.patch: -------------------------------------------------------------------------------- 1 | --- openstack.rb.ori 2015-01-22 13:35:39.375910000 +0000 2 | +++ openstack.rb 2015-01-22 13:36:12.139910000 +0000 3 | @@ -1,6 +1,7 @@ 4 | # TODO: This needs to be extracted out into openstacklib in the Kilo cycle 5 | require 'csv' 6 | require 'puppet' 7 | +require 'json' 8 | 9 | class Puppet::Error::OpenstackAuthInputError < Puppet::Error 10 | end 11 | 12 | -------------------------------------------------------------------------------- /infra/foreman/files/puppet_master/etc/puppet/manifests/site.pp: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (C) 2015 Orange Labs 3 | # 4 | # This software is distributed under the terms and conditions of the 'Apache-2.0' 5 | # license which can be found in the file 'LICENSE.txt' in this package distribution 6 | # or at 'http://www.apache.org/licenses/LICENSE-2.0'. 7 | # 8 | # Authors: Arnaud Morin 9 | # David Blaisonneau 10 | # 11 | 12 | # 13 | # The general site.pp 14 | # 15 | 16 | # Set exec path for all modules 17 | Exec { path => '/usr/bin:/usr/sbin:/bin:/sbin' } 18 | 19 | -------------------------------------------------------------------------------- /infra/foreman/files/puppet_master/patches/check_virsh_secret_using_secret_get_value.patch: -------------------------------------------------------------------------------- 1 | --- a/manifests/compute/rbd.pp 2 | +++ b/manifests/compute/rbd.pp 3 | @@ -77,7 +77,7 @@ class nova::compute::rbd ( 4 | 5 | exec { 'set-secret-value virsh': 6 | command => "/usr/bin/virsh secret-set-value --secret $(cat /etc/nova/virsh.secret) --base64 $(ceph auth get-key ${rbd_keyring})", 7 | - unless => "/usr/bin/virsh secret-list | grep ${rbd_keyring}", 8 | + unless => "/usr/bin/virsh secret-get-value ${libvirt_rbd_secret_uuid} | grep $(ceph auth get-key ${rbd_keyring})", 9 | require => Exec['get-or-set virsh secret'] 10 | } 11 | 12 | 13 | -------------------------------------------------------------------------------- /infra/opensteak/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 3 | # not use this file except in compliance with the License. You may obtain 4 | # a copy of the License at 5 | # 6 | # http://www.apache.org/licenses/LICENSE-2.0 7 | # 8 | # Unless required by applicable law or agreed to in writing, software 9 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 10 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 11 | # License for the specific language governing permissions and limitations 12 | # under the License. 13 | # 14 | # Authors: 15 | # @author: David Blaisonneau 16 | # @author: Arnaud Morin 17 | 18 | # This directory is a Python package. 19 | -------------------------------------------------------------------------------- /infra/foreman/provisioning_templates/preseed_default_pxelinux.tpl: -------------------------------------------------------------------------------- 1 | <%# 2 | kind: PXELinux 3 | name: Preseed default PXELinux 4 | oses: 5 | - Debian 6.0 6 | - Debian 7. 7 | - Debian 8. 8 | - Ubuntu 10.04 9 | - Ubuntu 12.04 10 | - Ubuntu 13.04 11 | - Ubuntu 14.04 12 | %> 13 | 14 | <% if @host.operatingsystem.name == 'Debian' -%> 15 | <% keyboard_params = "auto=true domain=#{@host.domain}" -%> 16 | <% else -%> 17 | <% keyboard_params = 'console-setup/ask_detect=false console-setup/layout=USA console-setup/variant=USA keyboard-configuration/layoutcode=us localechooser/translation/warn-light=true localechooser/translation/warn-severe=true' -%> 18 | <% end -%> 19 | DEFAULT linux 20 | 21 | LABEL linux 22 | KERNEL <%= @kernel %> 23 | APPEND initrd=<%= @initrd %> interface=auto url=<%= foreman_url('provision')%> ramdisk_size=10800 root=/dev/rd/0 rw auto hostname=<%= @host.name %> <%= keyboard_params %> locale=<%= @host.params['lang'] || 'en_US' %> 24 | IPAPPEND 2 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | 47 | # Translations 48 | *.mo 49 | *.pot 50 | 51 | # Django stuff: 52 | *.log 53 | 54 | # Sphinx documentation 55 | docs/_build/ 56 | 57 | # PyBuilder 58 | target/ 59 | -------------------------------------------------------------------------------- /infra/.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | 47 | # Translations 48 | *.mo 49 | *.pot 50 | 51 | # Django stuff: 52 | *.log 53 | 54 | # Sphinx documentation 55 | docs/_build/ 56 | 57 | # PyBuilder 58 | target/ 59 | -------------------------------------------------------------------------------- /infra/opensteak/.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | 47 | # Translations 48 | *.mo 49 | *.pot 50 | 51 | # Django stuff: 52 | *.log 53 | 54 | # Sphinx documentation 55 | docs/_build/ 56 | 57 | # PyBuilder 58 | target/ 59 | -------------------------------------------------------------------------------- /infra/foreman/files/puppet_master/usr/local/bin/opensteak-r10k-update: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | PRGNAME=$(basename $0) 3 | PATCHES="/usr/local/opensteak/infra/puppet_master/patches" 4 | 5 | # Check if we are root 6 | if [ "Z$USER" != "Zroot" ] ; then 7 | echo "You need to execute this script as root:" 8 | echo "sudo $PRGNAME" 9 | exit 1 10 | fi 11 | 12 | # Run r10k 13 | r10k deploy environment -pv 14 | 15 | # Apply the patches 16 | echo " * Applying some patches" 17 | 18 | # COMMENTED ON 2015/06/17 as seems to be patched upstream. TO BE CONFIRMED. 19 | # add_require_json_openstack.rb.patch 20 | #echo " -> add_require_json_openstack.rb.patch" 21 | #cd /etc/puppet/environments/production/modules/keystone/lib/puppet/provider/ 22 | #patch < $PATCHES/add_require_json_openstack.rb.patch 23 | 24 | # COMMENTED ON 2015/03/31 as seems to be patched upstream. TO BE CONFIRMED. 25 | # check_virsh_secret_using_secret_get_value.patch 26 | #echo " -> check_virsh_secret_using_secret_get_value.patch" 27 | #cd /etc/puppet/environments/production/modules/nova/ 28 | #patch -p1 < $PATCHES/check_virsh_secret_using_secret_get_value.patch 29 | -------------------------------------------------------------------------------- /infra/foreman/files/puppet_master/etc/puppet/hieradata/production/nodes/proxy.DOMAIN.yaml: -------------------------------------------------------------------------------- 1 | nginx::nginx_vhosts: 2 | "keystone.%{hiera('domain')}": 3 | listen_port: 5000 4 | proxy: "http://keystone.%{hiera('domain')}:5000" 5 | "glance.%{hiera('domain')}": 6 | listen_port: 9292 7 | proxy: "http://glance.%{hiera('domain')}:9292" 8 | "nova.%{hiera('domain')}": 9 | listen_port: 8774 10 | proxy: "http://nova.%{hiera('domain')}:8774" 11 | "neutron.%{hiera('domain')}": 12 | listen_port: 9696 13 | proxy: "http://neutron.%{hiera('domain')}:9696" 14 | "cinder.%{hiera('domain')}": 15 | listen_port: 8776 16 | proxy: "http://cinder.%{hiera('domain')}:8776" 17 | "%{hiera('domain')}": 18 | listen_port: 80 19 | proxy: "http://horizon.%{hiera('domain')}" 20 | "%{hiera('domain')}": 21 | listen_port: 443 22 | ssl: true 23 | ssl_cert: "/var/lib/puppet/ssl/certs/proxy.%{hiera('domain')}.pem" 24 | ssl_key: "/var/lib/puppet/ssl/private_keys/proxy.%{hiera('domain')}.pem" 25 | proxy: "http://horizon.%{hiera('domain')}" 26 | proxy_redirect: "http://stack.opensteak.fr /" 27 | 28 | -------------------------------------------------------------------------------- /infra/opensteak/templateparser.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -*- coding: utf-8 -*- 3 | # Licensed under the Apache License, Version 2.0 (the "License"); you may 4 | # not use this file except in compliance with the License. You may obtain 5 | # a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 | # License for the specific language governing permissions and limitations 13 | # under the License. 14 | # 15 | # Authors: 16 | # @author: David Blaisonneau 17 | # @author: Arnaud Morin 18 | 19 | """ 20 | Template parser 21 | """ 22 | 23 | from string import Template 24 | 25 | class OpenSteakTemplateParser: 26 | 27 | def __init__(self, filein, fileout, dictionary): 28 | """ 29 | Parse the files with the dictionary 30 | """ 31 | fin = open(filein) 32 | fout = open(fileout,'w') 33 | template = Template(fin.read()) 34 | fout.write(template.substitute(dictionary)) 35 | -------------------------------------------------------------------------------- /infra/foreman/templates/user-data: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | ############################################# 3 | # OPENSTEAK VM '${name}' 4 | ############################################# 5 | password: ${password} 6 | chpasswd: { expire: False } 7 | ssh_pwauth: True 8 | dsmode: net 9 | hostname: ${name} 10 | ############################################# 11 | # FIRST BOOT COMMAND 12 | # - reload main interface 13 | # - install puppet from puppetlabs 14 | # - remove cloud-init 15 | ############################################# 16 | runcmd: 17 | - [ sh, -c, "mount /dev/vdb /mnt"] 18 | - [ sh, -c, "sudo bash /mnt/install.sh"] 19 | # This is the id_rsa.sansmotdepasse key 20 | ssh_authorized_keys: 21 | - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDY15cdBmIs2XOpe4EiFCsaY6bmUmK/GysMoLl4UG51JCfJwvwoWCoA+6mDIbymZxhxq9IGxilp/yTA6WQ9s/5pBag1cUMJmFuda9PjOkXl04jgqh5tR6I+GZ97AvCg93KAECis5ubSqw1xOCj4utfEUtPoF1OuzqM/lE5mY4N6VKXn+fT7pCD6cifBEs6JHhVNvs5OLLp/tO8Pa3kKYQOdyS0xc3rh+t2lrzvKUSWGZbX+dLiFiEpjsUL3tDqzkEMNUn4pdv69OJuzWHCxRWPfdrY9Wg0j3mJesP29EBht+w+EC9/kBKq+1VKdmsXUXAcjEvjovVL8l1BrX3BY0R8D sansmotdepasse 22 | ############################################# 23 | # FINAL MESSAGE AT END OF BOOT 24 | ############################################# 25 | final_message: "The system '${name}' is finally up, after $$UPTIME seconds" 26 | -------------------------------------------------------------------------------- /infra/foreman/files/id_rsa: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEpQIBAAKCAQEAz0jMplucYXoe0xJ21ASL98PGbwZYCI5Xr4/kHXOdGvHvZr3z 3 | 58tWU1Ta4qMf0qa272VsdQiO1pCmSlqrDW5C9rEeqLhhRX/yLbgv35mOdjRoIIAX 4 | 6RfNniT/xXrfvPZYdw603fIbbw5igTRwc6W5QvJHRcKRKb762Vw2gPSS0GgFBLCk 5 | vC2kQbW4cfP+9elo86FAhNBs2TbBHLc9H2W+9KzYfgsigjJLsgRXL6/uhu3+sL2d 6 | 3F1J9Nhyy3aoUOVxD2YPJlJvzYhLZcSXgXI+Oi0gZmhh3uImc4WRyOihK5jRpJaw 7 | desygyXo4lVskzxBjm7L9ynbCNMOO85ZVVJGxQIDAQABAoIBAQCaOWcSy4yRtiPj 8 | FZTV8MAXS1GD36t2SjoRhLTL+O5GUwW1YtVrfA2xmKv2/jm6KJJpkgPdG83y9NLU 9 | 9ZrZNlWaaHQQQocVB7ovrB/qdLzbU+i5bbTcl/pDlPG8g8yeMoflpUqK7AzfV0uR 10 | KGwWj5JErjC7RaVt8wt+164xykbFyZeUu9htNthFD/OPaIPqgv6AoJdEULyGrTbd 11 | SRyJ01n0beGkB0o+0dnOEO34K+pU0Zzk+rAcOEl3UNkpxOzedEFOR6NdnX1eH4t4 12 | a6OZgskcVjyxFQPAyhcSkQ2iWncQx2ritTclst4NFjBae5hwYgEB4S9ZN5IOueMH 13 | eYhxYthNAoGBAPXtSDmRGPc4EHDBrbgDn4vhxK7QN35bWFW1KvHLD0hBBJO57GqT 14 | jGCJsbkw6peERuFV8qq+Bvz0nvlKl9humB1djlndUETksUTrNz73XxpJJ8L5parF 15 | okx0QLMXONOP5b6yGWYay3QD0gNz/HYVf//oDTdWRhbq5EY6VarOagfjAoGBANfG 16 | UrlxEYHwq3TE7unvgaao5Vpmw8Hqir2bnl2zKmPoV8ds/V+paMnV6Hhzgzu3bKgF 17 | ukZgAizEcfvxrxnfIraRJTI5xgBoIl8gdbsWkLre4qKpVSAkw4JLyzVVlXCyKYHp 18 | ocjeNVbO5Z2Yft0cv30LfeX+DEDeQS12RHLu/Sc3AoGBAMns2ZfC5p/encknje8A 19 | spjVeHwdJOOQNxiwl6FPHK40DIELcO4VVnbRuGaZnpVoHBbbTlQZkX1TkdCZCdLB 20 | BA9giQiKamUW7eLry0HdNW5M0OQLvZZZjih+b71c/ODhTz/j1mz65UDN/jutmYaP 21 | orjJnUhpg0U/+s0bCsojj/YHAoGBAKtsMhiFjaUv8OdJ9Y0A7H3dPKk/b1JF5YeR 22 | dJV4W7sXwXT8T6eKTWfce14GV0JADSDHvB9g8xlh0DSa48OoFEn6shRe9cEo+fWd 23 | Mis6WC0+Gcukv65TxsdjM8PhhGIOCQ/e7ttIPhQDN0Sm/FLqHe9YC+OGm3GFoT5e 24 | 8S5mU9StAoGABFwqkFELU84twzKYJCVPZPktwtfrD0Hkbd9pk0ebuSnQ3bATFIyU 25 | CDspTADbY2IgC53u+XAhTd5BOsicTtMM9x1p5EOglbK1ANagWuGlzVfdbp+bmql9 26 | S8AaH22lha5vCfHHfAN2NSkQ+ABZnNpP66nFx06VcyEYkhuZgd6s5A0= 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /infra/foreman/templates/kvm-config: -------------------------------------------------------------------------------- 1 | 2 | ${name} 3 | ${ram} 4 | ${ram} 5 | ${cpu} 6 | 7 | hvm 8 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | preserve 18 | restart 19 | restart 20 | 21 | /usr/bin/qemu-system-x86_64 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |