Add test results for Cobbler.
Change-Id: I2450388295dfa29c73234ea70082ac6820bf9db4
@ -17,4 +17,4 @@ Test Results
|
|||||||
container_platforms/index
|
container_platforms/index
|
||||||
neutron_features/index
|
neutron_features/index
|
||||||
hardware_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
|