diff --git a/api/serializers.py b/api/serializers.py index dbd73a76..c58a0e1f 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -350,7 +350,7 @@ class OptionalTopologieSerializer(NamespacedHMSerializer): 'vlan_decision_nok', 'switchs_ip_type', 'switchs_web_management', 'switchs_web_management_ssl', 'switchs_rest_management', 'switchs_management_utils', 'switchs_management_interface_ip', - 'provision_switchs_enabled') + 'provision_switchs_enabled', 'switchs_provision', 'switchs_management_sftp_creds') class GeneralOptionSerializer(NamespacedHMSerializer): diff --git a/preferences/models.py b/preferences/models.py index 6386f455..dcab58cf 100644 --- a/preferences/models.py +++ b/preferences/models.py @@ -193,6 +193,10 @@ class OptionalTopologie(AclMixin, PreferencesModel): (DEFINED, 'Prédéfini dans "Vlan où placer les machines\ après acceptation RADIUS"'), ) + CHOICE_PROVISION = ( + ('sftp', 'sftp'), + ('tftp', 'tftp'), + ) radius_general_policy = models.CharField( max_length=32, @@ -235,6 +239,24 @@ class OptionalTopologie(AclMixin, PreferencesModel): null=True, help_text="Plage d'ip de management des switchs" ) + switchs_provision = models.CharField( + max_length=32, + choices=CHOICE_PROVISION, + default='tftp', + help_text="Mode de récupération des confs par les switchs" + ) + sftp_login = models.CharField( + max_length=32, + null=True, + blank=True, + help_text="Login sftp des switchs" + ) + sftp_pass = AESEncryptedField( + max_length=63, + null=True, + blank=True, + help_text="Mot de passe sftp" + ) @cached_property def provisioned_switchs(self): @@ -258,6 +280,14 @@ class OptionalTopologie(AclMixin, PreferencesModel): return None return self.switchs_management_interface.ipv4 + @cached_property + def switchs_management_sftp_creds(self): + """Credentials des switchs pour provion sftp""" + if self.sftp_login and self.sftp_pass: + return {'login' : self.sftp_login, 'pass' : self.sftp_pass} + else: + return None + @cached_property def switchs_management_utils(self): """Used for switch_conf, return a list of ip on vlans""" @@ -280,7 +310,7 @@ class OptionalTopologie(AclMixin, PreferencesModel): def provision_switchs_enabled(self): """Return true if all settings are ok : switchs on automatic provision, ip_type""" - return bool(self.provisioned_switchs and self.switchs_ip_type and SwitchManagementCred.objects.filter(default_switch=True).exists() and self.switchs_management_interface_ip) + return bool(self.provisioned_switchs and self.switchs_ip_type and SwitchManagementCred.objects.filter(default_switch=True).exists() and self.switchs_management_interface_ip and bool(self.switchs_provision != 'sftp' or self.switchs_management_sftp_creds)) class Meta: permissions = ( diff --git a/preferences/templates/preferences/display_preferences.html b/preferences/templates/preferences/display_preferences.html index 3cebbbfe..3eb76af9 100644 --- a/preferences/templates/preferences/display_preferences.html +++ b/preferences/templates/preferences/display_preferences.html @@ -147,6 +147,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,