浏览代码

FD3-539 - Se añade la posibilidad de almacenar configuraciones de para DHCP.

Maxi Schvindt 7 年之前
父节点
当前提交
10ee03940e

+ 25 - 2
src/KeaBundle/Admin/ConfigAdmin.php

@@ -7,9 +7,32 @@ use Sonata\AdminBundle\Datagrid\DatagridMapper;
 use Sonata\AdminBundle\Datagrid\ListMapper;
 use Sonata\AdminBundle\Form\FormMapper;
 use Sonata\AdminBundle\Show\ShowMapper;
+use Sonata\AdminBundle\Route\RouteCollection;
 
 class ConfigAdmin extends BaseAdmin
 {
+
+    protected function configureRoutes(RouteCollection $collection)
+    {
+        $collection->remove('history')->remove('create');
+    }
+
+    /**
+     * @param string $action
+     * @param Object $object
+     * 
+     * @return array
+     */
+    public function configureActionButtons($action, $object = null)
+    {
+        $actions = parent::configureActionButtons($action, $object);
+        $actions['config_manager'] = array(
+            'template' => 'KeaBundle:Config:config_manager_button.html.twig',
+        );
+
+        return $actions;
+    }
+
     /**
      * @param DatagridMapper $datagridMapper
      */
@@ -28,9 +51,9 @@ class ConfigAdmin extends BaseAdmin
     protected function configureListFields(ListMapper $listMapper)
     {
         $listMapper
-            ->add('id')
             ->add('dhcp')
-            ->add('template')
+            ->add('description')
+            //->add('template')
             ->add('created')
             ->add('_action', null, array(
                 'actions' => array(

+ 22 - 9
src/KeaBundle/Controller/ConfigController.php

@@ -36,8 +36,6 @@ class ConfigController extends Controller
             ->add('dhcpId', EntityType::class, array('class' => 'DHCPBundle\Entity\DHCP', 'choice_label' => 'name', 'label' => $translator->trans("form.label_dhcp", array(), "KeaBundle")))
             ->getForm();
 
-        //$flashbag->add("warning", $translator->trans("msg_select_map", array(), "KeaBundle"));
-
         if ($dhcpId = $request->get('dhcpId')) {
             $action = $request->get('action');
 
@@ -52,8 +50,12 @@ class ConfigController extends Controller
             } elseif($action == 'set') {
                 $params = $request->get('params');
                 $config = $keaConfigService->setConfig($dhcp, $params);
+            } elseif($action == 'save') {
+                $params = $request->get('params');
+                $this->saveConfig($dhcp, $params);
+                $config = json_encode(array("ok" => $translator->trans("form.config_created", array(), "KeaBundle")));
             } else {
-                $config = json_encode(array("error" => "Acción no definida"));
+                $config = json_encode(array("error" => $translator->trans("form.action_not_defined", array(), "KeaBundle")));
             }
 
             $decode = json_decode($config);
@@ -71,13 +73,24 @@ class ConfigController extends Controller
         ));
     }
 
-    public function setAction() 
+    /**
+     * @param DHCP
+     * @param json
+     */
+    private function saveConfig(DHCP $dhcp, $template)
     {
-        print_r("setAction");
-        die;
-    }
+        $em = $this->get('doctrine')->getManager();
+        $now = date("Y-m-d H:i");
 
-    
+        $config = new Config();
+        $config->setDhcp($dhcp);
+        $config->setTemplate($template);
+        $config->setDescription("DHCP Config {$dhcp->getName()}({$dhcp->getHost()}) - {$now}");
+
+        $em->persist($config);
+        $em->flush();
+
+        return true; 
+    }
 
-    
 }

+ 0 - 4
src/KeaBundle/Resources/config/routing/admin.xml

@@ -8,8 +8,4 @@
         <default key="_controller">KeaBundle:Config:get</default>
     </route>
     
-    <route id="kea_set_config" path="/admin/kea/config/set">
-        <default key="_controller">KeaBundle:Config:set</default>
-    </route>
-    
 </routes>

+ 1 - 1
src/KeaBundle/Resources/config/services.yml

@@ -7,7 +7,7 @@ services:
         class: KeaBundle\Admin\ConfigAdmin
         arguments: [~, KeaBundle\Entity\Config, BaseAdminBundle:CRUD]
         tags:
-            - { name: sonata.admin, manager_type: orm, group: Kea, label: Config, label_catalogue: KeaBundle, label_translator_strategy: sonata.admin.label.strategy.underscore }
+            - { name: sonata.admin, manager_type: orm, group: Kea, label: Config, label_catalogue: KeaBundle, label_translator_strategy: sonata.admin.label.strategy.underscore, audit: false }
         calls:
             - [setTranslationDomain, [KeaBundle]]
         public: true

+ 8 - 1
src/KeaBundle/Resources/translations/KeaBundle.es.yml

@@ -6,10 +6,14 @@ form:
     label_dhcp: DHCP
     label_created: Creado
     label_template: Plantilla
+    config_created: Config guardada
+    action_not_defined: Acción no definida
 
 breadcrumb:
     link_d_h_c_p_list: Listado Configuraciones
     link_d_h_c_p_delete: Eliminar Configuración
+    link_config_list: Listado de Configuraciones
+    link_config_delete: Eliminar Configuración
     
 list:
     label_description: Descripción
@@ -33,4 +37,7 @@ filter:
 msg_import_kea_config: Obtener configuración de Kea
 select_dhcp_and_get_config: Seleccionar DHCP y obtener configuración
 get_config: Obtener configuración
-generate_config: Generar configuración
+generate_config: Generar configuración
+set_config: Cargar configuración
+save_config: Guardar configuración
+kea_get_config: Configurar KEA

+ 6 - 0
src/KeaBundle/Resources/views/Config/config_manager_button.html.twig

@@ -0,0 +1,6 @@
+<li>
+    <a class="sonata-action-element" href="{{ path('kea_get_config') }}">
+        <i class="fa fa-cog" aria-hidden="true"></i>
+        {{ 'kea_get_config'|trans({}, 'KeaBundle') }}
+    </a>
+</li>

+ 31 - 64
src/KeaBundle/Resources/views/Config/get.html.twig

@@ -46,9 +46,6 @@
 
 {% block sonata_wrapper %}
 {{ parent() }}
-{# <footer class="footer">
-    <span id="statusBar" class="statusBar"></span>
-</footer> #}
 {% endblock %}
 
 {% block content %}
@@ -69,6 +66,9 @@
                                 {{ form_widget(form) }}
                                 <br />
                                 <textarea id="textarea_ace_editor"></textarea>
+                                <div id="result_load" style="display:none">
+                                    <pre id="result_load_pre"></pre>
+                                </div>
                             </div>
                         </div>
                     </div>
@@ -80,15 +80,18 @@
 </div>
 
 <div class="sonata-ba-form-actions well well-small form-actions">
-    <button class="btn btn-success" type="submit" id="btn_get_config">
+    <button class="btn btn-success" type="submit" id="btn_get_config" onclick="bclick('btn_get_config','get');">
         <i class="fa fa-download" aria-hidden="true"></i>&nbsp;{{ 'get_config'|trans({}, 'KeaBundle') }}
     </button>
-    <button class="btn btn-success" type="submit" id="btn_generate_config">
-        <i class="fa fas fa-cog" aria-hidden="true"></i>&nbsp;{{ 'generate_config'|trans({}, 'KeaBundle') }}
+    <button class="btn btn-success" type="submit" id="btn_generate_config" onclick="bclick('btn_generate_config','generate');">
+        <i class="fa fa-cog" aria-hidden="true"></i>&nbsp;{{ 'generate_config'|trans({}, 'KeaBundle') }}
     </button>
-    <button class="btn btn-success" type="submit" id="btn_set_config">
+    <button class="btn btn-success" type="submit" id="btn_set_config" onclick="bclick('btn_set_config','set');">
         <i class="fa fa-upload" aria-hidden="true"></i>&nbsp;{{ 'set_config'|trans({}, 'KeaBundle') }}
     </button>
+    <button class="btn btn-success" type="submit" id="btn_save_config" onclick="bclick('btn_save_config','save');">
+        <i class="fa fa-save" aria-hidden="true"></i>&nbsp;{{ 'save_config'|trans({}, 'KeaBundle') }}
+    </button>
 </div>
 
 
@@ -106,73 +109,37 @@ $(document).ready(function() {
     editor.getSession().setTabSize(2);
     editor.getSession().setUseSoftTabs(true);
     editor.getSession().setUseWrapMode(true); 
+});
 
-    $("#btn_get_config").click(function(){
-        $("#btn_get_config").attr('disabled','disabled');
-        
-        dhcpId = $("#form_dhcpId").val();
-
-        if(!dhcpId) {
-            $("#btn_get_config").removeAttr('disabled');
-            alert("{{ 'alert_select_dhcp'|trans({}, 'KeaBundle') }}");
-            return;
-        }
-
-        result = getConfig(dhcpId, 'get');
-        
-        $("#btn_get_config").removeAttr('disabled');
-    });
-
-    $("#btn_generate_config").click(function(){
-        $("#btn_generate_config").attr('disabled','disabled');
-        
-        dhcpId = $("#form_dhcpId").val();
-
-        if(!dhcpId) {
-            $("#btn_generate_config").removeAttr('disabled');
-            alert("{{ 'alert_select_dhcp'|trans({}, 'KeaBundle') }}");
-            return;
-        }
-
-        result = getConfig(dhcpId, 'generate');
-        
-        $("#btn_generate_config").removeAttr('disabled');
-    });
-    
-    $("#btn_set_config").click(function(){
-        $("#btn_set_config").attr('disabled','disabled');
-        
-        dhcpId = $("#form_dhcpId").val();
-
-        if(!dhcpId) {
-            $("#btn_set_config").removeAttr('disabled');
-            alert("{{ 'alert_select_dhcp'|trans({}, 'KeaBundle') }}");
-            return;
-        }
-
-        result = getConfig(dhcpId, 'set');
-        
-        $("#btn_set_config").removeAttr('disabled');
-    });
-
+function bclick(id, action) {
+    $("#"+id).attr('disabled','disabled');
     
-});
+    dhcpId = $("#form_dhcpId").val();
+    if(!dhcpId) {
+        $("#"+id).removeAttr('disabled');
+        alert("{{ 'alert_select_dhcp'|trans({}, 'KeaBundle') }}");
+        return;
+    }
+    result = getConfig(dhcpId, action);
+    $("#"+id).removeAttr('disabled');
+}
 
 function getConfig(dhcpId, action) {
-
-    var r = false;
+    
     params = editor.getSession().getValue();
+    $("#result_load").hide();
     
-    $.ajax({
-        method: "POST",
-        async: false,
-        cache: false,
+    $.ajax({method: "POST",async: false,cache: false,
         url: "{{url('kea_get_config')}}?_=" + new Date().getTime(),
         data: { dhcpId: dhcpId, action: action, params: params }
     }).done(function( result ) {
-        editor.setValue(result, -1);
+        if(action == "set" || action == "save") {
+            $("#result_load_pre").html(result);
+            $("#result_load").show();
+        } else {
+            editor.setValue(result, -1);
+        }
     });
-
     return true;
 }
 

+ 2 - 2
src/KeaBundle/Services/KeaConfigService.php

@@ -105,7 +105,7 @@ class KeaConfigService
         if(isset($_params[0]) && isset($_params[0]['arguments'])) {
             $_params = array("command" => "config-set", "service" => array("dhcp4"), "arguments" => $_params[0]['arguments']);
         } else {
-            return json_encode(array("error" => "Config Error."));
+            return json_encode(array("error" => "Config Error. Check template DHCP"));
         }
         
         $config = $this->curlPost($host, json_encode($_params));
@@ -128,7 +128,7 @@ class KeaConfigService
             $return = curl_exec($ch);
         } catch (\Exception $ex) {
             // $ex->getMessage()
-            return json_encode(array("error" => "Connection Error."));
+            return json_encode(array("error" => "Kea Connection Error."));
         }
 
         return $return;