Move user-defined extra networks from dnsmasq.template to astute
Now Multiple Cluster Networks implented by manual modification of dnsmasq.template inside container. With this approach user-difened networks will be overwritten by puppet when docker container will be restarted. We going to create astute section EXTRA_ADMIN_NETWORKS which will contaion all additional networks used for dhcp. For backward compatibility we going to execute script which will create this section from dnsmasq.template Closes-Bug: #1473483 Change-Id: I287e717cd6b1c70e62ddcdd09aee421805862d37
This commit is contained in:
parent
c9dad194e8
commit
b59f69257b
|
@ -110,6 +110,7 @@ $(BUILD_DIR)/packages/rpm/fuel-docker-images.done: \
|
|||
mkdir -p $(SANDBOX)/tmp/SOURCES && \
|
||||
sudo cp -r $(BUILD_DIR)/docker/$(DOCKER_ART_NAME) $(SANDBOX)/tmp/SOURCES && \
|
||||
(cd $(BUILD_DIR)/docker && sudo tar czf $(SANDBOX)/tmp/SOURCES/fuel-images-sources.tar.gz sources utils) && \
|
||||
sudo cp $(SOURCE_DIR)/packages/rpm/specs/extra_nets_from_cobbler.py $(SANDBOX)/tmp/SOURCES && \
|
||||
sudo cp $(SOURCE_DIR)/packages/rpm/specs/fuel-docker-images.spec $(SANDBOX)/tmp && \
|
||||
sudo chroot $(SANDBOX) rpmbuild --nodeps --define "_topdir /tmp" -ba /tmp/fuel-docker-images.spec
|
||||
cp $(SANDBOX)/tmp/RPMS/*/fuel-docker-images-*.rpm $(BUILD_DIR)/packages/rpm/RPMS/x86_64
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
# This script is supposed to be executed only during the upgrade of
|
||||
# fuel-docker-images package. Script will merge values added manually
|
||||
# to implement "multiple cluster networks" with current astute
|
||||
# settings and will print result to stdout.
|
||||
#
|
||||
# It will work only if dnsmasq.template was modified stictly according
|
||||
# to documentation and modified lines matches pattern:
|
||||
# dhcp-range=<name>,<start-IP-addr>,<end-IP-addr>,<netmask>,[<leasetime>]
|
||||
# dhcp-option=net:<name>,option:router,<IP-addr-of-gateway>
|
||||
# dhcp-boot=net:<name>,pxelinux.0,boothost,<Fuel-Master-IP-addr>
|
||||
#
|
||||
# Starting from 7.0 we will handle this feature by puppet manifests
|
||||
# parsing section EXTRA_ADMIN_NETWORKS from astute.yaml
|
||||
|
||||
from collections import defaultdict
|
||||
import yaml
|
||||
import re
|
||||
import sys
|
||||
|
||||
|
||||
# This nets autogenerated by puppet according to networking settings
|
||||
# of admin network. We will ignore them.
|
||||
IGNORED_NETS = ['6', 'internal']
|
||||
OPTS_PLAIN = ['dhcp-range']
|
||||
OPTS_NAMED = ['dhcp-option', 'dhcp-boot']
|
||||
OPTS = OPTS_PLAIN + OPTS_NAMED
|
||||
nets = defaultdict(dict)
|
||||
|
||||
for line in sys.stdin:
|
||||
if re.match('^({0})\s*=[^#]*'.format('|'.join(OPTS)), line):
|
||||
option_name, _, option_value = re.split('(=|#)', line)[:3]
|
||||
option_name = option_name.strip()
|
||||
option_value = option_value.strip()
|
||||
net_name = option_value.split(',')[0]
|
||||
net_value = option_value.split(',')[1:]
|
||||
if option_name in OPTS_NAMED:
|
||||
try:
|
||||
net_name = net_name.split(':')[1]
|
||||
except:
|
||||
continue
|
||||
if net_name in IGNORED_NETS:
|
||||
continue
|
||||
if option_name == 'dhcp-range':
|
||||
if net_name in IGNORED_NETS:
|
||||
continue
|
||||
nets[net_name].update({'dhcp_pool_start': net_value[0]})
|
||||
nets[net_name].update({'dhcp_pool_end': net_value[1]})
|
||||
nets[net_name].update({'netmask': net_value[2]})
|
||||
if option_name == 'dhcp-option':
|
||||
nets[net_name].update({'dhcp_gateway': net_value[1]})
|
||||
if option_name == 'dhcp-boot':
|
||||
nets[net_name].update({'ipaddress': net_value[2]})
|
||||
|
||||
###merge networks from dnsmasq with astute
|
||||
astute = yaml.safe_load(open('/etc/fuel/astute.yaml'))
|
||||
astute['EXTRA_ADMIN_NETWORKS'] = {}
|
||||
for net in nets:
|
||||
astute['EXTRA_ADMIN_NETWORKS'][net] = nets[net]
|
||||
|
||||
print yaml.safe_dump(astute, default_flow_style=False)
|
|
@ -10,6 +10,7 @@ License: Apache 2.0
|
|||
BuildRoot: %{_tmppath}/%{name}-%{version}
|
||||
Source0: fuel-images.tar.lrz
|
||||
Source1: fuel-images-sources.tar.gz
|
||||
Source2: extra_nets_from_cobbler.py
|
||||
URL: http://mirantis.com
|
||||
Requires: docker-io
|
||||
Requires: lrzip
|
||||
|
@ -36,9 +37,21 @@ rm -rf %{buildroot}
|
|||
rm -f /var/www/nailgun/docker/images/fuel-images.tar
|
||||
lrzip -d -o /var/www/nailgun/docker/images/fuel-images.tar /var/www/nailgun/docker/images/fuel-images.tar.lrz
|
||||
|
||||
if [ "$1" = "2" ]; then
|
||||
#upgrade script execution
|
||||
tmpfile=`mktemp /tmp/extra_nets_from_cobbler_XXXXXX.py`
|
||||
cat <<EOF > ${tmpfile}
|
||||
%include %{SOURCE2}
|
||||
EOF
|
||||
umask 0177
|
||||
cp /etc/fuel/astute.yaml /etc/fuel/astute.yaml.bak
|
||||
dockerctl shell cobbler cat /etc/cobbler/dnsmasq.template | python ${tmpfile} > /etc/fuel/astute.yaml.tmp
|
||||
rm -f ${tmpfile}
|
||||
mv /etc/fuel/astute.yaml.tmp /etc/fuel/astute.yaml
|
||||
fi
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
/var/www/nailgun/docker/images/fuel-images.tar.lrz
|
||||
/var/www/nailgun/docker/sources/*
|
||||
/var/www/nailgun/docker/utils/*
|
||||
|
||||
|
|
Loading…
Reference in New Issue