From 87284f03f08a4f0762473ae011d664de97a1ccf8 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Mon, 26 Feb 2024 13:37:50 +0100 Subject: [PATCH] Upgrade to JRE17 and Upgrade System VMs/VRs to Python3 and Debian 12 (#8497) * Update to 4.20.0 * Update to python3 * Upgrade to JRE 17 * Upgrade to Debian 12.4.0 * VR: upgrade to python3 for f in `find systemvm/ -name *.py`;do if grep "print " $f >/dev/null;then 2to3-2.7 -w $f else 2to3-2.7 -p -w $f fi done * java: Use JRE17 in cloudstack packages and systemvmtemplate Signed-off-by: Rohit Yadav * Add --add-opens to JAVA_OPTS in systemd config * Add --add-opens to JAVA_OPTS in systemd config for usage * python3: fix "TypeError: a bytes-like object is required, not 'str'" * python3: fix "ValueError: must have exactly one of create/read/write/append mode" * Add --add-exports=java.base/sun.security.x509=ALL-UNNAMED for management server * Use pip3 instead of pip for centos8 * python3: fix "TypeError: write() argument must be str, not bytes" ``` root@r-1037-VM:~# /opt/cloud/bin/passwd_server_ip.py 10.1.1.1 Traceback (most recent call last): File "/opt/cloud/bin/passwd_server_ip.py", line 201, in serve() File "/opt/cloud/bin/passwd_server_ip.py", line 187, in serve initToken() File "/opt/cloud/bin/passwd_server_ip.py", line 60, in initToken f.write(secureToken) TypeError: write() argument must be str, not bytes root@r-1037-VM:~# ``` * Python3: fix "name 'file' is not defined" ``` root@r-1037-VM:~# /opt/cloud/bin/passwd_server_ip.py 10.1.1.1 Traceback (most recent call last): File "/opt/cloud/bin/passwd_server_ip.py", line 201, in serve() File "/opt/cloud/bin/passwd_server_ip.py", line 188, in serve loadPasswordFile() File "/opt/cloud/bin/passwd_server_ip.py", line 67, in loadPasswordFile with file(getPasswordFile()) as f: NameError: name 'file' is not defined ``` * python3: fix "TypeError: write() argument must be str, not bytes" (two more files) * Upgrade jaxb version * python3: fix more "TypeError: a bytes-like object is required, not str" * python3: fix "Failed to update password server" Failed to update password server due to: POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str. * python3: fix "bad duration value: ikelifetime=24.0h" Jan 15 13:57:20 systemvm ipsec[3080]: # bad duration value: ikelifetime=24.0h * python3: fix password server "invalid save_password token" * test: incease retries in test_vpc_vpn.py * python3: fix passwd_server_ip.py see error below ``` Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: ---------------------------------------- Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: Exception occurred during processing of request from ('10.1.1.129', 32782) Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: Traceback (most recent call last): Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: File "/usr/lib/python3.9/socketserver.py", line 650, in process_request_thread Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: self.finish_request(request, client_address) Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: File "/usr/lib/python3.9/socketserver.py", line 360, in finish_request Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: self.RequestHandlerClass(request, client_address, self) Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: File "/usr/lib/python3.9/socketserver.py", line 720, in __init__ Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: self.handle() Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: File "/usr/lib/python3.9/http/server.py", line 427, in handle Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: self.handle_one_request() Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: File "/usr/lib/python3.9/http/server.py", line 415, in handle_one_request Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: method() Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: File "/opt/cloud/bin/passwd_server_ip.py", line 120, in do_GET Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: self.wfile.write(password) Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: File "/usr/lib/python3.9/socketserver.py", line 799, in write Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: self._sock.sendall(b) Jan 15 18:51:21 systemvm passwd_server_ip.py[1507]: TypeError: a bytes-like object is required, not 'str' ``` * python3: fix self.cl.get_router_password in Redundant VRs ``` File "/opt/cloud/bin/cs/CsDatabag.py", line 154, in get_router_password md5.update(passwd) TypeError: Unicode-objects must be encoded before hashing"] ``` * scripts: mark multipath scripts as executable * systemvm template: remove hyperv packages and do not export * VR: update default RAM size of System VMs/VRs to 512MiB Before ``` mysql> select id,name,cpu,speed,ram_size,unique_name,system_use from service_offering where name like "System%"; +----+----------------------------------------------------------+------+-------+----------+----------------------------------+------------+ | id | name | cpu | speed | ram_size | unique_name | system_use | +----+----------------------------------------------------------+------+-------+----------+----------------------------------+------------+ | 3 | System Offering For Software Router | 1 | 500 | 256 | Cloud.Com-SoftwareRouter | 1 | | 4 | System Offering For Software Router - Local Storage | 1 | 500 | 256 | Cloud.Com-SoftwareRouter-Local | 1 | | 5 | System Offering For Internal LB VM | 1 | 256 | 256 | Cloud.Com-InternalLBVm | 1 | | 6 | System Offering For Internal LB VM - Local Storage | 1 | 256 | 256 | Cloud.Com-InternalLBVm-Local | 1 | | 7 | System Offering For Console Proxy | 1 | 500 | 1024 | Cloud.com-ConsoleProxy | 1 | | 8 | System Offering For Console Proxy - Local Storage | 1 | 500 | 1024 | Cloud.com-ConsoleProxy-Local | 1 | | 9 | System Offering For Secondary Storage VM | 1 | 500 | 512 | Cloud.com-SecondaryStorage | 1 | | 10 | System Offering For Secondary Storage VM - Local Storage | 1 | 500 | 512 | Cloud.com-SecondaryStorage-Local | 1 | | 11 | System Offering For Elastic LB VM | 1 | 128 | 128 | Cloud.Com-ElasticLBVm | 1 | | 12 | System Offering For Elastic LB VM - Local Storage | 1 | 128 | 128 | Cloud.Com-ElasticLBVm-Local | 1 | +----+----------------------------------------------------------+------+-------+----------+----------------------------------+------------+ 10 rows in set (0.00 sec) ``` New value ``` mysql> select id,name,cpu,speed,ram_size,unique_name,system_use from service_offering where name like "System%"; +----+----------------------------------------------------------+------+-------+----------+----------------------------------+------------+ | id | name | cpu | speed | ram_size | unique_name | system_use | +----+----------------------------------------------------------+------+-------+----------+----------------------------------+------------+ | 3 | System Offering For Software Router | 1 | 500 | 512 | Cloud.Com-SoftwareRouter | 1 | | 4 | System Offering For Software Router - Local Storage | 1 | 500 | 512 | Cloud.Com-SoftwareRouter-Local | 1 | | 5 | System Offering For Internal LB VM | 1 | 256 | 512 | Cloud.Com-InternalLBVm | 1 | | 6 | System Offering For Internal LB VM - Local Storage | 1 | 256 | 512 | Cloud.Com-InternalLBVm-Local | 1 | | 7 | System Offering For Console Proxy | 1 | 500 | 1024 | Cloud.com-ConsoleProxy | 1 | | 8 | System Offering For Console Proxy - Local Storage | 1 | 500 | 1024 | Cloud.com-ConsoleProxy-Local | 1 | | 9 | System Offering For Secondary Storage VM | 1 | 500 | 512 | Cloud.com-SecondaryStorage | 1 | | 10 | System Offering For Secondary Storage VM - Local Storage | 1 | 500 | 512 | Cloud.com-SecondaryStorage-Local | 1 | | 11 | System Offering For Elastic LB VM | 1 | 128 | 512 | Cloud.Com-ElasticLBVm | 1 | | 12 | System Offering For Elastic LB VM - Local Storage | 1 | 128 | 512 | Cloud.Com-ElasticLBVm-Local | 1 | +----+----------------------------------------------------------+------+-------+----------+----------------------------------+------------+ 10 rows in set (0.01 sec) ``` * debian12: fix test_network_ipv6 and test_vpc_ipv6 * python3: remove duplicated imports * debian12: failed to start Apache2 server (SSLCipherSuite @SECLEVEL=0) error message ``` [Sat Jan 20 22:51:14.595143 2024] [ssl:emerg] [pid 10200:tid 140417063888768] AH02562: Failed to configure certificate cloudinternal.com:443:0 (with chain), check /etc/ssl/certs/cert_apache.crt [Sat Jan 20 22:51:14.595234 2024] [ssl:emerg] [pid 10200:tid 140417063888768] SSL Library Error: error:0A00018E:SSL routines::ca md too weak AH00016: Configuration Failed ``` openssl version ``` root@s-167-VM:~# openssl version -a OpenSSL 3.0.11 19 Sep 2023 (Library: OpenSSL 3.0.11 19 Sep 2023) built on: Mon Oct 23 17:52:22 2023 UTC platform: debian-amd64 options: bn(64,64) compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -fzero-call-used-regs=used-gpr -DOPENSSL_TLS_SECURITY_LEVEL=2 -Wa,--noexecstack -g -O2 -ffile-prefix-map=/build/reproducible-path/openssl-3.0.11=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2 OPENSSLDIR: "/usr/lib/ssl" ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-3" MODULESDIR: "/usr/lib/x86_64-linux-gnu/ossl-modules" Seeding source: os-specific CPUINFO: OPENSSL_ia32cap=0x80202001478bfffd:0x0 ``` certificate ``` root@s-167-VM:~# keytool -printcert -rfc -file /usr/local/cloud/systemvm/certs/realhostip.crt -----BEGIN CERTIFICATE----- MIIFZTCCBE2gAwIBAgIHKBCduBUoKDANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlm aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5 IFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5Njky ODcwHhcNMTIwMjAzMDMzMDQwWhcNMTcwMjA3MDUxMTIzWjBZMRkwFwYDVQQKDBAq LnJlYWxob3N0aXAuY29tMSEwHwYDVQQLDBhEb21haW4gQ29udHJvbCBWYWxpZGF0 ZWQxGTAXBgNVBAMMECoucmVhbGhvc3RpcC5jb20wggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQCDT9AtEfs+s/I8QXp6rrCw0iNJ0+GgsybNHheU+JpL39LM TZykCrZhZnyDvwdxCoOfE38Sa32baHKNds+y2SHnMNsOkw8OcNucHEBX1FIpOBGp h9D6xC+umx9od6xMWETUv7j6h2u+WC3OhBM8fHCBqIiAol31/IkcqDxxsHlQ8S/o CfTlXJUY6Yn628OA1XijKdRnadV0hZ829cv/PZKljjwQUTyrd0KHQeksBH+YAYSo 2JUl8ekNLsOi8/cPtfojnltzRI1GXi0ZONs8VnDzJ0a2gqZY+uxlz+CGbLnGnlN4 j9cBpE+MfUE+35Dq121sTpsSgF85Mz+pVhn2S633AgMBAAGjggG+MIIBujAPBgNV HRMBAf8EBTADAQEAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNV HQ8BAf8EBAMCBaAwMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nb2RhZGR5 LmNvbS9nZHMxLTY0LmNybDBTBgNVHSAETDBKMEgGC2CGSAGG/W0BBxcBMDkwNwYI KwYBBQUHAgEWK2h0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3Np dG9yeS8wgYAGCCsGAQUFBwEBBHQwcjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3Au Z29kYWRkeS5jb20vMEoGCCsGAQUFBzAChj5odHRwOi8vY2VydGlmaWNhdGVzLmdv ZGFkZHkuY29tL3JlcG9zaXRvcnkvZ2RfaW50ZXJtZWRpYXRlLmNydDAfBgNVHSME GDAWgBT9rGEyk2xF1uLuhV+auud2mWjM5zArBgNVHREEJDAighAqLnJlYWxob3N0 aXAuY29tgg5yZWFsaG9zdGlwLmNvbTAdBgNVHQ4EFgQUZyJz9/QLy5TWIIscTXID E8Xk47YwDQYJKoZIhvcNAQEFBQADggEBAKiUV3KK16mP0NpS92fmQkCLqm+qUWyN BfBVgf9/M5pcT8EiTZlS5nAtzAE/eRpBeR3ubLlaAogj4rdH7YYVJcDDLLoB2qM3 qeCHu8LFoblkb93UuFDWqRaVPmMlJRnhsRkL1oa2gM2hwQTkBDkP7w5FG1BELCgl gZI2ij2yxjge6pOEwSyZCzzbCcg9pN+dNrYyGEtB4k+BBnPA3N4r14CWbk+uxjrQ 6j2Ip+b7wOc5IuMEMl8xwTyjuX3lsLbAZyFI9RCyofwA9NqIZ1GeB6Zd196rubQp 93cmBqGGjZUs3wMrGlm7xdjlX6GQ9UvmvkMub9+lL99A5W50QgCmFeI= -----END CERTIFICATE----- Warning: The certificate uses the SHA1withRSA signature algorithm which is considered a security risk. This algorithm will be disabled in a future update. ``` it comes from ``` $ openssl x509 -in ./systemvm/agent/certs/realhostip.crt -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 11277268652730408 (0x28109db8152828) Signature Algorithm: sha1WithRSAEncryption Issuer: C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", OU = http://certificates.godaddy.com/repository, CN = Go Daddy Secure Certification Authority, serialNumber = 07969287 Validity Not Before: Feb 3 03:30:40 2012 GMT Not After : Feb 7 05:11:23 2017 GMT Subject: O = *.realhostip.com, OU = Domain Control Validated, CN = *.realhostip.com ``` * debian12: use ed25519 instead of rsa as ssh-rsa has been deprecated in OpenSSH on xenserver ``` [root@pr8497-t8906-xenserver-71-xs2 ~]# ssh -i .ssh/id_rsa.cloud -p 3922 169.254.214.153 Warning: Permanently added '[169.254.214.153]:3922' (ECDSA) to the list of known hosts. Permission denied (publickey). ``` in the CPVM Jan 22 19:31:09 v-1-VM sshd[2869]: userauth_pubkey: signature algorithm ssh-rsa not in PubkeyAcceptedAlgorithms [preauth] Jan 22 19:31:09 v-1-VM sshd[2869]: Connection closed by authenticating user root 169.254.0.1 port 54704 [preauth] ``` ssh-dss (DSA) is not supported either * debian12: add PubkeyAcceptedAlgorithms=+ssh-rsa to sshd_config * VR: install python3 packages in case of Debian 11 * pom.xml: exclude systemvm/agent/packages/* in license check * systemvm: do not patch router/systemvm during startup this will cause 4.19 SYSTEM template not work, but may be expected - python3 VS python2 (default) - openSSL 3.0.1 VS 1.1.1w - openssh-server 9.1 VS 8.4 * VR: patch router/systemvm if template is debian11 This supports debian 11 template by - revert change in systemvm/debian/etc/ssh/sshd_config - patch VR/systemvms during startup - install packages during patching system vm/routers * python3 flake: fix E502 the backslash is redundant between brackets ``` ../debian/root/health_checks/router_version_check.py:55:70: E502 the backslash is redundant between brackets ../debian/root/health_checks/router_version_check.py:58:61: E502 the backslash is redundant between brackets ../debian/root/health_checks/router_version_check.py:67:71: E502 the backslash is redundant between brackets ../debian/root/health_checks/router_version_check.py:70:60: E502 the backslash is redundant between brackets ../debian/root/health_checks/haproxy_check.py:47:71: E502 the backslash is redundant between brackets ../debian/root/health_checks/haproxy_check.py:48:64: E502 the backslash is redundant between brackets ../debian/root/health_checks/cpu_usage_check.py:43:54: E502 the backslash is redundant between brackets ../debian/root/health_checks/cpu_usage_check.py:46:58: E502 the backslash is redundant between brackets ../debian/root/health_checks/memory_usage_check.py:31:65: E502 the backslash is redundant between brackets ../debian/root/health_checks/memory_usage_check.py:42:57: E502 the backslash is redundant between brackets ../debian/root/health_checks/memory_usage_check.py:45:63: E502 the backslash is redundant between brackets ``` * python3 flake: fix E275 missing whitespace after keyword ``` ../debian/opt/cloud/bin/cs_firewallrules.py:29:20: E275 missing whitespace after keyword ../debian/opt/cloud/bin/cs_dhcp.py:27:16: E275 missing whitespace after keyword ../debian/opt/cloud/bin/cs_dhcp.py:36:16: E275 missing whitespace after keyword ../debian/opt/cloud/bin/cs_guestnetwork.py:33:20: E275 missing whitespace after keyword ../debian/opt/cloud/bin/cs_guestnetwork.py:35:16: E275 missing whitespace after keyword ../debian/opt/cloud/bin/cs_vpnusers.py:37:16: E275 missing whitespace after keyword ../debian/opt/cloud/bin/merge.py:230:11: E275 missing whitespace after keyword ../debian/opt/cloud/bin/merge.py:239:19: E275 missing whitespace after keyword ../debian/opt/cloud/bin/cs_remoteaccessvpn.py:24:12: E275 missing whitespace after keyword ../debian/opt/cloud/bin/cs_site2sitevpn.py:24:12: E275 missing whitespace after keyword ../debian/opt/cloud/bin/cs/CsHelper.py:90:15: E275 missing whitespace after keyword ../debian/opt/cloud/bin/cs/CsAddress.py:367:15: E275 missing whitespace after keyword ``` * python3 flake: fix configure.py ``` ../debian/opt/cloud/bin/configure.py:24:22: E401 multiple imports on one line ../debian/opt/cloud/bin/configure.py:43:180: E501 line too long (294 > 179 characters) ../debian/opt/cloud/bin/configure.py:46:1: E302 expected 2 blank lines, found 1 ../debian/opt/cloud/bin/configure.py:63:1: E302 expected 2 blank lines, found 1 ../debian/opt/cloud/bin/configure.py:65:12: E721 do not compare types, for exact checks use `is` / `is not`, for instance checks use `isinstance()` ../debian/opt/cloud/bin/configure.py:72:1: E302 expected 2 blank lines, found 1 ../debian/opt/cloud/bin/configure.py:310:25: E711 comparison to None should be 'if cond is not None:' ../debian/opt/cloud/bin/configure.py:312:29: E711 comparison to None should be 'if cond is None:' ../debian/opt/cloud/bin/configure.py:378:25: E711 comparison to None should be 'if cond is not None:' ../debian/opt/cloud/bin/configure.py:380:29: E711 comparison to None should be 'if cond is None:' ../debian/opt/cloud/bin/configure.py:490:29: E712 comparison to False should be 'if cond is False:' or 'if not cond:' ../debian/opt/cloud/bin/configure.py:642:16: E721 do not compare types, for exact checks use `is` / `is not`, for instance checks use `isinstance()` ../debian/opt/cloud/bin/configure.py:644:18: E721 do not compare types, for exact checks use `is` / `is not`, for instance checks use `isinstance()` ../debian/opt/cloud/bin/configure.py:1416:1: E305 expected 2 blank lines after class or function definition, found 1 ``` * python3 flake: fix other python files ``` ../debian/opt/cloud/bin/vmdata.py:97:12: E721 do not compare types, for exact checks use `is` / `is not`, for instance checks use `isinstance()` ../debian/opt/cloud/bin/vmdata.py:99:14: E721 do not compare types, for exact checks use `is` / `is not`, for instance checks use `isinstance()` ../debian/opt/cloud/bin/cs/CsRedundant.py:438:53: E203 whitespace before ':' ../debian/opt/cloud/bin/cs/CsRedundant.py:461:53: E203 whitespace before ':' ../debian/opt/cloud/bin/cs/CsRedundant.py:499:5: E303 too many blank lines (2) ../debian/opt/cloud/bin/cs/CsDatabag.py:189:1: E302 expected 2 blank lines, found 1 ../debian/opt/cloud/bin/cs/CsDatabag.py:193:37: E721 do not compare types, for exact checks use `is` / `is not`, for instance checks use `isinstance()` ../debian/opt/cloud/bin/cs/CsHelper.py:118:30: E231 missing whitespace after ',' ../debian/opt/cloud/bin/cs/CsHelper.py:119:15: E225 missing whitespace around operator ../debian/opt/cloud/bin/cs/CsHelper.py:127:19: E225 missing whitespace around operator ../debian/opt/cloud/bin/cs/CsAddress.py:324:43: E221 multiple spaces before operator ../debian/opt/cloud/bin/cs/CsVpcGuestNetwork.py:28:1: E302 expected 2 blank lines, found 1 ``` * python3 flake: fix CsNetfilter.py ``` ../debian/opt/cloud/bin/cs/CsNetfilter.py:226:13: E117 over-indented ../debian/opt/cloud/bin/cs/CsNetfilter.py:233:180: E501 line too long (197 > 179 characters) ../debian/opt/cloud/bin/cs/CsNetfilter.py:241:14: E201 whitespace after '{' ../debian/opt/cloud/bin/cs/CsNetfilter.py:242:14: E201 whitespace after '{' ../debian/opt/cloud/bin/cs/CsNetfilter.py:247:18: E201 whitespace after '{' ../debian/opt/cloud/bin/cs/CsNetfilter.py:247:74: E202 whitespace before '}' ../debian/opt/cloud/bin/cs/CsNetfilter.py:248:18: E201 whitespace after '{' ``` * systemvm/test: fix sys.path ``` $ bash runtests.sh /usr/bin/python Python 3.10.12 Running pycodestyle to check systemvm/python code for errors Running pylint to check systemvm/python code for errors Python 3.10.12 pylint 2.12.2 astroid 2.9.3 Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] -------------------------------------------------------------------- Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00) -------------------------------------------------------------------- Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00) Running systemvm/python unit tests ....Device "eth0" does not exist. ..................... ---------------------------------------------------------------------- Ran 25 tests in 0.008s OK ``` * Revert "systemvm template: remove hyperv packages and do not export" This reverts commit 4383d59d031bde6eae7ebba261ff641ca0a66cd5. * debian12: move SQL change to schema-41900to42000.sql * debian12: update systemvm template version to 4.20 in pom.xml * pom.xml: fix NPE if templates do not exist on download.cloudstack.org * debian12: increase default system offering for routers to 384MiB RAM * CKS: fix addkubernetessupportedversion failed with JRE17 ``` marvin.cloudstackException.CloudstackAPIException: Execute cmd: addkubernetessupportedversion failed, due to: errorCode: 530, errorText:Cannot invoke "org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine$State.toString()" because the return value of "com.cloud.api.query.vo.TemplateJoinVO.getState()" is null ``` * python3: revert changes by 2to3 with systemvm/debian/root/health_checks/*.py * debian12: use ISO/packages on download.cloudstack.org * VR: Update default ram size to 384 * debian12: fix router_version_check.py after VR live-patch and add health check in test_routers.py * debian12: fix build error after log4j 2.x merge * VR: Update default ram size to 512MB (again) This reverts commit 578dd2b73f380e8231ae1eb59827230757cac5e8 and efafa8c4d63775653a2cd406fca10784fbcec3e3. * systemvmtemplate: Upgrade to Debian 12.5.0 * systemvm template: increase swap to 512MB * VR: fix health check error due to deprecated SafeConfigParser warning below ``` root@r-20-VM:~# /opt/cloud/bin/getRouterMonitorResults.sh true /root/monitorServices.py:59: DeprecationWarning: The SafeConfigParser class has been renamed to ConfigParser in Python 3.2. This alias will be removed in Python 3.12. Use ConfigParser directly instead. parser = SafeConfigParser() ``` * test: fix wget does not work in macchinina vms on vmware80u1 fixes error below ``` {Cmd: wget -t 1 -T 1 www.google.com via Host: 10.0.55.186} {returns: ["wget: '/usr/lib/libpcre.so.1' is not an ELF file", "wget: can't load library 'libpcre.so.1'"]} ``` * packaging: add message for VR memory upgrade after packages installation --------- Signed-off-by: Rohit Yadav Co-authored-by: Rohit Yadav Co-authored-by: Vishesh --- INSTALL.md | 2 +- debian/control | 6 +- engine/api/pom.xml | 2 +- engine/schema/pom.xml | 6 +- .../META-INF/db/schema-41900to42000.sql | 6 + framework/rest/pom.xml | 2 +- packaging/centos8/cloud.spec | 10 +- .../systemd/cloudstack-management.default | 4 +- packaging/systemd/cloudstack-usage.default | 2 +- plugins/hypervisors/baremetal/pom.xml | 2 +- .../LibvirtPatchSystemVmCommandWrapper.java | 1 + .../version/KubernetesVersionManagerImpl.java | 4 +- .../lb/InternalLoadBalancerVMManager.java | 2 +- pom.xml | 7 +- scripts/installer/cloudstack-help-text | 6 + .../java/com/cloud/configuration/Config.java | 4 +- .../keymaps/generate-language-keymaps.py | 2 +- systemvm/agent/packages/packages.ini | 11 ++ .../python-is-python3_3.9.2-1_all.deb | Bin 0 -> 2800 bytes .../packages/python3-netaddr_0.7.19-5_all.deb | Bin 0 -> 253016 bytes systemvm/debian/etc/apache2/vhost.template | 2 +- systemvm/debian/opt/cloud/bin/baremetal-vr.py | 4 +- systemvm/debian/opt/cloud/bin/configure.py | 106 ++++++++------- systemvm/debian/opt/cloud/bin/cs/CsAddress.py | 30 ++-- systemvm/debian/opt/cloud/bin/cs/CsApp.py | 4 +- systemvm/debian/opt/cloud/bin/cs/CsConfig.py | 4 +- systemvm/debian/opt/cloud/bin/cs/CsDatabag.py | 10 +- systemvm/debian/opt/cloud/bin/cs/CsDhcp.py | 4 +- systemvm/debian/opt/cloud/bin/cs/CsFile.py | 4 +- .../debian/opt/cloud/bin/cs/CsGuestNetwork.py | 4 +- systemvm/debian/opt/cloud/bin/cs/CsHelper.py | 10 +- .../debian/opt/cloud/bin/cs/CsLoadBalancer.py | 10 +- systemvm/debian/opt/cloud/bin/cs/CsMonitor.py | 2 +- .../debian/opt/cloud/bin/cs/CsNetfilter.py | 47 +++---- systemvm/debian/opt/cloud/bin/cs/CsProcess.py | 2 +- .../debian/opt/cloud/bin/cs/CsRedundant.py | 19 ++- systemvm/debian/opt/cloud/bin/cs/CsRoute.py | 2 +- systemvm/debian/opt/cloud/bin/cs/CsRule.py | 2 +- .../debian/opt/cloud/bin/cs/CsStaticRoutes.py | 4 +- .../opt/cloud/bin/cs/CsVpcGuestNetwork.py | 17 +-- systemvm/debian/opt/cloud/bin/cs_dhcp.py | 6 +- .../debian/opt/cloud/bin/cs_firewallrules.py | 6 +- .../opt/cloud/bin/cs_forwardingrules.py | 8 +- .../debian/opt/cloud/bin/cs_guestnetwork.py | 8 +- systemvm/debian/opt/cloud/bin/cs_ip.py | 2 +- .../opt/cloud/bin/cs_remoteaccessvpn.py | 4 +- .../debian/opt/cloud/bin/cs_site2sitevpn.py | 4 +- systemvm/debian/opt/cloud/bin/cs_vpnusers.py | 12 +- systemvm/debian/opt/cloud/bin/diagnostics.py | 4 +- .../cloud/bin/filesystem_writable_check.py | 6 +- .../opt/cloud/bin/get_diagnostics_files.py | 8 +- systemvm/debian/opt/cloud/bin/merge.py | 8 +- .../debian/opt/cloud/bin/passwd_server_ip.py | 18 +-- .../debian/opt/cloud/bin/setup/cksnode.sh | 1 + .../opt/cloud/bin/setup/consoleproxy.sh | 2 + .../debian/opt/cloud/bin/setup/dhcpsrvr.sh | 1 + systemvm/debian/opt/cloud/bin/setup/elbvm.sh | 1 + systemvm/debian/opt/cloud/bin/setup/ilbvm.sh | 1 + systemvm/debian/opt/cloud/bin/setup/patch.sh | 128 ++++++++++++++++++ systemvm/debian/opt/cloud/bin/setup/router.sh | 1 + .../debian/opt/cloud/bin/setup/secstorage.sh | 2 + .../debian/opt/cloud/bin/setup/vpcrouter.sh | 1 + .../debian/opt/cloud/bin/update_config.py | 2 +- systemvm/debian/opt/cloud/bin/vmdata.py | 25 ++-- .../root/health_checks/cpu_usage_check.py | 14 +- .../debian/root/health_checks/dhcp_check.py | 6 +- .../root/health_checks/disk_space_check.py | 6 +- .../debian/root/health_checks/dns_check.py | 6 +- .../root/health_checks/gateways_check.py | 8 +- .../root/health_checks/haproxy_check.py | 22 +-- .../root/health_checks/iptables_check.py | 8 +- .../root/health_checks/memory_usage_check.py | 16 +-- .../health_checks/router_version_check.py | 20 +-- .../root/health_checks/utility/__init__.py | 2 +- systemvm/debian/root/monitorServices.py | 16 +-- systemvm/patch-sysvms.sh | 16 ++- systemvm/systemvm-agent-descriptor.xml | 7 + systemvm/test/__init__.py | 20 +++ systemvm/test/runtests.sh | 2 +- test/integration/smoke/test_network_ipv6.py | 9 +- test/integration/smoke/test_routers.py | 79 ++++++++++- .../smoke/test_routers_network_ops.py | 32 ++--- test/integration/smoke/test_vpc_ipv6.py | 5 +- test/integration/smoke/test_vpc_vpn.py | 2 +- .../systemvmtemplate/http/preseed.cfg | 2 +- .../systemvmtemplate/scripts/apt_upgrade.sh | 4 +- .../scripts/configure_systemvm_services.sh | 2 +- .../scripts/install_systemvm_packages.sh | 18 +-- .../appliance/systemvmtemplate/template.json | 4 +- vmware-base/pom.xml | 10 ++ 90 files changed, 630 insertions(+), 331 deletions(-) create mode 100644 systemvm/agent/packages/packages.ini create mode 100644 systemvm/agent/packages/python-is-python3_3.9.2-1_all.deb create mode 100644 systemvm/agent/packages/python3-netaddr_0.7.19-5_all.deb create mode 100755 systemvm/debian/opt/cloud/bin/setup/patch.sh create mode 100755 systemvm/test/__init__.py diff --git a/INSTALL.md b/INSTALL.md index 620fc1833a8..6586e4e57fc 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -15,7 +15,7 @@ was tested against a CentOS 7 x86_64 setup. Install tools and dependencies used for development: - # yum -y install git java-11-openjdk java-11-openjdk-devel \ + # yum -y install git java-17-openjdk java-17-openjdk-devel \ mysql mysql-server mkisofs git gcc python MySQL-python openssh-clients wget Set up Maven (3.6.0): diff --git a/debian/control b/debian/control index 9fec540975e..3508c7b5f75 100644 --- a/debian/control +++ b/debian/control @@ -17,14 +17,14 @@ Description: A common package which contains files which are shared by several C Package: cloudstack-management Architecture: all -Depends: ${python3:Depends}, openjdk-11-jre-headless | java11-runtime-headless | java11-runtime | openjdk-11-jre-headless | zulu-11, cloudstack-common (= ${source:Version}), net-tools, sudo, python3-mysql.connector, augeas-tools, mysql-client | mariadb-client, adduser, bzip2, ipmitool, file, gawk, iproute2, qemu-utils, rng-tools, python3-dnspython, lsb-release, init-system-helpers (>= 1.14~), python3-setuptools +Depends: ${python3:Depends}, openjdk-17-jre-headless | java17-runtime-headless | java17-runtime | zulu-17, cloudstack-common (= ${source:Version}), net-tools, sudo, python3-mysql.connector, augeas-tools, mysql-client | mariadb-client, adduser, bzip2, ipmitool, file, gawk, iproute2, qemu-utils, rng-tools, python3-dnspython, lsb-release, init-system-helpers (>= 1.14~), python3-setuptools Conflicts: cloud-server, cloud-client, cloud-client-ui Description: CloudStack server library The CloudStack management server Package: cloudstack-agent Architecture: all -Depends: ${python:Depends}, ${python3:Depends}, openjdk-11-jre-headless | java11-runtime-headless | java11-runtime | openjdk-11-jre-headless | zulu-11, cloudstack-common (= ${source:Version}), lsb-base (>= 9), openssh-client, qemu-kvm (>= 2.5) | qemu-system-x86 (>= 5.2), libvirt-bin (>= 1.3) | libvirt-daemon-system (>= 3.0), iproute2, ebtables, vlan, ipset, python3-libvirt, ethtool, iptables, cryptsetup, rng-tools, lsb-release, ufw, apparmor +Depends: ${python:Depends}, ${python3:Depends}, openjdk-17-jre-headless | java17-runtime-headless | java17-runtime | zulu-17, cloudstack-common (= ${source:Version}), lsb-base (>= 9), openssh-client, qemu-kvm (>= 2.5) | qemu-system-x86 (>= 5.2), libvirt-bin (>= 1.3) | libvirt-daemon-system (>= 3.0), iproute2, ebtables, vlan, ipset, python3-libvirt, ethtool, iptables, cryptsetup, rng-tools, lsb-release, ufw, apparmor Recommends: init-system-helpers Conflicts: cloud-agent, cloud-agent-libs, cloud-agent-deps, cloud-agent-scripts Description: CloudStack agent @@ -34,7 +34,7 @@ Description: CloudStack agent Package: cloudstack-usage Architecture: all -Depends: openjdk-11-jre-headless | java11-runtime-headless | java11-runtime | openjdk-11-jre-headless | zulu-11, cloudstack-common (= ${source:Version}), init-system-helpers +Depends: openjdk-17-jre-headless | java17-runtime-headless | java17-runtime | zulu-17, cloudstack-common (= ${source:Version}), init-system-helpers Description: CloudStack usage monitor The CloudStack usage monitor provides usage accounting across the entire cloud for cloud operators to charge based on usage parameters. diff --git a/engine/api/pom.xml b/engine/api/pom.xml index 65cc4baadee..1112e6eff8b 100644 --- a/engine/api/pom.xml +++ b/engine/api/pom.xml @@ -71,7 +71,7 @@ com.sun.xml.bind jaxb-impl - ${cs.jaxb.version} + ${cs.jaxb.impl.version} diff --git a/engine/schema/pom.xml b/engine/schema/pom.xml index a39608455f7..666c25fdf36 100644 --- a/engine/schema/pom.xml +++ b/engine/schema/pom.xml @@ -101,8 +101,10 @@ for (template in templateList) { def data = lines.findAll { it.contains(template) } if (data != null) { - def hypervisor = template.tokenize('-')[-1] - pom.properties["$hypervisor" + ".checksum"] = data[0].tokenize(' ')[0] + if (data.size() > 0) { + def hypervisor = template.tokenize('-')[-1] + pom.properties["$hypervisor" + ".checksum"] = data[0].tokenize(' ')[0] + } } } diff --git a/engine/schema/src/main/resources/META-INF/db/schema-41900to42000.sql b/engine/schema/src/main/resources/META-INF/db/schema-41900to42000.sql index 33b819e4072..cc54e637d88 100644 --- a/engine/schema/src/main/resources/META-INF/db/schema-41900to42000.sql +++ b/engine/schema/src/main/resources/META-INF/db/schema-41900to42000.sql @@ -28,3 +28,9 @@ DROP INDEX `i_resource_count__type_accountId`, DROP INDEX `i_resource_count__type_domaintId`, ADD UNIQUE INDEX `i_resource_count__type_tag_accountId` (`type`,`tag`,`account_id`), ADD UNIQUE INDEX `i_resource_count__type_tag_domaintId` (`type`,`tag`,`domain_id`); + +-- Update Default System offering for Router to 512MiB +UPDATE `cloud`.`service_offering` SET ram_size = 512 WHERE unique_name IN ("Cloud.Com-SoftwareRouter", "Cloud.Com-SoftwareRouter-Local", + "Cloud.Com-InternalLBVm", "Cloud.Com-InternalLBVm-Local", + "Cloud.Com-ElasticLBVm", "Cloud.Com-ElasticLBVm-Local") + AND system_use = 1 AND ram_size < 512; diff --git a/framework/rest/pom.xml b/framework/rest/pom.xml index f1cbf3f3845..d1ffff3c7bd 100644 --- a/framework/rest/pom.xml +++ b/framework/rest/pom.xml @@ -68,7 +68,7 @@ com.sun.xml.bind jaxb-impl - ${cs.jaxb.version} + ${cs.jaxb.impl.version} org.apache.cxf diff --git a/packaging/centos8/cloud.spec b/packaging/centos8/cloud.spec index 086d2207d09..37fe007e3fb 100644 --- a/packaging/centos8/cloud.spec +++ b/packaging/centos8/cloud.spec @@ -52,7 +52,7 @@ intelligent IaaS cloud implementation. %package management Summary: CloudStack management server UI -Requires: java-11-openjdk +Requires: java-17-openjdk Requires: (tzdata-java or timezone-java) Requires: python3 Requires: bash @@ -98,7 +98,7 @@ The Apache CloudStack files shared between agent and management server %package agent Summary: CloudStack Agent for KVM hypervisors Requires: (openssh-clients or openssh) -Requires: java-11-openjdk +Requires: java-17-openjdk Requires: tzdata-java Requires: %{name}-common = %{_ver} Requires: libvirt @@ -135,7 +135,7 @@ The CloudStack baremetal agent %package usage Summary: CloudStack Usage calculation server -Requires: java-11-openjdk +Requires: java-17-openjdk Requires: tzdata-java Group: System Environment/Libraries %description usage @@ -556,8 +556,8 @@ if [ -f "/usr/share/cloudstack-common/scripts/installer/cloudstack-help-text" ]; fi %post marvin -pip install --upgrade https://files.pythonhosted.org/packages/08/1f/42d74bae9dd6dcfec67c9ed0f3fa482b1ae5ac5f117ca82ab589ecb3ca19/mysql_connector_python-8.0.31-py2.py3-none-any.whl -pip install --upgrade /usr/share/cloudstack-marvin/Marvin-*.tar.gz +pip3 install --upgrade https://files.pythonhosted.org/packages/08/1f/42d74bae9dd6dcfec67c9ed0f3fa482b1ae5ac5f117ca82ab589ecb3ca19/mysql_connector_python-8.0.31-py2.py3-none-any.whl +pip3 install --upgrade /usr/share/cloudstack-marvin/Marvin-*.tar.gz #No default permission as the permission setup is complex %files management diff --git a/packaging/systemd/cloudstack-management.default b/packaging/systemd/cloudstack-management.default index 252fb4b78f6..ca8ff628fc1 100644 --- a/packaging/systemd/cloudstack-management.default +++ b/packaging/systemd/cloudstack-management.default @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -JAVA_OPTS="-Djava.security.properties=/etc/cloudstack/management/java.security.ciphers -Djava.awt.headless=true -Dcom.sun.management.jmxremote=false -Xmx2G -XX:+UseParallelGC -XX:MaxGCPauseMillis=500 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/cloudstack/management/ -XX:ErrorFile=/var/log/cloudstack/management/cloudstack-management.err " +JAVA_OPTS="-Djava.security.properties=/etc/cloudstack/management/java.security.ciphers -Djava.awt.headless=true -Dcom.sun.management.jmxremote=false -Xmx2G -XX:+UseParallelGC -XX:MaxGCPauseMillis=500 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/cloudstack/management/ -XX:ErrorFile=/var/log/cloudstack/management/cloudstack-management.err --add-opens=java.base/java.lang=ALL-UNNAMED --add-exports=java.base/sun.security.x509=ALL-UNNAMED" CLASSPATH="/usr/share/cloudstack-management/lib/*:/etc/cloudstack/management:/usr/share/cloudstack-common:/usr/share/cloudstack-management/setup:/usr/share/cloudstack-management:/usr/share/java/mysql-connector-java.jar:/usr/share/cloudstack-mysql-ha/lib/*" @@ -24,7 +24,7 @@ BOOTSTRAP_CLASS=org.apache.cloudstack.ServerDaemon ################################################################################################ #You can uncomment one of these options if you want to enable Java remote debugging. # #You can change the parameters at your will. The 'address' field defines the port to be used. # -################################################################################################ +################################################################################################ # This option here should be used with 'systemmd' based operating systems such as CentOS7, Ubuntu 16, and so on. #JAVA_DEBUG="-agentlib:jdwp=transport=dt_socket,address=*:8000,server=y,suspend=n" diff --git a/packaging/systemd/cloudstack-usage.default b/packaging/systemd/cloudstack-usage.default index 089f3eec09c..493f40c277a 100644 --- a/packaging/systemd/cloudstack-usage.default +++ b/packaging/systemd/cloudstack-usage.default @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. -JAVA_OPTS="-Xms256m -Xmx2048m" +JAVA_OPTS="-Xms256m -Xmx2048m --add-opens=java.base/java.lang=ALL-UNNAMED" CLASSPATH="/usr/share/cloudstack-usage/*:/usr/share/cloudstack-usage/lib/*:/usr/share/cloudstack-mysql-ha/lib/*:/etc/cloudstack/usage:/usr/share/java/mysql-connector-java.jar" diff --git a/plugins/hypervisors/baremetal/pom.xml b/plugins/hypervisors/baremetal/pom.xml index ecbde4b7550..d866c9b47e2 100755 --- a/plugins/hypervisors/baremetal/pom.xml +++ b/plugins/hypervisors/baremetal/pom.xml @@ -45,7 +45,7 @@ com.sun.xml.bind jaxb-impl - ${cs.jaxb.version} + ${cs.jaxb.impl.version} diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPatchSystemVmCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPatchSystemVmCommandWrapper.java index a9e4d0da432..2c8918e620d 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPatchSystemVmCommandWrapper.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtPatchSystemVmCommandWrapper.java @@ -77,6 +77,7 @@ public class LibvirtPatchSystemVmCommandWrapper extends CommandWrapperUTF-8 UTF-8 https://download.cloudstack.org/systemvm - 4.19.0.0 + 4.20.0.0 apache https://sonarcloud.io @@ -151,7 +151,9 @@ 3.1.1 1.3.2 2.3.0 - 2.3.2-1 + 2.3.9 + 2.3.3 + 2.3.7 2.26 9.4.51.v20230217 9.4.27.v20200227 @@ -1040,6 +1042,7 @@ systemvm/agent/js/jquery.js systemvm/agent/js/jquery.flot.navigate.js systemvm/agent/noVNC/** + systemvm/agent/packages/** systemvm/debian/** test/integration/component/test_host_ha.sh test/systemvm/README.md diff --git a/scripts/installer/cloudstack-help-text b/scripts/installer/cloudstack-help-text index 1231464aa56..fbb2f0f0a7e 100755 --- a/scripts/installer/cloudstack-help-text +++ b/scripts/installer/cloudstack-help-text @@ -40,4 +40,10 @@ printf " * Release notes: https://docs.cloudstack.apache.org/en/${ACL_MINO printf " * Join mailing lists: https://cloudstack.apache.org/mailing-lists.html\n" printf " * Take the survey: https://cloudstack.apache.org/survey.html\n" printf " * Report issues: https://github.com/apache/cloudstack/issues/new\n" + +if [ "$1" = "management" ];then + printf "\nSince Apache CloudStack 4.20.0.0, the System VMs and virtual routers require at least 512 MiB memory, please check the System Offerings." + printf "\nMore information can be found at https://docs.cloudstack.apache.org/en/${ACL_MINOR_VERSION:-latest}/upgrading/upgrade/_sysvm_restart.html\n" +fi + printf "\n" diff --git a/server/src/main/java/com/cloud/configuration/Config.java b/server/src/main/java/com/cloud/configuration/Config.java index 2d677042b62..ef20d54aef5 100644 --- a/server/src/main/java/com/cloud/configuration/Config.java +++ b/server/src/main/java/com/cloud/configuration/Config.java @@ -959,7 +959,7 @@ public enum Config { ManagementServer.class, Integer.class, "network.loadbalancer.basiczone.elb.vm.ram.size", - "128", + "512", "Memory in MB for the elastic load balancer vm", null), ElasticLoadBalancerVmCpuMhz( @@ -1291,7 +1291,7 @@ public enum Config { "The allowable clock difference in milliseconds between when an SSO login request is made and when it is received.", null), //NetworkType("Hidden", ManagementServer.class, String.class, "network.type", "vlan", "The type of network that this deployment will use.", "vlan,direct"), - RouterRamSize("Hidden", NetworkOrchestrationService.class, Integer.class, "router.ram.size", "256", "Default RAM for router VM (in MB).", null), + RouterRamSize("Hidden", NetworkOrchestrationService.class, Integer.class, "router.ram.size", "512", "Default RAM for router VM (in MB).", null), DefaultPageSize("Advanced", ManagementServer.class, Long.class, "default.page.size", "500", "Default page size for API list* commands", null), diff --git a/systemvm/agent/noVNC/keymaps/generate-language-keymaps.py b/systemvm/agent/noVNC/keymaps/generate-language-keymaps.py index 145891b8af4..4a88a05ef0d 100755 --- a/systemvm/agent/noVNC/keymaps/generate-language-keymaps.py +++ b/systemvm/agent/noVNC/keymaps/generate-language-keymaps.py @@ -95,7 +95,7 @@ def generate_js_file(keymap_file): js_config.append(" * layout : %s\n" % layout) js_config.append(" */\n") js_config.append("export default {\n") - for keycode in dict(sorted(result_mappings.items(), key=lambda item: int(item[0]))): + for keycode in dict(sorted(list(result_mappings.items()), key=lambda item: int(item[0]))): js_config.append("%10s : \"%s\",\n" % ("\"" + str(keycode) + "\"", result_mappings[keycode].strip())) js_config.append("}\n") for line in js_config: diff --git a/systemvm/agent/packages/packages.ini b/systemvm/agent/packages/packages.ini new file mode 100644 index 00000000000..5693338dac4 --- /dev/null +++ b/systemvm/agent/packages/packages.ini @@ -0,0 +1,11 @@ +[python-is-python3] +debian_os=11 +package_name=python-is-python3 +file_name=python-is-python3_3.9.2-1_all.deb +conflicted_packages=python-is-python2 + +[python3-netaddr] +debian_os=11 +package_name=python3-netaddr +file_name=python3-netaddr_0.7.19-5_all.deb +conflicted_packages= diff --git a/systemvm/agent/packages/python-is-python3_3.9.2-1_all.deb b/systemvm/agent/packages/python-is-python3_3.9.2-1_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..8e7af953853208ef4dac6a601d4ffae2ca0dad4d GIT binary patch literal 2800 zcmbu=X*d*&763;U6cpX z%O3;+L19ouI8;#qrT_v#e((RCPzVI3s0af6?*Eh{r-B@W(+T6@^Of7XNJIVWbNk60k~0Aa31@uy4)tr7<6 z{wLe|FJvNB&&1ZWOW!C|^DWext{6wZXFg}JzM2rg?=dJf5+0|T8;FV%X$>J<-fm!^ zj1T_ho9A-nmS1zc5`lyGBNaT-G0l8=0DB6o`}7q07rjQLi-`L6{5`ZZ#bqQW2$!l7 z6}id>*0(T_t5b^a9oad(TT`HPHwb!cmpDoiu-ffLoQ_&Y*I= z6F?zAVz3Xq7c5&%sRbFuAX7qKQ2 z2M%r8wCb)ZILQ3kH$s+?^C%LZmrFr6_D0GV>C=j~a<*jD2RF_$?RodU)b`QZb})x= z8}rqjNrqNx^#v}bi#`6aRva6ld2A02iv_7R%yud{{E7;Ab~@`J&3T7?xL9-p8h0RW3-@ z(YrI96!EcB_CcV%R)A!SLRAoQnE~KyH5N{(5_3ZFhdK* zo@VU7Mmb?4yiZega!ct-fMvn#F=GJ0uNN_7W>nw^U?TlC1po{#I@~Dha5-T9gBGie ztuxXG`4`yV8vn^W6t3{+D*!oi{;$~`?!TM8N}7E4+w3uq|HCYiU~idvr5cx7%zwHM zKkoKp0j2lBb6~?c;YL!u|0izK3O{=RqXjH;6dv$as!vsiV5ktFL0K!Z50h*60b@H0eeM z=A3W+-Wj#zoVm@HWjtZxEm_2J=N``fn~JX2wpgSy*Ur`5Ma~vTK;+9PA)1-OA!|oq zu_b>MSZWrRWGqX5&*|1@qbT?XbO5(G=&Ss{rxsEZZi+(?;!L?@VJnxaB1A6TY zFRVev>*YgdDc6Y;L+#RFsrqH|p>a6fCnJ8#GAi|e$wjpm_cf?V1}#CGC?ab_cTs(B zbgB&a0m%^_ZVP5081KU9TIr|kAt@f=BE&FT3w0R%ChYJRBStogeucxA-mP-S?reXy z?jVCI{b|T-Q8)GTZrYq)L;M&g#p-j_Lq3*V7hA4+iOM_U{@aF(0Pp+)laXcl1YHF* zfu``GDY|x_Z~`ziFFf6-Z5l=HUZtf;H|yZTSw!aU4<>(to^;+FvgNfV5=_Kzr;P5? z6GQV?($9t7la1(BVlUwUu}!(I-e$+M|so&gHZdWyt3xpR)A zl%BQ`N3(;^w)nbLF&xI4pf;*RgbTgb@!VKg!tB_0WbX7XJ%?yUIPRm2y13EPX|&M) zCC^Qn8i_0|&xsuH(`H*_e#^(<9fDfz@=M2TG&8|wKEkNVd54b{ z)BTpliUoU&v2qyZ&VwbJ%IW$(Pf~7YYxc!6((?fC1vZYZpYX-ed?nzbDEo z%b>nJL|yHIgo_n6ScY`BJAN!#EBW~56&{GcCoPgI6S`T5w=4AC4_J00c|H+$3k;~u zTfRB2PF-^28Fr=nT1HJRjatffJUE_)h$*g8(_dNZkT*`L{tnKu(G2PHr(F%IcsCWW zJ>M!kX~sIynpNly6?gzCs&nXxqIVCN`;nytlgAUrQVrQ4S9Efv%ix2b+xd8dxlKr z0T&|Xve_jN6PNrqEuL;o_@Bso4a+bAvE>%!=aAC&3{5s2>ncWXwZ-o_j)zIg!hLr! z6tj+d;jN#XG{0sa$>_QP&u@Kh-L7lGnw*-R0d05$ewK7Z+$ik$DVd}kdJ!Vk!V2zb z-|I8r6VI)`11SLtBp5xjkn(hYNHS;=12ae-mI;?OzFe!SDzhp9dKH($(MF~Un5tD* zk%R|FE_(CT@?7u8X?mJY1sRSdg0s*1&DpbO*8xMBzkmyJrI4eu3tfeY58D#^9#PnC m)!i)gUp%wk75qEa=1jL5E%Lta1DN7?{>Z!%4Lt4dnfGt`&p@{T literal 0 HcmV?d00001 diff --git a/systemvm/agent/packages/python3-netaddr_0.7.19-5_all.deb b/systemvm/agent/packages/python3-netaddr_0.7.19-5_all.deb new file mode 100644 index 0000000000000000000000000000000000000000..17acf31bd93ba6c66873c4b43ad3af070484ac25 GIT binary patch literal 253016 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

lrm4ZCb$pSeq#i`j9H;iqIF=*KQRWHn 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 %s" % e) @@ -364,7 +364,7 @@ class CsIP: else: # once we start processing public ip's we need to verify there # is a default route and add if needed - if(self.cl.get_gateway()): + if self.cl.get_gateway(): route.add_defaultroute(self.cl.get_gateway()) if self.config.is_router() and self.cl.get_ip6gateway(): @@ -556,7 +556,7 @@ class CsIP: "-A POSTROUTING -o %s -j SNAT --to-source %s" % (self.dev, self.address['public_ip'])]) if self.get_gateway() == self.get_ip_address(): - for inf, addresses in self.config.address().dbag.iteritems(): + for inf, addresses in self.config.address().dbag.items(): if not inf.startswith("eth"): continue for address in addresses: @@ -625,7 +625,7 @@ class CsIP: if self.config.is_vpc(): if self.get_type() in ["public"] and "gateway" in self.address and self.address["gateway"] and self.address["gateway"] != "None": route.add_route(self.dev, self.address["gateway"]) - for inf, addresses in self.config.address().dbag.iteritems(): + for inf, addresses in self.config.address().dbag.items(): if not inf.startswith("eth"): continue for address in addresses: @@ -709,7 +709,7 @@ class CsIP: self.iplist[cidr] = self.dev def configured(self): - if self.address['cidr'] in self.iplist.keys(): + if self.address['cidr'] in list(self.iplist.keys()): return True return False @@ -738,7 +738,7 @@ class CsIP: return self.dev def hasIP(self, ip): - return ip in self.address.values() + return ip in list(self.address.values()) def arpPing(self): cmd = "arping -c 1 -I %s -A -U -s %s %s" % ( @@ -749,7 +749,7 @@ class CsIP: # Delete any ips that are configured but not in the bag def compare(self, bag): - if len(self.iplist) > 0 and (self.dev not in bag.keys() or len(bag[self.dev]) == 0): + if len(self.iplist) > 0 and (self.dev not in list(bag.keys()) or len(bag[self.dev]) == 0): # Remove all IPs on this device logging.info( "Will remove all configured addresses on device %s", self.dev) @@ -760,13 +760,13 @@ class CsIP: # This condition should not really happen but did :) # It means an apache file got orphaned after a guest network address # was deleted - if len(self.iplist) == 0 and (self.dev not in bag.keys() or len(bag[self.dev]) == 0): + if len(self.iplist) == 0 and (self.dev not in list(bag.keys()) or len(bag[self.dev]) == 0): app = CsApache(self) app.remove() for ip in self.iplist: found = False - if self.dev in bag.keys(): + if self.dev in list(bag.keys()): for address in bag[self.dev]: self.setAddress(address) if (self.hasIP(ip) or self.is_guest_gateway(address, ip)) and address["add"]: @@ -799,7 +799,7 @@ class CsIP: remove = [] if ip == "all": logging.info("Removing addresses from device %s", self.dev) - remove = self.iplist.keys() + remove = list(self.iplist.keys()) else: remove.append(ip) for ip in remove: diff --git a/systemvm/debian/opt/cloud/bin/cs/CsApp.py b/systemvm/debian/opt/cloud/bin/cs/CsApp.py index 123171a09c0..064771184c1 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsApp.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsApp.py @@ -16,8 +16,8 @@ # specific language governing permissions and limitations # under the License. import os -from CsFile import CsFile -import CsHelper +from .CsFile import CsFile +from . import CsHelper class CsApp: diff --git a/systemvm/debian/opt/cloud/bin/cs/CsConfig.py b/systemvm/debian/opt/cloud/bin/cs/CsConfig.py index eaed71732d8..bfc5c134998 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsConfig.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsConfig.py @@ -16,8 +16,8 @@ # specific language governing permissions and limitations # under the License. -from CsDatabag import CsCmdLine, CsGuestNetwork -from CsAddress import CsAddress +from .CsDatabag import CsCmdLine, CsGuestNetwork +from .CsAddress import CsAddress import logging diff --git a/systemvm/debian/opt/cloud/bin/cs/CsDatabag.py b/systemvm/debian/opt/cloud/bin/cs/CsDatabag.py index f2de92304ea..a6e84bb0b8c 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsDatabag.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsDatabag.py @@ -33,7 +33,7 @@ class CsDataBag(object): self.config = config def dump(self): - print self.dbag + print(self.dbag) def get_bag(self): return self.dbag @@ -151,7 +151,7 @@ class CsCmdLine(CsDataBag): else: passwd = "%s-%s" % (self.get_vpccidr(), self.get_router_id()) md5 = hashlib.md5() - md5.update(passwd) + md5.update(passwd.encode()) return md5.hexdigest() def get_gateway(self): @@ -191,7 +191,7 @@ class CsGuestNetwork(CsDataBag): """ Get guestnetwork config parameters """ def get_dev_data(self, devname): - if devname in self.dbag and type(self.dbag[devname]) == list and len(self.dbag[devname]) > 0: + if devname in self.dbag and isinstance(self.dbag[devname], list) and len(self.dbag[devname]) > 0: return self.dbag[devname][0] return {} @@ -223,7 +223,7 @@ class CsGuestNetwork(CsDataBag): if devname: return self.__get_device_router_ip6prelen(devname) else: - for key in self.dbag.keys(): + for key in list(self.dbag.keys()): ip6prelen = self.__get_device_router_ip6prelen(key) if ip6prelen: return ip6prelen @@ -240,7 +240,7 @@ class CsGuestNetwork(CsDataBag): if devname: return self.__get_device_router_ip6gateway(devname) else: - for key in self.dbag.keys(): + for key in list(self.dbag.keys()): ip6gateway = self.__get_device_router_ip6gateway(key) if ip6gateway: return ip6gateway diff --git a/systemvm/debian/opt/cloud/bin/cs/CsDhcp.py b/systemvm/debian/opt/cloud/bin/cs/CsDhcp.py index d653093a9f2..0c430227048 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsDhcp.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsDhcp.py @@ -14,13 +14,13 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -import CsHelper +from . import CsHelper import logging import os from netaddr import * from random import randint import json -from CsGuestNetwork import CsGuestNetwork +from .CsGuestNetwork import CsGuestNetwork from cs.CsDatabag import CsDataBag from cs.CsFile import CsFile from cs.CsAddress import CsIP diff --git a/systemvm/debian/opt/cloud/bin/cs/CsFile.py b/systemvm/debian/opt/cloud/bin/cs/CsFile.py index 2ee631a89d6..bad9cd9537a 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsFile.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsFile.py @@ -70,7 +70,7 @@ class CsFile: def dump(self): for line in self.new_config: - print line + print(line) def addeq(self, string): """ Update a line in a file of the form token=something @@ -153,7 +153,7 @@ class CsFile: logging.debug("Searching for %s string " % search) for index, line in enumerate(self.new_config): - print ' line = ' + line + print(' line = ' + line) if line.lstrip().startswith(ignoreLinesStartWith): continue if search in line: diff --git a/systemvm/debian/opt/cloud/bin/cs/CsGuestNetwork.py b/systemvm/debian/opt/cloud/bin/cs/CsGuestNetwork.py index 9a94dc66360..a934862c224 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsGuestNetwork.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsGuestNetwork.py @@ -15,7 +15,7 @@ # specific language governing permissions and limitations # under the License. from merge import DataBag -import CsHelper +from . import CsHelper class CsGuestNetwork: @@ -27,7 +27,7 @@ class CsGuestNetwork: db.load() dbag = db.getDataBag() self.config = config - if device in dbag.keys() and len(dbag[device]) != 0: + if device in list(dbag.keys()) and len(dbag[device]) != 0: self.data = dbag[device][0] else: self.guest = False diff --git a/systemvm/debian/opt/cloud/bin/cs/CsHelper.py b/systemvm/debian/opt/cloud/bin/cs/CsHelper.py index b7db1b3fe16..926ea5f10d0 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsHelper.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsHelper.py @@ -87,7 +87,7 @@ def mkdir(name, mode, fatal): except OSError as e: if e.errno != 17: print("failed to make directories " + name + " due to :" + e.strerror) - if(fatal): + if fatal: sys.exit(1) @@ -115,8 +115,8 @@ def get_device_info(): list = [] for i in execute("ip addr show |grep -v secondary"): vals = i.strip().lstrip().rstrip().split() - if re.search('[0-9]:',vals[0]): - to={} + if re.search('[0-9]:', vals[0]): + to = {} to['mtu'] = vals[4] list.append(to) @@ -124,7 +124,7 @@ def get_device_info(): if len(list) > 0: to = list.pop(len(list)-1) else: - to={} + to = {} to['ip'] = vals[1] to['dev'] = vals[-1] to['network'] = IPNetwork(to['ip']) @@ -198,7 +198,7 @@ def execute(command): returncode = 0 logging.debug("Command [%s] has the result [%s]" % (command, result)) - return result.splitlines() + return result.decode().splitlines() except subprocess.CalledProcessError as e: logging.error(e) returncode = e.returncode diff --git a/systemvm/debian/opt/cloud/bin/cs/CsLoadBalancer.py b/systemvm/debian/opt/cloud/bin/cs/CsLoadBalancer.py index a45d57efe79..a92f06b1870 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsLoadBalancer.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsLoadBalancer.py @@ -18,9 +18,9 @@ import logging import os.path import re from cs.CsDatabag import CsDataBag -from CsProcess import CsProcess -from CsFile import CsFile -import CsHelper +from .CsProcess import CsProcess +from .CsFile import CsFile +from . import CsHelper HAPROXY_CONF_T = "/etc/haproxy/haproxy.cfg.new" HAPROXY_CONF_P = "/etc/haproxy/haproxy.cfg" @@ -30,9 +30,9 @@ class CsLoadBalancer(CsDataBag): """ Manage Load Balancer entries """ def process(self): - if "config" not in self.dbag.keys(): + if "config" not in list(self.dbag.keys()): return - if 'configuration' not in self.dbag['config'][0].keys(): + if 'configuration' not in list(self.dbag['config'][0].keys()): return config = self.dbag['config'][0]['configuration'] file1 = CsFile(HAPROXY_CONF_T) diff --git a/systemvm/debian/opt/cloud/bin/cs/CsMonitor.py b/systemvm/debian/opt/cloud/bin/cs/CsMonitor.py index 5a0ff5b114c..5f02dedb613 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsMonitor.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsMonitor.py @@ -16,7 +16,7 @@ # under the License. import logging from cs.CsDatabag import CsDataBag -from CsFile import CsFile +from .CsFile import CsFile import json MON_CONFIG = "/etc/monitor.conf" diff --git a/systemvm/debian/opt/cloud/bin/cs/CsNetfilter.py b/systemvm/debian/opt/cloud/bin/cs/CsNetfilter.py index a034034dc8b..c753350eaf5 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsNetfilter.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsNetfilter.py @@ -15,8 +15,8 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -import CsHelper -from CsDatabag import CsCmdLine +from . import CsHelper +from .CsDatabag import CsCmdLine import logging @@ -28,7 +28,7 @@ class CsChain(object): self.count = {} def add(self, table, chain): - if table not in self.chain.keys(): + if table not in list(self.chain.keys()): self.chain.setdefault(table, []).append(chain) else: self.chain[table].append(chain) @@ -40,7 +40,7 @@ class CsChain(object): self.count[chain] += 1 def get(self, table): - if table not in self.chain.keys(): + if table not in list(self.chain.keys()): return {} return self.chain[table] @@ -51,7 +51,7 @@ class CsChain(object): return self.last_added def has_chain(self, table, chain): - if table not in self.chain.keys(): + if table not in list(self.chain.keys()): return False if chain not in self.chain[table]: return False @@ -179,7 +179,7 @@ class CsNetfilters(object): # For now raising the log. # TODO: Need to fix in the framework. if ret.returncode != 0: - error = ret.communicate()[0] + error = ret.communicate()[0].decode() logging.debug("iptables command got failed ... continuing") ruleSet.add(tupledFw) self.chain.add_rule(rule_chain) @@ -223,14 +223,15 @@ class CsNetfilters(object): self.rules[:] = [x for x in self.rules if not x == rule] def add_ip6_chain(self, address_family, table, chain, hook, action): - chain_policy = "" - if hook: - chain_policy = "type filter hook %s priority 0;" % hook - if chain_policy and action: - chain_policy = "%s policy %s;" % (chain_policy, action) - CsHelper.execute("nft add chain %s %s %s '{ %s }'" % (address_family, table, chain, chain_policy)) - if hook == "input" or hook == "output": - CsHelper.execute("nft add rule %s %s %s icmpv6 type { echo-request, echo-reply, nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept" % (address_family, table, chain)) + chain_policy = "" + if hook: + chain_policy = "type filter hook %s priority 0;" % hook + if chain_policy and action: + chain_policy = "%s policy %s;" % (chain_policy, action) + CsHelper.execute("nft add chain %s %s %s '{ %s }'" % (address_family, table, chain, chain_policy)) + if hook == "input" or hook == "output": + CsHelper.execute("nft add rule %s %s %s icmpv6 type { echo-request, echo-reply, \ + nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept" % (address_family, table, chain)) def apply_ip6_rules(self, rules, type): if len(rules) == 0: @@ -238,14 +239,14 @@ class CsNetfilters(object): address_family = 'ip6' table = 'ip6_firewall' default_chains = [ - { "chain": "fw_input", "hook": "input", "action": "drop"}, - { "chain": "fw_forward", "hook": "forward", "action": "accept"} + {"chain": "fw_input", "hook": "input", "action": "drop"}, + {"chain": "fw_forward", "hook": "forward", "action": "accept"} ] if type == "acl": table = 'ip6_acl' default_chains = [ - { "chain": "acl_input", "hook": "input", "action": "drop" }, - { "chain": "acl_forward", "hook": "forward", "action": "accept"} + {"chain": "acl_input", "hook": "input", "action": "drop"}, + {"chain": "acl_forward", "hook": "forward", "action": "accept"} ] CsHelper.execute("nft add table %s %s" % (address_family, table)) for chain in default_chains: @@ -287,7 +288,7 @@ class CsNetfilter(object): self.seen = True def __convert_to_dict(self, rule): - rule = unicode(rule.lstrip()) + rule = str(rule.lstrip()) rule = rule.replace('! -', '!_-') rule = rule.replace('-p all', '') rule = rule.replace(' ', ' ') @@ -298,8 +299,8 @@ class CsNetfilter(object): rule = rule.replace('-m state', '-m2 state') rule = rule.replace('ESTABLISHED,RELATED', 'RELATED,ESTABLISHED') bits = rule.split(' ') - rule = dict(zip(bits[0::2], bits[1::2])) - if "-A" in rule.keys(): + rule = dict(list(zip(bits[0::2], bits[1::2]))) + if "-A" in list(rule.keys()): self.chain = rule["-A"] return rule @@ -334,7 +335,7 @@ class CsNetfilter(object): '--to-source', '--to-destination', '--mark'] str = '' for k in order: - if k in self.rule.keys(): + if k in list(self.rule.keys()): printable = k.replace('-m2', '-m') printable = printable.replace('!_-', '! -') if delete: @@ -351,7 +352,7 @@ class CsNetfilter(object): return False if rule.get_chain() != self.get_chain(): return False - if len(rule.get_rule().items()) != len(self.get_rule().items()): + if len(list(rule.get_rule().items())) != len(list(self.get_rule().items())): return False common = set(rule.get_rule().items()) & set(self.get_rule().items()) if len(common) != len(rule.get_rule()): diff --git a/systemvm/debian/opt/cloud/bin/cs/CsProcess.py b/systemvm/debian/opt/cloud/bin/cs/CsProcess.py index 4a64807c86f..1a0f35241f5 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsProcess.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsProcess.py @@ -17,7 +17,7 @@ # under the License. import os import re -import CsHelper +from . import CsHelper import logging diff --git a/systemvm/debian/opt/cloud/bin/cs/CsRedundant.py b/systemvm/debian/opt/cloud/bin/cs/CsRedundant.py index f8928dc7fd9..7acf0a53130 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsRedundant.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsRedundant.py @@ -32,13 +32,13 @@ # -------------------------------------------------------------------- # import os import logging -import CsHelper -from CsFile import CsFile -from CsProcess import CsProcess -from CsApp import CsPasswdSvc -from CsAddress import CsDevice -from CsRoute import CsRoute -from CsStaticRoutes import CsStaticRoutes +from . import CsHelper +from .CsFile import CsFile +from .CsProcess import CsProcess +from .CsApp import CsPasswdSvc +from .CsAddress import CsDevice +from .CsRoute import CsRoute +from .CsStaticRoutes import CsStaticRoutes import socket from time import sleep @@ -435,7 +435,7 @@ class CsRedundant(object): - public IPv6 for primary VR public NIC as its IPv6 gets lost on link down """ dev = '' - if dev == interface.get_device() or not ipv6 : + if dev == interface.get_device() or not ipv6: return dev = interface.get_device() command = "ip -6 address show %s | grep 'inet6 %s'" % (dev, ipv6) @@ -458,7 +458,7 @@ class CsRedundant(object): - guest IPv6 gateway for primary VR guest NIC """ dev = '' - if dev == interface.get_device() or not ipv6 : + if dev == interface.get_device() or not ipv6: return dev = interface.get_device() command = "ip -6 address show %s | grep 'inet6 %s'" % (dev, ipv6) @@ -495,7 +495,6 @@ class CsRedundant(object): CsHelper.service("radvd", "disable") logging.info(CsHelper.execute("systemctl status radvd")) - def _add_ipv6_guest_gateway(self): """ Configure guest network gateway as IPv6 address for guest interface diff --git a/systemvm/debian/opt/cloud/bin/cs/CsRoute.py b/systemvm/debian/opt/cloud/bin/cs/CsRoute.py index d5df611df30..796ef505722 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsRoute.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsRoute.py @@ -15,7 +15,7 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -import CsHelper +from . import CsHelper import logging diff --git a/systemvm/debian/opt/cloud/bin/cs/CsRule.py b/systemvm/debian/opt/cloud/bin/cs/CsRule.py index f1caa298904..c28ea7b1ad6 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsRule.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsRule.py @@ -15,7 +15,7 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -import CsHelper +from . import CsHelper import logging diff --git a/systemvm/debian/opt/cloud/bin/cs/CsStaticRoutes.py b/systemvm/debian/opt/cloud/bin/cs/CsStaticRoutes.py index df98b2e03ce..bcd669b6d45 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsStaticRoutes.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsStaticRoutes.py @@ -18,8 +18,8 @@ # under the License. import logging -import CsHelper -from CsDatabag import CsDataBag +from . import CsHelper +from .CsDatabag import CsDataBag class CsStaticRoutes(CsDataBag): diff --git a/systemvm/debian/opt/cloud/bin/cs/CsVpcGuestNetwork.py b/systemvm/debian/opt/cloud/bin/cs/CsVpcGuestNetwork.py index e80f16e915a..9e918f94a42 100755 --- a/systemvm/debian/opt/cloud/bin/cs/CsVpcGuestNetwork.py +++ b/systemvm/debian/opt/cloud/bin/cs/CsVpcGuestNetwork.py @@ -17,14 +17,15 @@ import logging import os.path from cs.CsDatabag import CsDataBag -from CsFile import CsFile -import CsHelper +from .CsFile import CsFile +from . import CsHelper VPC_PUBLIC_INTERFACE = "eth1" RADVD_CONF = "/etc/radvd.conf" RADVD_CONF_NEW = "/etc/radvd.conf.new" + class CsVpcGuestNetwork(CsDataBag): """ Manage Vpc Guest Networks """ @@ -53,13 +54,13 @@ class CsVpcGuestNetwork(CsDataBag): CsHelper.execute("sysctl net.ipv6.conf." + device + ".use_tempaddr=0") def add_address_route(self, entry): - if 'router_guest_ip6' in entry.keys() and entry['router_guest_ip6']: + if 'router_guest_ip6' in list(entry.keys()) and entry['router_guest_ip6']: self.enable_ipv6(entry['device']) cidr_size = entry['router_guest_ip6_cidr'].split("/")[-1] full_addr = entry['router_guest_ip6_gateway'] + "/" + cidr_size if not CsHelper.execute("ip -6 addr show dev %s | grep -w %s" % (entry['device'], full_addr)): CsHelper.execute("ip -6 addr add %s dev %s" % (full_addr, entry['device'])) - if 'router_ip6' in entry.keys() and entry['router_ip6']: + if 'router_ip6' in list(entry.keys()) and entry['router_ip6']: self.__disable_dad(VPC_PUBLIC_INTERFACE) full_public_addr = entry['router_ip6'] + "/" + cidr_size if not CsHelper.execute("ip -6 addr show dev %s | grep -w %s" % (VPC_PUBLIC_INTERFACE, full_public_addr)): @@ -70,11 +71,11 @@ class CsVpcGuestNetwork(CsDataBag): return def remove_address_route(self, entry): - if 'router_guest_ip6' in entry.keys() and entry['router_guest_ip6']: + if 'router_guest_ip6' in list(entry.keys()) and entry['router_guest_ip6']: cidr_size = entry['router_guest_ip6_cidr'].split("/")[-1] full_addr = entry['router_guest_ip6_gateway'] + "/" + cidr_size CsHelper.execute("ip -6 addr del %s dev %s" % (full_addr, entry['device'])) - if 'router_ip6' in entry.keys() and entry['router_ip6']: + if 'router_ip6' in list(entry.keys()) and entry['router_ip6']: full_public_addr = entry['router_ip6'] + "/" + cidr_size CsHelper.execute("ip -6 addr del %s dev %s" % (full_public_addr, VPC_PUBLIC_INTERFACE)) else: @@ -94,7 +95,7 @@ class CsVpcGuestNetwork(CsDataBag): self.__disable_dad(device) def add_radvd_conf(self, entry): - if 'router_guest_ip6' in entry.keys() and entry['router_guest_ip6']: + if 'router_guest_ip6' in list(entry.keys()) and entry['router_guest_ip6']: cidr_size = entry['router_guest_ip6_cidr'].split("/")[-1] full_addr = entry['router_guest_ip6_gateway'] + "/" + cidr_size self.conf.append("interface %s" % entry['device']) @@ -107,7 +108,7 @@ class CsVpcGuestNetwork(CsDataBag): self.conf.append(" AdvOnLink on;") self.conf.append(" AdvAutonomous on;") self.conf.append(" };") - if 'dns6' in entry.keys() and entry['dns6']: + if 'dns6' in list(entry.keys()) and entry['dns6']: for dns in entry['dns6'].split(","): self.conf.append(" RDNSS %s" % dns) self.conf.append(" {") diff --git a/systemvm/debian/opt/cloud/bin/cs_dhcp.py b/systemvm/debian/opt/cloud/bin/cs_dhcp.py index 8aa388a10f9..cd6574fd926 100755 --- a/systemvm/debian/opt/cloud/bin/cs_dhcp.py +++ b/systemvm/debian/opt/cloud/bin/cs_dhcp.py @@ -24,16 +24,16 @@ def merge(dbag, data): # This seems desirable .... if "add" in data and data['add'] is False and "ipv4_address" in data: if data['ipv4_address'] in dbag: - del(dbag[data['ipv4_address']]) + del dbag[data['ipv4_address']] else: remove_keys = set() - for key, entry in dbag.iteritems(): + for key, entry in dbag.items(): if key != 'id' and entry['mac_address'] == data['mac_address']: remove_keys.add(key) break for remove_key in remove_keys: - del(dbag[remove_key]) + del dbag[remove_key] dbag[data['ipv4_address']] = data diff --git a/systemvm/debian/opt/cloud/bin/cs_firewallrules.py b/systemvm/debian/opt/cloud/bin/cs_firewallrules.py index 1357c6c4440..474681ce184 100755 --- a/systemvm/debian/opt/cloud/bin/cs_firewallrules.py +++ b/systemvm/debian/opt/cloud/bin/cs_firewallrules.py @@ -25,8 +25,8 @@ def merge(dbag, data): for rule in data['rules']: id = str(rule['id']) if rule['revoked']: - if id in dbagc.keys(): - del(dbagc[id]) - elif id not in dbagc.keys(): + if id in list(dbagc.keys()): + del dbagc[id] + elif id not in list(dbagc.keys()): dbagc[id] = rule return dbagc diff --git a/systemvm/debian/opt/cloud/bin/cs_forwardingrules.py b/systemvm/debian/opt/cloud/bin/cs_forwardingrules.py index 974c468e8dc..ec66979df27 100755 --- a/systemvm/debian/opt/cloud/bin/cs_forwardingrules.py +++ b/systemvm/debian/opt/cloud/bin/cs_forwardingrules.py @@ -39,7 +39,7 @@ def merge(dbag, rules): dbag[source_ip] = [newrule] elif rules["type"] == "forwardrules": index = -1 - if source_ip in dbag.keys(): + if source_ip in list(dbag.keys()): for forward in dbag[source_ip]: if ruleCompare(forward, newrule): index = dbag[source_ip].index(forward) @@ -51,15 +51,15 @@ def merge(dbag, rules): dbag[source_ip] = [newrule] else: if rules["type"] == "staticnatrules": - if source_ip in dbag.keys(): + if source_ip in list(dbag.keys()): del dbag[source_ip] elif rules["type"] == "forwardrules": - if source_ip in dbag.keys(): + if source_ip in list(dbag.keys()): index = -1 for forward in dbag[source_ip]: if ruleCompare(forward, newrule): index = dbag[source_ip].index(forward) - print "removing index %s" % str(index) + print("removing index %s" % str(index)) if not index == -1: del dbag[source_ip][index] diff --git a/systemvm/debian/opt/cloud/bin/cs_guestnetwork.py b/systemvm/debian/opt/cloud/bin/cs_guestnetwork.py index 954346985f1..c6988a5d945 100755 --- a/systemvm/debian/opt/cloud/bin/cs_guestnetwork.py +++ b/systemvm/debian/opt/cloud/bin/cs_guestnetwork.py @@ -28,11 +28,11 @@ def merge(dbag, gn): device_to_die = dbag[device][0] try: dbag[device].remove(device_to_die) - except ValueError, e: - print "[WARN] cs_guestnetwork.py :: Error occurred removing item from databag. => %s" % device_to_die - del(dbag[device]) + except ValueError as e: + print("[WARN] cs_guestnetwork.py :: Error occurred removing item from databag. => %s" % device_to_die) + del dbag[device] else: - del(dbag[device]) + del dbag[device] else: dbag.setdefault(device, []).append(gn) diff --git a/systemvm/debian/opt/cloud/bin/cs_ip.py b/systemvm/debian/opt/cloud/bin/cs_ip.py index fbe7629970a..817d937eeaf 100755 --- a/systemvm/debian/opt/cloud/bin/cs_ip.py +++ b/systemvm/debian/opt/cloud/bin/cs_ip.py @@ -57,7 +57,7 @@ def merge(dbag, ip): ip['network'] = str(ipo.network) + '/' + str(ipo.prefixlen) if 'mtu' in ip: ip['mtu'] = str(ip['mtu']) - if 'nw_type' not in ip.keys(): + if 'nw_type' not in list(ip.keys()): ip['nw_type'] = 'public' else: ip['nw_type'] = ip['nw_type'].lower() diff --git a/systemvm/debian/opt/cloud/bin/cs_remoteaccessvpn.py b/systemvm/debian/opt/cloud/bin/cs_remoteaccessvpn.py index dff05bd2814..ea657230b2b 100755 --- a/systemvm/debian/opt/cloud/bin/cs_remoteaccessvpn.py +++ b/systemvm/debian/opt/cloud/bin/cs_remoteaccessvpn.py @@ -20,8 +20,8 @@ def merge(dbag, vpn): key = vpn['vpn_server_ip'] op = vpn['create'] - if key in dbag.keys() and not op: - del(dbag[key]) + if key in list(dbag.keys()) and not op: + del dbag[key] else: dbag[key] = vpn return dbag diff --git a/systemvm/debian/opt/cloud/bin/cs_site2sitevpn.py b/systemvm/debian/opt/cloud/bin/cs_site2sitevpn.py index 3fa8414a7ab..1f64aa77860 100755 --- a/systemvm/debian/opt/cloud/bin/cs_site2sitevpn.py +++ b/systemvm/debian/opt/cloud/bin/cs_site2sitevpn.py @@ -20,8 +20,8 @@ def merge(dbag, vpn): key = vpn['peer_gateway_ip'] op = vpn['create'] - if key in dbag.keys() and not op: - del(dbag[key]) + if key in list(dbag.keys()) and not op: + del dbag[key] else: dbag[key] = vpn return dbag diff --git a/systemvm/debian/opt/cloud/bin/cs_vpnusers.py b/systemvm/debian/opt/cloud/bin/cs_vpnusers.py index 3bef1fec239..4a29cccdefb 100755 --- a/systemvm/debian/opt/cloud/bin/cs_vpnusers.py +++ b/systemvm/debian/opt/cloud/bin/cs_vpnusers.py @@ -22,26 +22,26 @@ import copy def merge(dbag, data): dbagc = copy.deepcopy(dbag) - print dbag - print data + print(dbag) + print(data) if "vpn_users" not in data: return dbagc # remove previously deleted user from the dict - for user in dbagc.keys(): + for user in list(dbagc.keys()): if user == 'id': continue userrec = dbagc[user] add = userrec['add'] if not add: - del(dbagc[user]) + del dbagc[user] for user in data['vpn_users']: username = user['user'] add = user['add'] - if username not in dbagc.keys(): + if username not in list(dbagc.keys()): dbagc[username] = user - elif username in dbagc.keys() and not add: + elif username in list(dbagc.keys()) and not add: dbagc[username] = user return dbagc diff --git a/systemvm/debian/opt/cloud/bin/diagnostics.py b/systemvm/debian/opt/cloud/bin/diagnostics.py index 737b12206db..019710be687 100755 --- a/systemvm/debian/opt/cloud/bin/diagnostics.py +++ b/systemvm/debian/opt/cloud/bin/diagnostics.py @@ -34,8 +34,8 @@ def run_cmd(command): return_code = 1 finally: - print('%s&&' % stdout.strip()) - print('%s&&' % stderr.strip()) + print('%s&&' % stdout.decode().strip()) + print('%s&&' % stderr.decode().strip()) print('%s' % return_code) diff --git a/systemvm/debian/opt/cloud/bin/filesystem_writable_check.py b/systemvm/debian/opt/cloud/bin/filesystem_writable_check.py index eac7d9c7553..4b2e2cbe533 100644 --- a/systemvm/debian/opt/cloud/bin/filesystem_writable_check.py +++ b/systemvm/debian/opt/cloud/bin/filesystem_writable_check.py @@ -28,17 +28,17 @@ def check_filesystem(): readOnly1 = bool(stat1.f_flag & ST_RDONLY) if (readOnly1): - print "Read-only file system : monitor results (/root) file system is mounted as read-only" + print("Read-only file system : monitor results (/root) file system is mounted as read-only") exit(1) stat2 = os.statvfs('/var/cache/cloud') readOnly2 = bool(stat2.f_flag & ST_RDONLY) if (readOnly2): - print "Read-only file system : config info (/var/cache/cloud) file system is mounted as read-only" + print("Read-only file system : config info (/var/cache/cloud) file system is mounted as read-only") exit(1) - print "file system is writable" + print("file system is writable") exit(0) diff --git a/systemvm/debian/opt/cloud/bin/get_diagnostics_files.py b/systemvm/debian/opt/cloud/bin/get_diagnostics_files.py index b95dfb5420c..ac61cb2797f 100755 --- a/systemvm/debian/opt/cloud/bin/get_diagnostics_files.py +++ b/systemvm/debian/opt/cloud/bin/get_diagnostics_files.py @@ -65,7 +65,7 @@ def zip_files(files): cleanup(files_from_shell_commands) generate_retrieved_files_txt(zf, files_found_list, files_not_found_list) zf.close() - print zf_name + print(zf_name) def get_cmd(script): @@ -102,7 +102,7 @@ def execute_shell_script(script): p = sp.Popen(cmd, shell=True, stdout=sp.PIPE, stderr=sp.PIPE) stdout, stderr = p.communicate() return_code = p.returncode - if return_code is 0: + if return_code == 0: f.write(stdout) else: f.write(stderr) @@ -129,9 +129,9 @@ def generate_retrieved_files_txt(zip_file, files_found, files_not_found): try: with open(output_file, 'wb', 0) as man: for i in files_found: - man.write(i + '\n') + man.write((i + '\n').encode()) for j in files_not_found: - man.write(j + 'File Not Found!!\n') + man.write((j + ' File Not Found!!\n').encode()) zip_file.write(output_file, output_file) finally: cleanup_cmd = "rm -f %s" % output_file diff --git a/systemvm/debian/opt/cloud/bin/merge.py b/systemvm/debian/opt/cloud/bin/merge.py index 2409df0e7e2..1d320395d74 100755 --- a/systemvm/debian/opt/cloud/bin/merge.py +++ b/systemvm/debian/opt/cloud/bin/merge.py @@ -158,7 +158,7 @@ class updateDataBag: dp['mtu'] = str(d['mtu']) qf = QueueFile() qf.load({'ip_address': [dp], 'type': 'ips'}) - if 'domain_name' not in d.keys() or d['domain_name'] == '': + if 'domain_name' not in list(d.keys()) or d['domain_name'] == '': d['domain_name'] = "cloudnine.internal" return cs_guestnetwork.merge(dbag, d) @@ -227,7 +227,7 @@ class updateDataBag: def processCLItem(self, num, nw_type): key = 'eth' + num + 'ip' dp = {} - if(key in self.qFile.data['cmd_line']): + if key in self.qFile.data['cmd_line']: dp['public_ip'] = self.qFile.data['cmd_line'][key] dp['netmask'] = self.qFile.data['cmd_line']['eth' + num + 'mask'] dp['source_nat'] = False @@ -236,7 +236,7 @@ class updateDataBag: if nw_type == "public": dp['gateway'] = self.qFile.data['cmd_line']['gateway'] else: - if('localgw' in self.qFile.data['cmd_line']): + if 'localgw' in self.qFile.data['cmd_line']: dp['gateway'] = self.qFile.data['cmd_line']['localgw'] else: dp['gateway'] = '' @@ -252,7 +252,7 @@ class updateDataBag: def process_ipaliases(self, dbag): nic_dev = None # Should be a way to deal with this better - for intf, data in dbag.items(): + for intf, data in list(dbag.items()): if intf == 'id': continue elif any([net['nw_type'] == 'guest' for net in data]): diff --git a/systemvm/debian/opt/cloud/bin/passwd_server_ip.py b/systemvm/debian/opt/cloud/bin/passwd_server_ip.py index 07884e1f5b5..4d296176aa3 100755 --- a/systemvm/debian/opt/cloud/bin/passwd_server_ip.py +++ b/systemvm/debian/opt/cloud/bin/passwd_server_ip.py @@ -31,10 +31,10 @@ import os import sys import syslog import threading -import urlparse +import urllib.parse -from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer -from SocketServer import ThreadingMixIn #, ForkingMixIn +from http.server import BaseHTTPRequestHandler, HTTPServer +from socketserver import ThreadingMixIn #, ForkingMixIn passMap = {} @@ -55,7 +55,7 @@ def initToken(): with open(getTokenFile(), 'r') as f: secureToken = f.read() if not secureToken: - secureToken = binascii.hexlify(os.urandom(16)) + secureToken = binascii.hexlify(os.urandom(16)).decode() with open(getTokenFile(), 'w') as f: f.write(secureToken) @@ -64,7 +64,7 @@ def checkToken(token): def loadPasswordFile(): try: - with file(getPasswordFile()) as f: + with open(getPasswordFile()) as f: for line in f: if '=' not in line: continue key, value = line.strip().split('=', 1) @@ -75,11 +75,11 @@ def loadPasswordFile(): def savePasswordFile(): with lock: try: - with file(getPasswordFile(), 'w') as f: + with open(getPasswordFile(), 'w') as f: for ip in passMap: f.write('%s=%s\n' % (ip, passMap[ip])) f.close() - except IOError, e: + except IOError as e: syslog.syslog('serve_password: Unable to save to password file %s' % e) def getPassword(ip): @@ -117,7 +117,7 @@ class PasswordRequestHandler(BaseHTTPRequestHandler): self.wfile.write('saved_password') syslog.syslog('serve_password: requested password not found for %s' % clientAddress) else: - self.wfile.write(password) + self.wfile.write(password.encode()) syslog.syslog('serve_password: password sent to %s' % clientAddress) elif requestType == 'saved_password': removePassword(clientAddress) @@ -192,7 +192,7 @@ def serve(HandlerClass = PasswordRequestHandler, except KeyboardInterrupt: syslog.syslog('serve_password shutting down') passwordServer.socket.close() - except Exception, e: + except Exception as e: syslog.syslog('serve_password hit exception %s -- died' % e) passwordServer.socket.close() diff --git a/systemvm/debian/opt/cloud/bin/setup/cksnode.sh b/systemvm/debian/opt/cloud/bin/setup/cksnode.sh index 55bd4eaf31e..aa5d466c96a 100755 --- a/systemvm/debian/opt/cloud/bin/setup/cksnode.sh +++ b/systemvm/debian/opt/cloud/bin/setup/cksnode.sh @@ -72,3 +72,4 @@ setup_k8s_node() { } setup_k8s_node +. /opt/cloud/bin/setup/patch.sh && patch_sshd_config diff --git a/systemvm/debian/opt/cloud/bin/setup/consoleproxy.sh b/systemvm/debian/opt/cloud/bin/setup/consoleproxy.sh index 6d6b5d815bf..596ad50ab50 100755 --- a/systemvm/debian/opt/cloud/bin/setup/consoleproxy.sh +++ b/systemvm/debian/opt/cloud/bin/setup/consoleproxy.sh @@ -45,3 +45,5 @@ setup_console_proxy() { } setup_console_proxy +# System VMs are patched during bootstrap +. /opt/cloud/bin/setup/patch.sh && patch_system_vm diff --git a/systemvm/debian/opt/cloud/bin/setup/dhcpsrvr.sh b/systemvm/debian/opt/cloud/bin/setup/dhcpsrvr.sh index 0f65f304f36..04919bc9bb7 100755 --- a/systemvm/debian/opt/cloud/bin/setup/dhcpsrvr.sh +++ b/systemvm/debian/opt/cloud/bin/setup/dhcpsrvr.sh @@ -52,3 +52,4 @@ then exit 1 fi setup_dhcpsrvr +. /opt/cloud/bin/setup/patch.sh && patch_router diff --git a/systemvm/debian/opt/cloud/bin/setup/elbvm.sh b/systemvm/debian/opt/cloud/bin/setup/elbvm.sh index 52132ccea96..4a89021dc4d 100755 --- a/systemvm/debian/opt/cloud/bin/setup/elbvm.sh +++ b/systemvm/debian/opt/cloud/bin/setup/elbvm.sh @@ -41,3 +41,4 @@ then exit 1 fi setup_elbvm +. /opt/cloud/bin/setup/patch.sh && patch_router diff --git a/systemvm/debian/opt/cloud/bin/setup/ilbvm.sh b/systemvm/debian/opt/cloud/bin/setup/ilbvm.sh index a130674d1e8..3fe1093f3f4 100755 --- a/systemvm/debian/opt/cloud/bin/setup/ilbvm.sh +++ b/systemvm/debian/opt/cloud/bin/setup/ilbvm.sh @@ -44,3 +44,4 @@ then exit 1 fi setup_ilbvm +. /opt/cloud/bin/setup/patch.sh && patch_router diff --git a/systemvm/debian/opt/cloud/bin/setup/patch.sh b/systemvm/debian/opt/cloud/bin/setup/patch.sh new file mode 100755 index 00000000000..fc0f7d35e6f --- /dev/null +++ b/systemvm/debian/opt/cloud/bin/setup/patch.sh @@ -0,0 +1,128 @@ +#!/bin/bash +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. +PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" + +log_it() { + echo "$(date) $@" >> /var/log/cloud.log +} + +patch_sshd_config() { + if `! ssh -Q PubkeyAcceptedAlgorithms >/dev/null 2>&1` && `grep ^PubkeyAcceptedAlgorithms /etc/ssh/sshd_config >/dev/null`; then + # "PubkeyAcceptedAlgorithms=+ssh-rsa" is added to /etc/ssh/sshd_config in 4.20.0 systemvm template + # However, it is not supported in old systemvm templates + # If the system vm is created from an old systemvm template, remove it from /etc/ssh/sshd_config + # No need to restart ssh if it is running well + log_it "Removing PubkeyAcceptedAlgorithms=+ssh-rsa from /etc/ssh/sshd_config as it is not supported" + sed -i "/PubkeyAcceptedAlgorithms=+ssh-rsa/d" /etc/ssh/sshd_config + if ! systemctl is-active ssh > /dev/null; then + systemctl restart ssh + fi + elif `ssh -Q PubkeyAcceptedAlgorithms >/dev/null 2>&1` && `! grep ^PubkeyAcceptedAlgorithms /etc/ssh/sshd_config >/dev/null`; then + log_it "Adding PubkeyAcceptedAlgorithms=+ssh-rsa to sshd_config" + sed -i "/PubkeyAuthentication yes/aPubkeyAcceptedAlgorithms=+ssh-rsa" /etc/ssh/sshd_config + systemctl restart ssh + fi +} + +patch_router() { + local patchfile="/var/cache/cloud/agent.zip" + local logfile="/var/log/patchrouter.log" + rm /usr/local/cloud/systemvm -rf + mkdir -p /usr/local/cloud/systemvm + ls -lrt $patchfile + + log_it "Unziping $patchfile" + echo "All" | unzip $patchfile -d /usr/local/cloud/systemvm >>$logfile 2>&1 + + find /usr/local/cloud/systemvm/ -name \*.sh | xargs chmod 555 + + patch_sshd_config + install_packages +} + +patch_system_vm() { + patch_sshd_config + install_packages +} + +install_packages() { + PACKAGES_FOLDER="/usr/local/cloud/systemvm/packages" + PACKAGES_INI="$PACKAGES_FOLDER/packages.ini" + declare -A package_properties + if [ -d $PACKAGES_FOLDER ] && [ -f $PACKAGES_INI ]; then + while read -r line; do + if [[ "$line" =~ ^(\[)(.*)(\])$ ]]; then + install_package + package_properties= + else + key=$(echo $line | cut -d '=' -f1) + value=$(echo $line | cut -d '=' -f2) + if [ "$key" != "" ]; then + package_properties[$key]=$value + fi + fi + done <$PACKAGES_INI + fi + export DEBIAN_FRONTEND=noninteractive + install_package +} + +install_package() { + local os=${package_properties["debian_os"]} + if [ "$os" == "" ]; then + return + fi + local DEBIAN_RELEASE=$(lsb_release -rs) + if [ "$os" != "$DEBIAN_RELEASE" ]; then + log_it "Skipped the installation of package $package on Debian $DEBIAN_RELEASE as it can only be installed on Debian $os." + return + fi + + local package=${package_properties["package_name"]} + local file=${package_properties["file_name"]} + if [ -z "$package" ] || [ -z "$file" ]; then + log_it "Skipped the installation due to empty package of file name (package name: $package, file name: $file)." + return + fi + + dpkg-query -s $package >/dev/null 2>&1 + if [ $? -eq 0 ]; then + log_it "Skipped the installation as package $package has already been installed." + return + fi + + local conflicts=${package_properties["conflicted_packages"]} + if [ "$conflicts" != "" ]; then + log_it "Removing conflicted packages \"$conflicts\" before installing package $package" + apt remove -y "$conflicts" + if [ $? -eq 0 ]; then + log_it "Removed conflicted package(s) \"$conflicts\" before installing package $package" + else + log_it "Failed to remove conflicted package(s) \"$conflicts\" before installing package $package" + fi + fi + + PACKAGES_FOLDER="/usr/local/cloud/systemvm/packages" + log_it "Installing package $package from file $PACKAGES_FOLDER/$file" + dpkg -i $PACKAGES_FOLDER/$file + if [ $? -eq 0 ]; then + log_it "Installed package $package from file $PACKAGES_FOLDER/$file" + else + log_it "Failed to install package $package from file $PACKAGES_FOLDER/$file" + fi +} diff --git a/systemvm/debian/opt/cloud/bin/setup/router.sh b/systemvm/debian/opt/cloud/bin/setup/router.sh index 190ad60d915..ee4972c6fa2 100755 --- a/systemvm/debian/opt/cloud/bin/setup/router.sh +++ b/systemvm/debian/opt/cloud/bin/setup/router.sh @@ -101,3 +101,4 @@ then exit 1 fi setup_router +. /opt/cloud/bin/setup/patch.sh && patch_router diff --git a/systemvm/debian/opt/cloud/bin/setup/secstorage.sh b/systemvm/debian/opt/cloud/bin/setup/secstorage.sh index af1015684df..c60f70c3cef 100755 --- a/systemvm/debian/opt/cloud/bin/setup/secstorage.sh +++ b/systemvm/debian/opt/cloud/bin/setup/secstorage.sh @@ -87,3 +87,5 @@ HTTP } setup_secstorage +# System VMs are patched during bootstrap +. /opt/cloud/bin/setup/patch.sh && patch_system_vm diff --git a/systemvm/debian/opt/cloud/bin/setup/vpcrouter.sh b/systemvm/debian/opt/cloud/bin/setup/vpcrouter.sh index bc08dccc577..767f87848dd 100755 --- a/systemvm/debian/opt/cloud/bin/setup/vpcrouter.sh +++ b/systemvm/debian/opt/cloud/bin/setup/vpcrouter.sh @@ -129,3 +129,4 @@ then exit 1 fi setup_vpcrouter +. /opt/cloud/bin/setup/patch.sh && patch_router diff --git a/systemvm/debian/opt/cloud/bin/update_config.py b/systemvm/debian/opt/cloud/bin/update_config.py index 8efe2ce664a..419c1c3da99 100755 --- a/systemvm/debian/opt/cloud/bin/update_config.py +++ b/systemvm/debian/opt/cloud/bin/update_config.py @@ -62,7 +62,7 @@ def is_guestnet_configured(guestnet_dict, keys): existing_keys = [] new_eth_key = None - for k1, v1 in guestnet_dict.iteritems(): + for k1, v1 in guestnet_dict.items(): if k1 in keys and len(v1) > 0: existing_keys.append(k1) diff --git a/systemvm/debian/opt/cloud/bin/vmdata.py b/systemvm/debian/opt/cloud/bin/vmdata.py index 5cf22eb5d8f..8a1636ca1b7 100755 --- a/systemvm/debian/opt/cloud/bin/vmdata.py +++ b/systemvm/debian/opt/cloud/bin/vmdata.py @@ -31,7 +31,7 @@ def main(argv): try: opts, args = getopt.getopt(argv, "f:d:") except getopt.GetoptError: - print 'params: -f -d ' + print('params: -f -d ') sys.exit(2) for opt, arg in opts: if opt == '-f': @@ -46,7 +46,7 @@ def main(argv): elif b64data != '': json_data = json.loads(base64.b64decode(b64data)) else: - print '-f or -d required' + print('-f or -d required') sys.exit(2) for ip in json_data: @@ -94,20 +94,23 @@ def createfile(ip, folder, file, data): fh = open(dest, "w") exflock(fh) if data is not None: - fh.write(data) + if isinstance(data, str): + fh.write(data) + elif isinstance(data, bytes): + fh.write(data.decode()) else: fh.write("") unflock(fh) fh.close() - os.chmod(dest, 0644) + os.chmod(dest, 0o644) if folder == "metadata" or folder == "meta-data": try: - os.makedirs(metamanifestdir, 0755) + os.makedirs(metamanifestdir, 0o755) except OSError as e: # error 17 is already exists, we do it this way for concurrency if e.errno != 17: - print "failed to make directories " + metamanifestdir + " due to :" + e.strerror + print("failed to make directories " + metamanifestdir + " due to :" + e.strerror) sys.exit(1) if os.path.exists(metamanifest): fh = open(metamanifest, "r+a") @@ -124,7 +127,7 @@ def createfile(ip, folder, file, data): fh.close() if os.path.exists(metamanifest): - os.chmod(metamanifest, 0644) + os.chmod(metamanifest, 0o644) def htaccess(ip, folder, file): @@ -133,11 +136,11 @@ def htaccess(ip, folder, file): htaccessFile = htaccessFolder+"/.htaccess" try: - os.makedirs(htaccessFolder, 0755) + os.makedirs(htaccessFolder, 0o755) except OSError as e: # error 17 is already exists, we do it this way for sake of concurrency if e.errno != 17: - print "failed to make directories " + htaccessFolder + " due to :" + e.strerror + print("failed to make directories " + htaccessFolder + " due to :" + e.strerror) sys.exit(1) fh = open(htaccessFile, "w") @@ -151,7 +154,7 @@ def exflock(file): try: flock(file, LOCK_EX) except IOError as e: - print "failed to lock file" + file.name + " due to : " + e.strerror + print("failed to lock file" + file.name + " due to : " + e.strerror) sys.exit(1) return True @@ -160,7 +163,7 @@ def unflock(file): try: flock(file, LOCK_UN) except IOError as e: - print "failed to unlock file" + file.name + " due to : " + e.strerror + print("failed to unlock file" + file.name + " due to : " + e.strerror) sys.exit(1) return True diff --git a/systemvm/debian/root/health_checks/cpu_usage_check.py b/systemvm/debian/root/health_checks/cpu_usage_check.py index 5e6a2fe5e9e..ab2c4f1c46e 100644 --- a/systemvm/debian/root/health_checks/cpu_usage_check.py +++ b/systemvm/debian/root/health_checks/cpu_usage_check.py @@ -28,7 +28,7 @@ def main(): data = entries[0] if "maxCpuUsage" not in data: - print "Missing maxCpuUsage in health_checks_data systemThresholds, skipping" + print("Missing maxCpuUsage in health_checks_data systemThresholds, skipping") exit(0) maxCpuUsage = float(data["maxCpuUsage"]) @@ -38,16 +38,16 @@ def main(): "sub(\"%\", \"\", idle); printf \"%.2f\", 100 - idle }'" pout = Popen(cmd, shell=True, stdout=PIPE) if pout.wait() == 0: - currentUsage = float(pout.communicate()[0].strip()) + currentUsage = float(pout.communicate()[0].decode().strip()) if currentUsage > maxCpuUsage: - print "CPU Usage " + str(currentUsage) + \ - "% has crossed threshold of " + str(maxCpuUsage) + "%" + print("CPU Usage " + str(currentUsage) + + "% has crossed threshold of " + str(maxCpuUsage) + "%") exit(1) - print "CPU Usage within limits with current at " \ - + str(currentUsage) + "%" + print("CPU Usage within limits with current at " + + str(currentUsage) + "%") exit(0) else: - print "Failed to retrieve cpu usage using " + cmd + print("Failed to retrieve cpu usage using " + cmd) exit(1) diff --git a/systemvm/debian/root/health_checks/dhcp_check.py b/systemvm/debian/root/health_checks/dhcp_check.py index 2618ee57cea..025e494c247 100755 --- a/systemvm/debian/root/health_checks/dhcp_check.py +++ b/systemvm/debian/root/health_checks/dhcp_check.py @@ -24,7 +24,7 @@ def main(): vMs = getHealthChecksData("virtualMachines") if vMs is None or len(vMs) == 0: - print "No VMs running data available, skipping" + print("No VMs running data available, skipping") exit(0) try: @@ -64,10 +64,10 @@ def main(): failureMessage = failureMessage + entry + ", " if failedCheck: - print failureMessage[:-2] + print(failureMessage[:-2]) exit(1) else: - print "All " + str(COUNT) + " VMs are present in dhcphosts.txt" + print("All " + str(COUNT) + " VMs are present in dhcphosts.txt") exit(0) diff --git a/systemvm/debian/root/health_checks/disk_space_check.py b/systemvm/debian/root/health_checks/disk_space_check.py index af8cb3dd07c..f6c9a7fc497 100644 --- a/systemvm/debian/root/health_checks/disk_space_check.py +++ b/systemvm/debian/root/health_checks/disk_space_check.py @@ -27,7 +27,7 @@ def main(): data = entries[0] if "minDiskNeeded" not in data: - print "Missing minDiskNeeded in health_checks_data systemThresholds, skipping" + print("Missing minDiskNeeded in health_checks_data systemThresholds, skipping") exit(0) minDiskNeeded = float(data["minDiskNeeded"]) * 1024 @@ -35,10 +35,10 @@ def main(): freeSpace = (s.f_bavail * s.f_frsize) / 1024 if (freeSpace < minDiskNeeded): - print "Insufficient free space is " + str(freeSpace/1024) + " MB" + print("Insufficient free space is " + str(freeSpace/1024) + " MB") exit(1) else: - print "Sufficient free space is " + str(freeSpace/1024) + " MB" + print("Sufficient free space is " + str(freeSpace/1024) + " MB") exit(0) diff --git a/systemvm/debian/root/health_checks/dns_check.py b/systemvm/debian/root/health_checks/dns_check.py index d4fbc129d51..92d7c54d176 100644 --- a/systemvm/debian/root/health_checks/dns_check.py +++ b/systemvm/debian/root/health_checks/dns_check.py @@ -24,7 +24,7 @@ def main(): vMs = getHealthChecksData("virtualMachines") if vMs is None or len(vMs) == 0: - print "No VMs running data available, skipping" + print("No VMs running data available, skipping") exit(0) with open('/etc/hosts', 'r') as hostsFile: @@ -51,10 +51,10 @@ def main(): failureMessage = failureMessage + vM["ip"] + " " + vM["vmName"] + ", " if failedCheck: - print failureMessage[:-2] + print(failureMessage[:-2]) exit(1) else: - print "All " + str(COUNT) + " VMs are present in /etc/hosts" + print("All " + str(COUNT) + " VMs are present in /etc/hosts") exit(0) diff --git a/systemvm/debian/root/health_checks/gateways_check.py b/systemvm/debian/root/health_checks/gateways_check.py index e2c3f3f356d..e3b661b7498 100644 --- a/systemvm/debian/root/health_checks/gateways_check.py +++ b/systemvm/debian/root/health_checks/gateways_check.py @@ -24,7 +24,7 @@ from utility import getHealthChecksData def main(): gws = getHealthChecksData("gateways") if gws is None and len(gws) == 0: - print "No gateways data available, skipping" + print("No gateways data available, skipping") exit(0) unreachableGateWays = [] @@ -44,11 +44,11 @@ def main(): unreachableGateWays.append(gw) if len(unreachableGateWays) == 0: - print "All " + str(len(gwsList)) + " gateways are reachable via ping" + print("All " + str(len(gwsList)) + " gateways are reachable via ping") exit(0) else: - print "Unreachable gateways found-" - print unreachableGateWays + print("Unreachable gateways found-") + print(unreachableGateWays) exit(1) diff --git a/systemvm/debian/root/health_checks/haproxy_check.py b/systemvm/debian/root/health_checks/haproxy_check.py index 5e01ee3de41..c1db51e440c 100644 --- a/systemvm/debian/root/health_checks/haproxy_check.py +++ b/systemvm/debian/root/health_checks/haproxy_check.py @@ -23,7 +23,7 @@ from utility import getHealthChecksData, formatPort def checkMaxconn(haproxyData, haCfgSections): if "maxconn" in haproxyData and "maxconn" in haCfgSections["global"]: if haproxyData["maxconn"] != haCfgSections["global"]["maxconn"][0].strip(): - print "global maxconn mismatch occurred" + print("global maxconn mismatch occurred") return False return True @@ -38,26 +38,26 @@ def checkLoadBalance(haproxyData, haCfgSections): secName = "listen " + srcServer if secName not in haCfgSections: - print "Missing section for load balancing " + secName + "\n" + print("Missing section for load balancing " + secName + "\n") correct = False else: cfgSection = haCfgSections[secName] if "server" in cfgSection: if lbSec["algorithm"] != cfgSection["balance"][0]: - print "Incorrect balance method for " + secName + \ - "Expected : " + lbSec["algorithm"] + \ - " but found " + cfgSection["balance"][0] + "\n" + print("Incorrect balance method for " + secName + + "Expected : " + lbSec["algorithm"] + + " but found " + cfgSection["balance"][0] + "\n") correct = False bindStr = lbSec["sourceIp"] + ":" + formatPort(lbSec["sourcePortStart"], lbSec["sourcePortEnd"]) if cfgSection["bind"][0] != bindStr: - print "Incorrect bind string found. Expected " + bindStr + " but found " + cfgSection["bind"][0] + "." + print("Incorrect bind string found. Expected " + bindStr + " but found " + cfgSection["bind"][0] + ".") correct = False if (lbSec["sourcePortStart"] == "80" and lbSec["sourcePortEnd"] == "80" and lbSec["keepAliveEnabled"] == "false") \ or (lbSec["stickiness"].find("AppCookie") != -1 or lbSec["stickiness"].find("LbCookie") != -1): if not ("mode" in cfgSection and cfgSection["mode"][0] == "http"): - print "Expected HTTP mode but not found" + print("Expected HTTP mode but not found") correct = False expectedServerIps = lbSec["vmIps"].split(" ") @@ -74,7 +74,7 @@ def checkLoadBalance(haproxyData, haCfgSections): if not foundPattern: correct = False - print "Missing load balancing for " + pattern + ". " + print("Missing load balancing for " + pattern + ". ") return correct @@ -86,7 +86,7 @@ def main(): ''' haproxyData = getHealthChecksData("haproxyData") if haproxyData is None or len(haproxyData) == 0: - print "No data provided to check, skipping" + print("No data provided to check, skipping") exit(0) with open("/etc/haproxy/haproxy.cfg", 'r') as haCfgFile: @@ -94,7 +94,7 @@ def main(): haCfgFile.close() if len(haCfgLines) == 0: - print "Unable to read config file /etc/haproxy/haproxy.cfg" + print("Unable to read config file /etc/haproxy/haproxy.cfg") exit(1) haCfgSections = {} @@ -123,7 +123,7 @@ def main(): checkLbRules = checkLoadBalance(haproxyData, haCfgSections) if checkMaxConn and checkLbRules: - print "All checks pass" + print("All checks pass") exit(0) else: exit(1) diff --git a/systemvm/debian/root/health_checks/iptables_check.py b/systemvm/debian/root/health_checks/iptables_check.py index d80f05b9907..27e06f8352b 100644 --- a/systemvm/debian/root/health_checks/iptables_check.py +++ b/systemvm/debian/root/health_checks/iptables_check.py @@ -24,7 +24,7 @@ from utility import getHealthChecksData, formatPort def main(): portForwards = getHealthChecksData("portForwarding") if portForwards is None or len(portForwards) == 0: - print "No portforwarding rules provided to check, skipping" + print("No portforwarding rules provided to check, skipping") exit(0) failedCheck = False @@ -47,7 +47,7 @@ def main(): "for fetching rules by " + fetchIpTableEntriesCmd + "\n" continue - ipTablesMatchingEntries = pout.communicate()[0].strip().split('\n') + ipTablesMatchingEntries = pout.communicate()[0].decode().strip().split('\n') for pfEntryListExpected in entriesExpected: foundPfEntryList = False for ipTableEntry in ipTablesMatchingEntries: @@ -68,10 +68,10 @@ def main(): failureMessage = failureMessage + str(pfEntryListExpected) + "\n" if failedCheck: - print failureMessage + print(failureMessage) exit(1) else: - print "Found all entries (count " + str(len(portForwards)) + ") in iptables" + print("Found all entries (count " + str(len(portForwards)) + ") in iptables") exit(0) diff --git a/systemvm/debian/root/health_checks/memory_usage_check.py b/systemvm/debian/root/health_checks/memory_usage_check.py index 97ca0c5030e..eba0d5e49dd 100644 --- a/systemvm/debian/root/health_checks/memory_usage_check.py +++ b/systemvm/debian/root/health_checks/memory_usage_check.py @@ -28,8 +28,8 @@ def main(): data = entries[0] if "maxMemoryUsage" not in data: - print "Missing maxMemoryUsage in health_checks_data " + \ - "systemThresholds, skipping" + print("Missing maxMemoryUsage in health_checks_data " + + "systemThresholds, skipping") exit(0) maxMemoryUsage = float(data["maxMemoryUsage"]) @@ -37,16 +37,16 @@ def main(): pout = Popen(cmd, shell=True, stdout=PIPE) if pout.wait() == 0: - currentUsage = float(pout.communicate()[0].strip()) + currentUsage = float(pout.communicate()[0].decode().strip()) if currentUsage > maxMemoryUsage: - print "Memory Usage " + str(currentUsage) + \ - "% has crossed threshold of " + str(maxMemoryUsage) + "%" + print("Memory Usage " + str(currentUsage) + + "% has crossed threshold of " + str(maxMemoryUsage) + "%") exit(1) - print "Memory Usage within limits with current at " + \ - str(currentUsage) + "%" + print("Memory Usage within limits with current at " + + str(currentUsage) + "%") exit(0) else: - print "Failed to retrieve memory usage using " + cmd + print("Failed to retrieve memory usage using " + cmd) exit(1) diff --git a/systemvm/debian/root/health_checks/router_version_check.py b/systemvm/debian/root/health_checks/router_version_check.py index 2173e09c81f..0548a90e1c2 100644 --- a/systemvm/debian/root/health_checks/router_version_check.py +++ b/systemvm/debian/root/health_checks/router_version_check.py @@ -41,7 +41,7 @@ def main(): data = entries[0] if len(data) == 0: - print "Missing routerVersion in health_checks_data, skipping" + print("Missing routerVersion in health_checks_data, skipping") exit(0) templateVersionMatches = True @@ -52,11 +52,11 @@ def main(): releaseFile = "/etc/cloudstack-release" found = getFirstLine(releaseFile) if found is None: - print "Release version not yet setup at " + releaseFile +\ - ", skipping." + print("Release version not yet setup at " + releaseFile + + ", skipping.") elif expected != found: - print "Template Version mismatch. Expected: " + \ - expected + ", found: " + found + print("Template Version mismatch. Expected: " + + expected + ", found: " + found) templateVersionMatches = False if "scriptsVersion" in data: @@ -64,15 +64,15 @@ def main(): sigFile = "/var/cache/cloud/cloud-scripts-signature" found = getFirstLine(sigFile) if found is None: - print "Scripts signature is not yet setup at " + sigFile +\ - ", skipping" + print("Scripts signature is not yet setup at " + sigFile + + ", skipping") if expected != found: - print "Scripts Version mismatch. Expected: " + \ - expected + ", found: " + found + print("Scripts Version mismatch. Expected: " + + expected + ", found: " + found) scriptVersionMatches = False if templateVersionMatches and scriptVersionMatches: - print "Template and scripts version match successful" + print("Template and scripts version match successful") exit(0) else: exit(1) diff --git a/systemvm/debian/root/health_checks/utility/__init__.py b/systemvm/debian/root/health_checks/utility/__init__.py index 22ac3ff9013..a08995047f4 100644 --- a/systemvm/debian/root/health_checks/utility/__init__.py +++ b/systemvm/debian/root/health_checks/utility/__init__.py @@ -16,4 +16,4 @@ # specific language governing permissions and limitations # under the License. -from sharedFunctions import getHealthChecksData, formatPort +from .sharedFunctions import getHealthChecksData, formatPort diff --git a/systemvm/debian/root/monitorServices.py b/systemvm/debian/root/monitorServices.py index 909e419c180..11169d4bdb8 100755 --- a/systemvm/debian/root/monitorServices.py +++ b/systemvm/debian/root/monitorServices.py @@ -16,7 +16,7 @@ # specific language governing permissions and limitations # under the License. -from ConfigParser import SafeConfigParser +from configparser import ConfigParser from subprocess import * from datetime import datetime import time @@ -56,7 +56,7 @@ def getServicesConfig( config_file_path = "/etc/monitor.conf" ): """ process_dict = {} - parser = SafeConfigParser() + parser = ConfigParser() parser.read( config_file_path ) @@ -81,7 +81,7 @@ def printd (msg): f.seek(0, 2) f.write(str(msg)+"\n") f.close() - print str(msg) + print(str(msg)) def raisealert(severity, msg, process_name=None): """ Writes the alert message""" @@ -96,7 +96,7 @@ def raisealert(severity, msg, process_name=None): logging.info(log) msg = 'logger -t monit '+ log pout = Popen(msg, shell=True, stdout=PIPE) - print "[Alert] " + msg + print("[Alert] " + msg) def isPidMatchPidFile(pidfile, pids): @@ -148,7 +148,7 @@ def checkProcessRunningStatus(process_name, pidFile): #cmd = 'service ' + process_name + ' status' pout = Popen(cmd, shell=True, stdout=PIPE) exitStatus = pout.wait() - temp_out = pout.communicate()[0] + temp_out = pout.communicate()[0].decode() #check there is only one pid or not if exitStatus == 0: @@ -258,12 +258,12 @@ def monitProcess( processes_info ): printd("No config items provided - means a redundant VR or a VPC Router") return service_status, failing_services - print "[Process Info] " + json.dumps(processes_info) + print("[Process Info] " + json.dumps(processes_info)) #time for noting process down time csec = repr(time.time()).split('.')[0] - for process,properties in processes_info.items(): + for process,properties in list(processes_info.items()): printd ("---------------------------\nchecking the service %s\n---------------------------- " %process) serviceName = process + ".service" processStatus, wasRestarted = checkProcessStatus(properties) @@ -296,7 +296,7 @@ def execute(script, checkType = "basic"): pout = Popen(cmd, shell=True, stdout=PIPE) exitStatus = pout.wait() - output = pout.communicate()[0].strip() + output = pout.communicate()[0].decode().strip() checkEndTime = time.time() if exitStatus == 0: diff --git a/systemvm/patch-sysvms.sh b/systemvm/patch-sysvms.sh index 554218c9878..4f4a38f8ae4 100644 --- a/systemvm/patch-sysvms.sh +++ b/systemvm/patch-sysvms.sh @@ -104,16 +104,18 @@ cleanup_systemVM() { rm -rf $backupfolder mv "$newpath"cloud-scripts.tgz /usr/share/cloud/cloud-scripts.tgz rm -rf "$newpath""agent.zip" "$newpath""patch-sysvms.sh" + if [ "$TYPE" != "consoleproxy" ] && [ "$TYPE" != "secstorage" ]; then + rm -rf /usr/local/cloud/systemvm/ + fi } patch_systemvm() { rm -rf /usr/local/cloud/systemvm - if [ "$TYPE" == "consoleproxy" ] || [ "$TYPE" == "secstorage" ]; then - echo "All" | unzip $newpath/agent.zip -d /usr/local/cloud/systemvm >> $logfile 2>&1 - mkdir -p /usr/local/cloud/systemvm - find /usr/local/cloud/systemvm/ -name \*.sh | xargs chmod 555 - fi + echo "All" | unzip $newpath/agent.zip -d /usr/local/cloud/systemvm >> $logfile 2>&1 + mkdir -p /usr/local/cloud/systemvm + find /usr/local/cloud/systemvm/ -name \*.sh | xargs chmod 555 + echo "Extracting cloud scripts" >> $logfile 2>&1 tar -xvf $newpath/cloud-scripts.tgz -C / >> $logfile 2>&1 @@ -124,6 +126,10 @@ patch_systemvm() { update_checksum $newpath/cloud-scripts.tgz + if [ -f /opt/cloud/bin/setup/patch.sh ];then + . /opt/cloud/bin/setup/patch.sh && patch_system_vm + fi + if [ "$TYPE" == "consoleproxy" ] || [ "$TYPE" == "secstorage" ] || [[ "$TYPE" == *router ]]; then restart_services fi diff --git a/systemvm/systemvm-agent-descriptor.xml b/systemvm/systemvm-agent-descriptor.xml index 74b154387c3..8cf40a16276 100644 --- a/systemvm/systemvm-agent-descriptor.xml +++ b/systemvm/systemvm-agent-descriptor.xml @@ -121,5 +121,12 @@ **/* + + agent/packages + packages + + **/* + + diff --git a/systemvm/test/__init__.py b/systemvm/test/__init__.py new file mode 100755 index 00000000000..e408e0ca0fe --- /dev/null +++ b/systemvm/test/__init__.py @@ -0,0 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +import os +import sys +sys.path.append(os.path.join(os.path.dirname(__file__), "..", "debian/opt/cloud/bin")) diff --git a/systemvm/test/runtests.sh b/systemvm/test/runtests.sh index c6fab63cefd..63966430ae1 100644 --- a/systemvm/test/runtests.sh +++ b/systemvm/test/runtests.sh @@ -45,5 +45,5 @@ then fi echo "Running systemvm/python unit tests" -nosetests2.7 . +nosetests3 . exit $? diff --git a/test/integration/smoke/test_network_ipv6.py b/test/integration/smoke/test_network_ipv6.py index 720f14e64da..2c369f28300 100644 --- a/test/integration/smoke/test_network_ipv6.py +++ b/test/integration/smoke/test_network_ipv6.py @@ -697,15 +697,16 @@ class TestIpv6Network(cloudstackTestCase): "IPv6 firewall rule ICMP code mismatch %d, %d" % (rule.icmpcode, icmp_code)) routerCmd = "nft list chain ip6 %s %s" % (FIREWALL_TABLE, FIREWALL_CHAINS[traffic_type]) res = self.getRouterProcessStatus(self.getNetworkRouter(self.network), routerCmd) - self.assertTrue(parsed_rule in res, - "Listing firewall rule with nft list chain failure for rule: %s" % parsed_rule) + parsed_rule_new = parsed_rule.replace("{ ", "").replace(" }", "") + self.assertTrue(parsed_rule in res or parsed_rule_new in res, + "Listing firewall rule with nft list chain failure for rule: '%s' is not in '%s'" % (parsed_rule, res)) if delete == True: cmd = deleteIpv6FirewallRule.deleteIpv6FirewallRuleCmd() cmd.id = fw_rule.id self.userapiclient.deleteIpv6FirewallRule(cmd) res = self.getRouterProcessStatus(self.getNetworkRouter(self.network), routerCmd) - self.assertFalse(parsed_rule in res, - "Firewall rule present in nft list chain failure despite delete for rule: %s" % parsed_rule) + self.assertFalse(parsed_rule in res or parsed_rule_new in res, + "Firewall rule present in nft list chain failure despite delete for rule: '%s' is in '%s'" % (parsed_rule, res)) def checkIpv6FirewallRule(self): traffic_type = "Ingress" diff --git a/test/integration/smoke/test_routers.py b/test/integration/smoke/test_routers.py index 356bd213cfc..64bad11f240 100644 --- a/test/integration/smoke/test_routers.py +++ b/test/integration/smoke/test_routers.py @@ -22,7 +22,8 @@ from marvin.cloudstackTestCase import cloudstackTestCase from marvin.cloudstackAPI import (stopRouter, restartNetwork, startRouter, - rebootRouter) + rebootRouter, + getRouterHealthCheckResults) from marvin.lib.utils import (cleanup_resources, get_process_status, get_host_credentials) @@ -303,7 +304,81 @@ class TestRouterServices(cloudstackTestCase): "Check haproxy service is running or not" ) self.debug("Haproxy process status: %s" % res) - return + + routers = list_routers( + self.apiclient, + account=self.account.name, + domainid=self.account.domainid, + fetchhealthcheckresults=True + ) + + self.assertEqual(isinstance(routers, list), True, + "Check for list routers response return valid data" + ) + self.assertNotEqual( + len(routers), 0, + "Check list router response" + ) + + router = routers[0] + self.info("Router ID: %s & Router state: %s" % ( + router.id, router.state + )) + + self.assertEqual(isinstance(router.healthcheckresults, list), True, + "Router response should contain it's health check result as list" + ) + + cmd = getRouterHealthCheckResults.getRouterHealthCheckResultsCmd() + cmd.routerid = router.id + cmd.performfreshchecks = True # Perform fresh checks as a newly created router may not have results + healthData = self.apiclient.getRouterHealthCheckResults(cmd) + self.info("Router ID: %s & Router state: %s" % ( + router.id, router.state + )) + + self.assertEqual(router.id, healthData.routerid, + "Router response should contain it's health check result so id should match" + ) + self.assertEqual(isinstance(healthData.healthchecks, list), True, + "Router response should contain it's health check result as list" + ) + + self.verifyCheckTypes(healthData.healthchecks) + self.verifyCheckNames(healthData.healthchecks) + self.verifyCheckResults(healthData.healthchecks) + + def verifyCheckTypes(self, healthChecks): + for checkType in ["basic", "advanced"]: + foundType = False + for check in healthChecks: + if check.checktype == checkType: + foundType = True + break + self.assertTrue(foundType, + "Router should contain health check results info for type: " + checkType + ) + + def verifyCheckNames(self, healthChecks): + for checkName in ["dns_check.py", "dhcp_check.py", "haproxy_check.py", "disk_space_check.py", "iptables_check.py", "gateways_check.py", "router_version_check.py"]: + foundCheck = False + for check in healthChecks: + if check.checkname == checkName: + foundCheck = True + break + self.assertTrue(foundCheck, + "Router should contain health check results info for check name: " + checkName + ) + + def verifyCheckResults(self, healthChecks): + failedCheck = 0 + for check in healthChecks: + if check.success: + print("check %s is good" % check.checkname) + else: + print("check %s failed due to %s" % (check.checkname, check.details)) + failedCheck = failedCheck + 1 + self.assertEquals(failedCheck, 0) @attr( tags=[ diff --git a/test/integration/smoke/test_routers_network_ops.py b/test/integration/smoke/test_routers_network_ops.py index a133e9aed98..ac51d3736ad 100644 --- a/test/integration/smoke/test_routers_network_ops.py +++ b/test/integration/smoke/test_routers_network_ops.py @@ -287,8 +287,8 @@ class TestRedundantIsolateNetworks(cloudstackTestCase): ) expected = 1 - ssh_command = "wget -t 1 -T 5 www.google.com" - check_string = "HTTP request sent, awaiting response... 200 OK" + ssh_command = "curl -v -m 1 -o index.html -sL www.google.com" + check_string = "200 OK" result = check_router_command(virtual_machine, nat_rule.ipaddress, ssh_command, check_string, self) self.assertEqual( @@ -307,8 +307,8 @@ class TestRedundantIsolateNetworks(cloudstackTestCase): ) expected = 0 - ssh_command = "wget -t 1 -T 1 www.google.com" - check_string = "HTTP request sent, awaiting response... 200 OK" + ssh_command = "curl -v -m 1 -o index.html -sL www.google.com" + check_string = "200 OK" result = check_router_command(virtual_machine, nat_rule.ipaddress, ssh_command, check_string, self) self.assertEqual( @@ -451,8 +451,8 @@ class TestRedundantIsolateNetworks(cloudstackTestCase): ) expected = 0 - ssh_command = "wget -t 1 -T 1 www.google.com" - check_string = "HTTP request sent, awaiting response... 200 OK" + ssh_command = "curl -v -m 1 -o index.html -sL www.google.com" + check_string = "200 OK" result = check_router_command(virtual_machine, nat_rule.ipaddress, ssh_command, check_string, self) self.assertEqual( @@ -480,8 +480,8 @@ class TestRedundantIsolateNetworks(cloudstackTestCase): ) expected = 1 - ssh_command = "wget -t 1 -T 5 www.google.com" - check_string = "HTTP request sent, awaiting response... 200 OK" + ssh_command = "curl -v -m 1 -o index.html -sL www.google.com" + check_string = "200 OK" result = check_router_command(virtual_machine, nat_rule.ipaddress, ssh_command, check_string, self) self.assertEqual( @@ -840,8 +840,8 @@ class TestIsolatedNetworks(cloudstackTestCase): ) expected = 1 - ssh_command = "wget -t 1 -T 5 www.google.com" - check_string = "HTTP request sent, awaiting response... 200 OK" + ssh_command = "curl -v -m 1 -o index.html -sL www.google.com" + check_string = "200 OK" result = check_router_command(virtual_machine, nat_rule.ipaddress, ssh_command, check_string, self) self.assertEqual( @@ -860,8 +860,8 @@ class TestIsolatedNetworks(cloudstackTestCase): ) expected = 0 - ssh_command = "wget -t 1 -T 1 www.google.com" - check_string = "HTTP request sent, awaiting response... 200 OK" + ssh_command = "curl -v -m 1 -o index.html -sL www.google.com" + check_string = "200 OK" result = check_router_command(virtual_machine, nat_rule.ipaddress, ssh_command, check_string, self) self.assertEqual( @@ -995,8 +995,8 @@ class TestIsolatedNetworks(cloudstackTestCase): ) expected = 0 - ssh_command = "wget -t 1 -T 1 www.google.com" - check_string = "HTTP request sent, awaiting response... 200 OK" + ssh_command = "curl -v -m 1 -o index.html -sL www.google.com" + check_string = "200 OK" result = check_router_command(virtual_machine, nat_rule.ipaddress, ssh_command, check_string, self) self.assertEqual( @@ -1015,8 +1015,8 @@ class TestIsolatedNetworks(cloudstackTestCase): ) expected = 1 - ssh_command = "wget -t 1 -T 5 www.google.com" - check_string = "HTTP request sent, awaiting response... 200 OK" + ssh_command = "curl -v -m 1 -o index.html -sL www.google.com" + check_string = "200 OK" result = check_router_command(virtual_machine, nat_rule.ipaddress, ssh_command, check_string, self) self.assertEqual( diff --git a/test/integration/smoke/test_vpc_ipv6.py b/test/integration/smoke/test_vpc_ipv6.py index ce4d466acf0..efec43add7c 100644 --- a/test/integration/smoke/test_vpc_ipv6.py +++ b/test/integration/smoke/test_vpc_ipv6.py @@ -761,8 +761,9 @@ class TestIpv6Vpc(cloudstackTestCase): acl_chain = nic + ACL_CHAINS_SUFFIX[rule["traffictype"]] routerCmd = "nft list chain ip6 %s %s" % (ACL_TABLE, acl_chain) res = self.getRouterProcessStatus(router, routerCmd) - self.assertTrue(rule["parsedrule"] in res, - "Listing firewall rule with nft list chain failure for rule: %s" % rule["parsedrule"]) + parsed_rule_new = rule["parsedrule"].replace("{ ", "").replace(" }", "") + self.assertTrue(rule["parsedrule"] in res or parsed_rule_new in res, + "Listing firewall rule with nft list chain failure for rule: '%s' is not in '%s'" % (rule["parsedrule"], res)) def checkIpv6AclRule(self): router = self.getVpcRouter(self.vpc) diff --git a/test/integration/smoke/test_vpc_vpn.py b/test/integration/smoke/test_vpc_vpn.py index 63846cf10ff..bcee37a06c7 100644 --- a/test/integration/smoke/test_vpc_vpn.py +++ b/test/integration/smoke/test_vpc_vpn.py @@ -592,7 +592,7 @@ class TestVpcSite2SiteVpn(cloudstackTestCase): time.sleep(20) # setup ssh connection to vm2 - ssh_client = self._get_ssh_client(vm2, self.services, 10) + ssh_client = self._get_ssh_client(vm2, self.services, 30) if ssh_client: # run ping test diff --git a/tools/appliance/systemvmtemplate/http/preseed.cfg b/tools/appliance/systemvmtemplate/http/preseed.cfg index ae71ed5c063..1ed0edd492f 100644 --- a/tools/appliance/systemvmtemplate/http/preseed.cfg +++ b/tools/appliance/systemvmtemplate/http/preseed.cfg @@ -66,7 +66,7 @@ d-i partman-auto/expert_recipe string \ use_filesystem{ } filesystem{ ext2 } \ mountpoint{ /boot } \ . \ - 256 1000 256 linux-swap \ + 512 1000 512 linux-swap \ method{ swap } format{ } \ . \ 2240 40 4000 ext4 \ diff --git a/tools/appliance/systemvmtemplate/scripts/apt_upgrade.sh b/tools/appliance/systemvmtemplate/scripts/apt_upgrade.sh index bca5077dafe..91a1dd3cdab 100644 --- a/tools/appliance/systemvmtemplate/scripts/apt_upgrade.sh +++ b/tools/appliance/systemvmtemplate/scripts/apt_upgrade.sh @@ -36,8 +36,8 @@ function add_backports() { sed -i '/deb-src/d' /etc/apt/sources.list sed -i '/backports/d' /etc/apt/sources.list sed -i '/security/d' /etc/apt/sources.list - echo 'deb http://http.debian.net/debian bullseye-backports main' >> /etc/apt/sources.list - echo 'deb http://security.debian.org/debian-security bullseye-security main' >> /etc/apt/sources.list + echo 'deb http://http.debian.net/debian bookworm-backports main' >> /etc/apt/sources.list + echo 'deb http://security.debian.org/debian-security bookworm-security main' >> /etc/apt/sources.list } function apt_upgrade() { diff --git a/tools/appliance/systemvmtemplate/scripts/configure_systemvm_services.sh b/tools/appliance/systemvmtemplate/scripts/configure_systemvm_services.sh index 27a1ead43dc..1a465f4999f 100644 --- a/tools/appliance/systemvmtemplate/scripts/configure_systemvm_services.sh +++ b/tools/appliance/systemvmtemplate/scripts/configure_systemvm_services.sh @@ -19,7 +19,7 @@ set -e set -x -CLOUDSTACK_RELEASE=4.19.0 +CLOUDSTACK_RELEASE=4.20.0 function configure_apache2() { # Enable ssl, rewrite and auth diff --git a/tools/appliance/systemvmtemplate/scripts/install_systemvm_packages.sh b/tools/appliance/systemvmtemplate/scripts/install_systemvm_packages.sh index 3b4ef653728..92223cfbd88 100644 --- a/tools/appliance/systemvmtemplate/scripts/install_systemvm_packages.sh +++ b/tools/appliance/systemvmtemplate/scripts/install_systemvm_packages.sh @@ -22,7 +22,7 @@ set -x function install_vhd_util() { [[ -f /bin/vhd-util ]] && return - wget --no-check-certificate https://github.com/shapeblue/cloudstack-nonoss/raw/main/vhd-util -O /bin/vhd-util + wget --no-check-certificate https://download.cloudstack.org/tools/vhd-util -O /bin/vhd-util chmod a+x /bin/vhd-util } @@ -53,7 +53,7 @@ function install_packages() { ${apt_get} install grub-legacy \ rsyslog logrotate cron net-tools ifupdown tmux vim-tiny htop netbase iptables nftables \ openssh-server e2fsprogs tcpdump iftop socat wget coreutils systemd \ - python python3 python3-flask ieee-data \ + python-is-python3 python3 python3-flask python3-netaddr ieee-data \ bzip2 sed gawk diffutils grep gzip less tar telnet ftp rsync traceroute psmisc lsof procps \ inetutils-ping iputils-arping httping curl \ dnsutils zip unzip ethtool uuid file iproute2 acpid sudo \ @@ -63,10 +63,10 @@ function install_packages() { nfs-common \ samba-common cifs-utils \ xl2tpd bcrelay ppp tdb-tools \ - xenstore-utils libxenstore3.0 \ + xenstore-utils libxenstore4 \ ipvsadm conntrackd libnetfilter-conntrack3 \ keepalived irqbalance \ - openjdk-11-jre-headless \ + openjdk-17-jre-headless \ ipcalc ipset \ iptables-persistent \ libtcnative-1 libssl-dev libapr1-dev \ @@ -80,10 +80,6 @@ function install_packages() { apt-get install -y python3-json-pointer python3-jsonschema cloud-init - # python2-netaddr workaround - wget https://github.com/shapeblue/cloudstack-nonoss/raw/main/python-netaddr_0.7.19-1_all.deb - dpkg -i python-netaddr_0.7.19-1_all.deb - apt_clean # 32 bit architecture support for vhd-util @@ -104,9 +100,9 @@ function install_packages() { install_vhd_util # Install xenserver guest utilities as debian repos don't have it - wget https://mirrors.kernel.org/ubuntu/pool/main/x/xe-guest-utilities/xe-guest-utilities_7.10.0-0ubuntu1_amd64.deb - dpkg -i xe-guest-utilities_7.10.0-0ubuntu1_amd64.deb - rm -f xe-guest-utilities_7.10.0-0ubuntu1_amd64.deb + wget --no-check-certificate https://download.cloudstack.org/systemvm/debian/xe-guest-utilities_7.20.2-0ubuntu1_amd64.deb + dpkg -i xe-guest-utilities_7.20.2-0ubuntu1_amd64.deb + rm -f xe-guest-utilities_7.20.2-0ubuntu1_amd64.deb } return 2>/dev/null || install_packages diff --git a/tools/appliance/systemvmtemplate/template.json b/tools/appliance/systemvmtemplate/template.json index ba3a84385d0..fe735d26b5e 100644 --- a/tools/appliance/systemvmtemplate/template.json +++ b/tools/appliance/systemvmtemplate/template.json @@ -27,8 +27,8 @@ "format": "qcow2", "headless": true, "http_directory": "http", - "iso_checksum": "sha512:da7e7867ed043b784f5ae7e4adaaf4f023b5235f0fa2ead1279dc93f74bc17801ed906d330e3cd68ee8d3e96b697d21d23cfe2b755f5a9eb555bd5390a8c4dac", - "iso_url": "https://cdimage.debian.org/mirror/cdimage/archive/11.8.0/amd64/iso-cd/debian-11.8.0-amd64-netinst.iso", + "iso_checksum": "sha512:33c08e56c83d13007e4a5511b9bf2c4926c4aa12fd5dd56d493c0653aecbab380988c5bf1671dbaea75c582827797d98c4a611f7fb2b131fbde2c677d5258ec9", + "iso_url": "https://download.cloudstack.org/systemvm/debian/debian-12.5.0-amd64-netinst.iso", "net_device": "virtio-net", "output_directory": "../dist", "qemuargs": [ diff --git a/vmware-base/pom.xml b/vmware-base/pom.xml index bca89dfc2d9..21cd9cad6b0 100644 --- a/vmware-base/pom.xml +++ b/vmware-base/pom.xml @@ -51,6 +51,16 @@ com.google.code.gson gson + + jakarta.xml.bind + jakarta.xml.bind-api + ${cs.jakarta.xml.bind.version} + + + com.sun.xml.bind + jaxb-impl + ${cs.jaxb.impl.version} + com.cloud.com.vmware vmware-vim25