Add test results for Cobbler.
Change-Id: I2450388295dfa29c73234ea70082ac6820bf9db4
@ -17,4 +17,4 @@ Test Results
|
||||
container_platforms/index
|
||||
neutron_features/index
|
||||
hardware_features/index
|
||||
|
||||
provisioning/index
|
||||
|
BIN
doc/source/test_results/provisioning/cobbler/Network_Scheme.png
Normal file
After Width: | Height: | Size: 60 KiB |
@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
|
||||
DNS_DOMAIN="cobbler-test.local"
|
||||
PROFILE="ubuntu14-x86_64"
|
||||
ENV_NAME="cobbler-test"
|
||||
INTERFACE_1="p1p1"
|
||||
IP_RANGE_1="10.50.11.1 10.50.20.254"
|
||||
NETMASK_1="255.255.0.0"
|
||||
GATEWAY_1="10.50.0.10"
|
||||
DNS1="10.50.0.10"
|
||||
|
||||
SYSTEM_IPMI_USER="root"
|
||||
SYSTEM_IPMI_PASS="calvincalvin"
|
||||
|
||||
SYSTEMS_LIST_FILE="systems.list"
|
||||
SYSTEMS_COUNT=`wc -l ${SYSTEMS_LIST_FILE} | awk '{print $1}'`
|
||||
|
||||
for EXISTED_SYSTEM in `cobbler system list`
|
||||
do
|
||||
EXISTED_IP_ADDRESSES=(`cobbler system dumpvars --name=${EXISTED_SYSTEM} | grep ^ip_address | awk -F": " '{print $2}'`)
|
||||
done
|
||||
|
||||
IP_ADDRESSES=(`prips ${IP_RANGE_1}`)
|
||||
|
||||
for IP in ${EXISTED_IP_ADDRESSES[@]}
|
||||
do
|
||||
for ARRAY_ELEMENT_NUM in $(seq 0 ${#IP_ADDRESSES[@]})
|
||||
do
|
||||
if [ "${IP_ADDRESSES[${ARRAY_ELEMENT_NUM}]}" == "${IP}" ]
|
||||
then
|
||||
unset IP_ADDRESSES[${ARRAY_ELEMENT_NUM}] && IP_ADDRESSES=(${IP_ADDRESSES[@]})
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
for SYSTEM_NUM in $(seq 1 ${SYSTEMS_COUNT})
|
||||
do
|
||||
SYSTEM_NAME=`awk -F"," '{print $1}' ${SYSTEMS_LIST_FILE} | head -${SYSTEM_NUM} | tail -1`
|
||||
SYSTEM_MAC=`awk -F"," '{print $3}' ${SYSTEMS_LIST_FILE} | head -${SYSTEM_NUM} | tail -1`
|
||||
SYSTEM_IPMI_ADDRESS=`awk -F"," '{print $2}' ${SYSTEMS_LIST_FILE} | head -${SYSTEM_NUM} | tail -1`
|
||||
NODE_IP_1=${IP_ADDRESSES[${SYSTEM_NUM}]}
|
||||
cobbler system add --name=${SYSTEM_NAME} \
|
||||
--hostname=${SYSTEM_NAME} \
|
||||
--dns-name=${SYSTEM_NAME}.${DNS_DOMAIN} \
|
||||
--name-servers-search=${DNS_DOMAIN} \
|
||||
--profile=${PROFILE} \
|
||||
--comment=${ENV_NAME}\
|
||||
--netboot-enabled=yes \
|
||||
--interface=${INTERFACE_1} \
|
||||
--mac-address=${SYSTEM_MAC} \
|
||||
--ip-address=${NODE_IP_1} \
|
||||
--netmask=${NETMASK_1} \
|
||||
--virt-bridge=pxe \
|
||||
--virt-file-size=100 \
|
||||
--power-type=ipmilan \
|
||||
--power-address=${SYSTEM_IPMI_ADDRESS} \
|
||||
--power-user=${SYSTEM_IPMI_USER} \
|
||||
--power-pass=${SYSTEM_IPMI_PASS} \
|
||||
--power-id=lanplus \
|
||||
--kickstart=/var/lib/cobbler/kickstarts/sample.seed
|
||||
done
|
641
doc/source/test_results/provisioning/cobbler/index.rst
Normal file
@ -0,0 +1,641 @@
|
||||
|
||||
.. _Measuring_performance_of_Cobbler:
|
||||
|
||||
*******************************************
|
||||
Results of measuring performance of Cobbler
|
||||
*******************************************
|
||||
|
||||
:Abstract:
|
||||
|
||||
This document includes performance test results of `Cobbler`_
|
||||
service as a provisioning system. All test have been performed
|
||||
regarding :ref:`Measuring_performance_of_provisioning_systems`
|
||||
|
||||
|
||||
Environment description
|
||||
=======================
|
||||
Hardware configuration of each server
|
||||
-------------------------------------
|
||||
|
||||
.. table:: Description of servers hardware
|
||||
|
||||
+-------+----------------+------------------------+------------------------+
|
||||
|server |name |728983-comp-disk-242 |nodes-{1..195} |
|
||||
| +----------------+------------------------+------------------------+
|
||||
| |role |Cobbler |nodes to be provisioned |
|
||||
| +----------------+------------------------+------------------------+
|
||||
| |vendor,model |HP,DL380 Gen9 |HP,DL380 Gen9 |
|
||||
| +----------------+------------------------+------------------------+
|
||||
| |operating_system| | 3.13.0-76-generic | | 3.13.0-83-generic |
|
||||
| | | | Ubuntu-trusty | | Ubuntu-trusty |
|
||||
| | | | x86_64 | | x86_64 |
|
||||
+-------+----------------+------------------------+------------------------+
|
||||
|CPU |vendor,model |Intel,E5-2680 v3 |Intel,E5-2680 v3 |
|
||||
| +----------------+------------------------+------------------------+
|
||||
| |processor_count |2 |2 |
|
||||
| +----------------+------------------------+------------------------+
|
||||
| |core_count |12 |12 |
|
||||
| +----------------+------------------------+------------------------+
|
||||
| |frequency_MHz |2500 |2500 |
|
||||
+-------+----------------+------------------------+------------------------+
|
||||
|RAM |vendor,model |HP,752369-081 |HP,752369-081 |
|
||||
| +----------------+------------------------+------------------------+
|
||||
| |amount_MB |262144 |262144 |
|
||||
+-------+----------------+------------------------+------------------------+
|
||||
|NETWORK|interface_name |p1p1 |p1p1 |
|
||||
| +----------------+------------------------+------------------------+
|
||||
| |vendor,model |Intel,X710 Dual Port |Intel,X710 Dual Port |
|
||||
| +----------------+------------------------+------------------------+
|
||||
| |bandwidth |10G |10G |
|
||||
+-------+----------------+------------------------+------------------------+
|
||||
|STORAGE|dev_name |/dev/sda |/dev/sda |
|
||||
| +----------------+------------------------+------------------------+
|
||||
| |vendor,model | | raid10 - HP P840 | | raid10 - HP P840 |
|
||||
| | | | 12 disks EH0600JEDHE | | 12 disks EH0600JEDHE |
|
||||
| +----------------+------------------------+------------------------+
|
||||
| |SSD/HDD |HDD |HDD |
|
||||
| +----------------+------------------------+------------------------+
|
||||
| |size | 3,6TB | 3,6TB |
|
||||
+-------+----------------+------------------------+------------------------+
|
||||
|
||||
Network scheme and part of configuration of hardware network switches
|
||||
---------------------------------------------------------------------
|
||||
Network scheme of the environment:
|
||||
|
||||
.. image:: Network_Scheme.png
|
||||
:alt: Network Scheme of the environment
|
||||
:scale: 65
|
||||
|
||||
Here is the part of switch configuration for each switch port which connected to
|
||||
p1p1 interface of a server:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
switchport mode trunk
|
||||
switchport trunk native vlan 600
|
||||
switchport trunk allowed vlan 600-602,630-649
|
||||
spanning-tree port type edge trunk
|
||||
spanning-tree bpduguard enable
|
||||
no snmp trap link-status
|
||||
|
||||
Software configuration of Cobbler service
|
||||
-----------------------------------------
|
||||
Installation of Cobbler:
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
To install and configure Cobbler section
|
||||
`Installation script and config files`_ has been used.
|
||||
|
||||
The nodes has Intel X710 NIC therefore we had to provide i40e driver to
|
||||
Debian installer. The following steps was performed to do that:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
mkdir /var/www/html/ubuntu_custom_packages
|
||||
cd /var/www/html/ubuntu_custom_packages
|
||||
wget <address_to_builded_deb_package>
|
||||
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
|
||||
|
||||
Cobbler has the following issue https://github.com/cobbler/cobbler/issues/1530.
|
||||
Due the bug we can't add one more repository for provisioning step. Also we
|
||||
need to allow root access via ssh after provisioning. Therefore:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
sed -i s/"\$SNIPPET('late_apt_repo_config')"/\
|
||||
"\$SNIPPET('late_apt_repo_config')\\n\
|
||||
echo \"deb http:\/\/\$server\/ubuntu_custom_packages\/ .\/\" \>\> \/etc\/apt\/sources.list\\n\
|
||||
apt\-get update \&\& apt\-get \-y \-\-force\-yes install i40e\-dkms\\n\
|
||||
sed \-i \'s\/PermitRootLogin\.\*\/PermitRootLogin yes\/g\' \/etc\/ssh\/sshd_config"/ \
|
||||
/var/lib/cobbler/scripts/preseed_late_default
|
||||
|
||||
.. table:: Versions of some software
|
||||
|
||||
+---------------+------------------+
|
||||
|Software |Version |
|
||||
+===============+==================+
|
||||
|Ubuntu |Ubuntu 14.04.3 LTS|
|
||||
+---------------+------------------+
|
||||
|Cobbler |2.6.11 |
|
||||
+---------------+------------------+
|
||||
|Apache2 |2.4.7 |
|
||||
+---------------+------------------+
|
||||
|Bind9 |1:9.9.5 |
|
||||
+---------------+------------------+
|
||||
|tftpd-hpa |5.2 |
|
||||
+---------------+------------------+
|
||||
|isc-dhcp-server|4.2.4 |
|
||||
+---------------+------------------+
|
||||
|syslinux |6.03 |
|
||||
+---------------+------------------+
|
||||
|
||||
Test tool:
|
||||
^^^^^^^^^^
|
||||
`Script to start provisioning and collect metrics`_ was used to collect
|
||||
performance metrics during the tests.
|
||||
|
||||
Operating system configuration:
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
You can find outputs of some commands and /etc folder in the following archive:
|
||||
:download:`server_description_of_728983-comp-disk-242.tar.gz <configs/server_description_of_728983-comp-disk-242.tar.gz>`
|
||||
|
||||
Software configuration of provisioned nodes
|
||||
-------------------------------------------
|
||||
|
||||
.. table:: Versions of some software
|
||||
|
||||
+-----------+------------------+
|
||||
|Software |Version |
|
||||
+===========+==================+
|
||||
|Ubuntu |Ubuntu 14.04.3 LTS|
|
||||
+-----------+------------------+
|
||||
|
||||
Operating system:
|
||||
^^^^^^^^^^^^^^^^^
|
||||
You can find outputs of some commands and /etc folder in the following archive:
|
||||
:download:`server_description_of_728997-comp-disk-228.tar.gz <configs/server_description_of_728997-comp-disk-228.tar.gz>`
|
||||
|
||||
Testing process
|
||||
===============
|
||||
Preparation
|
||||
-----------
|
||||
1.
|
||||
Cobbler was installed on top of 728983-comp-disk-242 server as described in
|
||||
`Installation of Cobbler:`_ section.
|
||||
|
||||
2.
|
||||
systems.list file (with matching of server name, server ILO address and mac
|
||||
address of interface connected to Cobbler) was created:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
root@728983-comp-disk-242:~# tail -3 systems.list
|
||||
729691-comp-disk-201,10.15.242.170,68:05:ca:38:64:d4
|
||||
729692-comp-disk-200,10.15.242.171,3c:fd:fe:9c:62:30
|
||||
729693-comp-disk-199,10.15.242.172,3c:fd:fe:9c:68:3c
|
||||
|
||||
3.
|
||||
Cobbler systems was added using `Script to add cobbler systems`_.
|
||||
|
||||
Testing. Case when pxlinux downloads kernel via HTTP
|
||||
----------------------------------------------------
|
||||
During `Installation of Cobbler:`_ we copied
|
||||
/etc/cobbler/pxe/pxesystem.template (:ref:`pxesystem_http`). It means that on
|
||||
the step when pxelinux downloads kernel and initrd files via HTTP protocol.
|
||||
|
||||
1.
|
||||
Performed `Script to start provisioning and collect metrics`_ with option "1"
|
||||
to provision 1 server.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
bash -ex measure.sh 1
|
||||
|
||||
2. Save /var/log/results.csv file
|
||||
|
||||
.. code:: bash
|
||||
|
||||
mv /var/log/results.csv /var/log/results-http-1.csv
|
||||
|
||||
3.
|
||||
The steps 1 and 2 was repeated with the following numbers of nodes:
|
||||
1,10,20,40
|
||||
|
||||
As a result of this part we got the following CSV files:
|
||||
|
||||
:download:`METRICS(NUMBER_OF_NODES=1) <./results/results-http-1.csv>`
|
||||
:download:`METRICS(NUMBER_OF_NODES=10) <./results/results-http-10.csv>`
|
||||
:download:`METRICS(NUMBER_OF_NODES=20) <./results/results-http-20.csv>`
|
||||
:download:`METRICS(NUMBER_OF_NODES=40) <./results/results-http-40.csv>`
|
||||
|
||||
During the las test when we provisioned 40 nodes 2 nodes wasn't provisioned due
|
||||
the issue `Linux kernel can't be downloaded by pxelinux via HTTP`_
|
||||
|
||||
Testing. Case when pxlinux downloads kernel via TFTP
|
||||
----------------------------------------------------
|
||||
During the following steps we change pxe configurations for all systems to
|
||||
download kernel and initrd files via TFTP protocol.
|
||||
|
||||
1. Change pxe template
|
||||
|
||||
.. code:: bash
|
||||
|
||||
sed -i s/"http:\/\/\$server:\$http_port\/cblr\/"// \
|
||||
/etc/cobbler/pxe/pxesystem.template
|
||||
|
||||
2.
|
||||
Performed `Script to start provisioning and collect metrics`_ with option "1"
|
||||
to provision 1 server.
|
||||
|
||||
.. code:: bash
|
||||
|
||||
bash -ex measure.sh 1
|
||||
|
||||
3. Save /var/log/results.csv file
|
||||
|
||||
.. code:: bash
|
||||
|
||||
mv /var/log/results.csv /var/log/results-http-1.csv
|
||||
|
||||
4.
|
||||
The steps 2 and 3 was repeated with the following numbers of nodes:
|
||||
1,10,20,40,80,160,195
|
||||
|
||||
As a result of this part we got the following CSV files:
|
||||
|
||||
:download:`METRICS(NUMBER_OF_NODES=1) <./results/results-tftp-1.csv>`
|
||||
:download:`METRICS(NUMBER_OF_NODES=10) <./results/results-tftp-10.csv>`
|
||||
:download:`METRICS(NUMBER_OF_NODES=20) <./results/results-tftp-20.csv>`
|
||||
:download:`METRICS(NUMBER_OF_NODES=40) <./results/results-tftp-40.csv>`
|
||||
:download:`METRICS(NUMBER_OF_NODES=80) <./results/results-tftp-80.csv>`
|
||||
:download:`METRICS(NUMBER_OF_NODES=160) <./results/results-tftp-160.csv>`
|
||||
:download:`METRICS(NUMBER_OF_NODES=195) <./results/results-tftp-195.csv>`
|
||||
|
||||
Results
|
||||
=======
|
||||
Case when pxlinux downloads kernel via HTTP
|
||||
-------------------------------------------
|
||||
After simple processing results the following plots for performance metrics
|
||||
collected during provisioning of the nodes in depend on time created (click to
|
||||
expand an image):
|
||||
|
||||
CPU(TIME), RAM(TIME)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
+---------+----------------------------------+----------------------------------+
|
||||
|Number of|Plot CPU(TIME) |Plot RAM(TIME) |
|
||||
|nodes | | |
|
||||
+=========+==================================+==================================+
|
||||
|1 |.. image:: results/http-cpu-1.png |.. image:: results/http-ram-1.png |
|
||||
| | :alt: CPU_USAGE(TIME, NODES=1) | :alt: RAM_USAGE(TIME, NODES=1) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+----------------------------------+----------------------------------+
|
||||
|10 |.. image:: results/http-cpu-10.png|.. image:: results/http-ram-10.png|
|
||||
| | :alt: CPU_USAGE(TIME, NODES=10)| :alt: RAM_USAGE(TIME, NODES=10)|
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+----------------------------------+----------------------------------+
|
||||
|20 |.. image:: results/http-cpu-20.png|.. image:: results/http-ram-20.png|
|
||||
| | :alt: CPU_USAGE(TIME, NODES=20)| :alt: RAM_USAGE(TIME, NODES=20)|
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+----------------------------------+----------------------------------+
|
||||
|40 |.. image:: results/http-cpu-40.png|.. image:: results/http-ram-40.png|
|
||||
| | :alt: CPU_USAGE(TIME, NODES=40)| :alt: RAM_USAGE(TIME, NODES=40)|
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+----------------------------------+----------------------------------+
|
||||
|
||||
NET(TIME), DISK(TIME)
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
+---------+----------------------------------+-----------------------------------+
|
||||
|Number of|Plot NET(TIME) |Plot DISK(TIME) |
|
||||
|nodes | | |
|
||||
+=========+==================================+===================================+
|
||||
|1 |.. image:: results/http-net-1.png |.. image:: results/http-disk-1.png |
|
||||
| | :alt: NET_USAGE(TIME, NODES=1) | :alt: DISK_USAGE(TIME, NODES=1) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+----------------------------------+-----------------------------------+
|
||||
|10 |.. image:: results/http-net-10.png|.. image:: results/http-disk-10.png|
|
||||
| | :alt: NET_USAGE(TIME, NODES=10)| :alt: DISK_USAGE(TIME, NODES=10)|
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+----------------------------------+-----------------------------------+
|
||||
|20 |.. image:: results/http-net-20.png|.. image:: results/http-disk-20.png|
|
||||
| | :alt: NET_USAGE(TIME, NODES=20)| :alt: DISK_USAGE(TIME, NODES=20)|
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+----------------------------------+-----------------------------------+
|
||||
|40 |.. image:: results/http-net-40.png|.. image:: results/http-disk-40.png|
|
||||
| | :alt: NET_USAGE(TIME, NODES=40)| :alt: DISK_USAGE(TIME, NODES=40)|
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+----------------------------------+-----------------------------------+
|
||||
|
||||
The following table and graphs show how performance metrics and provisioning
|
||||
time parameters depend on numbers of nodes.
|
||||
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|numbers of nodes |1 |10 |20 |40 |
|
||||
+======================+===============+===============+===============+================+
|
||||
|provisioning time |633.341015606 |642.138856745 |667.484074798 |1322.96068455 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|cpu_usage_max |1.228 |5.316 |9.954 |19.386 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|cpu_usage_min |0 |0 |0 |0 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|cpu_usage_average |0.04806940063 |0.09161897356 |0.1349446108 |0.1451919879 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|cpu_usage_percentile |0.083 |0.146 |0.25 |0.271 |
|
||||
|90% | | | | |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|ram_usage_max |5200.3 |5305.52 |5426.92 |5672.05 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|ram_usage_min |5179.25 |5165.86 |5175.59 |5183.7 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|ram_usage_average |5183.245536 |5174.417621 |5191.933563 |5205.502789 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|ram_usage_percentile |5185.981 |5177.15 |5199.619 |5220.494 |
|
||||
|90% | | | | |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|net_recv_max |4.922 |10.5239 |19.0217 |17.0064 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|net_recv_min |0 |0 |0 |0 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|net_recv_average |0.0235053613 |0.188453268 |0.3578001869 |0.35373526 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|net_recv_percentile |0.0126724 |0.428462 |0.8075162 |0.9857374 |
|
||||
|90% | | | | |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|net_send_max |491.92 |1300.81 |2184.08 |1857.75 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|net_send_min |0 |0 |0 |0 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|net_send_average |3.658875403 |36.04228255 |69.38244342 |68.31148501 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|net_send_percentile |0.01753312 |126.2174 |233.9985 |255.4942 |
|
||||
|90% | | | | |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|dsk_io_read_max |0.074 |0.074 |0.074 |0.073 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|dsk_io_read_min |0 |0 |0 |0 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|dsk_io_read_average |0.0001167192429|0.0001150855365|0.0001107784431|0.00005517762661|
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|dsk_io_read_percentile|0 |0 |0 |0 |
|
||||
|90% | | | | |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|dsk_io_writ_max |60 |104 |223 |265 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|dsk_io_writ_min |0 |0 |0 |0 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|dsk_io_writ_average |1.433591483 |1.735454121 |2.142062874 |1.789037793 |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|dsk_io_writ_percentile|5 |4 |6 |5 |
|
||||
|90% | | | | |
|
||||
+----------------------+---------------+---------------+---------------+----------------+
|
||||
|
||||
PROVISIONING_TIME(NODES)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. image:: results/http-provisioning_time.png
|
||||
:alt: PUSH_TIME
|
||||
:scale: 50
|
||||
|
||||
CPU(NODES), RAM(NODES)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
+-------------------------------+-------------------------------+
|
||||
|Plot CPU(NODES) |Plot RAM(NODES) |
|
||||
+===============================+===============================+
|
||||
|.. image:: results/http-cpu.png|.. image:: results/http-ram.png|
|
||||
| :alt: CPU_USAGE(NODES) | :alt: RAM_USAGE(NODES) |
|
||||
| :scale: 25 | :scale: 25 |
|
||||
+-------------------------------+-------------------------------+
|
||||
|
||||
NET(NODES), DISK(NODES)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
+-------------------------------+--------------------------------+
|
||||
|Plot NET(NODES) |Plot DISK(NODES) |
|
||||
+===============================+================================+
|
||||
|.. image:: results/http-net.png|.. image:: results/http-disk.png|
|
||||
| :alt: NET_USAGE(NODES) | :alt: DISK_USAGE(NODES) |
|
||||
| :scale: 25 | :scale: 25 |
|
||||
+-------------------------------+--------------------------------+
|
||||
|
||||
Case when pxlinux downloads kernel via TFTP
|
||||
-------------------------------------------
|
||||
After simple processing results the following plots for performance metrics
|
||||
collected during provisioning of the nodes in depend on time created (click to
|
||||
expand an image):
|
||||
|
||||
CPU(TIME), RAM(TIME)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
+---------+-----------------------------------+-----------------------------------+
|
||||
|Number of|Plot CPU(TIME) |Plot RAM(TIME) |
|
||||
|nodes | | |
|
||||
+=========+===================================+===================================+
|
||||
|1 |.. image:: results/tftp-cpu-1.png |.. image:: results/tftp-ram-1.png |
|
||||
| | :alt: CPU_USAGE(TIME, NODES=1) | :alt: RAM_USAGE(TIME, NODES=1) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+-----------------------------------+
|
||||
|10 |.. image:: results/tftp-cpu-10.png |.. image:: results/tftp-ram-10.png |
|
||||
| | :alt: CPU_USAGE(TIME, NODES=10) | :alt: RAM_USAGE(TIME, NODES=10) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+-----------------------------------+
|
||||
|20 |.. image:: results/tftp-cpu-20.png |.. image:: results/tftp-ram-20.png |
|
||||
| | :alt: CPU_USAGE(TIME, NODES=20) | :alt: RAM_USAGE(TIME, NODES=20) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+-----------------------------------+
|
||||
|40 |.. image:: results/tftp-cpu-40.png |.. image:: results/tftp-ram-40.png |
|
||||
| | :alt: CPU_USAGE(TIME, NODES=40) | :alt: RAM_USAGE(TIME, NODES=40) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+-----------------------------------+
|
||||
|80 |.. image:: results/tftp-cpu-80.png |.. image:: results/tftp-ram-80.png |
|
||||
| | :alt: CPU_USAGE(TIME, NODES=40) | :alt: RAM_USAGE(TIME, NODES=40) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+-----------------------------------+
|
||||
|160 |.. image:: results/tftp-cpu-160.png|.. image:: results/tftp-ram-160.png|
|
||||
| | :alt: CPU_USAGE(TIME, NODES=40) | :alt: RAM_USAGE(TIME, NODES=40) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+-----------------------------------+
|
||||
|195 |.. image:: results/tftp-cpu-195.png|.. image:: results/tftp-ram-195.png|
|
||||
| | :alt: CPU_USAGE(TIME, NODES=40) | :alt: RAM_USAGE(TIME, NODES=40) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+-----------------------------------+
|
||||
|
||||
|
||||
NET(TIME), DISK(TIME)
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
+---------+-----------------------------------+------------------------------------+
|
||||
|Number of|Plot NET(TIME) |Plot DISK(TIME) |
|
||||
|nodes | | |
|
||||
+=========+===================================+====================================+
|
||||
|1 |.. image:: results/tftp-net-1.png |.. image:: results/tftp-disk-1.png |
|
||||
| | :alt: NET_USAGE(TIME, NODES=1) | :alt: DISK_USAGE(TIME, NODES=1) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+------------------------------------+
|
||||
|10 |.. image:: results/tftp-net-10.png |.. image:: results/tftp-disk-10.png |
|
||||
| | :alt: NET_USAGE(TIME, NODES=10) | :alt: DISK_USAGE(TIME, NODES=10) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+------------------------------------+
|
||||
|20 |.. image:: results/tftp-net-20.png |.. image:: results/tftp-disk-20.png |
|
||||
| | :alt: NET_USAGE(TIME, NODES=20) | :alt: DISK_USAGE(TIME, NODES=20) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+------------------------------------+
|
||||
|40 |.. image:: results/tftp-net-40.png |.. image:: results/tftp-disk-40.png |
|
||||
| | :alt: NET_USAGE(TIME, NODES=40) | :alt: DISK_USAGE(TIME, NODES=40) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+------------------------------------+
|
||||
|80 |.. image:: results/tftp-net-80.png |.. image:: results/tftp-disk-80.png |
|
||||
| | :alt: NET_USAGE(TIME, NODES=80) | :alt: DISK_USAGE(TIME, NODES=80) |
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+------------------------------------+
|
||||
|160 |.. image:: results/tftp-net-160.png|.. image:: results/tftp-disk-160.png|
|
||||
| | :alt: NET_USAGE(TIME, NODES=160)| :alt: DISK_USAGE(TIME, NODES=160)|
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+------------------------------------+
|
||||
|195 |.. image:: results/tftp-net-195.png|.. image:: results/tftp-disk-195.png|
|
||||
| | :alt: NET_USAGE(TIME, NODES=195)| :alt: DISK_USAGE(TIME, NODES=195)|
|
||||
| | :scale: 20 | :scale: 20 |
|
||||
+---------+-----------------------------------+------------------------------------+
|
||||
|
||||
The following table and graphs show how performance metrics and provisioning
|
||||
time parameters depend on numbers of nodes.
|
||||
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|numbers of nodes |1 |10 |20 |40 |80 |160 |195 |
|
||||
+======================+===============+===============+===============+=============+==============+===============+================+
|
||||
|provisioning time |655.309167699 |685.366625243 |697.005017299 |716.179839426|768.240187372 |795.676431454 |798.103271441 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|cpu_usage_max |1.271 |4.88 |6.857 |19.866 |38.46 |75.475 |85.182 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|cpu_usage_min |0 |0 |0 |0 |0 |0 |0 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|cpu_usage_average |0.04915091463 |0.09638921283 |0.1376284075 |0.2399679219 |0.3951248375 |0.7407713568 |0.9038723404 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|cpu_usage_percentile |0.083 |0.167 |0.25 |0.488 |0.9172 |2.0905 |2.2302 |
|
||||
|90% | | | | | | | |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|ram_usage_max |5205.15 |5323.44 |5448.61 |5684.64 |6172.27 |7134.59 |7582.7 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|ram_usage_min |5181.74 |5185.72 |5203.85 |5191.63 |5201.07 |5206.32 |5226.64 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|ram_usage_average |5185.197835 |5194.588353 |5222.031549 |5218.299512 |5240.278635 |5276.185992 |5301.640676 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|ram_usage_percentile |5186.965 |5197.37 |5228.904 |5228.812 |5249.982 |5280.4 |5280.912 |
|
||||
|90% | | | | | | | |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|net_recv_max |4.03802 |16.0916 |23.9195 |31.5682 |45.9824 |60.1388 |93.5101 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|net_recv_min |0 |0 |0 |0 |0 |0 |0 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|net_recv_average |0.02883827959 |0.2355115738 |0.4605028878 |0.8857573161 |1.643228416 |3.174715098 |3.858486644 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|net_recv_percentile |0.01241305 |0.4111175 |0.9639786 |2.218254 |3.943012 |8.279855 |9.897108 |
|
||||
|90% | | | | | | | |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|net_send_max |370.962 |1535.99 |1815.63 |1987.61 |3184.7 |5157.32 |7434.88 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|net_send_min |0 |0 |0 |0 |0 |0 |0 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|net_send_average |3.53548533 |33.7695734 |66.46850655 |129.2245215 |240.9720221 |465.5923141 |565.352486 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|net_send_percentile |0.01602555 |96.58555 |206.7048 |489.8658 |862.1248 |1643.095 |1964.3 |
|
||||
|90% | | | | | | | |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|dsk_io_read_max |0.072 |0.072 |0.072 |0.072 |1 |0.071 |0.07 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|dsk_io_read_min |0 |0 |0 |0 |0 |0 |0 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|dsk_io_read_average |0.0001097560976|0.0001049562682|0.0001032998565|0.00010041841|0.001394018205|0.0000891959799|0.00008760951189|
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|dsk_io_read_percentile|0 |0 |0 |0 |0 |0 |0 |
|
||||
|90% | | | | | | | |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|dsk_io_writ_max |61 |463 |427 |463 |55 |463 |428 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|dsk_io_writ_min |0 |0 |0 |0 |0 |0 |0 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|dsk_io_writ_average |1.321489329 |1.940080175 |2.288228121 |2.612129707 |1.923149545 |3.551388191 |3.694494368 |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|dsk_io_writ_percentile|5 |3 |3 |6 |4 |9 |11 |
|
||||
|90% | | | | | | | |
|
||||
+----------------------+---------------+---------------+---------------+-------------+--------------+---------------+----------------+
|
||||
|
||||
PROVISIONING_TIME(NODES)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. image:: results/tftp-provisioning_time.png
|
||||
:alt: PUSH_TIME
|
||||
:scale: 50
|
||||
|
||||
CPU(NODES), RAM(NODES)
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
+-------------------------------+-------------------------------+
|
||||
|Plot CPU(NODES) |Plot RAM(NODES) |
|
||||
+===============================+===============================+
|
||||
|.. image:: results/tftp-cpu.png|.. image:: results/tftp-ram.png|
|
||||
| :alt: CPU_USAGE(NODES) | :alt: RAM_USAGE(NODES) |
|
||||
| :scale: 25 | :scale: 25 |
|
||||
+-------------------------------+-------------------------------+
|
||||
|
||||
NET(NODES), DISK(NODES)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
+-------------------------------+--------------------------------+
|
||||
|Plot NET(NODES) |Plot DISK(NODES) |
|
||||
+===============================+================================+
|
||||
|.. image:: results/tftp-net.png|.. image:: results/tftp-disk.png|
|
||||
| :alt: NET_USAGE(NODES) | :alt: DISK_USAGE(NODES) |
|
||||
| :scale: 25 | :scale: 25 |
|
||||
+-------------------------------+--------------------------------+
|
||||
|
||||
Issues which have been found during the tests
|
||||
=============================================
|
||||
Linux kernel can't be downloaded by pxelinux via HTTP
|
||||
-----------------------------------------------------
|
||||
During testing the case when pxelinux downloads kernel via HTTP, we have found
|
||||
that during provisioning numbers of nodes more then 20 some servers (2 for case
|
||||
when we tries to provision 40 nodes and up to 7 when tries to provision 195
|
||||
nodes) can be stacked on the downloading of ubuntu installer kernel. Here is
|
||||
example of screen:
|
||||
|
||||
.. image:: results/loading_kernek_issue.png
|
||||
:alt: Network Scheme of the environment
|
||||
:scale: 65
|
||||
|
||||
In Apache log files we can see the following lines
|
||||
|
||||
.. code::
|
||||
|
||||
10.50.11.2 - - [29/Mar/2016:11:57:34 +0000] 300100342 "GET /cblr//images/ubuntu14-x86_64/linux HTTP/1.0" 200 102200 "-" "Syslinux/6.03"
|
||||
|
||||
It means that transferred data (linux file) is too small (102200 bytes).
|
||||
Actually the size of the linux kernel was 5778968 bytes. Apache return 200 code
|
||||
after "Timeout" parameter which specified in its configuration file.
|
||||
|
||||
Applications
|
||||
============
|
||||
Installation script and config files
|
||||
------------------------------------
|
||||
.. literalinclude:: installing/install_cobbler.sh
|
||||
:language: bash
|
||||
|
||||
Here you can find the configs for the script:
|
||||
|
||||
configs/etc/cobbler/settings:
|
||||
|
||||
.. literalinclude:: installing/configs/etc/cobbler/settings
|
||||
|
||||
configs/etc/cobbler/dhcp.template:
|
||||
|
||||
.. literalinclude:: installing/configs/etc/cobbler/dhcp.template
|
||||
|
||||
.. _pxesystem_http:
|
||||
|
||||
configs/etc/cobbler/pxe/pxesystem.template:
|
||||
|
||||
.. literalinclude:: installing/configs/etc/cobbler/pxe/pxesystem.template
|
||||
|
||||
configs/etc/cobbler/pxe/pxelocal.template:
|
||||
|
||||
.. literalinclude:: installing/configs/etc/cobbler/pxe/pxelocal.template
|
||||
|
||||
configs/var/lib/cobbler/kickstarts/sample.seed:
|
||||
|
||||
.. literalinclude:: installing/configs/var/lib/cobbler/kickstarts/sample.seed
|
||||
|
||||
Script to start provisioning and collect metrics
|
||||
------------------------------------------------
|
||||
|
||||
.. literalinclude:: measure.sh
|
||||
:language: bash
|
||||
|
||||
Script to add cobbler systems
|
||||
-----------------------------
|
||||
|
||||
.. literalinclude:: add_cobbler_systems.sh
|
||||
:language: bash
|
||||
|
||||
.. references:
|
||||
|
||||
.. _Cobbler: http://cobbler.github.io/
|
@ -0,0 +1,113 @@
|
||||
# ******************************************************************
|
||||
# Cobbler managed dhcpd.conf file
|
||||
#
|
||||
# generated from cobbler dhcp.conf template ($date)
|
||||
# Do NOT make changes to /etc/dhcpd.conf. Instead, make your changes
|
||||
# in /etc/cobbler/dhcp.template, as /etc/dhcpd.conf will be
|
||||
# overwritten.
|
||||
#
|
||||
# ******************************************************************
|
||||
|
||||
ddns-update-style interim;
|
||||
|
||||
allow booting;
|
||||
allow bootp;
|
||||
|
||||
ignore client-updates;
|
||||
set vendorclass = option vendor-class-identifier;
|
||||
|
||||
option pxe-system-type code 93 = unsigned integer 16;
|
||||
option space pxelinux;
|
||||
option pxelinux.magic code 208 = string;
|
||||
option pxelinux.configfile code 209 = text;
|
||||
option pxelinux.pathprefix code 210 = text;
|
||||
option pxelinux.reboottime code 211 = unsigned integer 32;
|
||||
|
||||
subnet COBBLER_NET netmask COBBLER_NETMASK {
|
||||
interface p1p1;
|
||||
option routers $server;
|
||||
option domain-name-servers $server;
|
||||
option domain-search "COBBLER_DNS_DOMAIN";
|
||||
option subnet-mask COBBLER_NETMASK;
|
||||
range dynamic-bootp COBBLER_DYN_RANGE;
|
||||
default-lease-time 21600;
|
||||
max-lease-time 43200;
|
||||
next-server $next_server;
|
||||
}
|
||||
|
||||
#for dhcp_tag in $dhcp_tags.keys():
|
||||
## group could be subnet if your dhcp tags line up with your subnets
|
||||
## or really any valid dhcpd.conf construct ... if you only use the
|
||||
## default dhcp tag in cobbler, the group block can be deleted for a
|
||||
## flat configuration
|
||||
#if $dhcp_tag == "default":
|
||||
#group for Cobbler DHCP tag: $dhcp_tag
|
||||
group {
|
||||
#for mac in $dhcp_tags[$dhcp_tag].keys():
|
||||
#set iface = $dhcp_tags[$dhcp_tag][$mac]
|
||||
host $iface.name {
|
||||
hardware ethernet $mac;
|
||||
#if $iface.ip_address:
|
||||
fixed-address $iface.ip_address;
|
||||
#end if
|
||||
#if $iface.hostname:
|
||||
option host-name "$iface.hostname";
|
||||
#end if
|
||||
#if $iface.netmask:
|
||||
option subnet-mask $iface.netmask;
|
||||
#end if
|
||||
#if $iface.gateway:
|
||||
option routers $iface.gateway;
|
||||
#end if
|
||||
filename "lpxelinux.0";
|
||||
## Cobbler defaults to $next_server, but some users
|
||||
## may like to use $iface.system.server for proxied setups
|
||||
next-server $iface.next_server;
|
||||
}
|
||||
#end for
|
||||
}
|
||||
#else
|
||||
#group for Cobbler DHCP tag: $dhcp_tag
|
||||
group {
|
||||
#for mac in $dhcp_tags[$dhcp_tag].keys():
|
||||
#set iface = $dhcp_tags[$dhcp_tag][$mac]
|
||||
host $iface.name {
|
||||
hardware ethernet $mac;
|
||||
#if $iface.ip_address:
|
||||
fixed-address $iface.ip_address;
|
||||
#end if
|
||||
#if $iface.hostname:
|
||||
option host-name "$iface.hostname";
|
||||
#end if
|
||||
#if $iface.netmask:
|
||||
option subnet-mask $iface.netmask;
|
||||
#end if
|
||||
#if $iface.gateway:
|
||||
option routers $iface.gateway;
|
||||
#end if
|
||||
filename "lpxelinux.0";
|
||||
## Cobbler defaults to $next_server, but some users
|
||||
## may like to use $iface.system.server for proxied setups
|
||||
next-server $iface.next_server;
|
||||
}
|
||||
#end for
|
||||
}
|
||||
#group for Cobbler DHCP tag: $dhcp_tag but for native vlan
|
||||
group {
|
||||
#for mac in $dhcp_tags[$dhcp_tag].keys():
|
||||
#set iface = $dhcp_tags[$dhcp_tag][$mac]
|
||||
host $iface.name-native-vlan {
|
||||
hardware ethernet $mac;
|
||||
if exists user-class and option user-class = "iPXE" {
|
||||
filename "http://$next_server/cblr/ks_mirror/config/vlan-$dhcp_tag";
|
||||
} else {
|
||||
filename "ipxe.kpxe";
|
||||
}
|
||||
## Cobbler defaults to $next_server, but some users
|
||||
## may like to use $iface.system.server for proxied setups
|
||||
next-server $next_server;
|
||||
}
|
||||
#end for
|
||||
}
|
||||
#end if
|
||||
#end for
|
@ -0,0 +1,8 @@
|
||||
default local
|
||||
prompt 0
|
||||
timeout 0
|
||||
totaltimeout 0
|
||||
ontimeout 0
|
||||
label local
|
||||
kernel http://$server:$http_port/cblr/tftpboot/chain.c32
|
||||
append hd
|
@ -0,0 +1,6 @@
|
||||
default linux
|
||||
prompt 0
|
||||
timeout 1
|
||||
label linux
|
||||
kernel http://$server:$http_port/cblr/$kernel_path
|
||||
append initrd=http://$server:$http_port/cblr/$initrd_path $append_line
|
@ -0,0 +1,462 @@
|
||||
---
|
||||
# cobbler settings file
|
||||
# restart cobblerd and run "cobbler sync" after making changes
|
||||
# This config file is in YAML 1.0 format
|
||||
# see http://yaml.org
|
||||
# ==========================================================
|
||||
# if 1, cobbler will allow insertions of system records that duplicate
|
||||
# the --dns-name information of other system records. In general,
|
||||
# this is undesirable and should be left 0.
|
||||
allow_duplicate_hostnames: 0
|
||||
|
||||
# if 1, cobbler will allow insertions of system records that duplicate
|
||||
# the ip address information of other system records. In general,
|
||||
# this is undesirable and should be left 0.
|
||||
allow_duplicate_ips: 0
|
||||
|
||||
# if 1, cobbler will allow insertions of system records that duplicate
|
||||
# the mac address information of other system records. In general,
|
||||
# this is undesirable.
|
||||
allow_duplicate_macs: 0
|
||||
|
||||
# if 1, cobbler will allow settings to be changed dynamically without
|
||||
# a restart of the cobblerd daemon. You can only change this variable
|
||||
# by manually editing the settings file, and you MUST restart cobblerd
|
||||
# after changing it.
|
||||
allow_dynamic_settings: 0
|
||||
|
||||
# by default, installs are *not* set to send installation logs to the cobbler
|
||||
# # # server. With 'anamon_enabled', kickstart templates may use the pre_anamon
|
||||
# # # snippet to allow remote live monitoring of their installations from the
|
||||
# # # cobbler server. Installation logs will be stored under
|
||||
# # # /var/log/cobbler/anamon/. NOTE: This does allow an xmlrpc call to send logs
|
||||
# # # to this directory, without authentication, so enable only if you are
|
||||
# # # ok with this limitation.
|
||||
anamon_enabled: 0
|
||||
|
||||
# If using authn_pam in the modules.conf, this can be configured
|
||||
# to change the PAM service authentication will be tested against.
|
||||
# The default value is "login".
|
||||
authn_pam_service: "login"
|
||||
|
||||
# How long the authentication token is valid for, in seconds
|
||||
auth_token_expiration: 3600
|
||||
|
||||
# Email out a report when cobbler finishes installing a system.
|
||||
# enabled: set to 1 to turn this feature on
|
||||
# sender: optional
|
||||
# email: which addresses to email
|
||||
# smtp_server: used to specify another server for an MTA
|
||||
# subject: use the default subject unless overridden
|
||||
build_reporting_enabled: 0
|
||||
build_reporting_sender: ""
|
||||
build_reporting_email: [ 'root@localhost' ]
|
||||
build_reporting_smtp_server: "localhost"
|
||||
build_reporting_subject: ""
|
||||
build_reporting_ignorelist: [ "" ]
|
||||
|
||||
# Cheetah-language kickstart templates can import Python modules.
|
||||
# while this is a useful feature, it is not safe to allow them to
|
||||
# import anything they want. This whitelists which modules can be
|
||||
# imported through Cheetah. Users can expand this as needed but
|
||||
# should never allow modules such as subprocess or those that
|
||||
# allow access to the filesystem as Cheetah templates are evaluated
|
||||
# by cobblerd as code.
|
||||
cheetah_import_whitelist:
|
||||
- "random"
|
||||
- "re"
|
||||
- "time"
|
||||
|
||||
# Default createrepo_flags to use for new repositories. If you have
|
||||
# createrepo >= 0.4.10, consider "-c cache --update -C", which can
|
||||
# dramatically improve your "cobbler reposync" time. "-s sha"
|
||||
# enables working with Fedora repos from F11/F12 from EL-4 or
|
||||
# EL-5 without python-hashlib installed (which is not available
|
||||
# on EL-4)
|
||||
createrepo_flags: "-c cache -s sha"
|
||||
|
||||
# if no kickstart is specified to profile add, use this template
|
||||
default_kickstart: /var/lib/cobbler/kickstarts/default.ks
|
||||
|
||||
# configure all installed systems to use these nameservers by default
|
||||
# unless defined differently in the profile. For DHCP configurations
|
||||
# you probably do /not/ want to supply this.
|
||||
default_name_servers: []
|
||||
|
||||
# if using the authz_ownership module (see the Wiki), objects
|
||||
# created without specifying an owner are assigned to this
|
||||
# owner and/or group. Can be a comma seperated list.
|
||||
default_ownership:
|
||||
- "admin"
|
||||
|
||||
# cobbler has various sample kickstart templates stored
|
||||
# in /var/lib/cobbler/kickstarts/. This controls
|
||||
# what install (root) password is set up for those
|
||||
# systems that reference this variable. The factory
|
||||
# default is "cobbler" and cobbler check will warn if
|
||||
# this is not changed.
|
||||
# The simplest way to change the password is to run
|
||||
# openssl passwd -1
|
||||
# and put the output between the "" below.
|
||||
default_password_crypted: "$1$ti7vIgk2$d1ZurbDd9nV61u7LWSLi90"
|
||||
|
||||
# the default template type to use in the absence of any
|
||||
# other detected template. If you do not specify the template
|
||||
# with '#template=<template_type>' on the first line of your
|
||||
# templates/snippets, cobbler will assume try to use the
|
||||
# following template engine to parse the templates.
|
||||
#
|
||||
# Current valid values are: cheetah, jinja2
|
||||
default_template_type: "cheetah"
|
||||
|
||||
# for libvirt based installs in koan, if no virt bridge
|
||||
# is specified, which bridge do we try? For EL 4/5 hosts
|
||||
# this should be xenbr0, for all versions of Fedora, try
|
||||
# "virbr0". This can be overriden on a per-profile
|
||||
# basis or at the koan command line though this saves
|
||||
# typing to just set it here to the most common option.
|
||||
default_virt_bridge: virbr0
|
||||
|
||||
# use this as the default disk size for virt guests (GB)
|
||||
default_virt_file_size: 5
|
||||
|
||||
# use this as the default memory size for virt guests (MB)
|
||||
default_virt_ram: 512
|
||||
|
||||
# if koan is invoked without --virt-type and no virt-type
|
||||
# is set on the profile/system, what virtualization type
|
||||
# should be assumed? Values: xenpv, xenfv, qemu, vmware
|
||||
# (NOTE: this does not change what virt_type is chosen by import)
|
||||
default_virt_type: qemu
|
||||
|
||||
# enable gPXE booting? Enabling this option will cause cobbler
|
||||
# to copy the undionly.kpxe file to the tftp root directory,
|
||||
# and if a profile/system is configured to boot via gpxe it will
|
||||
# chain load off pxelinux.0.
|
||||
# Default: 0
|
||||
enable_gpxe: 0
|
||||
|
||||
# controls whether cobbler will add each new profile entry to the default
|
||||
# PXE boot menu. This can be over-ridden on a per-profile
|
||||
# basis when adding/editing profiles with --enable-menu=0/1. Users
|
||||
# should ordinarily leave this setting enabled unless they are concerned
|
||||
# with accidental reinstalls from users who select an entry at the PXE
|
||||
# boot menu. Adding a password to the boot menus templates
|
||||
# may also be a good solution to prevent unwanted reinstallations
|
||||
enable_menu: 1
|
||||
|
||||
# enable Func-integration? This makes sure each installed machine is set up
|
||||
# to use func out of the box, which is a powerful way to script and control
|
||||
# remote machines.
|
||||
# Func lives at http://fedorahosted.org/func
|
||||
# read more at https://github.com/cobbler/cobbler/wiki/Func-integration
|
||||
# you will need to mirror Fedora/EPEL packages for this feature, so see
|
||||
# https://github.com/cobbler/cobbler/wiki/Manage-yum-repos if you want cobbler
|
||||
# to help you with this
|
||||
func_auto_setup: 0
|
||||
func_master: overlord.example.org
|
||||
|
||||
# change this port if Apache is not running plaintext on port
|
||||
# 80. Most people can leave this alone.
|
||||
http_port: 80
|
||||
|
||||
# kernel options that should be present in every cobbler installation.
|
||||
# kernel options can also be applied at the distro/profile/system
|
||||
# level.
|
||||
kernel_options:
|
||||
ksdevice: bootif
|
||||
lang: ' '
|
||||
text: ~
|
||||
|
||||
# s390 systems require additional kernel options in addition to the
|
||||
# above defaults
|
||||
kernel_options_s390x:
|
||||
RUNKS: 1
|
||||
ramdisk_size: 40000
|
||||
root: /dev/ram0
|
||||
ro: ~
|
||||
ip: off
|
||||
vnc: ~
|
||||
|
||||
# configuration options if using the authn_ldap module. See the
|
||||
# the Wiki for details. This can be ignored if you are not using
|
||||
# LDAP for WebUI/XMLRPC authentication.
|
||||
ldap_server: "ldap.example.com"
|
||||
ldap_base_dn: "DC=example,DC=com"
|
||||
ldap_port: 389
|
||||
ldap_tls: 1
|
||||
ldap_anonymous_bind: 1
|
||||
ldap_search_bind_dn: ''
|
||||
ldap_search_passwd: ''
|
||||
ldap_search_prefix: 'uid='
|
||||
ldap_tls_cacertfile: ''
|
||||
ldap_tls_keyfile: ''
|
||||
ldap_tls_certfile: ''
|
||||
|
||||
# cobbler has a feature that allows for integration with config management
|
||||
# systems such as Puppet. The following parameters work in conjunction with
|
||||
# --mgmt-classes and are described in furhter detail at:
|
||||
# https://github.com/cobbler/cobbler/wiki/Using-cobbler-with-a-configuration-management-system
|
||||
mgmt_classes: []
|
||||
mgmt_parameters:
|
||||
from_cobbler: 1
|
||||
|
||||
# if enabled, this setting ensures that puppet is installed during
|
||||
# machine provision, a client certificate is generated and a
|
||||
# certificate signing request is made with the puppet master server
|
||||
puppet_auto_setup: 0
|
||||
|
||||
# when puppet starts on a system after installation it needs to have
|
||||
# its certificate signed by the puppet master server. Enabling the
|
||||
# following feature will ensure that the puppet server signs the
|
||||
# certificate after installation if the puppet master server is
|
||||
# running on the same machine as cobbler. This requires
|
||||
# puppet_auto_setup above to be enabled
|
||||
sign_puppet_certs_automatically: 0
|
||||
|
||||
# location of the puppet executable, used for revoking certificates
|
||||
puppetca_path: "/usr/bin/puppet"
|
||||
|
||||
# when a puppet managed machine is reinstalled it is necessary to
|
||||
# remove the puppet certificate from the puppet master server before a
|
||||
# new certificate is signed (see above). Enabling the following
|
||||
# feature will ensure that the certificate for the machine to be
|
||||
# installed is removed from the puppet master server if the puppet
|
||||
# master server is running on the same machine as cobbler. This
|
||||
# requires puppet_auto_setup above to be enabled
|
||||
remove_old_puppet_certs_automatically: 0
|
||||
|
||||
# choose a --server argument when running puppetd/puppet agent during kickstart
|
||||
#puppet_server: 'puppet'
|
||||
|
||||
# let cobbler know that you're using a newer version of puppet
|
||||
# choose version 3 to use: 'puppet agent'; version 2 uses status quo: 'puppetd'
|
||||
#puppet_version: 2
|
||||
|
||||
# choose whether to enable puppet parameterized classes or not.
|
||||
# puppet versions prior to 2.6.5 do not support parameters
|
||||
#puppet_parameterized_classes: 1
|
||||
|
||||
# set to 1 to enable Cobbler's DHCP management features.
|
||||
# the choice of DHCP management engine is in /etc/cobbler/modules.conf
|
||||
manage_dhcp: 1
|
||||
|
||||
# set to 1 to enable Cobbler's DNS management features.
|
||||
# the choice of DNS mangement engine is in /etc/cobbler/modules.conf
|
||||
manage_dns: 1
|
||||
|
||||
# set to path of bind chroot to create bind-chroot compatible bind
|
||||
# configuration files. This should be automatically detected.
|
||||
bind_chroot_path: ""
|
||||
|
||||
# set to the ip address of the master bind DNS server for creating secondary
|
||||
# bind configuration files
|
||||
bind_master: 127.0.0.1
|
||||
|
||||
# set to 1 to enable Cobbler's TFTP management features.
|
||||
# the choice of TFTP mangement engine is in /etc/cobbler/modules.conf
|
||||
manage_tftpd: 1
|
||||
|
||||
# set to 1 to enable Cobbler's RSYNC management features.
|
||||
manage_rsync: 0
|
||||
|
||||
# if using BIND (named) for DNS management in /etc/cobbler/modules.conf
|
||||
# and manage_dns is enabled (above), this lists which zones are managed
|
||||
# See the Wiki (https://github.com/cobbler/cobbler/wiki/Dns-management) for more info
|
||||
manage_forward_zones: ['COBBLER_DNS_DOMAIN']
|
||||
manage_reverse_zones: ['10.50']
|
||||
|
||||
# if using cobbler with manage_dhcp, put the IP address
|
||||
# of the cobbler server here so that PXE booting guests can find it
|
||||
# if you do not set this correctly, this will be manifested in TFTP open timeouts.
|
||||
next_server: PXE_ADDRESS
|
||||
|
||||
# settings for power management features. optional.
|
||||
# see https://github.com/cobbler/cobbler/wiki/Power-management to learn more
|
||||
# choices (refer to codes.py):
|
||||
# apc_snmp bladecenter bullpap drac ether_wake ilo integrity
|
||||
# ipmilan ipmitool lpar rsa virsh wti
|
||||
power_management_default_type: 'ipmitool'
|
||||
|
||||
# the commands used by the power management module are sourced
|
||||
# from what directory?
|
||||
power_template_dir: "/etc/cobbler/power"
|
||||
|
||||
# if this setting is set to 1, cobbler systems that pxe boot
|
||||
# will request at the end of their installation to toggle the
|
||||
# --netboot-enabled record in the cobbler system record. This eliminates
|
||||
# the potential for a PXE boot loop if the system is set to PXE
|
||||
# first in it's BIOS order. Enable this if PXE is first in your BIOS
|
||||
# boot order, otherwise leave this disabled. See the manpage
|
||||
# for --netboot-enabled.
|
||||
pxe_just_once: 1
|
||||
|
||||
# the templates used for PXE config generation are sourced
|
||||
# from what directory?
|
||||
pxe_template_dir: "/etc/cobbler/pxe"
|
||||
|
||||
# Path to where system consoles are
|
||||
consoles: "/var/consoles"
|
||||
|
||||
# Are you using a Red Hat management platform in addition to Cobbler?
|
||||
# Cobbler can help you register to it. Choose one of the following:
|
||||
# "off" : I'm not using Red Hat Network, Satellite, or Spacewalk
|
||||
# "hosted" : I'm using Red Hat Network
|
||||
# "site" : I'm using Red Hat Satellite Server or Spacewalk
|
||||
# You will also want to read: https://github.com/cobbler/cobbler/wiki/Tips-for-RHN
|
||||
redhat_management_type: "off"
|
||||
|
||||
# if redhat_management_type is enabled, choose your server
|
||||
# "management.example.org" : For Satellite or Spacewalk
|
||||
# "xmlrpc.rhn.redhat.com" : For Red Hat Network
|
||||
# This setting is also used by the code that supports using Spacewalk/Satellite users/passwords
|
||||
# within Cobbler Web and Cobbler XMLRPC. Using RHN Hosted for this is not supported.
|
||||
# This feature can be used even if redhat_management_type is off, you just have
|
||||
# to have authn_spacewalk selected in modules.conf
|
||||
redhat_management_server: "xmlrpc.rhn.redhat.com"
|
||||
|
||||
# specify the default Red Hat authorization key to use to register
|
||||
# system. If left blank, no registration will be attempted. Similarly
|
||||
# you can set the --redhat-management-key to blank on any system to
|
||||
# keep it from trying to register.
|
||||
redhat_management_key: ""
|
||||
|
||||
# if using authn_spacewalk in modules.conf to let cobbler authenticate
|
||||
# against Satellite/Spacewalk's auth system, by default it will not allow per user
|
||||
# access into Cobbler Web and Cobbler XMLRPC.
|
||||
# in order to permit this, the following setting must be enabled HOWEVER
|
||||
# doing so will permit all Spacewalk/Satellite users of certain types to edit all
|
||||
# of cobbler's configuration.
|
||||
# these roles are: config_admin and org_admin
|
||||
# users should turn this on only if they want this behavior and
|
||||
# do not have a cross-multi-org seperation concern. If you have
|
||||
# a single org in your satellite, it's probably safe to turn this
|
||||
# on and then you can use CobblerWeb alongside a Satellite install.
|
||||
redhat_management_permissive: 0
|
||||
|
||||
# if set to 1, allows /usr/bin/cobbler-register (part of the koan package)
|
||||
# to be used to remotely add new cobbler system records to cobbler.
|
||||
# this effectively allows for registration of new hardware from system
|
||||
# records.
|
||||
register_new_installs: 0
|
||||
|
||||
# Flags to use for yum's reposync. If your version of yum reposync
|
||||
# does not support -l, you may need to remove that option.
|
||||
reposync_flags: "-l -n -d"
|
||||
|
||||
# when DHCP and DNS management are enabled, cobbler sync can automatically
|
||||
# restart those services to apply changes. The exception for this is
|
||||
# if using ISC for DHCP, then omapi eliminates the need for a restart.
|
||||
# omapi, however, is experimental and not recommended for most configurations.
|
||||
# If DHCP and DNS are going to be managed, but hosted on a box that
|
||||
# is not on this server, disable restarts here and write some other
|
||||
# script to ensure that the config files get copied/rsynced to the destination
|
||||
# box. This can be done by modifying the restart services trigger.
|
||||
# Note that if manage_dhcp and manage_dns are disabled, the respective
|
||||
# parameter will have no effect. Most users should not need to change
|
||||
# this.
|
||||
restart_dns: 1
|
||||
restart_dhcp: 1
|
||||
|
||||
# install triggers are scripts in /var/lib/cobbler/triggers/install
|
||||
# that are triggered in kickstart pre and post sections. Any
|
||||
# executable script in those directories is run. They can be used
|
||||
# to send email or perform other actions. They are currently
|
||||
# run as root so if you do not need this functionality you can
|
||||
# disable it, though this will also disable "cobbler status" which
|
||||
# uses a logging trigger to audit install progress.
|
||||
run_install_triggers: 1
|
||||
|
||||
# enables a trigger which version controls all changes to /var/lib/cobbler
|
||||
# when add, edit, or sync events are performed. This can be used
|
||||
# to revert to previous database versions, generate RSS feeds, or for
|
||||
# other auditing or backup purposes. "git" and "hg" are currently suported,
|
||||
# but git is the recommend SCM for use with this feature.
|
||||
scm_track_enabled: 0
|
||||
scm_track_mode: "git"
|
||||
|
||||
# this is the address of the cobbler server -- as it is used
|
||||
# by systems during the install process, it must be the address
|
||||
# or hostname of the system as those systems can see the server.
|
||||
# if you have a server that appears differently to different subnets
|
||||
# (dual homed, etc), you need to read the --server-override section
|
||||
# of the manpage for how that works.
|
||||
server: PXE_ADDRESS
|
||||
|
||||
# If set to 1, all commands will be forced to use the localhost address
|
||||
# instead of using the above value which can force commands like
|
||||
# cobbler sync to open a connection to a remote address if one is in the
|
||||
# configuration and would traceback.
|
||||
client_use_localhost: 0
|
||||
|
||||
# If set to 1, all commands to the API (not directly to the XMLRPC
|
||||
# server) will go over HTTPS instead of plaintext. Be sure to change
|
||||
# the http_port setting to the correct value for the web server
|
||||
client_use_https: 0
|
||||
|
||||
# this is a directory of files that cobbler uses to make
|
||||
# templating easier. See the Wiki for more information. Changing
|
||||
# this directory should not be required.
|
||||
snippetsdir: /var/lib/cobbler/snippets
|
||||
|
||||
# Normally if a kickstart is specified at a remote location, this
|
||||
# URL will be passed directly to the kickstarting system, thus bypassing
|
||||
# the usual snippet templating Cobbler does for local kickstart files. If
|
||||
# this option is enabled, Cobbler will fetch the file contents internally
|
||||
# and serve a templated version of the file to the client.
|
||||
template_remote_kickstarts: 0
|
||||
|
||||
# should new profiles for virtual machines default to auto booting with the physical host when the physical host reboots?
|
||||
# this can be overridden on each profile or system object.
|
||||
virt_auto_boot: 1
|
||||
|
||||
# cobbler's web directory. Don't change this setting -- see the
|
||||
# Wiki on "relocating your cobbler install" if your /var partition
|
||||
# is not large enough.
|
||||
webdir: /srv/www/cobbler
|
||||
|
||||
# cobbler's public XMLRPC listens on this port. Change this only
|
||||
# if absolutely needed, as you'll have to start supplying a new
|
||||
# port option to koan if it is not the default.
|
||||
xmlrpc_port: 25151
|
||||
|
||||
# "cobbler repo add" commands set cobbler up with repository
|
||||
# information that can be used during kickstart and is automatically
|
||||
# set up in the cobbler kickstart templates. By default, these
|
||||
# are only available at install time. To make these repositories
|
||||
# usable on installed systems (since cobbler makes a very convient)
|
||||
# mirror, set this to 1. Most users can safely set this to 1. Users
|
||||
# who have a dual homed cobbler server, or are installing laptops that
|
||||
# will not always have access to the cobbler server may wish to leave
|
||||
# this as 0. In that case, the cobbler mirrored yum repos are still
|
||||
# accessable at http://cobbler.example.org/cblr/repo_mirror and yum
|
||||
# configuration can still be done manually. This is just a shortcut.
|
||||
yum_post_install_mirror: 1
|
||||
|
||||
# the default yum priority for all the distros. This is only used
|
||||
# if yum-priorities plugin is used. 1=maximum. Tweak with caution.
|
||||
yum_distro_priority: 1
|
||||
|
||||
# Flags to use for yumdownloader. Not all versions may support
|
||||
# --resolve.
|
||||
yumdownloader_flags: "--resolve"
|
||||
|
||||
# sort and indent JSON output to make it more human-readable
|
||||
serializer_pretty_json: 0
|
||||
|
||||
# replication rsync options for distros, kickstarts, snippets set to override default value of "-avzH"
|
||||
replicate_rsync_options: "-avzH"
|
||||
|
||||
# replication rsync options for repos set to override default value of "-avzH"
|
||||
replicate_repo_rsync_options: "-avzH"
|
||||
|
||||
# always write DHCP entries, regardless if netboot is enabled
|
||||
always_write_dhcp_entries: 0
|
||||
|
||||
# external proxy - used by: get-loaders, reposync, signature update
|
||||
# eg: proxy_url_ext: "http://192.168.1.1:8080"
|
||||
proxy_url_ext: ""
|
||||
|
||||
# internal proxy - used by systems to reach cobbler for kickstarts
|
||||
# eg: proxy_url_int: "http://10.0.0.1:8080"
|
||||
proxy_url_int: ""
|
@ -0,0 +1,158 @@
|
||||
# Mostly based on the Ubuntu installation guide
|
||||
# https://help.ubuntu.com/12.04/installation-guide/
|
||||
|
||||
# Preseeding only locale sets language, country and locale.
|
||||
d-i debian-installer/locale string en_US
|
||||
|
||||
# Keyboard selection.
|
||||
# Disable automatic (interactive) keymap detection.
|
||||
d-i console-setup/ask_detect boolean false
|
||||
d-i keyboard-configuration/layoutcode string us
|
||||
d-i keyboard-configuration/variantcode string
|
||||
|
||||
# netcfg will choose an interface that has link if possible. This makes it
|
||||
# skip displaying a list if there is more than one interface.
|
||||
#set $myhostname = $getVar('hostname',$getVar('name','cobbler')).replace("_","-")
|
||||
d-i netcfg/choose_interface select auto
|
||||
d-i netcfg/get_hostname string $myhostname
|
||||
|
||||
# If non-free firmware is needed for the network or other hardware, you can
|
||||
# configure the installer to always try to load it, without prompting. Or
|
||||
# change to false to disable asking.
|
||||
# d-i hw-detect/load_firmware boolean true
|
||||
|
||||
# NTP/Time Setup
|
||||
d-i time/zone string US/Eastern
|
||||
d-i clock-setup/utc boolean true
|
||||
d-i clock-setup/ntp boolean true
|
||||
d-i clock-setup/ntp-server string $server
|
||||
|
||||
# Setup the installation source
|
||||
d-i mirror/country string manual
|
||||
d-i mirror/http/hostname string $http_server
|
||||
d-i mirror/http/directory string $install_source_directory
|
||||
d-i mirror/http/proxy string
|
||||
|
||||
#set $os_v = $getVar('os_version','')
|
||||
#if $os_v and $os_v.lower()[0] > 'p'
|
||||
# Required at least for 12.10+
|
||||
# d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
|
||||
#end if
|
||||
|
||||
# Suite to install.
|
||||
# d-i mirror/suite string precise
|
||||
# d-i mirror/udeb/suite string precise
|
||||
|
||||
# Components to use for loading installer components (optional).
|
||||
#d-i mirror/udeb/components multiselect main, restricted
|
||||
|
||||
# Disk Partitioning
|
||||
# Use LVM, and wipe out anything that already exists
|
||||
d-i partman/choose_partition select finish
|
||||
d-i partman/confirm boolean true
|
||||
d-i partman/confirm_nooverwrite boolean true
|
||||
d-i partman-auto/method string lvm
|
||||
d-i partman-lvm/device_remove_lvm boolean true
|
||||
d-i partman-lvm/confirm boolean true
|
||||
d-i partman-lvm/confirm_nooverwrite boolean true
|
||||
d-i partman-md/device_remove_md boolean true
|
||||
d-i partman-partitioning/confirm_write_new_label boolean true
|
||||
|
||||
d-i partman-auto/disk string /dev/sda
|
||||
d-i partman-auto/method string regular
|
||||
partman-auto partman-auto/init_automatically_partition select Guided - use entire disk
|
||||
partman-auto partman-auto/automatically_partition select
|
||||
d-i partman-auto/purge_lvm_from_device boolean true
|
||||
d-i partman/confirm_write_new_label boolean true
|
||||
d-i partman/choose_partition select finish
|
||||
d-i partman/confirm boolean true
|
||||
d-i partman/confirm_nooverwrite boolean true
|
||||
|
||||
# You can choose one of the three predefined partitioning recipes:
|
||||
# - atomic: all files in one partition
|
||||
# - home: separate /home partition
|
||||
# - multi: separate /home, /usr, /var, and /tmp partitions
|
||||
#d-i partman-auto/choose_recipe select atomic
|
||||
|
||||
# If you just want to change the default filesystem from ext3 to something
|
||||
# else, you can do that without providing a full recipe.
|
||||
# d-i partman/default_filesystem string ext4
|
||||
|
||||
# root account and password
|
||||
d-i passwd/root-login boolean true
|
||||
d-i passwd/root-password-crypted password $default_password_crypted
|
||||
|
||||
# skip creation of a normal user account.
|
||||
d-i passwd/make-user boolean false
|
||||
|
||||
# You can choose to install restricted and universe software, or to install
|
||||
# software from the backports repository.
|
||||
# d-i apt-setup/restricted boolean true
|
||||
# d-i apt-setup/universe boolean true
|
||||
# d-i apt-setup/backports boolean true
|
||||
|
||||
# Uncomment this if you don't want to use a network mirror.
|
||||
# d-i apt-setup/use_mirror boolean false
|
||||
|
||||
# Select which update services to use; define the mirrors to be used.
|
||||
# Values shown below are the normal defaults.
|
||||
d-i apt-setup/services-select multiselect security
|
||||
d-i apt-setup/security_host string $server
|
||||
d-i apt-setup/security_path string /cblr/repo_mirror/ubuntu14-x86_64
|
||||
# d-i apt-setup/local0/repository string http://$http_server/ubuntu_custom_packages ./
|
||||
|
||||
$SNIPPET('preseed_apt_repo_config')
|
||||
|
||||
# Enable deb-src lines
|
||||
# d-i apt-setup/local0/source boolean true
|
||||
|
||||
# URL to the public key of the local repository; you must provide a key or
|
||||
# apt will complain about the unauthenticated repository and so the
|
||||
# sources.list line will be left commented out
|
||||
# d-i apt-setup/local0/key string http://local.server/key
|
||||
|
||||
# By default the installer requires that repositories be authenticated
|
||||
# using a known gpg key. This setting can be used to disable that
|
||||
# authentication. Warning: Insecure, not recommended.
|
||||
d-i debian-installer/allow_unauthenticated boolean true
|
||||
|
||||
# Individual additional packages to install
|
||||
# wget is REQUIRED otherwise quite a few things won't work
|
||||
# later in the build (like late-command scripts)
|
||||
d-i pkgsel/include string ntp ssh wget
|
||||
|
||||
# Use the following option to add additional boot parameters for the
|
||||
# installed system (if supported by the bootloader installer).
|
||||
# Note: options passed to the installer will be added automatically.
|
||||
d-i debian-installer/add-kernel-opts string $kernel_options_post
|
||||
|
||||
# Avoid that last message about the install being complete.
|
||||
d-i finish-install/reboot_in_progress note
|
||||
|
||||
## Figure out if we're kickstarting a system or a profile
|
||||
#if $getVar('system_name','') != ''
|
||||
#set $what = "system"
|
||||
#else
|
||||
#set $what = "profile"
|
||||
#end if
|
||||
|
||||
# This first command is run as early as possible, just after preseeding is read.
|
||||
# d-i preseed/early_command string [command]
|
||||
d-i preseed/early_command string wget -O- \
|
||||
http://$http_server/cblr/svc/op/script/$what/$name/?script=preseed_early_default | \
|
||||
/bin/sh -s
|
||||
|
||||
# This command is run immediately before the partitioner starts. It may be
|
||||
# useful to apply dynamic partitioner preseeding that depends on the state
|
||||
# of the disks (which may not be visible when preseed/early_command runs).
|
||||
# d-i partman/early_command \
|
||||
# string debconf-set partman-auto/disk "\$(list-devices disk | head -n1)"
|
||||
|
||||
# This command is run just before the install finishes, but when there is
|
||||
# still a usable /target directory. You can chroot to /target and use it
|
||||
# directly, or use the apt-install and in-target commands to easily install
|
||||
# packages and run commands in the target system.
|
||||
# d-i preseed/late_command string [command]
|
||||
d-i preseed/late_command string wget -O- \
|
||||
http://$http_server/cblr/svc/op/script/$what/$name/?script=preseed_late_default | \
|
||||
chroot /target /bin/sh -s
|
@ -0,0 +1,117 @@
|
||||
#!/bin/bash -ex
|
||||
|
||||
PXE_INTERFACE=${PXE_INTERFACE:-p1p1}
|
||||
PXE_ADDRESS=${PXE_ADDRESS:-"10.50.0.10"}
|
||||
MANAGEMENT_INTERFACE=${MANAGEMENT_INTERFACE:-p1p1.602}
|
||||
COBBLER_NET=${COBBLER_NET:-"10.50.0.0"}
|
||||
COBBLER_NETMASK=${COBBLER_NETMASK:-255.255.0.0}
|
||||
COBBLER_DYN_RANGE=${COBBLER_DYN_RANGE:-"10.50.1.1 10.50.10.254"}
|
||||
COBBLER_DNS_DOMAIN=${COBBLER_DNS_DOMAIN:-"cobbler-test.local"}
|
||||
UBUNTU_REPOSITORY="http://archive.ubuntu.com/ubuntu/"
|
||||
|
||||
preparation ()
|
||||
{
|
||||
apt-get -y install curl software-properties-common make prips fence-agents ipmitool sshpass
|
||||
}
|
||||
install_tftp ()
|
||||
{
|
||||
apt-get -y install tftpd-hpa
|
||||
start tftpd-hpa
|
||||
}
|
||||
install_dhcp ()
|
||||
{
|
||||
apt-get -y install isc-dhcp-server
|
||||
sed -i s/"INTERFACES=\"\""/"INTERFACES=\"${PXE_INTERFACE}\""/ /etc/default/isc-dhcp-server
|
||||
}
|
||||
install_dns ()
|
||||
{
|
||||
apt-get -y install bind9
|
||||
}
|
||||
install_cobbler ()
|
||||
{
|
||||
# Install Cobbler from package from OpenSuse repository
|
||||
curl -s 'http://download.opensuse.org/repositories/home:/libertas-ict:/cobbler26/xUbuntu_14.04/Release.key' | apt-key add -
|
||||
add-apt-repository "deb http://download.opensuse.org/repositories/home:/libertas-ict:/cobbler26/xUbuntu_14.04/ ./"
|
||||
apt-get update
|
||||
apt-get -y install cobbler python-urlgrabber libapache2-mod-wsgi python-django
|
||||
# Apply few workarounds for
|
||||
SECRET_KEY=$(python -c 'import re;from random import choice; import sys; sys.stdout.write(re.escape("".join([choice("abcdefghijklmnopqrstuvwxyz0123456789^&*(-_=+)") for i in range(100)])))')
|
||||
sed --in-place "s/^SECRET_KEY = .*/SECRET_KEY = '${SECRET_KEY}'/" /usr/share/cobbler/web/settings.py
|
||||
rm -f /etc/apache2/conf-enabled/cobbler.conf
|
||||
rm -f /etc/apache2/conf-enabled/cobbler_web.conf
|
||||
cp /etc/cobbler/cobbler.conf /etc/apache2/conf-available/
|
||||
cp /etc/cobbler/cobbler_web.conf /etc/apache2/conf-available/
|
||||
ln -s /etc/apache2/conf-available/cobbler.conf /etc/apache2/conf-enabled/
|
||||
ln -s /etc/apache2/conf-available/cobbler_web.conf /etc/apache2/conf-enabled/
|
||||
a2enconf cobbler cobbler_web
|
||||
a2enmod proxy proxy_http
|
||||
chown -R www-data /var/lib/cobbler/webui_sessions
|
||||
# Change configs regarding variables values
|
||||
for INSTALL_VAR in PXE_ADDRESS COBBLER_NET COBBLER_NETMASK COBBLER_DYN_RANGE COBBLER_DNS_DOMAIN
|
||||
do
|
||||
find ./ -type f -exec sed -i s/"${INSTALL_VAR}"/"${!INSTALL_VAR}"/g {} \;
|
||||
done
|
||||
# Need to copy configs
|
||||
cp -rf configs/etc/cobbler/* /etc/cobbler/
|
||||
service cobblerd restart
|
||||
update-rc.d cobblerd defaults
|
||||
service apache2 restart
|
||||
# download pxe loaders
|
||||
cobbler get-loaders
|
||||
wget 'https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.xz'
|
||||
tar xJf syslinux-6.03.tar.xz
|
||||
if [ ! -d "/var/lib/tftpboot/" ]
|
||||
then
|
||||
mkdir /var/lib/tftpboot/
|
||||
fi
|
||||
ln -s /var/lib/tftpboot /srv/www/cobbler/
|
||||
cp syslinux-6.03/bios/core/lpxelinux.0 /var/lib/tftpboot/
|
||||
cp syslinux-6.03/bios/core/lpxelinux.0 /var/lib/cobbler/loaders/
|
||||
cp syslinux-6.03/bios/com32/lib/libcom32.c32 /var/lib/tftpboot/
|
||||
cp syslinux-6.03/bios/com32/libutil/libutil.c32 /var/lib/tftpboot/
|
||||
cp syslinux-6.03/bios/com32/elflink/ldlinux/ldlinux.c32 /var/lib/tftpboot/
|
||||
cp syslinux-6.03/bios/com32/chain/chain.c32 /var/lib/tftpboot
|
||||
# Configure Ubuntu repository
|
||||
if [ ! -d "/var/lib/cobbler/.gnupg/" ]
|
||||
then
|
||||
mkdir -p /var/lib/cobbler/.gnupg/
|
||||
fi
|
||||
rm -rf /srv/www/cobbler/repo_mirror
|
||||
ln -s /var/www/cobbler/repo_mirror /srv/www/cobbler/
|
||||
ln -s /etc/apt/trusted.gpg /var/lib/cobbler/.gnupg/trustedkeys.gpg
|
||||
cobbler repo add --name=ubuntu14-x86_64
|
||||
--apt-components='main restricted universe multiverse main/debian-installer restricted/debian-installer'
|
||||
--apt-dists='trusty trusty-updates trusty-security'
|
||||
--breed=apt
|
||||
--keep-updated=yes
|
||||
--mirror=${UBUNTU_REPOSITORY}
|
||||
--mirror-locally=yes
|
||||
# Copy kernel and initrd which will be used as a installers.
|
||||
rsync -av rsync://archive.ubuntu.com:/ubuntu/dists/trusty/main/installer-amd64 /var/www/cobbler/repo_mirror/ubuntu14-x86_64/dists/trusty/main/
|
||||
# Create Cobbler distro and Cobbler profile
|
||||
cobbler distro add --name=ubuntu14-x86_64
|
||||
--kernel=/var/www/cobbler/repo_mirror/ubuntu14-x86_64/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux
|
||||
--initrd=/var/www/cobbler/repo_mirror/ubuntu14-x86_64/dists/trusty/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz
|
||||
--ksmeta=tree=http://@@http_server@@/cblr/repo_mirror/ubuntu14-x86_64
|
||||
--arch=x86_64
|
||||
--breed=ubuntu
|
||||
--os-version=trusty
|
||||
cobbler profile add --name=ubuntu14-x86_64
|
||||
--distro=ubuntu14-x86_64
|
||||
--kickstart=/var/lib/cobbler/kickstarts/sample.seed
|
||||
--kopts='ksdevice=bootif lang= locale=en_US text priority=critical'
|
||||
cobbler sync
|
||||
# Mirror configured repositories
|
||||
cobbler reposync
|
||||
echo "Ubuntu repository is mirroring now. It'll keep up to 100 GB disk space"
|
||||
echo "and take few hours (depend on your network connection)"
|
||||
}
|
||||
main ()
|
||||
{
|
||||
preparation
|
||||
install_dhcp
|
||||
install_dns
|
||||
install_cobbler
|
||||
}
|
||||
|
||||
main
|
116
doc/source/test_results/provisioning/cobbler/measure.sh
Normal file
@ -0,0 +1,116 @@
|
||||
#!/bin/bash -ex
|
||||
|
||||
REQUESTED_NODES=$1
|
||||
ENV_NAME=cobbler-test
|
||||
INTERFACE=p1p1
|
||||
DSTAT_OUTPUT_FILE=/var/log/dstat.csv
|
||||
RESULTS_FILE=/var/log/results.csv
|
||||
|
||||
# Need to install the required packages on provisioning system servers:
|
||||
if (("`dpkg -l | grep dstat | grep ^ii > /dev/null; echo $?` == 1"))
|
||||
then
|
||||
apt-get -y install dstat bc
|
||||
fi
|
||||
|
||||
# Release all nodes from the environment and disable net booting
|
||||
for SYSTEM in `cobbler system find --comment=${ENV_NAME}`
|
||||
do
|
||||
cobbler system edit --name ${SYSTEM} --comment= --netboot-enabled=no
|
||||
done
|
||||
|
||||
# Check if we have anought nodes
|
||||
if [ `cobbler system find --comment= | wc -l` < ${REQUESTED_NODES} ]
|
||||
then
|
||||
echo "You have less nodes then requested" | tee -a ${RESULTS_FILE}
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Add requested number of nodes to the env and enable net booting
|
||||
for SYSTEM in `cobbler system find --comment= | head -${REQUESTED_NODES}`
|
||||
do
|
||||
cobbler system edit --name=${SYSTEM} --comment=${ENV_NAME} --netboot-enabled=yes
|
||||
done
|
||||
cobbler sync
|
||||
|
||||
# Need to prepare the following script on provisioning system server to collect
|
||||
# values of CPU,RAM,NET and IO loads per second. You need to change "INTERFACE"
|
||||
# variable regarding the interface which connected to nodes to communicare with
|
||||
# them during provisioning process. As a result of this command we'll get
|
||||
# running in backgroud dstat programm which collecting needed parametes in CSV
|
||||
# format into /var/log/dstat.log file.:
|
||||
rm -f ${DSTAT_OUTPUT_FILE}
|
||||
dstat --nocolor --time --cpu --mem --net -N ${INTERFACE} --io --output ${DSTAT_OUTPUT_FILE} > /dev/null &
|
||||
|
||||
# Need to prepare script which starts provisioning process and gets the time when
|
||||
# provisioning started and when provisioning ended ( when all nodes reachable via
|
||||
# ssh). We'll analyze results collected during this time window. For getting
|
||||
# start time we can add "date" command before API call or CLI command and forward
|
||||
# the output of the command to some log file. Here is example for cobbler:
|
||||
start_time=`date +%s.%N`
|
||||
echo "Provisioning started at "`date` > ${RESULTS_FILE}
|
||||
for SYSTEM in `cobbler system find --comment=${ENV_NAME}`
|
||||
do
|
||||
cobbler system reboot --name=${SYSTEM} &
|
||||
done
|
||||
|
||||
# For getting end-time we can use the script below. This script tries to reach
|
||||
# nodes via ssh and write "Provisioning finished at <date/time>" into
|
||||
# /var/log/provisioning.log file. You'll need to provide ip addresses of the
|
||||
# nodes (from file nodes_ips.list, where IPs listed one per line) and
|
||||
# creadentials (SSH_PASSWORD and SSH_USER variables):
|
||||
SSH_OPTIONS="StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
|
||||
SSH_PASSWORD="r00tme"
|
||||
SSH_USER="root"
|
||||
unset NODE_IPS[@]
|
||||
NODE_IPS=()
|
||||
for SYSTEM in `cobbler system find --comment=cobbler-test`
|
||||
do
|
||||
NODE_IPS+=(`cobbler system dumpvars --name=${SYSTEM} | grep -w ip_address_${INTERFACE} | awk -F": " '{print $2}'`)
|
||||
done
|
||||
TIMER=0
|
||||
TIMEOUT=50
|
||||
while (("${TIMER}" < "${TIMEOUT}"))
|
||||
do
|
||||
sleep 10
|
||||
for ARRAY_ELEMENT_NUM in $(seq 0 ${#NODE_IPS[@]})
|
||||
do
|
||||
SSH_CMD="sshpass -p ${SSH_PASSWORD} ssh -o ${SSH_OPTIONS} ${SSH_USER}@${NODE_IPS[${ARRAY_ELEMENT_NUM}]}"
|
||||
${SSH_CMD} "hostname" && UNHAPPY_SSH=0 || UNHAPPY_SSH=1
|
||||
if (("${UNHAPPY_SSH}" == "0"))
|
||||
then
|
||||
echo "Node with ip "${NODE_IPS[${ARRAY_ELEMENT_NUM}]}" is reachable via ssh"
|
||||
unset NODE_IPS[${ARRAY_ELEMENT_NUM}] && NODE_IPS=(${NODE_IPS[@]})
|
||||
else
|
||||
echo "Node with ip "${NODE_IPS[${ARRAY_ELEMENT_NUM}]}" is still unreachable via ssh"
|
||||
fi
|
||||
done
|
||||
TIMER=$((${TIMER} + 1))
|
||||
if (("${TIMER}" == "${TIMEOUT}"))
|
||||
then
|
||||
echo "The following "${#NODE_IPS[@]}" are unreachable" | tee -a ${RESULTS_FILE}
|
||||
echo ${NODE_IPS[@]} | tee -a ${RESULTS_FILE}
|
||||
break
|
||||
fi
|
||||
if ((${#NODE_IPS[@]} == 0 ))
|
||||
then
|
||||
break
|
||||
fi
|
||||
# Check that nodes are reachable once per 1 seconds
|
||||
sleep 1
|
||||
done
|
||||
echo "Provisioning finished at "`date` >> ${RESULTS_FILE}
|
||||
|
||||
end_time=`date +%s.%N`
|
||||
elapsed_time=$(echo "$end_time - $start_time" | bc -l)
|
||||
echo "Total elapsed time for provisioning: $elapsed_time seconds" >> ${RESULTS_FILE}
|
||||
|
||||
# Stop dstat command
|
||||
kill `ps aux | grep dstat | grep python | awk '{print $2}'`
|
||||
|
||||
# Delete excess values and convert to needed metrics. So, we'll get the
|
||||
# following csv format:
|
||||
# time,cpu_usage,ram_usage,net_recv,net_send,net_all,dsk_io_read,dsk_io_writ,dsk_all
|
||||
awk -F "," 'BEGIN {getline;getline;getline;getline;getline;getline;getline;
|
||||
print "time,cpu_usage,ram_usage,net_recv,net_send,net_all,dsk_io_read,dsk_io_writ,dsk_all"}
|
||||
{print $1","100-$4","$8/1048576","$12/131072","$13/131072","($12+$13)/131072","$14","$15","$14+$15}' \
|
||||
$DSTAT_OUTPUT_FILE >> ${RESULTS_FILE}
|
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 32 KiB |
8
doc/source/test_results/provisioning/index.rst
Normal file
@ -0,0 +1,8 @@
|
||||
Provisioning systems test results
|
||||
***********************************
|
||||
|
||||
.. toctree::
|
||||
:numbered:
|
||||
:maxdepth: 3
|
||||
|
||||
cobbler/index
|