Sandro Bonazzola has uploaded a new change for review. Change subject: packaging: refactored firewalld support ......................................................................
packaging: refactored firewalld support Added one service configuration template file for each service that should be allowed by firewalld under /etc/ovirt-engine/firewalld. During firewalld configuration the template files will be updated with provided ports for http and https services. Then the template will be copied to /etc/firewalld/services and enabled for the active zones. http, https and nfs services will override firewalld defaults. aio service will be enabled only if the plugin is installed and enabled. Change-Id: If6a60e1667182f926f399e22bbfbb939e7171cb0 Signed-off-by: Sandro Bonazzola <sbona...@redhat.com> --- M Makefile A packaging/fedora/setup/aio.xml M packaging/fedora/setup/basedefs.py M packaging/fedora/setup/engine-setup.py D packaging/fedora/setup/firewalld.ovirt.xml A packaging/fedora/setup/http.xml A packaging/fedora/setup/https.xml A packaging/fedora/setup/nfs.xml M packaging/fedora/setup/output_messages.py M packaging/fedora/setup/plugins/all_in_one_100.py M packaging/fedora/spec/ovirt-engine.spec.in 11 files changed, 125 insertions(+), 35 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/38/13638/1 diff --git a/Makefile b/Makefile index 4a8ac16..0725f56 100644 --- a/Makefile +++ b/Makefile @@ -243,6 +243,7 @@ @install -dm 755 $(DESTDIR)$(SYSCONF_DIR)/cron.daily @install -dm 755 $(DESTDIR)$(SYSCONF_DIR)/rc.d/init.d @install -dm 755 $(DESTDIR)$(SYSCONF_DIR)/firewalld/services + @install -dm 755 $(DESTDIR)$(PKG_SYSCONF_DIR)/firewalld install_artifacts: @echo "*** Deploying EAR to $(DESTDIR)" @@ -269,7 +270,12 @@ # Configuration files: install -m 644 packaging/fedora/setup/engine-config-install.properties $(DESTDIR)$(DATA_DIR)/conf install -m 644 packaging/fedora/setup/iptables.default $(DESTDIR)$(DATA_DIR)/conf - install -m 644 packaging/fedora/setup/firewalld.ovirt.xml $(DESTDIR)$(SYSCONF_DIR)/firewalld/services/ovirt.xml + #FirewallD + install -m 644 packaging/fedora/setup/nfs.xml $(DESTDIR)$(PKG_SYSCONF_DIR)/firewalld/nfs.xml + install -m 644 packaging/fedora/setup/aio.xml $(DESTDIR)$(PKG_SYSCONF_DIR)/firewalld/aio.xml + install -m 644 packaging/fedora/setup/http.xml $(DESTDIR)$(PKG_SYSCONF_DIR)/firewalld/http.xml + install -m 644 packaging/fedora/setup/https.xml $(DESTDIR)$(PKG_SYSCONF_DIR)/firewalld/https.xml + install -m 644 packaging/fedora/setup/nfs.sysconfig $(DESTDIR)$(DATA_DIR)/conf install -m 644 packaging/fedora/setup/ovirt-engine-proxy.conf.in $(DESTDIR)$(DATA_DIR)/conf diff --git a/packaging/fedora/setup/aio.xml b/packaging/fedora/setup/aio.xml new file mode 100644 index 0000000..b28ce38 --- /dev/null +++ b/packaging/fedora/setup/aio.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<service> + <short>ovirt-aio</short> + <description>oVirt configured aio service</description> + <port protocol="tcp" port="5634-6166"/> + <port protocol="tcp" port="49152-49216"/> +</service> diff --git a/packaging/fedora/setup/basedefs.py b/packaging/fedora/setup/basedefs.py index 2ee1c86..36581e0 100644 --- a/packaging/fedora/setup/basedefs.py +++ b/packaging/fedora/setup/basedefs.py @@ -65,6 +65,9 @@ DIR_PKGS_INSTALL = "/usr/share" DIR_ETC_EXPORTSD = "/etc/exports.d" +DIR_FIREWALLD_TEMPLATES = '/etc/ovirt-engine/firewalld' +DIR_FIREWALLD_SERVICES = '/etc/firewalld/services' + FILE_INSTALLER_LOG="engine-setup.log" FILE_KRB_CONF="%s/deployments/configuration/krb5.conf" % DIR_ENGINE FILE_CA_CRT_SRC="%s/ca.pem"%(DIR_OVIRT_PKI) @@ -85,7 +88,6 @@ FILE_IPTABLES_DEFAULT="%s/ovirt-engine/conf/iptables.default" % DIR_USR_SHARE FILE_IPTABLES_EXAMPLE="/etc/ovirt-engine/iptables.example" FILE_IPTABLES_BACKUP="%s/ovirt-engine/backups/iptables.backup" % DIR_VAR_LIB -FILE_FIREWALLD_SERVICE="/etc/firewalld/services/ovirt.xml" FILE_NFS_SYSCONFIG="%s/ovirt-engine/conf/nfs.sysconfig" % DIR_USR_SHARE FILE_NFS_BACKUP="%s/ovirt-engine/backups/nfs.backup" % DIR_VAR_LIB FILE_ETC_EXPORTS="/etc/exports" @@ -212,6 +214,7 @@ CONST_MAX_PSQL_CONNS= 150 CONST_SHMMAX=35554432 CONST_CONFIG_EXTRA_IPTABLES_RULES="EXTRA_IPTABLES_RULES" +CONST_CONFIG_EXTRA_FIREWALLD_RULES="EXTRA_FIREWALLD_RULES" CONST_INSTALL_SIZE_MB=500 CONST_DOWNLOAD_SIZE_MB=500 CONST_DB_SIZE=500 diff --git a/packaging/fedora/setup/engine-setup.py b/packaging/fedora/setup/engine-setup.py index 8d23f6c..329958a 100755 --- a/packaging/fedora/setup/engine-setup.py +++ b/packaging/fedora/setup/engine-setup.py @@ -949,12 +949,19 @@ def _configFirewall(): # Create Sample configuration files _createIptablesConfig() + firewalld_services = ['http', 'https'] + if utils.compareStrIgnoreCase(controller.CONF['CONFIG_NFS'], 'yes'): + firewalld_services.append('nfs') + if basedefs.CONST_CONFIG_EXTRA_FIREWALLD_RULES in controller.CONF: + firewalld_services += controller.CONF[ + basedefs.CONST_CONFIG_EXTRA_FIREWALLD_RULES + ] _createFirewalldConfig() # Configure chosen firewall if utils.compareStrIgnoreCase(controller.CONF["FIREWALL_MANAGER"], "firewalld"): - _configureFirewalld() + _configureFirewalld(firewalld_services) elif utils.compareStrIgnoreCase(controller.CONF["FIREWALL_MANAGER"], "iptables"): _configureIptables() @@ -974,40 +981,60 @@ ) ) if 'Firewalld' in firewalls: + commands = '\nfirewall-cmd --permanent --add-service '.join( + ['', ] + firewalld_services + ) + commands += 'firewall-cmd --reload' controller.MESSAGES.append( - output_messages.INFO_FIREWALLD_INSTRUCTIONS + output_messages.INFO_FIREWALLD_INSTRUCTIONS.format( + template_dir=basedefs.DIR_FIREWALLD_TEMPLATES, + firewalld_dir=basedefs.DIR_FIREWALLD_SERVICES, + commands=commands + ) ) def _createFirewalldConfig(): logging.debug("Creating firewalld configuration") + services = { + 'http.xml': [ + controller.CONF['HTTP_PORT'], + ], + 'https.xml': [ + controller.CONF['HTTPS_PORT'], + ] + } - # Open xml - servicexml = utils.XMLConfigFileHandler(basedefs.FILE_FIREWALLD_SERVICE) - servicexml.open() + for service in services: + # Open xml + servicexml = utils.XMLConfigFileHandler( + os.path.join( + basedefs.DIR_FIREWALLD_TEMPLATES, + service, + ) + ) + servicexml.open() - # Remove all port entries - servicexml.removeNodes("/service/port") + # Remove all port entries + servicexml.removeNodes("/service/port") - # Add ports to service xml - ports = [] - for port in [controller.CONF["HTTP_PORT"], controller.CONF["HTTPS_PORT"]]: - ports.append({ - 'port': port, - 'protocol': ['tcp'] - }) + # Add ports to service xml + ports = [] + for port in services[service]: + ports.append({ + 'port': port, + 'protocol': ['tcp'] + }) - if utils.compareStrIgnoreCase(controller.CONF["CONFIG_NFS"], "yes"): - ports += NFS_IPTABLES_PORTS + for portCfg in ports: + for protocol in portCfg["protocol"]: + servicexml.addNodes("/service", "<port protocol=\"%s\" port=\"%s\"/>" % (protocol, portCfg["port"])) - for portCfg in ports: - for protocol in portCfg["protocol"]: - servicexml.addNodes("/service", "<port protocol=\"%s\" port=\"%s\"/>" % (protocol, portCfg["port"])) + # Save firewalld service configuration + servicexml.close() - # Save firewalld service configuration - servicexml.close() -def _configureFirewalld(): +def _configureFirewalld(firewalld_services): logging.debug("configuring firewalld") # Load firewalld module only when needed. @@ -1018,8 +1045,22 @@ service = utils.Service("firewalld") service.start(True) - for zone in firewalld.getActiveZones(): - firewalld.addServiceToZone("ovirt", zone) + + + for firewalld_service in firewalld_services: + shutil.copy2( + os.path.join( + basedefs.DIR_FIREWALLD_TEMPLATES, + '%s.xml' % firewalld_service + ), + os.path.join( + basedefs.DIR_FIREWALLD_SERVICES, + '%s.xml' % firewalld_service + ) + ) + + for zone in firewalld.getActiveZones(): + firewalld.addServiceToZone(firewalld_service, zone) # Restart firewalld service = utils.Service("firewalld") diff --git a/packaging/fedora/setup/firewalld.ovirt.xml b/packaging/fedora/setup/firewalld.ovirt.xml deleted file mode 100644 index 4b1e925..0000000 --- a/packaging/fedora/setup/firewalld.ovirt.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<service> - <short>ovirt</short> - <description>ovirt-engine-service</description> - <port protocol="tcp" port="80"/> - <port protocol="tcp" port="443"/> -</service> diff --git a/packaging/fedora/setup/http.xml b/packaging/fedora/setup/http.xml new file mode 100644 index 0000000..1089e77 --- /dev/null +++ b/packaging/fedora/setup/http.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<service> + <short>ovirt-http</short> + <description>oVirt configured http service</description> + <port protocol="tcp" port="80"/> +</service> diff --git a/packaging/fedora/setup/https.xml b/packaging/fedora/setup/https.xml new file mode 100644 index 0000000..a1fb120 --- /dev/null +++ b/packaging/fedora/setup/https.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<service> + <short>ovirt-https</short> + <description>oVirt configured https service</description> + <port protocol="tcp" port="443"/> +</service> diff --git a/packaging/fedora/setup/nfs.xml b/packaging/fedora/setup/nfs.xml new file mode 100644 index 0000000..f075e3f --- /dev/null +++ b/packaging/fedora/setup/nfs.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<service> + <short>ovirt-nfs</short> + <description>oVirt configured nfs service</description> + <port protocol="tcp" port="111"/> + <port protocol="udp" port="111"/> + <port protocol="tcp" port="662"/> + <port protocol="udp" port="662"/> + <port protocol="tcp" port="875"/> + <port protocol="udp" port="875"/> + <port protocol="tcp" port="892"/> + <port protocol="udp" port="892"/> + <port protocol="tcp" port="2049"/> + <port protocol="udp" port="32769"/> + <port protocol="tcp" port="32803"/> +</service> diff --git a/packaging/fedora/setup/output_messages.py b/packaging/fedora/setup/output_messages.py index e5a5ccd..32463b3 100644 --- a/packaging/fedora/setup/output_messages.py +++ b/packaging/fedora/setup/output_messages.py @@ -87,7 +87,11 @@ #config ip tables INFO_IPTABLES_FILE="an example of the required configuration for iptables can be found at: %s" -INFO_FIREWALLD_INSTRUCTIONS="In order to configure firewalld, please execute the following command: firewall-cmd --add-service ovirt" +INFO_FIREWALLD_INSTRUCTIONS = ( + "In order to configure firewalld, please copy the template files from " + "{template_dir} to {firewalld_dir} and execute the following commands: " + "{commands}" +) # the last 2 ports are http & https entered by the user INFO_IPTABLES_PORTS=basedefs.APP_NAME + " requires the following TCP/IP Incoming ports to be opened on the firewall:\n\ 22, %s, %s " diff --git a/packaging/fedora/setup/plugins/all_in_one_100.py b/packaging/fedora/setup/plugins/all_in_one_100.py index 7c3825a..702faf1 100644 --- a/packaging/fedora/setup/plugins/all_in_one_100.py +++ b/packaging/fedora/setup/plugins/all_in_one_100.py @@ -229,6 +229,10 @@ '-A INPUT -p tcp -m state --state NEW -m multiport --dports 49152:49216 -j ACCEPT' ] + if basedefs.CONST_CONFIG_EXTRA_FIREWALLD_RULES not in controller.CONF: + controller.CONF[basedefs.CONST_CONFIG_EXTRA_FIREWALLD_RULES] = [] + controller.CONF[basedefs.CONST_CONFIG_EXTRA_FIREWALLD_RULES].append('aio') + def waitForJbossUp(): """ Wait for Jboss to start diff --git a/packaging/fedora/spec/ovirt-engine.spec.in b/packaging/fedora/spec/ovirt-engine.spec.in index 8f29823..9658f34 100644 --- a/packaging/fedora/spec/ovirt-engine.spec.in +++ b/packaging/fedora/spec/ovirt-engine.spec.in @@ -580,7 +580,10 @@ %{engine_data}/scripts/dbutils # Firewalld configuration -%config(noreplace) %{_sysconfdir}/firewalld/services/ovirt.xml +%dir %{engine_etc}/firewalld +%config(noreplace) %{engine_etc}/firewalld/nfs.xml +%config(noreplace) %{engine_etc}/firewalld/http.xml +%config(noreplace) %{engine_etc}/firewalld/https.xml # Man pages %{_mandir}/man8/engine-setup.* @@ -595,6 +598,7 @@ %files setup-plugin-allinone %{engine_data}/scripts/plugins/all_in_one_100.py* +%config(noreplace) %{engine_etc}/firewalld/aio.xml %files dbscripts -- To view, visit http://gerrit.ovirt.org/13638 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If6a60e1667182f926f399e22bbfbb939e7171cb0 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Sandro Bonazzola <sbona...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches