@ -1,25 +1,26 @@
IRONIC_DISCOVERD_DEBUG = ${ IRONIC_DISCOVERD_DEBUG :- false }
IRONIC_DISCOVERD_DIR = $DEST /ironic-discoverd
IRONIC_DISCOVERD_BIN_DIR = $( get_python_exec_prefix)
IRONIC_DISCOVERD_BIN_FILE = $IRONIC_DISCOVERD_BIN_DIR /ironic-discoverd
IRONIC_DISCOVERD_CONF_DIR = ${ IRONIC_DISCOVERD_CONF_DIR :- /etc/ironic-discoverd }
IRONIC_DISCOVERD_CONF_FILE = $IRONIC_DISCOVERD_CONF_DIR /discoverd.conf
IRONIC_DISCOVERD_DHCP_CONF_FILE = $IRONIC_DISCOVERD_CONF_DIR /dnsmasq.conf
IRONIC_DISCOVERD_DATA_DIR = $DATA_DIR /ironic-discoverd
IRONIC_DISCOVERD_ADMIN_USER = ${ IRONIC_DISCOVERD_ADMIN_USER :- ironic -discoverd }
IRONIC_DISCOVERD_MANAGE_FIREWALL = $( trueorfalse True $IRONIC_DISCOVERD_MANAGE_FIREWALL )
IRONIC_DISCOVERD_HOST = $HOST_IP
IRONIC_DISCOVERD_PORT = 5050
IRONIC_DISCOVERD_URI = " http:// $IRONIC_DISCOVERD_HOST : $IRONIC_DISCOVERD_PORT "
IRONIC_DISCOVERD_RAMDISK_ELEMENT = ${ IRONIC_DISCOVERD_RAMDISK_ELEMENT :- ironic -discoverd-ramdisk }
IRONIC_DISCOVERD_RAMDISK_FLAVOR = ${ IRONIC_DISCOVERD_RAMDISK_FLAVOR :- fedora $IRONIC_DISCOVERD_RAMDISK_ELEMENT }
IRONIC_INSPECTOR_DEBUG = ${ IRONIC_INSPECTOR_DEBUG :- false }
IRONIC_INSPECTOR_DIR = $DEST /ironic-inspector
IRONIC_INSPECTOR_BIN_DIR = $( get_python_exec_prefix)
IRONIC_INSPECTOR_BIN_FILE = $IRONIC_INSPECTOR_BIN_DIR /ironic-inspector
IRONIC_INSPECTOR_CONF_DIR = ${ IRONIC_INSPECTOR_CONF_DIR :- /etc/ironic-inspector }
IRONIC_INSPECTOR_CONF_FILE = $IRONIC_INSPECTOR_CONF_DIR /inspector.conf
IRONIC_INSPECTOR_CMD = " sudo $IRONIC_INSPECTOR_BIN_FILE --config-file $IRONIC_INSPECTOR_CONF_FILE "
IRONIC_INSPECTOR_DHCP_CONF_FILE = $IRONIC_INSPECTOR_CONF_DIR /dnsmasq.conf
IRONIC_INSPECTOR_DATA_DIR = $DATA_DIR /ironic-inspector
IRONIC_INSPECTOR_ADMIN_USER = ${ IRONIC_INSPECTOR_ADMIN_USER :- ironic -inspector }
IRONIC_INSPECTOR_MANAGE_FIREWALL = $( trueorfalse True $IRONIC_INSPECTOR_MANAGE_FIREWALL )
IRONIC_INSPECTOR_HOST = $HOST_IP
IRONIC_INSPECTOR_PORT = 5050
IRONIC_INSPECTOR_URI = " http:// $IRONIC_INSPECTOR_HOST : $IRONIC_INSPECTOR_PORT "
IRONIC_INSPECTOR_RAMDISK_ELEMENT = ${ IRONIC_INSPECTOR_RAMDISK_ELEMENT :- ironic -discoverd-ramdisk }
IRONIC_INSPECTOR_RAMDISK_FLAVOR = ${ IRONIC_INSPECTOR_RAMDISK_FLAVOR :- fedora $IRONIC_INSPECTOR_RAMDISK_ELEMENT }
# These should not overlap with other ranges/networks
IRONIC_D ISCOVE RD _INTERNAL_IP = ${ IRONIC_D ISCOVE RD _INTERNAL_IP :- 172 .24.5.254 }
IRONIC_D ISCOVE RD _INTERNAL_SUBNET_SIZE = ${ IRONIC_D ISCOVE RD _INTERNAL_SUBNET_SIZE :- 24 }
IRONIC_D ISCOVE RD _DHCP_RANGE = ${ IRONIC_D ISCOVE RD _DHCP_RANGE :- 172 .24.5.100,172.24.5.253 }
IRONIC_D ISCOVE RD _INTERFACE = ${ IRONIC_D ISCOVE RD _INTERFACE :- br -d iscove rd }
IRONIC_D ISCOVE RD _INTERNAL_URI = " http:// $IRONIC_D ISCOVE RD _INTERNAL_IP : $IRONIC_D ISCOVE RD _PORT "
IRONIC_D ISCOVE RD _INTERNAL_IP_WITH_NET = $IRONIC_D ISCOVE RD _INTERNAL_IP /$IRONIC_D ISCOVE RD _INTERNAL_SUBNET_SIZE
IRONIC_IN SPE CT OR_INTERNAL_IP = ${ IRONIC_IN SPE CT OR_INTERNAL_IP :- 172 .24.5.254 }
IRONIC_IN SPE CT OR_INTERNAL_SUBNET_SIZE = ${ IRONIC_IN SPE CT OR_INTERNAL_SUBNET_SIZE :- 24 }
IRONIC_IN SPE CT OR_DHCP_RANGE = ${ IRONIC_IN SPE CT OR_DHCP_RANGE :- 172 .24.5.100,172.24.5.253 }
IRONIC_IN SPE CT OR_INTERFACE = ${ IRONIC_IN SPE CT OR_INTERFACE :- br -in spe ct or }
IRONIC_IN SPE CT OR_INTERNAL_URI = " http:// $IRONIC_IN SPE CT OR_INTERNAL_IP : $IRONIC_IN SPE CT OR_PORT "
IRONIC_IN SPE CT OR_INTERNAL_IP_WITH_NET = $IRONIC_IN SPE CT OR_INTERNAL_IP /$IRONIC_IN SPE CT OR_INTERNAL_SUBNET_SIZE
### Utilities
@ -30,102 +31,106 @@ function mkdir_chown_stack {
sudo chown $STACK_USER " $1 "
}
function d iscove rd _iniset {
iniset " $IRONIC_DISCOVERD_CONF_FILE " discoverd $1 $2
function in spe ct or_iniset {
iniset " $IRONIC_INSPECTOR_CONF_FILE " $1 $2 $3
}
### Install-start-stop
function install_d iscove rd {
setup_develop $IRONIC_D ISCOVE RD _DIR
function install_in spe ct or {
setup_develop $IRONIC_IN SPE CT OR_DIR
# NOTE(dtantsur): required for tests
install_package jq
}
function install_d iscove rd _dhcp {
function install_in spe ct or_dhcp {
install_package dnsmasq
}
function start_discoverd {
screen_it ironic-discoverd " cd $IRONIC_DISCOVERD_DIR && sudo $IRONIC_DISCOVERD_BIN_FILE --config-file $IRONIC_DISCOVERD_CONF_FILE "
function start_inspector {
screen_it ironic-inspector \
" cd $IRONIC_INSPECTOR_DIR && $IRONIC_INSPECTOR_CMD "
}
function start_discoverd_dhcp {
screen_it ironic-discoverd-dhcp " sudo dnsmasq --conf-file= $IRONIC_DISCOVERD_DHCP_CONF_FILE "
function start_inspector_dhcp {
screen_it ironic-inspector-dhcp \
" sudo dnsmasq --conf-file= $IRONIC_INSPECTOR_DHCP_CONF_FILE "
}
function stop_d iscove rd {
screen -S $SCREEN_NAME -p ironic-d iscove rd -X kill
function stop_in spe ct or {
screen -S $SCREEN_NAME -p ironic-in spe ct or -X kill
}
function stop_d iscove rd _dhcp {
screen -S $SCREEN_NAME -p ironic-d iscove rd -dhcp -X kill
function stop_in spe ct or_dhcp {
screen -S $SCREEN_NAME -p ironic-in spe ct or-dhcp -X kill
}
### Configuration
function prepare_tftp {
IRONIC_D ISCOVE RD _IMAGE_PATH = " $TOP_DIR /files/ironic-d iscove rd "
IRONIC_D ISCOVE RD _KERNEL_PATH = " $IRONIC_D ISCOVE RD _IMAGE_PATH .kernel "
IRONIC_D ISCOVE RD _INITRAMFS_PATH = " $IRONIC_D ISCOVE RD _IMAGE_PATH .initramfs "
IRONIC_IN SPE CT OR_IMAGE_PATH = " $TOP_DIR /files/ironic-in spe ct or "
IRONIC_IN SPE CT OR_KERNEL_PATH = " $IRONIC_IN SPE CT OR_IMAGE_PATH .kernel "
IRONIC_IN SPE CT OR_INITRAMFS_PATH = " $IRONIC_IN SPE CT OR_IMAGE_PATH .initramfs "
if [ ! -e " $IRONIC_D ISCOVE RD _KERNEL_PATH " -o ! -e " $IRONIC_D ISCOVE RD _INITRAMFS_PATH " ] ; then
if [ ! -e " $IRONIC_IN SPE CT OR_KERNEL_PATH " -o ! -e " $IRONIC_IN SPE CT OR_INITRAMFS_PATH " ] ; then
if [ [ $( type -P ramdisk-image-create) = = "" ] ] ; then
pip_install diskimage_builder
fi
ramdisk-image-create $IRONIC_D ISCOVE RD _RAMDISK_FLAVOR \
-o $IRONIC_D ISCOVE RD _IMAGE_PATH
ramdisk-image-create $IRONIC_IN SPE CT OR_RAMDISK_FLAVOR \
-o $IRONIC_IN SPE CT OR_IMAGE_PATH
fi
mkdir_chown_stack " $IRONIC_TFTPBOOT_DIR /pxelinux.cfg "
cp $IRONIC_DISCOVERD_KERNEL_PATH $IRONIC_DISCOVERD_INITRAMFS_PATH \
cp $IRONIC_INSPECTOR_KERNEL_PATH $IRONIC_INSPECTOR_INITRAMFS_PATH \
$IRONIC_TFTPBOOT_DIR
IRONIC_INSPECTOR_CALLBACK_URI = " $IRONIC_INSPECTOR_INTERNAL_URI /v1/continue "
IRONIC_INSPECTOR_KERNEL_CMDLINE = " discoverd_callback_url= $IRONIC_INSPECTOR_CALLBACK_URI inspector_callback_url= $IRONIC_INSPECTOR_CALLBACK_URI "
cat > " $IRONIC_TFTPBOOT_DIR /pxelinux.cfg/default " <<EOF
default discover
default inspect
label discover
kernel ironic-d iscove rd .kernel
append initrd = ironic-discoverd.initramfs discoverd_callback_url = $IRONIC_DISCOVERD_INTERNAL_URI /v1/continue
label inspect
kernel ironic-in spe ct or.kernel
append initrd = ironic-inspector.initramfs $IRONIC_INSPECTOR_KERNEL_CMDLINE
ipappend 3
EOF
}
function configure_d iscove rd {
mkdir_chown_stack " $IRONIC_D ISCOVE RD _CONF_DIR "
mkdir_chown_stack " $IRONIC_D ISCOVE RD _DATA_DIR "
function configure_in spe ct or {
mkdir_chown_stack " $IRONIC_IN SPE CT OR_CONF_DIR "
mkdir_chown_stack " $IRONIC_IN SPE CT OR_DATA_DIR "
create_service_user " $IRONIC_D ISCOVE RD _ADMIN_USER " "admin"
create_service_user " $IRONIC_IN SPE CT OR_ADMIN_USER " "admin"
cp " $IRONIC_D ISCOVE RD _DIR /example.conf " " $IRONIC_D ISCOVE RD _CONF_FILE "
d iscove rd _iniset debug $IRONIC_D ISCOVE RD _DEBUG
d iscove rd _iniset identity_uri " $KEYSTONE_AUTH_URI "
d iscove rd _iniset os_auth_url " $KEYSTONE_SERVICE_URI /v2.0 "
d iscove rd _iniset os_username $IRONIC_D ISCOVE RD _ADMIN_USER
d iscove rd _iniset os_password $SERVICE_PASSWORD
d iscove rd _iniset os_tenant_name $SERVICE_TENANT_NAME
cp " $IRONIC_IN SPE CT OR_DIR /example.conf " " $IRONIC_IN SPE CT OR_CONF_FILE "
in spe ct or_iniset DEFAULT debug $IRONIC_IN SPE CT OR_DEBUG
in spe ct or_iniset ironic identity_uri " $KEYSTONE_AUTH_URI "
in spe ct or_iniset ironic os_auth_url " $KEYSTONE_SERVICE_URI /v2.0 "
in spe ct or_iniset ironic os_username $IRONIC_IN SPE CT OR_ADMIN_USER
in spe ct or_iniset ironic os_password $SERVICE_PASSWORD
in spe ct or_iniset ironic os_tenant_name $SERVICE_TENANT_NAME
d iscove rd _iniset listen_port $IRONIC_D ISCOVE RD _PORT
d iscove rd _iniset listen_address 0.0.0.0 # do not change
in spe ct or_iniset DEFAULT listen_port $IRONIC_IN SPE CT OR_PORT
in spe ct or_iniset DEFAULT listen_address 0.0.0.0 # do not change
d iscove rd _iniset manage_firewall $IRONIC_D ISCOVE RD _MANAGE_FIREWALL
d iscove rd _iniset dnsmasq_interface $IRONIC_D ISCOVE RD _INTERFACE
d iscove rd _iniset database $IRONIC_D ISCOVE RD _DATA_DIR /d iscove rd .sqlite
in spe ct or_iniset firewall manage_firewall $IRONIC_IN SPE CT OR_MANAGE_FIREWALL
in spe ct or_iniset firewall dnsmasq_interface $IRONIC_IN SPE CT OR_INTERFACE
in spe ct or_iniset DEFAULT database $IRONIC_IN SPE CT OR_DATA_DIR /in spe ct or.sqlite
iniset " $IRONIC_CONF_FILE " d iscove rd enabled True
iniset " $IRONIC_CONF_FILE " d iscove rd service_url $IRONIC_D ISCOVE RD _URI
iniset " $IRONIC_CONF_FILE " in spe ct or enabled True
iniset " $IRONIC_CONF_FILE " in spe ct or service_url $IRONIC_IN SPE CT OR_URI
}
function configure_d iscove rd _dhcp {
mkdir_chown_stack " $IRONIC_D ISCOVE RD _CONF_DIR "
function configure_in spe ct or_dhcp {
mkdir_chown_stack " $IRONIC_IN SPE CT OR_CONF_DIR "
cat > " $IRONIC_D ISCOVE RD _DHCP_CONF_FILE " <<EOF
cat > " $IRONIC_IN SPE CT OR_DHCP_CONF_FILE " <<EOF
no-daemon
port = 0
interface = $IRONIC_D ISCOVE RD _INTERFACE
interface = $IRONIC_IN SPE CT OR_INTERFACE
bind-interfaces
dhcp-range= $IRONIC_D ISCOVE RD _DHCP_RANGE
dhcp-range= $IRONIC_IN SPE CT OR_DHCP_RANGE
dhcp-boot= pxelinux.0
EOF
}
@ -133,66 +138,66 @@ EOF
function prepare_environment {
prepare_tftp
sudo ip link add brbm-d iscove rd type veth peer name $IRONIC_D ISCOVE RD _INTERFACE
sudo ip link set dev brbm-d iscove rd up
sudo ip link set dev $IRONIC_D ISCOVE RD _INTERFACE up
sudo ovs-vsctl add-port brbm brbm-d iscove rd
sudo ip addr add $IRONIC_D ISCOVE RD _INTERNAL_IP_WITH_NET dev $IRONIC_D ISCOVE RD _INTERFACE
sudo ip link add brbm-in spe ct or type veth peer name $IRONIC_IN SPE CT OR_INTERFACE
sudo ip link set dev brbm-in spe ct or up
sudo ip link set dev $IRONIC_IN SPE CT OR_INTERFACE up
sudo ovs-vsctl add-port brbm brbm-in spe ct or
sudo ip addr add $IRONIC_IN SPE CT OR_INTERNAL_IP_WITH_NET dev $IRONIC_IN SPE CT OR_INTERFACE
sudo iptables -I INPUT -i $IRONIC_D ISCOVE RD _INTERFACE -p udp \
sudo iptables -I INPUT -i $IRONIC_IN SPE CT OR_INTERFACE -p udp \
--dport 69 -j ACCEPT
sudo iptables -I INPUT -i $IRONIC_D ISCOVE RD _INTERFACE -p tcp \
--dport $IRONIC_D ISCOVE RD _PORT -j ACCEPT
sudo iptables -I INPUT -i $IRONIC_IN SPE CT OR_INTERFACE -p tcp \
--dport $IRONIC_IN SPE CT OR_PORT -j ACCEPT
}
function cleanup_d iscove rd {
rm -rf $IRONIC_D ISCOVE RD _DATA_DIR
function cleanup_in spe ct or {
rm -rf $IRONIC_IN SPE CT OR_DATA_DIR
rm -f $IRONIC_TFTPBOOT_DIR /pxelinux.cfg/default
rm -f $IRONIC_TFTPBOOT_DIR /ironic-d iscove rd .*
rm -f $IRONIC_TFTPBOOT_DIR /ironic-in spe ct or.*
# Try to clean up firewall rules
sudo iptables -D INPUT -i $IRONIC_D ISCOVE RD _INTERFACE -p udp \
sudo iptables -D INPUT -i $IRONIC_IN SPE CT OR_INTERFACE -p udp \
--dport 69 -j ACCEPT | true
sudo iptables -D INPUT -i $IRONIC_D ISCOVE RD _INTERFACE -p tcp \
--dport $IRONIC_D ISCOVE RD _PORT -j ACCEPT | true
sudo iptables -D INPUT -i $IRONIC_D ISCOVE RD _INTERFACE -p udp \
--dport 67 -j discovery | true
sudo iptables -F discovery | true
sudo iptables -X discovery | true
sudo ip link show $IRONIC_D ISCOVE RD _INTERFACE && sudo ip link delete $IRONIC_D ISCOVE RD _INTERFACE
sudo ip link show brbm-d iscove rd && sudo ip link delete brbm-d iscove rd
sudo ovs-vsctl --if-exists del-port brbm-d iscove rd
sudo iptables -D INPUT -i $IRONIC_IN SPE CT OR_INTERFACE -p tcp \
--dport $IRONIC_IN SPE CT OR_PORT -j ACCEPT | true
sudo iptables -D INPUT -i $IRONIC_IN SPE CT OR_INTERFACE -p udp \
--dport 67 -j ironic-inspector | true
sudo iptables -F ironic-inspector | true
sudo iptables -X ironic-inspector | true
sudo ip link show $IRONIC_IN SPE CT OR_INTERFACE && sudo ip link delete $IRONIC_IN SPE CT OR_INTERFACE
sudo ip link show brbm-in spe ct or && sudo ip link delete brbm-in spe ct or
sudo ovs-vsctl --if-exists del-port brbm-in spe ct or
}
### Entry points
if [ [ " $1 " = = "stack" && " $2 " = = "install" ] ] ; then
echo_summary "Installing ironic-d iscove rd "
if [ [ " $IRONIC_D ISCOVE RD _MANAGE_FIREWALL " = = "True" ] ] ; then
install_d iscove rd _dhcp
echo_summary "Installing ironic-in spe ct or"
if [ [ " $IRONIC_IN SPE CT OR_MANAGE_FIREWALL " = = "True" ] ] ; then
install_in spe ct or_dhcp
fi
install_d iscove rd
install_in spe ct or
elif [ [ " $1 " = = "stack" && " $2 " = = "post-config" ] ] ; then
echo_summary "Configuring ironic-d iscove rd "
cleanup_d iscove rd
if [ [ " $IRONIC_D ISCOVE RD _MANAGE_FIREWALL " = = "True" ] ] ; then
configure_d iscove rd _dhcp
echo_summary "Configuring ironic-in spe ct or"
cleanup_in spe ct or
if [ [ " $IRONIC_IN SPE CT OR_MANAGE_FIREWALL " = = "True" ] ] ; then
configure_in spe ct or_dhcp
fi
configure_d iscove rd
configure_in spe ct or
elif [ [ " $1 " = = "stack" && " $2 " = = "extra" ] ] ; then
echo_summary "Initializing ironic-d iscove rd "
echo_summary "Initializing ironic-in spe ct or"
prepare_environment
if [ [ " $IRONIC_D ISCOVE RD _MANAGE_FIREWALL " = = "True" ] ] ; then
start_d iscove rd _dhcp
if [ [ " $IRONIC_IN SPE CT OR_MANAGE_FIREWALL " = = "True" ] ] ; then
start_in spe ct or_dhcp
fi
start_d iscove rd
start_in spe ct or
fi
if [ [ " $1 " = = "unstack" ] ] ; then
stop_d iscove rd
if [ [ " $IRONIC_D ISCOVE RD _MANAGE_FIREWALL " = = "True" ] ] ; then
stop_d iscove rd _dhcp
stop_in spe ct or
if [ [ " $IRONIC_IN SPE CT OR_MANAGE_FIREWALL " = = "True" ] ] ; then
stop_in spe ct or_dhcp
fi
cleanup_d iscove rd
cleanup_in spe ct or
fi