ソースを参照

agregue metodo para parsear config de FD2/text a FD3/json, el método genera un exception cuando no es capaz de parsear la conf.

Luciano Andrade 6 年 前
コミット
47f15e3dd8

+ 62 - 1
src/HostBundle/Traits/DHCPOptionTrait.php

@@ -19,14 +19,75 @@ trait DHCPOptionTrait
         $this->setOptions(json_encode($this->getDHCPOption()));
     }
 
+
     /**
      * @ORM\PostLoad
      */
     public function doDHCPOptionOnPostLoad()
     {
-       $this->setDHCPOption((array)json_decode($this->getOptions()));
+       $this->setDHCPOption($this->setAltDhcpParsing($this->getOptions()));
+    }
+
+    /**
+     *	Esta función parsea las opciones de flowdat 2 / dhcpd-fd si son seteadas como texto debido a la importación básica.
+     */
+    function setAltDhcpParsing($config){
+	    $rtr = json_decode($config, true, 512, JSON_BIGINT_AS_STRING);
+	    if(!is_array($rtr)){
+		    $rtr = array();
+		    foreach(preg_split("|\n|", $config) as $line){
+			$p = preg_split("|\s+|",$line);
+			if($p[0] === "option"){
+				if($p[1] === "routers"){
+					$rtr["routers"] = preg_replace("|;$|", "", $p[2]);
+				}else if ($p[1] === "subnet-mask"){
+					$rtr["subnet_mask"] = preg_replace("|;$|", "", $p[2]);
+				}else if ($p[1] === "broadcast-address"){
+					$rtr["broadcast_address"] = preg_replace("|;$|", "", $p[2]);
+				}else if ($p[1] === "domain-name"){
+					$rtr["domain_name"] = preg_replace("/\"|;$/", "", $p[2]);
+				}else if ($p[1] === "domain-name-servers"){
+					$val = implode("", array_slice($p,2));
+					$rtr["domain_name_servers"] = preg_replace("/;$/", "", $val);
+				}else if ($p[1] === "log-servers"){
+					$val = implode("", array_slice($p,2));
+					$rtr["log_servers"] = preg_replace("/;$/", "", $val);
+				}else if ($p[1] === "time-servers"){
+					$val = implode("", array_slice($p,2));
+					$rtr["time_servers"] = preg_replace("/;$/", "", $val);
+				}else if ($p[1] === "tftp-server-name"){
+					$rtr["tftp_server"] = preg_replace("/\"|;$/", "", $p[2]);
+				}else if ($p[1] === "option122.provisioning-type"){
+					$rtr["option122.provisioning-type"] = preg_replace("/\"|;$/", "", $p[2]);
+				}else if ($p[1] === "option122.provisioning-server"){
+					$rtr["option122.provisioning-server"] = preg_replace("/\"|;$/", "", $p[2]);
+				}else if ($p[1] === "option122.dhcp-server"){
+					$rtr["option122.dhcp-server"] = preg_replace("/;$/", "", $p[2]);
+				}else if ($p[1] === "time-offset"){
+					$rtr["time_offset"] = preg_replace("/;$/", "", $p[2]);
+				}else{
+					throw new \Exception("Option not soported by setAltDhcpParsing ".$line);
+				}
+			}else if ($p[0] === "max-lease-time"){
+					$rtr["max_lease_time"] = preg_replace("/;$/", "", $p[1]);
+			}else if ($p[0] === "filename"){
+					$rtr["filename"] = preg_replace("/;$/", "", $p[1]);
+			}else if ($p[0] === "next-server"){
+					$rtr["next_server"] = preg_replace("/;$/", "", $p[1]);
+			}else if ($p[0] === "default-lease-time"){
+					$rtr["default_lease_time"] = preg_replace("/;$/", "", $p[1]);
+			}else{
+				throw new \Exception("Config not soported by setAltDhcpParsing ".$line);
+				//var_dump($p);
+			}
+		    }
+		    return $rtr;
+	    }else{
+		    return (array)$rtr;
+	    }
     }
 
+
     function getDHCPOption()
     {
         return $this->json_dhcp_option_config;

+ 1 - 0
src/IPv4Bundle/Entity/SubNet.php

@@ -286,4 +286,5 @@ class SubNet implements TenancyIdTraitInterface, WorkflowInterface
             $context->addViolation('subnet.address.error');
         }
     }
+
 }