# Catalan translation of redhat-config-cluster by Softcatala # Copyright (C) 2004 Free Software Foundation # This file is distributed under the same license as the redhat-config-cluster package. # Xavier Conde Rueda # msgid "" msgstr "" "Project-Id-Version: redhat-config-cluster\n" "POT-Creation-Date: 2005-09-02 15:53-0400\n" "PO-Revision-Date: 2009-05-29 04:58+0100\n" "Last-Translator: Xavier Faus i Torà \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. !/usr/bin/python #. Columns for "treeview" #. INSTALLDIR="." #: src/redhat-config-cluster.py:51 msgid "" "Please be patient.\n" " Starting and Stopping Services\n" " can sometimes take a minute or two." msgstr "Si us plau tingueu paciència.\n" " S'estan engegant i aturant els serveis\n" " algun cop pot tardar un minut o dos." #: src/redhat-config-cluster.py:60 src/configure/cluster-config.py:55 #, python-format msgid "%s %s" msgstr "%s %s" #. ## Get Clumanager version to present in 'About' ### #: src/redhat-config-cluster.py:64 src/configure/cluster-config.py:59 #, python-format msgid "clumanager %s" msgstr "clumanager %s" #clumanager not found? #. ## gettext ("_") must come before import gtk ### #. ## gettext first, then import gtk (exception prints gettext "_") ### #: src/redhat-config-cluster.py:87 src/configure/cluster-config.py:21 #, python-format msgid "" "\n" " Unable to initialize graphical environment. Most likely cause of failure\n" " is that the tool was not run using a graphical environment. Please either\n" " start your graphical user interface or set your DISPLAY variable.\n" "\n" " Caught exception: %s\n" msgstr "" "\n" " No s'ha pogut inicialitzar l'entorn gràfic. El motiu més probable és que\n" " no useu una interfície gràfica per executar l'eina. Inicieu la\n" " interfície d'usuari gràfica o definiu la variable d'entorn DISPLAY.\n" "\n" " S'ha rebut l'excepció: %s\n" #: src/redhat-config-cluster.py:104 src/configure/cluster-config.py:67 msgid "redhat-config-cluster" msgstr "redhat-config-cluster" #: src/redhat-config-cluster.py:107 msgid "" "\n" "redhat-config-cluster - Python GUI to configure a Red Hat Clumanager " "cluster.\n" "\n" "See redhat-config-cluster(8) for more information.\n" msgstr "" "\n" "redhat-config-cluster - Interfície en Python per configurar un cluster de " "Red Hat Clumanager.\n" "\n" "Per a més informació, veieu redhat-config-cluster(8).\n" # Projecte_Gnome_2.2 [sawfish.gnome-2.ca.po] #. stateTable=[_("Down"),_("Up"), _("Unknown")] #: src/redhat-config-cluster.py:149 msgid "Inactive" msgstr "Inactiu" # source\dialog\imapdlg.src toolboxitem RID_SVXDLG_IMAP.TBX_IMAPDLG1 TBI_ACTIVE # Projecte_Open_Office_1.1 [svx.po] #: src/redhat-config-cluster.py:149 msgid "Active" msgstr "Actiu" # Winrar 2.9->String:rarlng.dll #: src/redhat-config-cluster.py:149 src/redhat-config-cluster.py:240 msgid "Unknown" msgstr "Desconegut" # Mozilla 1.3->devinfo_stat_uninitialized #. 'state' attribute doesn't exist, or has null value #: src/redhat-config-cluster.py:234 msgid "Uninitialized" msgstr "Sense inicialitzar" # Projecte_Gnome_2.2 [procman.HEAD.ca.po] #: src/redhat-config-cluster.py:235 msgid "Running" msgstr "S'està executant" # Mozilla 1.3->nv_stopped #: src/redhat-config-cluster.py:236 msgid "Stopped" msgstr "Aturat" # Mozilla 1.3->InputDisabled.label #: src/redhat-config-cluster.py:237 msgid "Disabled" msgstr "Inhabilitat" #: src/redhat-config-cluster.py:238 msgid "Pending" msgstr "Pendent" # Winrar 2.9->String:rarlng.dll #: src/redhat-config-cluster.py:239 msgid "Failed" msgstr "Ha fallat" #. 'state' attribute doesn't exist, or has null value #. print "getStateString - self.getState() = <%s>" % state #: src/redhat-config-cluster.py:269 msgid "Not Monitored" msgstr "Sense monitoritzar" #. option not present, or has null value #. return an empty list #. make sure threading is disabled #. map the event signals to specific methods #. ## Parse cluster.xml into DOM nodes, and do not lock the cluster.xml #. ## file, since this program only needs read access. #. ## set current node label ### #. ## When cluster is coming up from stopped, we need to allow #. ## enough time for the cluster to come all the way up. #. print "on_start_cluster: interval =", interval #. print " tko_count =", tko_count #. print " milliseconds =", milliseconds #. print " seconds =", seconds #. print " max_seconds =", max_seconds #. (status, output) = getStatusOutput("service clumanager start") #: src/redhat-config-cluster.py:389 msgid "Error: Cluster did *NOT* come up as expected - will stop cluster now" msgstr "" "S'ha produït un error: el cluster no s'ha posat en marxa. S'aturarà el " "cluster" #. ## Cluster came up as expected - now safe to call 'updateList' ### #: src/redhat-config-cluster.py:401 msgid "" "A Problem has occurred while changing ownership of this service. Please " "check logs for details" msgstr "S'ha trobat un problema mentres es canviava el propietari del servei. Si us plau comprova els registres per més detalls" #. gtk.timeout_add(60000,self.onTimer) #. self.winMain.window.set_cursor(busy_cursor) #. self.winMain.window.set_cursor(ready_cursor) #: src/redhat-config-cluster.py:444 msgid "" " An error has occurred while disabling this service. Please check logs for " "details." msgstr " S'ha produït un error mentres es deshabilitava el servei. Si us plau " "comprova el registre per més detalls." #: src/redhat-config-cluster.py:453 msgid "" "Error: Service Enable failed - please check the logs for error messages.\n" "\n" "Once the problem has been corrected, the 'Failed' service must first be " "Disabled before it can be Enabled." msgstr "" "S'ha produït un error: no s'ha habilitat el servei. Comproveu als registres " "els missatges d'error.\n" "\n" "Una vegada que hagueu solucionat el problema, el servei que hagi fallat s'ha " "d'inhabilitar abans que es pugi habilitar." # Winrar 2.9->String:rarlng.dll #. Temporarily mothball main window #. print prevIter #. ## service is 'enabled' #. ## set service to 'disabled' #. ## Service is NOT running - 'owner' is not present, #. ## so get "lastowner". #. os.system("clusvcadm -r '%s' -m %s" % (selection_data.data,s.getName())) #. ## Service is 'Disabled' - just 'enable' on new member #. ## Service is not 'Disabled' - restart it on new member #. __ The callback that sends the drag-and-drop data #. __ The DnD stuff #: src/redhat-config-cluster.py:797 src/redhat-config-cluster.py:871 #: src/redhat-config-cluster.py:986 src/redhat-config-cluster.glade.h:15 #: src/configure/failoverdomainnodeDialog.py:48 #: src/configure/failoverdomainsListview.py:31 #: src/configure/membersTreeview.py:30 src/configure/servicesTreeview.py:42 #: src/configure/nfsExportDruid.py:73 src/configure/nfsExportDruid.py:95 #: src/configure/smbShareDruid.py:57 src/configure/smbShareDruid.py:79 msgid "Name" msgstr "Nom" # Mozilla 1.3->lockColumn.label #: src/redhat-config-cluster.py:803 src/redhat-config-cluster.glade.h:25 msgid "Status" msgstr "Estat" # Netscape_4.7->Menu:RESDLL.DLL #: src/redhat-config-cluster.py:820 msgid "Address" msgstr "Adreça" #: src/redhat-config-cluster.py:824 src/configure/cluster-config.glade.h:69 msgid "Netmask" msgstr "Màscara de xarxa" #: src/redhat-config-cluster.py:828 src/configure/cluster-config.glade.h:13 msgid "Broadcast" msgstr "Broadcast" # Mozilla 1.3->Host #: src/redhat-config-cluster.py:838 msgid "Host" msgstr "Ordinador central" #: src/redhat-config-cluster.py:842 msgid "options" msgstr "opcions" # Netscape_4.7->String:RESDLL.DLL #: src/redhat-config-cluster.py:878 msgid "State" msgstr "Estat" #: src/redhat-config-cluster.py:885 src/configure/cluster-config.glade.h:55 msgid "Member" msgstr "Membre" #: src/redhat-config-cluster.py:892 msgid "" "Last\n" "Transition" msgstr "" "Última\n" "transició" #: src/redhat-config-cluster.py:899 msgid "" "Monitor\n" "Interval" msgstr "" "Interval de\n" "monitorització" #: src/redhat-config-cluster.py:906 msgid "Restarts" msgstr "Reinicia" #. self.prevXML="" #: src/redhat-config-cluster.py:928 msgid "Cluster is running" msgstr "El cluster s'està executant" #: src/redhat-config-cluster.py:933 msgid "Cluster is not running" msgstr "El cluster no s'està executant" #. ## Don't specify version - already in ABOUT_VERSION #: src/redhat-config-cluster.py:954 src/configure/cluster-config.py:396 msgid "Copyright (c) 2003 Red Hat, Inc. All rights reserved." msgstr "Copyright (c) 2003 Red Hat, Inc. Es reserven tots els drets." #: src/redhat-config-cluster.py:955 src/configure/cluster-config.py:397 msgid "This software is licensed under the terms of the GPL." msgstr "Aquest programari es llicencia sota les condicions de la GPL." # Projecte_Mandrake [xmms-ca.po] #: src/redhat-config-cluster.py:993 src/configure/cluster-config.glade.h:29 msgid "Device" msgstr "Dispositiu" # Projecte_Gnome_2.2 [libbonoboui.gnome-2-0.ca.po] #: src/redhat-config-cluster.py:1000 msgid "PORT" msgstr "Port" # Projecte_Gnome_2.2 [gnomemeeting.HEAD.ca.po] #: src/redhat-config-cluster.py:1007 msgid "IP" msgstr "IP" # Projecte_Mandrake [userdrake-ca.po] #: src/redhat-config-cluster.py:1014 src/configure/cluster-config.glade.h:115 msgid "User" msgstr "Usuari" #. ####################################### #. ## end def modify_service_ipaddress ### #. ####################################### #. ########################################################################### #. ############################## Main ##################################### #. ########################################################################### #: src/redhat-config-cluster.py:1038 #: src/configure/redhat-config-cluster-cmd.py:1031 #: src/configure/cluster-config.py:91 #, python-format msgid "Please restart %s with root permissions!" msgstr "Reinicieu el %s amb permisos de superusuari" #. ## To get here, user just ran 'redhat-config-cluster' - so, #. ## if configuration file(/etc/cluster.xml) exists, run this #. ## GUI which is the cluster status GUI. If the configuration #. ## file does *NOT* exist, then run the Cluster Configuration #. ## (CLUSTERCONFIG_APP) application. #. print "Cluster configuration file does not exist - running cluconfig now!" #. ## Cluster configuration file *DOES* exist - run this #. ## Cluster Status GUI now. #. print "Cluster configuration file *DOES* exist - running clustat now!" #. if you quit during initialization exceptions can be raised #. ############################################################ #. ## This class is a utility class that displays a busy/wait #. ## progress bar and a message in a Dialog box. #. ## #. ## Constructor Arguments: #. ## commandstring: The command and args you wish the system to run. #. ## message: The message you wish displayed in the dialog box. #. ## errorstring: If the system call return value is non-zero, #. ## the busy/wait dialog will be replaced by a message dialog #. ## that informs the user with this error string. If an errorstring #. ## is not provided, a default generic one is used. #. ## post_fork_command: This is an optional param. If the calling party #. ## wishes to have a method called when the child process #. ## has completed, it can be passed in here. #: src/ForkedCommand.py:24 msgid "" "An error has occurred while running a system command. Please check logs for " "details." msgstr "A succeit un error mentres s'executava una ordre del sisitema. Si us plau comproveu el registre per més detalls." #. This pipe is for the parent process to receive #. the result of the system call in the child process, #. and take appropriate action if an error has occurred. #. parent process #. spawn dialog #. child process #. let parent process know result of system call through IPC #. Create an alignment object that will center the pbar #. Start bouncing progress bar #. Stop caring about SIGCHLD... #. signal.signal(signal.SIGCHLD, signal.SIG_DFL) #. Check how things went with the system call #: src/redhat-config-cluster.glade.h:1 src/configure/cluster-config.glade.h:1 msgid "*" msgstr "*" #: src/redhat-config-cluster.glade.h:2 src/configure/cluster-config.glade.h:26 msgid "Cluster Name: " msgstr "Nom del cluster: " #: src/redhat-config-cluster.glade.h:3 msgid "Cluster Status" msgstr "Estat del cluster" # Projecte_Mandrake [xmms-ca.po] #: src/redhat-config-cluster.glade.h:4 msgid "Devices" msgstr "Dispositius" # Projecte_Gnome_2.2 [gnome-system-tools.HEAD.ca.po] #: src/redhat-config-cluster.glade.h:5 msgid "Disable" msgstr "Inhabilita" # source\ui\config\optdlg.src checkbox TP_OPTSHDWCRSR CB_ALLOW_IN_PROT # Projecte_Open_Office_1.1 [sw.po] #: src/redhat-config-cluster.glade.h:6 msgid "Enable" msgstr "Habilitar" #: src/redhat-config-cluster.glade.h:7 msgid "Failover Domain:" msgstr "Domini Failover:" #FAilover ? #: src/redhat-config-cluster.glade.h:8 msgid "Has Quorum" msgstr "Té quorum" #: src/redhat-config-cluster.glade.h:9 msgid "Ip Addresses" msgstr "Adreces IP" #: src/redhat-config-cluster.glade.h:10 msgid "Last Time:" msgstr "Última vegada:" #: src/redhat-config-cluster.glade.h:11 msgid "Member Information" msgstr "Informació del membre" #: src/redhat-config-cluster.glade.h:12 msgid "Member:" msgstr "Membre:" # Projecte_Gnome_2.2 [gnome-system-tools.HEAD.ca.po] #: src/redhat-config-cluster.glade.h:13 #: src/configure/cluster-config.glade.h:57 msgid "Members" msgstr "Membres" #: src/redhat-config-cluster.glade.h:14 msgid "Monitor Interval:" msgstr "Interval de monitorització:" # Netscape_4.7->String:RESDLL.DLL #: src/redhat-config-cluster.glade.h:16 msgid "Name:" msgstr "Nom:" #: src/redhat-config-cluster.glade.h:17 msgid "On Member:" msgstr "En el membre:" #: src/redhat-config-cluster.glade.h:18 msgid "Power Switch" msgstr "Commutador d'energia" #: src/redhat-config-cluster.glade.h:19 msgid "Restarts:" msgstr "Reinicia:" # Netscape_4.7->Dialog Box Control:RESDLL.DLL #: src/redhat-config-cluster.glade.h:20 msgid "Script:" msgstr "Script:" #Script=script segons el recull, així que està bé script #: src/redhat-config-cluster.glade.h:21 msgid "Service Information" msgstr "Informació del servei" #: src/redhat-config-cluster.glade.h:22 #: src/configure/cluster-config.glade.h:103 msgid "Services" msgstr "Serveis" #: src/redhat-config-cluster.glade.h:23 msgid "Start Local Cluster Daemons" msgstr "Iniciar els dimonis del cluster local" # Netscape_4.7->String:TEXTIMP.DLL #: src/redhat-config-cluster.glade.h:24 msgid "State:" msgstr "Estat:" # Netscape_4.7->String:RESDLL.DLL #: src/redhat-config-cluster.glade.h:26 msgid "Status:" msgstr "Estat:" #: src/redhat-config-cluster.glade.h:27 msgid "Stop Local Cluster Daemons" msgstr "Aturar els dimonis del cluster local" #: src/redhat-config-cluster.glade.h:28 msgid "Transitions" msgstr "Transicions" #: src/redhat-config-cluster.glade.h:29 #: src/configure/cluster-config.glade.h:120 msgid "_Cluster" msgstr "_Cluster" #: src/redhat-config-cluster.glade.h:30 msgid "_Configure" msgstr "_Configurar" # Projecte_Gnome_2.2 [nautilus.gnome-2-0.ca.po] #: src/redhat-config-cluster.glade.h:31 #: src/configure/cluster-config.glade.h:121 msgid "_Contents" msgstr "_Continguts" #: src/redhat-config-cluster.glade.h:32 msgid "_Disable" msgstr "Inha_bilita" # Projecte_Gnome_2.2 [gnome-system-tools.HEAD.ca.po] #: src/redhat-config-cluster.glade.h:33 msgid "_Enable" msgstr "Habi_lita" #: src/redhat-config-cluster.glade.h:34 msgid "_Restart" msgstr "_Reinicia" # source\dialog\ctredlin.src pushbutton SID_REDLIN_FILTER_PAGE BTN_REF # Projecte_Open_Office_1.1 [svx.po] #: src/configure/cluster-config.glade.h:2 msgid "..." msgstr "..." #: src/configure/cluster-config.glade.h:3 msgid "0" msgstr "0" #: src/configure/cluster-config.glade.h:4 msgid "Add Child" msgstr "Afegeix un fill" #: src/configure/cluster-config.glade.h:5 msgid "Add Device" msgstr "Afegeix un dispositiu" #: src/configure/cluster-config.glade.h:6 msgid "Add Device or Service IP Address" msgstr "Afegeix un dispositiu o servei d'adreça IP" #: src/configure/cluster-config.glade.h:7 msgid "Add E_xports" msgstr "Afegei_x exportacions" #: src/configure/cluster-config.glade.h:8 msgid "Add NFS Export Druid" msgstr "Assistent per afegir una exportació d'NFS" #: src/configure/cluster-config.glade.h:9 msgid "Add Samba Druid" msgstr "Assistent per afegir el druida de Samba" #: src/configure/cluster-config.glade.h:10 msgid "Add Service IP Address" msgstr "Afegeix una adreça de servei IP" #: src/configure/cluster-config.glade.h:11 msgid "" "After creating the NFS Export, you can use the Service tab to modify default " "settings." msgstr "" "Després de crear una exportació d'NFS, podeu usar la pestanya de servei per " "modificar la configuració predeterminada." #: src/configure/cluster-config.glade.h:12 msgid "" "After creating the Samba Share, you can use the Service tab to modify " "default settings." msgstr "" "Després de crear un recurs compartit Samba, podeu usar la pestanya de servei " "per modificar la configuració predeterminada." #: src/configure/cluster-config.glade.h:14 msgid "Bulk Load NFS" msgstr "Càrrega NFS massiva" #: src/configure/cluster-config.glade.h:15 msgid "Check Interval" msgstr "Comprovar l'interval" #: src/configure/cluster-config.glade.h:16 msgid "" "Click Forward to begin entering the necessary\n" "information to allow the cluster to NFS export\n" "a directory." msgstr "" "Cliqueu Endavant per començar a introduir la\n" "informació necessària per permetre que un cluster exporti\n" "un directori mitjançant NFS." #: src/configure/cluster-config.glade.h:19 msgid "" "Click Forward to begin entering the necessary\n" "information to allow the cluster to Share a\n" "directory to Windows clients using Samba." msgstr "" "Cliqueu Endavant per començar a introduir la\n" "informació necessària per permetre que un cluster comparteixi\n" "un directori a clients Windows fent servir Samba." #: src/configure/cluster-config.glade.h:22 msgid "Client Name" msgstr "Nom del client" #: src/configure/cluster-config.glade.h:23 msgid "Client Options" msgstr "Opcions del client" #: src/configure/cluster-config.glade.h:24 msgid "Cluster Configuration" msgstr "Configuració del cluster" #: src/configure/cluster-config.glade.h:25 msgid "Cluster Daemon Properties" msgstr "Propietats del dimoni del cluster" #: src/configure/cluster-config.glade.h:27 msgid "Data Changed!" msgstr "Les dades han canviat!" # Winrar 2.9->Dialog Box Control:rarlng.dll #: src/configure/cluster-config.glade.h:28 msgid "Delete" msgstr "Suprimeix" #: src/configure/cluster-config.glade.h:30 msgid "Device Mountpoint" msgstr "Punt de muntatge del dispositiu" #: src/configure/cluster-config.glade.h:31 msgid "Device Special File" msgstr "Fitxer especial del dispositiu" #: src/configure/cluster-config.glade.h:32 msgid "Disk Tiebreaker - Disk Ping Interval" msgstr "Mort sobtada del disc - Interval del ping del disc" #tiebreaker, desempat mort sobtada #: src/configure/cluster-config.glade.h:33 msgid "Domain Name" msgstr "Nom de domini" #: src/configure/cluster-config.glade.h:34 msgid "Enable Broadcast Heartbeating" msgstr "Activa la difusió del sufriment" #heartbeating sufriment, desengany #: src/configure/cluster-config.glade.h:35 msgid "Enable Multicast Heartbeating" msgstr "Activa el multicast del sufriment" #: src/configure/cluster-config.glade.h:36 msgid "Enable Software Watchdog" msgstr "Habilita la vigilància per programari" #: src/configure/cluster-config.glade.h:37 msgid "Enter Directory to Export" msgstr "Introduïu el directori per exportar" #: src/configure/cluster-config.glade.h:38 msgid "Enter Share Name" msgstr "Introduïu el nom del recurs compartit" #: src/configure/cluster-config.glade.h:39 msgid "Existing Device and Mountpoint" msgstr "Dispositiu i punt de muntatge existent" #: src/configure/cluster-config.glade.h:40 msgid "Existing Services with IP Addresses" msgstr "Serveis amb adreces IP existent" #: src/configure/cluster-config.glade.h:41 msgid "Export Directory" msgstr "Directori per exportar" #: src/configure/cluster-config.glade.h:42 msgid "FS Type" msgstr "Tipus de sistema de fitxer" #: src/configure/cluster-config.glade.h:43 msgid "Failover Domain" msgstr "Domini del sistema d'emergència" #Fail over, sistema d'emergència #: src/configure/cluster-config.glade.h:44 msgid "Failover Domain Member" msgstr "Membre del domini del sistema d'emergència" #: src/configure/cluster-config.glade.h:45 msgid "Failover Domains" msgstr "Dominis del sistema d'emergència" #: src/configure/cluster-config.glade.h:46 msgid "Failover Seconds" msgstr "Segons del sistema d'emergència" #: src/configure/cluster-config.glade.h:47 msgid "Failover Speed" msgstr "Velocitat del sistema d'emergència" #: src/configure/cluster-config.glade.h:48 msgid "Faster" msgstr "Més ràpid" #: src/configure/cluster-config.glade.h:49 msgid "Force Unmount" msgstr "Força el desmuntatge" #: src/configure/cluster-config.glade.h:50 msgid "GULM STONITH" msgstr "" #: src/configure/cluster-config.glade.h:51 msgid "IP Address" msgstr "Adreça IP" #: src/configure/cluster-config.glade.h:52 msgid "Log Level" msgstr "Nivell de registre" #: src/configure/cluster-config.glade.h:53 msgid "Maximum False Starts" msgstr "Màxim d'inicis falsos" #: src/configure/cluster-config.glade.h:54 #, fuzzy msgid "Maximum Restarts" msgstr "Reiniciaments màxims" #: src/configure/cluster-config.glade.h:56 msgid "Member Name" msgstr "Nom del membre" #: src/configure/cluster-config.glade.h:58 #, fuzzy msgid "Monitor Link" msgstr "Punt de muntatge" #: src/configure/cluster-config.glade.h:59 msgid "Mount" msgstr "Munta" # Projecte_Gnome_2.2 [gnome-system-tools.HEAD.ca.po] #: src/configure/cluster-config.glade.h:60 msgid "Mount Point" msgstr "Punt de muntatge" #: src/configure/cluster-config.glade.h:61 msgid "Multicast IP Address" msgstr "Adreça IP multicast" #: src/configure/cluster-config.glade.h:62 msgid "NFS Druid" msgstr "Assistent NFS" #: src/configure/cluster-config.glade.h:63 msgid "NFS Export" msgstr "Exportació NFS" #: src/configure/cluster-config.glade.h:64 msgid "NFS Export Bulk Load Failures" msgstr "Errors en carregar l'exportació addicional NFS" #bulk adicional #: src/configure/cluster-config.glade.h:65 msgid "NFS Export Client" msgstr "Client d'exportació NFS" #: src/configure/cluster-config.glade.h:66 msgid "NFS Export Completion" msgstr "Finalització de l'exportació NFS" #: src/configure/cluster-config.glade.h:67 msgid "NFS Export Directory Name" msgstr "Nom del directori d'exportació NFS" #: src/configure/cluster-config.glade.h:68 msgid "NFS..." msgstr "NFS..." # Netscape_4.7->Dialog Box Control:_ISUSER.DLL #: src/configure/cluster-config.glade.h:70 msgid "Network" msgstr "Xarxa" #: src/configure/cluster-config.glade.h:71 msgid "Network Tiebreaker - IP Address" msgstr "Mort sobtada de la xarxa - Adreça IP" # Netscape_4.7->Menu:RESDLL.DLL #: src/configure/cluster-config.glade.h:72 msgid "New" msgstr "Nou" #: src/configure/cluster-config.glade.h:73 msgid "New Device" msgstr "Nou dispositiu" #: src/configure/cluster-config.glade.h:74 msgid "New Service" msgstr "Nou servei" #: src/configure/cluster-config.glade.h:75 msgid "No Cluster Members" msgstr "Cap membre del cluster" # Winrar 2.9->Menu:rarlng.dll #: src/configure/cluster-config.glade.h:76 msgid "Options" msgstr "Opcions" #: src/configure/cluster-config.glade.h:77 msgid "Ordered Failover" msgstr "Sistema d'emergència ordenat" #: src/configure/cluster-config.glade.h:78 msgid "Owner" msgstr "Propietari" # Netscape_4.7->Dialog Caption:NSMAILUI.DLL #: src/configure/cluster-config.glade.h:79 msgid "Password" msgstr "Contrasenya" #: src/configure/cluster-config.glade.h:80 msgid "Poll Interval" msgstr "Interval d'enquesta" # Netscape_4.7->String:RESDLL.DLL #: src/configure/cluster-config.glade.h:81 msgid "Port" msgstr "Port" #: src/configure/cluster-config.glade.h:82 msgid "Power Controller" msgstr "Controlador d'energia" #: src/configure/cluster-config.glade.h:83 msgid "Power Controller Type" msgstr "Tipus de controlador d'energia" # Netscape_4.7->Menu:RESDLL.DLL #: src/configure/cluster-config.glade.h:84 msgid "Properties" msgstr "Propietats" #: src/configure/cluster-config.glade.h:85 msgid "Raw Primary" msgstr "Dades sense processar Primàries" #raw dades sense processar #: src/configure/cluster-config.glade.h:86 msgid "Raw Shadow" msgstr "Dades sense processar a la sombra" #: src/configure/cluster-config.glade.h:87 msgid "Restrict failover to only these members" msgstr "Sistema d'emergèngia restringit úniicament a aquestes persones" #: src/configure/cluster-config.glade.h:88 msgid "SFS Path" msgstr "Camí SFS" #: src/configure/cluster-config.glade.h:89 msgid "Samba Druid" msgstr "Assistent de Samba" #: src/configure/cluster-config.glade.h:90 msgid "Samba Share Completion" msgstr "Finalització de la compartició Samba" #: src/configure/cluster-config.glade.h:91 msgid "Samba Share Name" msgstr "Nom del recurs compartit Samba" #: src/configure/cluster-config.glade.h:92 msgid "Samba..." msgstr "Samba..." #: src/configure/cluster-config.glade.h:93 msgid "Select Device for Export" msgstr "Seleccioneu el dispositiu per exportar" #: src/configure/cluster-config.glade.h:94 msgid "Select Device for Share" msgstr "Seleccioneu el dispositiu per compartir" #: src/configure/cluster-config.glade.h:95 msgid "Select Service for Export" msgstr "Seleccioneu el servei per exportar" #: src/configure/cluster-config.glade.h:96 msgid "Select Service for Share" msgstr "Seleccioneu el servei per compartir" #: src/configure/cluster-config.glade.h:97 msgid "Select the NFS exports file to bulk load" msgstr "Seleccioneu el fitxer NFS d'exportació per la càrrega massiva" #: src/configure/cluster-config.glade.h:98 msgid "Serial" msgstr "Sèrie" #: src/configure/cluster-config.glade.h:99 msgid "Service" msgstr "Servei" #: src/configure/cluster-config.glade.h:100 msgid "Service IP Address" msgstr "Adreça del servei IP" #: src/configure/cluster-config.glade.h:101 msgid "Service Name" msgstr "Nom del servei" #: src/configure/cluster-config.glade.h:102 msgid "Service text here" msgstr "El text del servei" #: src/configure/cluster-config.glade.h:104 msgid "Share Name" msgstr "Nom del recurs compartit" #: src/configure/cluster-config.glade.h:105 msgid "Shared File System" msgstr "Sistema de fitxers compartits" #: src/configure/cluster-config.glade.h:106 msgid "Shared Raw Device" msgstr "Dades sense processar del dispositiu compartit" #: src/configure/cluster-config.glade.h:107 msgid "Shared State" msgstr "Estat compartit" #: src/configure/cluster-config.glade.h:108 msgid "Slower" msgstr "Més lent" #: src/configure/cluster-config.glade.h:109 msgid "" "The cluster will *NOT* function properly\n" "without at least one member.\n" "\n" "You are about to Quit without defining\n" "any cluster members." msgstr "" "El cluster no funcionarà correctament\n" "sense almenys un membre.\n" "\n" "Ara sortireu sense definir els membres\n" "del cluster." # Winrar 2.9->String:rarlng.dll #: src/configure/cluster-config.glade.h:114 msgid "Type" msgstr "Tipus" #: src/configure/cluster-config.glade.h:116 msgid "User Script" msgstr "Seqüència de l'usuari" #: src/configure/cluster-config.glade.h:117 msgid "_Add Child" msgstr "_Afegeix un fill" #: src/configure/cluster-config.glade.h:118 msgid "_Add Members" msgstr "_Afegeix membres" #: src/configure/cluster-config.glade.h:119 msgid "_Bulk Load NFS" msgstr "_Càrrega massiva NFS" #: src/configure/cluster-config.glade.h:122 msgid "_Daemon Properties" msgstr "Propietats _del dimoni" #: src/configure/cluster-config.glade.h:123 msgid "_Delete" msgstr "_Suprimeix" #: src/configure/cluster-config.glade.h:124 msgid "_Delete Member" msgstr "_Suprimeix el membre" # Projecte_Gnome_2.2 [libgnomeui.gnome-2-0.ca.po] #: src/configure/cluster-config.glade.h:125 msgid "_New" msgstr "_Nou" # Projecte_Gnome_2.2 [nautilus.gnome-2-0.ca.po] #: src/configure/cluster-config.glade.h:126 msgid "_Properties" msgstr "_Propietats" #: src/configure/cluster-config.glade.h:127 msgid "_Shared State" msgstr "E_stat compartit" #: src/configure/cluster-config.glade.h:128 msgid "clulockd" msgstr "clulockd" #: src/configure/cluster-config.glade.h:129 msgid "clumembd" msgstr "clumembd" #: src/configure/cluster-config.glade.h:130 msgid "cluquorumd" msgstr "cluquorumd" #: src/configure/cluster-config.glade.h:131 msgid "clurmtabd" msgstr "clurmtabd" #: src/configure/cluster-config.glade.h:132 msgid "clusvcmgrd" msgstr "clusvcmgrd" #: src/configure/cluster-config.glade.h:133 msgid "" "redhat-config-cluster:\n" "\n" "Do you want to save your changes?\n" msgstr "" "redhat-config-cluster:\n" "\n" "Voleu desar els canvis?\n" #: src/configure/cluster-config.glade.h:137 msgid "" "redhat-config-cluster:\n" "\n" "These NFS exports were not loaded\n" "because of errors:" msgstr "" "redhat-config-cluster:\n" "\n" "No s'ha pogut carregar les exportacions\n" "NFS degut als errors:" #. !/usr/bin/python #. ## 9/8/2003 1. changed loglevel default from 4(Warning) #. ## to 5(Notice) #. ## First, if test_ip is a DNS name, convert it to dotted quad ### #. ## Second, run through all the members and see if the member #. ## name matches the test_ip. #: src/configure/clusterpkg/cluquorumd_module.py:59 #, python-format msgid "Tiebreaker IP Address already exists in cluster as member '%s'" msgstr "La desemparada direcció IP encara existeix en el cluster com el membre '%s'" #tiebreaker desemparada #. ## Next, run through all the service ip addresses and see #. ## if any of those match the test_ip. #: src/configure/clusterpkg/cluquorumd_module.py:76 #, python-format msgid "" "Tiebreaker IP Address already exists in cluster as service ip address '%s'" msgstr "La desemparada direcció IP ja existeix en el cluster com a direcció ip de servei '%s'" #. ## Next, make sure test_ip is NOT localhost ### #. ## Split dotted quad on the period. ### #: src/configure/clusterpkg/cluquorumd_module.py:82 msgid "Tiebreaker IP Address cannot start with '127' (localhost)" msgstr "La desemparada direcció IP no pot començar amb '127' (direcció local)" #. ## test_ip didn't match any member names nor any service ips ### #. ################################################################### #. NOTE: In 'validate', WARNING errors must come *Last*, after all #. FATAL errors. This is because the command line tool will #. override WARNING's in favor of doing the add or update, #. whereas the GUI will present the WARNING in a popup dialog. #. Since WARNINGs and ERROR's are 'raise'd, editing stops at #. that point. So for the command line, we want to be sure #. that all FATAL checks have already been done, so that if a #. WARNING is raised, it can be safely overridden sinced we #. know that only WARNING checks remain. #. ################################################################### #. print "----> cluquroumd validate NOW!<-----" #. print " self.action = %s" % self.action #. print " options = %s" % options #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## 'genericOptionChecks' will raise an error if either the data #. ## doesn't match the datatype(str or int), or the option is #. ## not in the list of valid options for this class. #. print "cluquorumd tiebreaker_ip = [%s]" % tiebreaker_ip #: src/configure/clusterpkg/cluquorumd_module.py:119 msgid "Tiebreaker IP Address not found on network" msgstr "La desemparada direcció IP no s'ha trobat a la xarxa" #. ## Tiebreaker IP Address *NOT* submitted ### #. ## set warning flag, and raise WARNING below ### #: src/configure/clusterpkg/cluquorumd_module.py:140 msgid "Tiebreaker IP Address is required for 4-node clusters" msgstr "La desemparada direcció IP és necessària pel cluster de 4 nodes" #. ################################### #. ## 3. Create the DOM child node ### #. ################################### #. ######################################################### #. ## 4. Create new ClusterEntity from that DOM child node, #. ## and set the "id" to the open slot that was found. #. ######################################################### #. # This program is free software; you can redistribute it and/or modify #. # it under the terms of the GNU General Public License as published by #. # the Free Software Foundation; either version 2 of the License, or #. # (at your option) any later version. #. # This program is distributed in the hope that it will be useful, #. # but WITHOUT ANY WARRANTY; without even the implied warranty of #. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #. # GNU General Public License for more details. #. # You should have received a copy of the GNU General Public License #. # along with this program; if not, write to the Free Software #. # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #. Import all subpackages of our netconfpkg directory. This code is a real #. dirty hack but does the job(tm). It basically finds all .py files in the #. package directory and imports from all found files (except __init__.py that #. is) ;). Nice for plugin mechanism. #. !/usr/bin/python #. from clusterpkg.clupowerd_module import clupowerd #. for copyfile #. for rename #. import clusterpkg.clupowerd_module #. CLUPOWERD_INFO = clusterpkg.clupowerd_module.MY_INFO #. ######################################################################### #. cluconfig: This class inherits from ClusterList so when 'cluconfig' #. or 'redhat-config-cluster' runs for the 1st time #. (/etc/cluster.xml doesn't exist), class 'cluconfig' #. can call ClusterList's 'append_child' method to create #. nodes clumembd, clupowerd, cluquorumd, clurmtabd, #. clusvcmgrd, clulockd, cluster, which make up the minimum #. skeleton of /etc/cluster.xml. #. ######################################################################### #. #. ## Called when 2 cluconfig objects are compared ### #. print "cluconfig __cmp__: self =", self #. print "cluconfig __cmp__: other =", other #. print "cluconfig __cmp__: rc =", integer_rc #. in destructor __del__, don't release since #. didn't get lock. #. ## If parse passes(cluster.xml exists), then call #. ## ClusterList constructor. In this situation, we #. ## won't really be using cluconfig as a ClusterList #. ## object - it will be used below when the cluster.xml #. ## file doesn't exist, since ClusterList objects can #. ## call "add_child". #. ## /etc/cluster.xml file does *NOT* exist - create one ### #. ## now create the 'root' element - named 'cluconfig' ### #. self.add_clupowerd() #. ## Now that /etc/cluster.xml has been created, generate #. ## an authentication key - tag 'cluster' option 'key'. #. ## this is the destructor ### #. print "cluconfig __del__ TOP!" #. print " release lock now!" #. ## First, create a new 'sharedstate' entity #. ## Now, remove the "id" attribute that "add_child" created. #. ## We don't want this since there's only 1 sharedstate node - "id"s #. ## exist on nodes that can have siblings. #. ## First, create a new 'clumembd' entity #. ## Now, remove the "id" attribute that "add_child" created. #. ## We don't want this since there's only 1 clumembd node - "id"s #. ## exist on nodes that can have siblings. #. def add_clupowerd(self, cmdline_args=None): #. entity = ClusterList.add_child(self, CLUPOWERD_INFO) #. clupowerd_entity = clupowerd(entity.node) #. clupowerd_entity.add_options(cmdline_args) #. clupowerd_entity.node.removeAttribute("id") #. return clupowerd_entity #. ######################################################################## #. def getclupowerd (self): #. return clupowerd(self.dom.getElementsByTagName("clupowerd")[0]) #. ## 1. Create .tmp file with updated info. #. ## 2. Now that .tmp has been created successfully, backup #. ## the current config file before we overwrite it. #. ## 3. Move the temp file containing the updated info into place. #. make sure link is not removed #. ## 4. If cluster is running, then 'Reload' so cluster re-reads #. ## its updated config file. #. ## Cluster *IS* running ### #. print " cluster is *NOT* running" #. raises exception if not link #. path is not a link #. print "cluconfig" #. self.getclupowerd().out() #. !/usr/bin/python #. from xml.dom import minidom #. ## 9/8/2003 1. changed loglevel default from 4(Warning) #. ## to 5(Notice) #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## 'genericOptionChecks' will raise an error if either the data #. ## doesn't match the datatype(str or int), or the option is #. ## not in the list of valid options for this class. #: src/configure/clusterpkg/cluquorumd_module.py:156 #: src/configure/clusterpkg/clupowerd_module.py:52 #: src/configure/clusterpkg/clurmtabd_module.py:62 #: src/configure/clusterpkg/clusvcmgrd_module.py:52 #: src/configure/clusterpkg/clulockd_module.py:51 #: src/configure/clusterpkg/clumembd_module.py:163 msgid "" "Log Level must be a number from 0 to 7:\n" " 0 - EMERG\n" " 1 - ALERT\n" " 2 - CRIT\n" " 3 - ERR\n" " 4 - WARNING (DEFAULT)\n" " 5 - NOTICE\n" " 6 - INFO\n" " 7 - DEBUG" msgstr "" "El nivell de registre és un nombre del 0 al 7:\n" " 0 - Emerg\n" " 1 - Alert\n" " 2 - Crit\n" " 3 - Err\n" " 4 - Avís (predeterminat)\n" " 5 - Atenció\n" " 6 - Info\n" " 7 - Depura" #: src/configure/clusterpkg/cluquorumd_module.py:182 msgid "Ping Interval must be a number from 1 to 10" msgstr "L'intèrval del ping ha de ser un nombre entre 1 i 10" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #: src/configure/clusterpkg/cluquorumd_module.py:191 msgid "Tiebreaker IP Address is recommended for 2-node clusters" msgstr "La desemparada direcció IP és recomanada pel cluster de 2 nodes" #. !/usr/bin/python #. ## for deepcopy #. Default is "modify" - when parent does #. add_child, add_child will change this #. setting for the child to "add" after the #. entity is created. #. ## node will only be "None" if instantiating an object just #. ## to get at the objects MY_INFO - this is for convenience, #. ## and is probably only done in the abc_module.py's where the #. ## abc_module needs to get its children's MY_INFO. #. ## Only give attributes "default" values if there are *NO* attributes #. ## yet. That is, give this node default values if this node is *new*. #. #################################################################### #. options is a dictionary with 2 levels: #. 1st level: option name(like "loglevel") #. 2nd level: a dictionary containing #. 'datatype' with value either "str"(string) or "int"(integer) #. 'order' with a number representing the sequential order #. that options should be printed out. #. #################################################################### #: src/configure/clusterpkg/ClusterEntity.py:58 msgid "Illegal extra options were submitted." msgstr "S'han enviat opcions addicionals no permeses." #. ## From attributes in myoptions, construct a dict with those same #. ## attributes, but with a "--" prepended, so that each one is a #. ## valid getopt argument. #. ## Dictionary "options_submitted" now contains all the submitted options. #. ## setOptions only called by "modify"(bottom of this class), and #. ## "modify" is only called by redhat-config-cluster-cmd command line tool. #. ## 'validate' will raise an exception if errors found ### #. ## error must be FATAL ### #: src/configure/clusterpkg/ClusterEntity.py:104 #, python-format msgid "Option \"%s\" value must be \"yes\" or \"no\"" msgstr "El valor de l'opció \"%s\" ha de ser \"si\" o \"no\"" #. ## will cause exception if val is a string ### #: src/configure/clusterpkg/ClusterEntity.py:112 #, python-format msgid "Bad value \"%s\" for option \"%s\"" msgstr "El valor \"%s\" és incorrecte per a l'opció \"%s\"" #. str - int to str #. value == "" when getAttribute didn't find the option #: src/configure/clusterpkg/ClusterEntity.py:116 #: src/configure/clusterpkg/ClusterEntity.py:131 #, python-format msgid "%s bad option" msgstr "l'opció %s és incorrecta" #. ## if element has attributes, print those attributes out in order ### #. ## If option is not in xml(dom), then continue to next option. #. ## "id"s should not be exposed to users, so don't print id's. #. ## args will be 'None' coming from GUI add #. ## only call setOptions if there are options to set ### #. !/usr/bin/python #. ## child_being_validated was passed in - user wants to #. ## find a child whose options match all the search_options #. ## passed in, and where the child found is #. ## *NOT* child_being_validated. #. ## Match not found - raise error ### #: src/configure/clusterpkg/ClusterList.py:50 #, python-format msgid "%s with %s does not exist" msgstr "no existeix %s amb %s" #. def delete_child(self, child_info, args, val, key="name"): #. ## args will come in as "None" from Gui, but will be a dictionary #. ## if from cluconfig command line. #. ######################################################################## #. ## add: 1. calls do_getopt (process command line options) #. ## 2. calls add_child_entity to create a new child ClusterEntity #. ## 3. for that new child ClusterEntity, call setOptions #. ## to set its options. #. ######################################################################## #. ################################################### #. ## 1. Build list of "id"s for existing children ### #. ################################################### #. ####################################################### #. ## 2. Find the 1st open "id" slot for the new child ### #. ####################################################### #: src/configure/clusterpkg/ClusterList.py:106 #, python-format msgid "ERROR: %ss add_child_entity - couldn't find slot for new id." msgstr "" "S'ha produït un error: %ss add_child_entity. No s'ha pogut trobar cap ranura " "per al nou id." #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. None #. # This program is free software; you can redistribute it and/or modify #. # it under the terms of the GNU General Public License as published by #. # the Free Software Foundation; either version 2 of the License, or #. # (at your option) any later version. #. # This program is distributed in the hope that it will be useful, #. # but WITHOUT ANY WARRANTY; without even the implied warranty of #. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #. # GNU General Public License for more details. #. # You should have received a copy of the GNU General Public License #. # along with this program; if not, write to the Free Software #. # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #. ## Figure out how many members have been defined ### #. errno, errstr = e #. host is *NOT* in DNS #. host *IS* in DNS #. cmd = 'ping -c 1 -w 1 %s 2>/dev/null' % ip #. rc = os.system(cmd) #. if rc == 0: #. return TRUE # ping successful #. else: #. return FALSE #. ping successful #. ## Cluster is *NOT* running ### #. ## Cluster *IS* running ### #. stateTable: 0=Uninitialized #. 1=Running #. 2=Stopped #. 3=Disabled #. 4=Pending #. 5=Failed #. 6=Unknown #. ## id doesn't exist yet - may have been added by gui and #. ## config not saved yet. #: src/configure/clusterpkg/cluster_functions.py:154 msgid "" "Raw devices have NOT been created yet.\n" "\n" "Follow the instructions in the manual\n" "for 'Creating Raw Devices', and then\n" "try again." msgstr "Els dispositius primitius no s'han creat encara.\n" "Segueix les instruccions del manual\n" "per 'crear els dispositius primitius', i prova-ho un altre cop." #: src/configure/clusterpkg/cluster_functions.py:161 #, python-format msgid "" "Shared Storage could *NOT* be initialized!\n" "\n" "%s" msgstr "" "No s'ha pogut inicialitzar el magatzem compartit\n" "\n" "%s" #: src/configure/clusterpkg/cluster_functions.py:167 #, python-format msgid "" "Error: Shared Storage could *NOT* be initialized!\n" "\n" "%s" msgstr "" "S'ha produït un error: no s'ha pogut inicialitzar el magatzem compartit\n" "\n" "%s" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. None #. !/usr/bin/python #. ## 6/17/2003: Lon asked to have 'servertech' taken out of #. ## supported network powerswitch types. #. ################################################################## #. 4/15/2003 HM - "port" is valid for both 'Serial' and 'Network' #. powercontrollers. It is required for 'Serial' #. ################################################################## #. ## "device" is valid for "serial" type's #. ## "ipaddress" and "port" are valid for "network" type's #. ########################################################################### #. ################################################################### #. NOTE: in __validate_serial and __validate_network, #. #. WARNING errors must come *Last*, after all FATAL errors. #. #. This is because the command line tool will override WARNING's #. in favor of doing the add or update, whereas the GUI will #. present the WARNING in a popup dialog. Since WARNINGs and #. ERROR's are 'raise'd, editing stops at that point. So for #. the command line, we want to be sure that all FATAL checks #. have already been done, so that if a WARNING is raised, it #. can be safely overridden sinced we know that only WARNING #. checks remain. #. ################################################################### #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## if any 'Network' options were submitted, then error ### #. ## From GUI, network and serial options will all be submitted, but #. ## network options should have null("") value. #: src/configure/clusterpkg/member_powercontroller_module.py:128 msgid "IP Address is an invalid option for a Serial powercontroller" msgstr "L'adreça IP és una opció invàlida per a un controlador d'energia sèrie" #. ## Check for *required* fields on "add" ### #: src/configure/clusterpkg/member_powercontroller_module.py:136 #: src/configure/clusterpkg/member_powercontroller_module.py:162 msgid "Device is required for a Serial powercontroller" msgstr "Es requereix un dispositiu per a un controlador d'energia sèrie" #. ## "device" *WAS* submitted - when "device" submitted, "port" #. ## is required. #: src/configure/clusterpkg/member_powercontroller_module.py:145 #: src/configure/clusterpkg/member_powercontroller_module.py:173 msgid "Port is required for a Serial powercontroller" msgstr "Es requereix un port per a un controlador d'energia sèrie" #. ## Validate 'Serial' options submitted ### #. ## Validate Device ### #: src/configure/clusterpkg/member_powercontroller_module.py:185 #, python-format msgid "Serial Device file \"%s\" does not exist" msgstr "No existeix el fitxer de dispositiu sèrie \"%s\"" #: src/configure/clusterpkg/member_powercontroller_module.py:189 msgid "Serial Device file must be a character special device file" msgstr "" "El fitxer de dispositiu sèrie ha de ser un fitxer de dispositiu de caràcter " "especial" #: src/configure/clusterpkg/member_powercontroller_module.py:193 msgid "Serial Device must begin with /dev/ttyS" msgstr "El dispositiu sèrie ha de començar amb /dev/ttyS" #. ## Validate Port ### #. ## Check for Serial 'device' duplicates within the parent member ### #. ## get_serial_powercontroller will raise exception if not found #: src/configure/clusterpkg/member_powercontroller_module.py:220 msgid "Serial powercontroller Device already exists in member" msgstr "El dispositiu controlador d'energia sèrie ja existeix en el membre" #. ## Can only allow 'Serial' powercontroller if there are 2 members #. ## in the cluster - if >2 members, then 'Serial' invalid - must #. ## use 'Network' powercontroller. #: src/configure/clusterpkg/member_powercontroller_module.py:233 msgid "" "Serial powercontroller may not be used when cluster contains more than 2 " "members" msgstr "" "El controlador d'energia sèrie no es pot fer servir quan el cluster conté " "més de 2 membres" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. No WARNINGS for ___validate_serial #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## if any 'Serial' options were submitted, then error ### #. ## From GUI, network and serial options will all be submitted, but #. ## serial options should have null("") value. #: src/configure/clusterpkg/member_powercontroller_module.py:256 msgid "Device is an invalid option for a Network powercontroller" msgstr "" "El dispositiu és una opció invàlida per al controlador d'energia de xarxa" #. ## Check for *required* fields on "add" ### #: src/configure/clusterpkg/member_powercontroller_module.py:264 #: src/configure/clusterpkg/member_powercontroller_module.py:295 msgid "IP Address is required for a Network powercontroller" msgstr "Es requereix una adreça IP per a un controlador d'energia de xarxa" #: src/configure/clusterpkg/member_powercontroller_module.py:269 #: src/configure/clusterpkg/member_powercontroller_module.py:300 msgid "Port is required for a Network powercontroller" msgstr "Es requereix un port pel controlador d'energia de xarxa" #. ## Check for Network 'ipaddress/port' duplicates within the #. ## parent member. #. ## get_network_powercontroller will raise exception if not found #: src/configure/clusterpkg/member_powercontroller_module.py:322 msgid "Network powercontroller IP Address/Port already exists in member" msgstr "Existeix una adreça o port IP del controlador d'energia de xarxa" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. ## Validate 'Network' options submitted ### #: src/configure/clusterpkg/member_powercontroller_module.py:334 msgid "Powercontroller IP Address not found on network" msgstr "No s'ha trobat l'adreça IP del controlador d'energia a la xarxa" #. ########################################################## #. validate: will be called by outside apps. validate is #. reponsible for validating all powercontroller #. options. #. ########################################################## #. ## Make sure option 'type' is submitted #: src/configure/clusterpkg/member_powercontroller_module.py:348 msgid "Type is required when adding a powercontroller" msgstr "Es necessita el tipus quan s'afegeixi un controlador d'energia" #. ## Must be "modify" #: src/configure/clusterpkg/member_powercontroller_module.py:363 #: src/configure/clusterpkg/member_powercontroller_module.py:386 msgid "Invalid Powercontroller Type" msgstr "Tipus de controlador d'energia invàlid" #. # This program is free software; you can redistribute it and/or modify #. # it under the terms of the GNU General Public License as published by #. # the Free Software Foundation; either version 2 of the License, or #. # (at your option) any later version. #. # This program is distributed in the hope that it will be useful, #. # but WITHOUT ANY WARRANTY; without even the implied warranty of #. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #. # GNU General Public License for more details. #. # You should have received a copy of the GNU General Public License #. # along with this program; if not, write to the Free Software #. # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #. first some defines #. !/usr/bin/python #. "alias_ip" : { "datatype" : "str", #. "order" : 1 }, #. "alias_ip=", #. ## end MY_INFO #. ################################################################### #. NOTE: In 'validate', WARNING errors must come *Last*, after all #. FATAL errors. This is because the command line tool will #. override WARNING's in favor of doing the add or update, #. whereas the GUI will present the WARNING in a popup dialog. #. Since WARNINGs and ERROR's are 'raise'd, editing stops at #. that point. So for the command line, we want to be sure #. that all FATAL checks have already been done, so that if a #. WARNING is raised, it can be safely overridden sinced we #. know that only WARNING checks remain. #. ################################################################### #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## Check for *required* fields on "add" ### #: src/configure/clusterpkg/cluster_module.py:59 msgid "Cluster Name is required" msgstr "Es necessita un nom pel cluster" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. None #. !/usr/bin/python #. ################################################################### #. NOTE: In 'validate', WARNING errors must come *Last*, after all #. FATAL errors. This is because the command line tool will #. override WARNING's in favor of doing the add or update, #. whereas the GUI will present the WARNING in a popup dialog. #. Since WARNINGs and ERROR's are 'raise'd, editing stops at #. that point. So for the command line, we want to be sure #. that all FATAL checks have already been done, so that if a #. WARNING is raised, it can be safely overridden sinced we #. know that only WARNING checks remain. #. ################################################################### #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## Check for *required* fields on "add" ### #. ## Validate "name" #. ## This is a "modify". #: src/configure/clusterpkg/device_mount_module.py:106 msgid "Device Mountpoint is required" msgstr "Es necessita un punt de muntatge pel dispositiu" #. ## 'genericOptionChecks' will raise an error if either the data #. ## doesn't match the datatype(str or int), or the option is #. ## not in the list of valid options for this class. #. msg = _("Mount Point does not exist") #. raise OptionError("FATAL", msg, "mountpoint", mountpoint) #. if not stat.S_ISDIR(mode): #. msg = _("Mount Point must be a directory") #. raise OptionError("FATAL", msg, "mountpoint", mountpoint) #: src/configure/clusterpkg/device_mount_module.py:131 msgid "Device Mountpoint already exists" msgstr "Ja existeix el punt de muntatge pel dispositiu" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #: src/configure/clusterpkg/device_mount_module.py:140 #: src/configure/nfsExportDruid.py:447 src/configure/smbShareDruid.py:367 #, python-format msgid "" "Device Mountpoint '%s' does not exist, but will be created when the service " "is started." msgstr "" "No existeix el punt de muntatge pel dispositiu '%s', però es crearà quan " "s'iniciï el servei." #. !/usr/bin/python #. ## end MY_INFO #. ################################################################### #. NOTE: In 'validate', WARNING errors must come *Last*, after all #. FATAL errors. This is because the command line tool will #. override WARNING's in favor of doing the add or update, #. whereas the GUI will present the WARNING in a popup dialog. #. Since WARNINGs and ERROR's are 'raise'd, editing stops at #. that point. So for the command line, we want to be sure #. that all FATAL checks have already been done, so that if a #. WARNING is raised, it can be safely overridden sinced we #. know that only WARNING checks remain. #. ################################################################### #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## Check for *required* fields on "add" ### #. ## 1st, for any options that were not submitted, see if a #. ## "default" was defined above. If there was, make the #. ## option value equal to the default. #. ## This option was not submitted - assign the default if #. ## there is one. #: src/configure/clusterpkg/member_module.py:99 msgid "Member Name is required" msgstr "Es necessita un nom de membre" #. ## 'genericOptionChecks' will raise an error if either the data #. ## doesn't match the datatype(str or int), or the option is #. ## not in the list of valid options for this class. #. ## Validate submitted options ### #: src/configure/clusterpkg/member_module.py:114 #, python-format msgid "Member '%s' not found in DNS" msgstr "No s'ha trobat el membre '%s' en el DNS" #. ## 'name' is key - check for another member with same name #: src/configure/clusterpkg/member_module.py:121 #, python-format msgid "Member '%s' already exists in cluster" msgstr "El membre '%s' existeix en el cluster" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #: src/configure/clusterpkg/member_module.py:133 msgid "Member is not on same network as this host" msgstr "El membre no està en la mateixa xarxa que aquest ordinador" #. ## END WARNINGS ### #. ## args will come in as "None" from Gui, but will be a dictionary #. ## if from cluconfig command line. #. ## Must be deleting a 'Serial' Powercontroller since that has only #. ## one key field(device). #. ## Must be deleting a 'Network' Powercontroller since that has #. ## two key fields (ipaddress,port). #. ## First, get a list of failoverdomainnodes that refer to the #. ## *old* member name. To do that, we need to #. ## 1. get ownerDocument, and user that to #. ## 2. get failoverdomains node, then #. ## 3. get the list of failoverdomains #. ## 4. for each failoverdomain, scan through the list #. ## of failoverdomainnodes - if a failoverdomainnode #. ## refers to the "old" member "name", then change #. ## that to refer to the new member name. #. node(failoverdomainnode) match *NOT* found in #. this domain - continue to next domain #. ## To get here, match *WAS* found - change node's name from #. ## old_name to new_name. #. ###################################################### #. Override the ClusterEntity 'set' function so that #. if a member 'name' is being changed, we can ensure #. that all failover domain nodes referring to the #. "old" member name get changed to refer to the #. "new" member name. #. ###################################################### #. !/usr/bin/python #. ## end self.MY_INFO #. ################################################################### #. NOTE: In 'validate', WARNING errors must come *Last*, after all #. FATAL errors. This is because the command line tool will #. override WARNING's in favor of doing the add or update, #. whereas the GUI will present the WARNING in a popup dialog. #. Since WARNINGs and ERROR's are 'raise'd, editing stops at #. that point. So for the command line, we want to be sure #. that all FATAL checks have already been done, so that if a #. WARNING is raised, it can be safely overridden sinced we #. know that only WARNING checks remain. #. ################################################################### #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## Check for *required* fields on "add" ### #. ## Validate "name" #: src/configure/clusterpkg/nfsexport_client_module.py:87 msgid "NFS Export Client Name is required" msgstr "Es necessita el nom del client de l'exportació d'NFS" #. ## Must be 'modify' ### #: src/configure/clusterpkg/nfsexport_client_module.py:99 #: src/configure/clusterpkg/service_device_module.py:159 #: src/configure/clusterpkg/nfsexport_module.py:136 #: src/configure/clusterpkg/service_module.py:112 #: src/configure/nfsExportDruid.py:311 src/configure/smbShareDruid.py:238 msgid "Service must be disabled before updates can be made" msgstr "El servei s'ha d'inhabilitar abans de poder fer actualitzacions" #. ## 'genericOptionChecks' will raise an error if either the data #. ## doesn't match the datatype(str or int), or the option is #. ## not in the list of valid options for this class. #. ## Validate submitted options ### #. ## Validate "name" #: src/configure/clusterpkg/nfsexport_client_module.py:114 msgid "NFS Export Client Name already exists" msgstr "Ja existeix el nom del client de l'exportació d'NFS" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. No warnings #. !/usr/bin/python #. ################################################################## #. get_list: The list returned by ClusterList.get_list contains #. ClusterEntity's - It's not sufficient for each to be a #. ClusterEntity since ClusterEntity's don't have access to the #. "member" functions. Each member in the list returned by #. this "get_list" must be a *member* entity in order to have #. access to the "member" functions. #. ################################################################## #. ## "member_being_validated" is either the member being modified, or #. ## the new member just added. We want to be sure his key info doesn't #. ## duplicate an existing member. #. ## Search all the nodes in all the failover domains for a name that #. ## matches the name of the member passed in. #: src/configure/clusterpkg/members_module.py:73 #: src/configure/clusterpkg/members_module.py:84 #, python-format msgid "" "Member delete not allowed - Member Name '%s' is specified by at least one " "failover domain" msgstr "No es permés l'eliminació del membre - El nom del membre '%s' és especificat almenys per un domini d'emergència" #: src/configure/clusterpkg/service_device_module.py:171 msgid "Device Name is required" msgstr "Es necessita el nom del domini" #. ## 'genericOptionChecks' will raise an error if either the data #. ## doesn't match the datatype(str or int), or the option is #. ## not in the list of valid options for this class. #. ## Validate submitted options ### #. ## Validate "name" #: src/configure/clusterpkg/service_device_module.py:187 #: src/configure/nfsExportDruid.py:427 src/configure/smbShareDruid.py:353 #, python-format msgid "Device Special File \"%s\" does not exist" msgstr "No existeix el nom del dispositiu especial \"%s\"" #: src/configure/clusterpkg/service_device_module.py:191 #: src/configure/nfsExportDruid.py:430 src/configure/smbShareDruid.py:356 msgid "Device Special File must be a block special device file" msgstr "" "El fitxer de dispositiu especial ha de ser un fitxer de dispositiu de blocs " "especial" #: src/configure/clusterpkg/service_device_module.py:196 msgid "Device Name already exists in cluster" msgstr "El nom del dispositiu ja existeix en el cluster" #. ## Validate "sharename" ### #: src/configure/clusterpkg/service_device_module.py:205 msgid "" "The Service already contains a device with a Samba Share Name specified - " "more than one Samba Share Name within a service is not allowed" msgstr "" "El servei conté un dispositiu amb un nom de recurs compartit Samba ja " "especificat. No es permet que hi hagi més d'un nom de recurs compartit Samba " "en un servei" #: src/configure/clusterpkg/service_device_module.py:211 msgid "Samba Share Name may not contain spaces" msgstr "El nom de recurs compartit Samba no pot contenir espais" #. return to druid #. ## Verify that sharename isn't a dup of existing ### #: src/configure/clusterpkg/service_device_module.py:217 #: src/configure/smbShareDruid.py:416 msgid "Samba Share Name already exists in cluster" msgstr "El nom de recurs compartit Samba ja existeix en el cluster" #: src/configure/clusterpkg/service_device_module.py:223 msgid "" "A Service IP Address must be entered before specifying a Samba Share Name, " "since the samba share configuration file to be created requires it" msgstr "" "S'ha d'introduir una adreça de servei IP abans d'especificar un nom de " "recurs compartit Samba, ja que la compartició Samba necessita el fitxer de configuració del " "recurs" #. ## Samba Share Name *has* been specified - verify that #. ## a 'mountpoint' was either specified, or exists in the #. ## device 'mount'(__no_mountpoint). #. ## no mountpoint specified - check existing 'mount' tag ### #: src/configure/clusterpkg/service_device_module.py:234 msgid "" "A Device Mountpoint must be entered before specifying a Samba Share Name, " "since the samba share configuration file to be created requires it" msgstr "" "S'ha d'introduir un punt de muntatge de dispositiu abans d'especificar un " "nom de recurs compartit Samba, ja que la compartició Samba necessita el fitxer de configuració " "del recurs" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. No warnings #. ## "nfsexport_being_validated" is either the nfsexport being modified, or #. ## the new nfsexport just added. We want to be sure his key info doesn't #. ## duplicate an existing nfsexport. #. #################################################################### #. #################################################################### #. !/usr/bin/python #. ## No need to validate that there are no dups for this nfsexport #. ## within the whole cluster (all services and devices), since #. ## the nfsexport directory must be underneath the device mountpoint, #. ## and since the device mountpoint must be unique within the whole #. ## cluster, then there is no way that there can be duplicate #. ## nfsexport directories in 2 different services or 2 different #. ## devices. The only dup an nfsexport could have is within the #. ## same device, so keep the __dup_found check above. #. def __dup_found_in_cluster(self, option, value): #. this_nfsexport_id = self.get("id") #. this_device_id = self.parent.get("id") #. this_service_id = self.parent.parent.get("id") #. #. ownerDocument = self.node.ownerDocument #. services_node = ownerDocument.getElementsByTagName("services")[0] #. from clusterpkg.services_module import services #. services_entity = services(services_node) #. for service in services_entity.get_list(): #. service_id = service.get("id") #. devices = service.get_devices() #. for device in devices: #. device_id = device.get("id") #. nfsexports = device.get_nfsexports() #. for nfsexport in nfsexports: #. nfsexport_id = nfsexport.get("id") #. if nfsexport.get(option) == value #. and #. (nfsexport_id != this_nfsexport_id or #. device_id != this_device_id or #. service_id != this_service_id): #. return TRUE #. return FALSE #. mountpoint not defined - return error #. ################################################################### #. NOTE: In 'validate', WARNING errors must come *Last*, after all #. FATAL errors. This is because the command line tool will #. override WARNING's in favor of doing the add or update, #. whereas the GUI will present the WARNING in a popup dialog. #. Since WARNINGs and ERROR's are 'raise'd, editing stops at #. that point. So for the command line, we want to be sure #. that all FATAL checks have already been done, so that if a #. WARNING is raised, it can be safely overridden sinced we #. know that only WARNING checks remain. #. ################################################################### #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## Check for *required* fields on "add" ### #. ## Validate "name" #: src/configure/clusterpkg/nfsexport_module.py:125 msgid "NFS Export Directory Name is required" msgstr "Es necessita el nom del directori de l'exportació NFS" #. ## 'genericOptionChecks' will raise an error if either the data #. ## doesn't match the datatype(str or int), or the option is #. ## not in the list of valid options for this class. #. ## Validate submitted options ### #. ## Validate "name" #: src/configure/clusterpkg/nfsexport_module.py:151 msgid "NFS Export Directory Name must start with a slash '/'" msgstr "El nom del directori d'exportació NFS ha de començar amb una barra '/'" #. msg = _("NFS Export Directory Name \"%s\" does not exist") % name #. raise OptionError("FATAL", msg, "name", name) #: src/configure/clusterpkg/nfsexport_module.py:162 msgid "NFS Export Directory Name must be a directory" msgstr "El nom del directori d'exportació NFS ha de ser un directori" #: src/configure/clusterpkg/nfsexport_module.py:166 msgid "NFS Export Directory Name already exists in device" msgstr "El nom del directori d'exportació NFS ja existeix en el dispositiu" #: src/configure/clusterpkg/nfsexport_module.py:169 msgid "NFS Export Directory Name must be underneath the device mount point" msgstr "" "El nom del directori d'exportació NFS ha d'estar per sota del punt de " "muntatge" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. No warnings #. ## "client_being_validated" is either the client being modified, or #. ## the new client just added. We want to be sure its key info doesn't #. ## duplicate an existing client. #. !/usr/bin/python #. ################################################################### #. NOTE: In 'validate', WARNING errors must come *Last*, after all #. FATAL errors. This is because the command line tool will #. override WARNING's in favor of doing the add or update, #. whereas the GUI will present the WARNING in a popup dialog. #. Since WARNINGs and ERROR's are 'raise'd, editing stops at #. that point. So for the command line, we want to be sure #. that all FATAL checks have already been done, so that if a #. WARNING is raised, it can be safely overridden sinced we #. know that only WARNING checks remain. #. ################################################################### #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## Check for *required* fields on "add" ### #: src/configure/clusterpkg/service_module.py:103 msgid "Service Name is required" msgstr "Es necessita un nom de servei" #. ## 'genericOptionChecks' will raise an error if either the data #. ## doesn't match the datatype(str or int), or the option is #. ## not in the list of valid options for this class. #. ## Validate submitted options ### #. ## Validate "name" #. ## 'name' is key - check for another service with same name #: src/configure/clusterpkg/service_module.py:128 msgid "Service Name already exists" msgstr "Ja existeix el nom de servei" #. ## Verify that Failover Domain Name specified for this service #. ## exists as a current Failover Domain name in the cluster. #: src/configure/clusterpkg/service_module.py:145 #, python-format msgid "Failover Domain Name '%s' not found in cluster" msgstr "El nom del domini del sistema d'emergència '%s' no s'ha trobat al cluster" #. ## Validate "userscript" #: src/configure/clusterpkg/service_module.py:155 msgid "User Script does not exist" msgstr "No existeix el fitxer de seqüència de l'usuari" #: src/configure/clusterpkg/service_module.py:158 msgid "User Script must be a regular file" msgstr "El fitxer de seqüència ha de ser un fitxer de dades" #: src/configure/clusterpkg/service_module.py:163 msgid "User Script is not executable" msgstr "No es pot executar el fitxer de seqüència de l'usuari" #: src/configure/clusterpkg/service_module.py:169 msgid "Must define cluster members before a service can be added" msgstr "S'ha de definir els membres del cluster abans d'afegir-hi un servei" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. No warnings #. def device_found(self, device_being_validated, val, key="name"): #. ## "device_being_validated" is either the device being modified, or #. ## the new device just added. We want to be sure his key info doesn't #. ## duplicate an existing device. #. ## 1st, create "device" ### #. ## Next, create "mount"(only 1 per device) DOM node ### #. # # # # # # # # # # # # # # # # # # # # # # # # # # #. return an empty list #. ## if 'service_ipaddresses' tag doesn't yet exist, create it ### #. ## Adding first service, and 'service_ipaddresses' tag doesn't #. ## exist yet, so create it now. #. # # # # # # # # # # # # # # # # # # # # # # # # # # #. ## Should only be 1 "service_ipaddresses" node for a service, but this #. ## handles the case when there is *no* "service_ipaddresses" node #. ## for this svc. #. !/usr/bin/python #. def __dup_found(self, key, value): #. "This finds duplicate ip addresses *within the service*" #. prev_value = self.get(key) #. if self.action == "add" or #. (self.action == "modify" and value != prev_value): #. service_ipaddresses_entity = self.parent #. search_options = {key : value} #. service_ipaddress_being_validated = self #. if service_ipaddresses_entity.service_ipaddress_found(search_options, service_ipaddress_being_validated): #. return TRUE #. return FALSE #. ################################################################### #. NOTE: In 'validate', WARNING errors must come *Last*, after all #. FATAL errors. This is because the command line tool will #. override WARNING's in favor of doing the add or update, #. whereas the GUI will present the WARNING in a popup dialog. #. Since WARNINGs and ERROR's are 'raise'd, editing stops at #. that point. So for the command line, we want to be sure #. that all FATAL checks have already been done, so that if a #. WARNING is raised, it can be safely overridden sinced we #. know that only WARNING checks remain. #. ################################################################### #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## Make sure service is stopped before allow user to add or update #. ## service ipaddress(es). #: src/configure/clusterpkg/service_ipaddress_module.py:114 msgid "" "Service must be disabled before you can add or update service ip addresses" msgstr "" "S'ha d'inhabilitar el servei abans que pogueu afegir o actualitzar les " "adreces de servei IP" #. ## Check for *required* fields on "add" ### #. ## Validate "ipaddress" #: src/configure/clusterpkg/service_ipaddress_module.py:123 msgid "IP Address is required" msgstr "Es necessita una adreça IP" #. ## 'genericOptionChecks' will raise an error if either the data #. ## doesn't match the datatype(str or int), or the option is #. ## not in the list of valid options for this class. #. ## Validate submitted options ### #. ## Validate "name" #. if self.__dup_found("ipaddress", ipaddress): #: src/configure/clusterpkg/service_ipaddress_module.py:139 msgid "IP Address already exists in cluster" msgstr "L'adreça IP ja existeix en el cluster" #: src/configure/clusterpkg/service_ipaddress_module.py:148 msgid "IP Address not found in DNS" msgstr "No s'ha trobat l'adreça IP en el DNS" #: src/configure/clusterpkg/service_ipaddress_module.py:160 msgid "Netmask is invalid" msgstr "La màscara de xarxa no és vàlida" #: src/configure/clusterpkg/service_ipaddress_module.py:171 msgid "Broadcast is invalid" msgstr "L'adreça broadcast no és vàlida" #: src/configure/clusterpkg/service_ipaddress_module.py:179 msgid "IP Address not on same network as this host" msgstr "" "L'adreça IP no es troba a la mateixa xarxa que aquest ordinador central" #: src/configure/clusterpkg/service_ipaddress_module.py:185 msgid "IP Address already in use on network" msgstr "Ja es fa servir aquesta adreça IP a la xarxa" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. #. !/usr/bin/python #. set to TRUE if you want to allow SFS #. ## DRIVERS key = shared state 'type' #. ## value = shared state 'driver' for that 'type' #. ## Use os.path.exists(value), or #. ## os.stat(value) - os.stat(value) will raise OSError if not a file. #. print "OSError - dir(e) = %s" % dir(e) #. print " OSError - e.args =", e.args #. print " OSError - e.errno = %s" % e.errno #. print " OSError - e.filename = %s" % e.filename #. print " OSError - e.strerror = %s" % e.strerror #: src/configure/clusterpkg/sharedstate_module.py:72 #, python-format msgid "Raw %s device does not exist" msgstr "El dispositiu %s primàri no existeix" #: src/configure/clusterpkg/sharedstate_module.py:76 #, python-format msgid "Raw %s device is not a character special file" msgstr "El dispositiu primàri %s no és un fitxer de caràcters especials" #: src/configure/clusterpkg/sharedstate_module.py:83 msgid "SFS Path does not exist" msgstr "El camí SFS no existeix" #: src/configure/clusterpkg/sharedstate_module.py:87 msgid "SFS Path must be a directory" msgstr "El camí SFS hauria de ser un directori" #. ########################################################################## #. ## if any 'sfs' options were submitted, then error ### #. ## From GUI, raw and sfs options will all be submitted, but #. ## sfs options should have null("") value. #: src/configure/clusterpkg/sharedstate_module.py:100 msgid "SFS Path is an invalid option for a Raw Shared State" msgstr "El camí sFS és una opció invàlida per un estat de compartició primitiu" #. ## validate 'raw' fields - and assign option to 'options' dictionary #. ## if option does NOT currently exist, and there IS a default value #: src/configure/clusterpkg/sharedstate_module.py:116 msgid "Raw Primary device is required for Raw Shared State" msgstr "El dispositiu primari primitiu és necessari pel estat compartit primitiu" #: src/configure/clusterpkg/sharedstate_module.py:127 msgid "Raw Shadow device is required for Raw Shared State" msgstr "El dispositiu de sombra primitiva és necessari per l'estat compartit primitiu" #. ## 'driver' was not submitted, and there was no existing #. ## 'driver', and there is a default, so assign the default #. ############################ #. validation between fields # #. ############################ #. ## rawprimary NOT submitted - see if that option already exists #. ## in the sharedstate tag #. ## rawprimary was not submitted, nor does it already exist #. ## in the sharedstate tag - error. #: src/configure/clusterpkg/sharedstate_module.py:151 msgid "Primary Quorum Partition is required" msgstr "La partició primaria quórum és necessària" #. ## rawshadow NOT submitted - see if that option already exists #. ## in the sharedstate tag #. ## rawshadow was not submitted, nor does it already exist #. ## in the sharedstate tag - error. #: src/configure/clusterpkg/sharedstate_module.py:164 msgid "Shadow Quorum Partition is required" msgstr "La partició de sombra quorum és necessària" #: src/configure/clusterpkg/sharedstate_module.py:170 msgid "" "Primary Quorum Partition must not be the same as the Shadow Quorum Partition" msgstr "La partició primària quórum no ha de ser la mateixa que la partició de sombra quórum" #. ## if any 'raw' options were submitted, then error ### #. ## From GUI, raw and sfs options will all be submitted, but #. ## raw options should have null("") value. #: src/configure/clusterpkg/sharedstate_module.py:182 msgid "Raw Primary Device is an invalid option for an SFS Shared State" msgstr "Dades sense processar en el primer dispositiu és una opció invàlida per un estat de fitxers compartits SFS" #: src/configure/clusterpkg/sharedstate_module.py:188 msgid "Raw Shadow Device is an invalid option for an SFS Shared State" msgstr "Dades sense processar en el dispositiu de sombra és una opció invàlida per un estat compartit SFS" #. ## #. ## sfspath is required to be present(existing or newly submitted) ### #. ## #: src/configure/clusterpkg/sharedstate_module.py:198 #: src/configure/clusterpkg/sharedstate_module.py:208 msgid "SFS Path is required" msgstr "El camí SFS és necessari" #. ########################################################################## #. ## Make sure option 'type' is submitted #: src/configure/clusterpkg/sharedstate_module.py:226 msgid "Type is required when adding Shared State" msgstr "Es necessita el tipus quan s'afegeix un estat compartit" #. ## Must be "modify" #. ## 'genericOptionChecks' will raise an error if either the data #. ## doesn't match the datatype(str or int), or the option is #. ## not in the list of valid options for this class. #. !/usr/bin/python #. from xml.dom import minidom #. ## 9/8/2003 1. changed loglevel default from 4(Warning) #. ## to 5(Notice), and #. ## 2. changed failover time #. ## from 10 seconds (interval 500000, tko_count 20) #. ## to 15 seconds (interval 750000, tko_count 20) #. ## commented out 3/20/2003 HM ### #. "strict" : { "datatype" : "yes_no", #. "order" : 3, #. "default" : "no" }, #. #. "adaptive" : { "datatype" : "yes_no", #. "order" : 4, #. "default" : "yes" }, #. "strict=", #. "adaptive=", #. ## This whole failover seconds > min disk ping seconds check #. ## isn't necessary if 'cluquorumd' pinginterval isn't specified. #. ## So just return success. #. success #. ## 1.0 - force 'float' context so that we don't loose #. ## fractional parts in multiplication. #. ## edit passed ### #. ## edit failed ### #: src/configure/clusterpkg/clumembd_module.py:113 #, python-format msgid "" "Failover seconds [%d] must be greater than the 'cluquorumd' Ping Interval " "minimum (Ping Interval [%d] * minimum tko count [%d] = %d)" msgstr "Domini d'emergència [%d] segons han de ser més grans que el mínim 'cluquorumd' interval de ping (interval de Ping [%d] * mínim tko [%d]=%d)" #: src/configure/clusterpkg/clumembd_module.py:186 msgid "Illegal Multicast IP Address" msgstr "Adreça IP multicast no vàlida" #: src/configure/clusterpkg/clumembd_module.py:192 msgid "When Multicast is selected, Multicast IP Address is required" msgstr "Quan se seleccioni multicast, es necessita una adreça multicast IP" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. !/usr/bin/python #. ## "service_being_validated" is either the service being modified, or #. ## the new service just added. We want to be sure its key info doesn't #. ## duplicate an existing service. #. ## First, create a new "s"ervice entity #. ## Next, create new "service_ipaddresses" node - child of new "service" #. !/usr/bin/python #. ## end MY_INFO #. ################################################################### #. NOTE: In 'validate', WARNING errors must come *Last*, after all #. FATAL errors. This is because the command line tool will #. override WARNING's in favor of doing the add or update, #. whereas the GUI will present the WARNING in a popup dialog. #. Since WARNINGs and ERROR's are 'raise'd, editing stops at #. that point. So for the command line, we want to be sure #. that all FATAL checks have already been done, so that if a #. WARNING is raised, it can be safely overridden sinced we #. know that only WARNING checks remain. #. ################################################################### #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## Check for *required* fields on "add" ### #. ## 1st, for any options that were not submitted, see if a #. ## "default" was defined above. If there was, make the #. ## option value equal to the default. #. ## This option was not submitted - assign the default if #. ## there is one. #: src/configure/clusterpkg/failoverdomain_module.py:103 msgid "Domain Name is required" msgstr "Es necessita un nom de domini" #. ## 'genericOptionChecks' will raise an error if either the data #. ## doesn't match the datatype(str or int), or the option is #. ## not in the list of valid options for this class. #. ## Validate submitted options ### #. ## 'name' is key - check for another failoverdomain with same name #: src/configure/clusterpkg/failoverdomain_module.py:118 msgid "Domain Name already exists" msgstr "Ja existeix el nom de domini" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. None #. ############################################################################ #. ## Sort the nodes by "id" to ensure that the failover domain #. ## nodes list that is returned is in the proper order. #. ## args will come in as "None" from Gui, but will be a dictionary #. ## if from cluconfig command line. #. ## First, get a list of services that refer to the #. ## *old* domain name. To do that, we need to #. ## 1. get ownerDocument, and user that to #. ## 2. get services node, then #. ## 3. user services node to spin through all existing #. ## services. #. ###################################################### #. Override the ClusterEntity 'set' function so that #. if a failover domain 'name' is being changed, we #. can ensure that all services referring to the #. "old" name get changed to refer to the "new" name. #. ###################################################### #: src/configure/clusterpkg/failoverdomain_module.py:220 msgid " failoverdomainnodes:" msgstr "Nodes del domini del sistema d'emergència:" #. !/usr/bin/python #. ########################################################################### #. ################################################################### #. NOTE: In 'validate', WARNING errors must come *Last*, after all #. FATAL errors. This is because the command line tool will #. override WARNING's in favor of doing the add or update, #. whereas the GUI will present the WARNING in a popup dialog. #. Since WARNINGs and ERROR's are 'raise'd, editing stops at #. that point. So for the command line, we want to be sure #. that all FATAL checks have already been done, so that if a #. WARNING is raised, it can be safely overridden sinced we #. know that only WARNING checks remain. #. ################################################################### #. ###################################################################### #. ####################### 1. FATAL ERRORS ########################## #. ###################################################################### #. ## Check for *required* fields on "add" ### #. ## Validate "name" #: src/configure/clusterpkg/failoverdomainnode_module.py:76 msgid "Failover Domain Node Name is required" msgstr "Es necessita el nom del nodel del domini del sistema d'emergència" #. ## 'genericOptionChecks' will raise an error if either the data #. ## doesn't match the datatype(str or int), or the option is #. ## not in the list of valid options for this class. #. ## Validate submitted options ### #. ## Validate "name" #: src/configure/clusterpkg/failoverdomainnode_module.py:91 msgid "Failover Domain Node Name already exists" msgstr "El nom del node del domini del sistema d'emergència ja existeix" #. ## Verify that Domain Node Name specified exists as a current #. ## Member name in the cluster. #: src/configure/clusterpkg/failoverdomainnode_module.py:104 #, python-format msgid "Member not found for Failover Domain Node Name '%s'" msgstr "No s'ha trobat el membre pel nom del node '%s' del sistema d'emergència" #. ###################################################################### #. ######################### 2. WARNINGS ############################ #. ###################################################################### #. No warnings #. !/usr/bin/python #. ################################################################## #. get_list: The list returned by ClusterList.get_list contains #. ClusterEntity's - It's not sufficient for each to be a #. ClusterEntity since ClusterEntity's don't have access to the #. "failoverdomain" functions. Each failoverdomain in the list returned by #. this "get_list" must be a *failoverdomain* entity in order to have #. access to the "failoverdomain" functions. #. ################################################################## #. ## "failoverdomain_being_validated" is either the failoverdomain #. ## being modified, or the new failoverdomain just added. We want #. ## to be sure his key info doesn't duplicate an existing failoverdomain. #: src/configure/clusterpkg/failoverdomains_module.py:69 #, python-format msgid "" "Failover Domain delete not allowed - Domain Name '%s' specified by at least " "one service" msgstr "No es pot eliminar el domini del sistema d'emergència - Nom del domini '%s' especificat almenys en un servei" #: src/configure/clusterpkg/failoverdomains_module.py:80 #, python-format msgid "" "Domain delete not allowed - Domain Name '%s' specified by at least one " "service" msgstr "" "No es pot suprimir el nom de domini: almenys un servei especifica el nom de " "domini '%s'" #. !/usr/bin/python #. ## "service_ipaddress_being_validated" is either the service_ipaddress #. ## being modified, or the new service_ipaddress just added. We want to #. ## be sure his key info doesn't duplicate an existing service_ipaddress. #. !/usr/bin/python #. need LC_ALL=C so different #. languages don't produce #. different ifconfig output #. create dictionary #. skip blank lines #. for iface_key, iface_dict in self.ifConfig.items(): #. print "\nInterface:", iface_key #. for key, value in iface_dict.items(): #. print " key=[%s], value=[%s]" % (key, value) #. discard spaces at the start #. split on 2 spaces #. !/usr/bin/python #. ## TRUE normally #. ## FALSE for testing #. ## socket.inet_aton gets an exception on '255.255.255.255', so #. ## trap it here first, and return the long integer that would #. ## have resulted from unpack if inet_aton worked properly. #. A word of explanation: #. This conditional is put here to handle the base64 arch case #. where inet_aton returns an 8 byte value. #. print "\nipToNetAndHost:" #. print " ipToNetAndHost in ip =", ip #. print " ipToNetAndHost in maskbits =", maskbits #. print " ipToNetAndHost n(dottedQuadToNum(ip)) =", n #. print " ipToNetAndHost m(makeMask(maskbits)) =", m #. print #. print " ipToNetAndHost host(n & m) =", host #. print " ipToNetAndHost net(n - host) =", net #. print " ipToNetAndHost dottedQuad net =", dottedQuadNet #. print " ipToNetAndHost dottedQuad host =", dottedQuadHost #. print "\nisHostInNet:" #. print " isHostInNet in: host_ip =", host_ip #. print " isHostInNet in: net_ip_with_slash =", net_ip_with_slash #. print #. print " isHostInNet net_ip: ", net_ip #. print " isHostInNet mask_length:", mask_length #. print #. print " isHostInNet net_net: ", net_net #. print " isHostInNet net_host: ", net_host #. print #. print " isHostInNet host_net: ", host_net #. print " isHostInNet host_host: ", host_host #. print #. ## First, if ip is a DNS name, convert it to dotted quad ### #. ## Convert ip to number that can be 'and'ed. #. print "TOP: ip =", submitted_ip #. print " ip_num =", submitted_ip_num #. print " netmask =", submitted_netmask #. print " netmask_num =", submitted_netmask_num #. ## This 'for' just for debugging ### #. print "interface ips: ip = [%s]" % iface_ip #. print " ips: ip_num = [%s]" % iface_ip_num #. print " ips: netmask = [%s]" % iface_netmask #. print " ips: netmask_num = [%s]" % iface_netmask_num #. print " ips: and result = [%s]" % iface_ip_netmask_and_result #. ## Netmask *WAS* submitted. Now 'and' submitted ip with #. ## submitted netmask, and see if that result matches the #. ## result of 'and'ing each interface ip with that ip's #. ## netmask. If *NO* match, then ERROR. #. print "Netmask *WAS* submitted!!!!!!!!!!" #. print " submitted 'and' = [%s]" % submitted_ip_netmask_and_result #. print "Netmask was submitted, and match *FOUND* - OK" #. print "Netmask was submitted, and match *NOT* found - ERROR" #. ## Netmask was *NOT* submitted. 'and' submitted ip with #. ## each interface's netmask, and see if result matches the #. ## result of 'and'ing each interface ip with that ip's #. ## netmask. If *NO* match, then ERROR. #. print "Netmask was *NOT* submitted ------------>" #. print " submitted ip num=[%s], iface netmask num=[%s], and=[%s}" % (submitted_ip_num, iface_netmask_num, ip_netmask_and_result) #. print " %%% Netmask was *NOT* submitted, and match *FOUND* - OK" #. print "Netmask was *NOT* submitted, and match *NOT* found - ERROR" #. !/usr/bin/python #. ################################################################ #. NOTE: 9/16/2003 HM - commented out 'netbios name' code, since #. a new Samba package was built with a patch to correct the #. 'nmbd -n' option from being ignored. That new Samba #. package fixes bugzilla 104222. But I left functions #. __getHostName #. __getNetbiosName #. in place - they just aren't used now. #. #. NOTE: 9/12/2003 HM - added code to workaround Samba #. bugzilla 104222. The -n option in the 'nmbd' command #. is being ignored in Samba, so we added a 'netbios name' #. [global] option. Added functions: #. __getHostName #. __getNetbiosName #. #. When bug 104222 is fixed in Samba, we should be able to #. remove this code. #. ################################################################ #. ## 'netbios name' was an element of GLOBAL_OPTIONS #. "netbios name" ] #: src/configure/clusterpkg/util_smbconf_module.py:55 msgid "" "\n" "# Template samba service configuration file - please modify\n" "# to specify subdirectories and client access permissions.\n" "# Remember to copy this file over to *ALL* other cluster\n" "# members.\n" "#\n" "# From a cluster perspective, the key fields are:\n" "# lock directory - must be unique per samba service.\n" "# bind interfaces only - must be present set to yes.\n" "# interfaces - must be set to service floating IP address.\n" "# path - must be the service mountpoint or subdirectory thereof.\n" "# Refer to the cluster documentation for details.\n" msgstr "" "\n" "# Fitxer plantilla de configuració de servei samba.\n" "# Modifiqueu-lo per especificar subdirectoris i permissos.\n" "# d'accés dels clients.\n" "# Recordeu-vos de copiar aquest fitxer a tots els membres\n" "# del cluster.\n" "#\n" "# Des de la perspectiva d'un cluster, els camps clau són:\n" "# lock directory - ha de ser únic per cada dispositiu samba.\n" "# només interfícies bind - s'ha de definir a \"si\".\n" "# interfícies - s'ha de definir amb les adreces IP de servei.\n" "# camí - ha de ser el punt de muntatge del servei o el subdirectori.\n" "# Per obtenir més informació, referiu-vos a la documentació del cluster.\n" #. used in writeSambaShareFile to #. determine new, change, or delete #. ## smb.conf.[sharename] file exists - load it ### #. skip comments and blank lines #. ## must be a name = value line ### #. ## smb.conf.[sharename] file does *NOT* exist - fill #. ## dictionary with default options #. print "util_smbconf_module init_file_dict TOP!" #. options["global"]["netbios name"] = "" #. space separate the ip's #. host *NOT* found #. host found #. ips may contain a space separated list of ipaddresses, so #. #. 1. get 1st ipaddress #. 2. if ipaddress has a "/netmask", then get just the ipaddress #. 3. resolve the ipaddress (ex: myhost.redhat.com) #. if it resolves, netbios_name = 1st element of hostname ('myhost') #. else netbios_name = ipaddress #. 1. get 1st ipaddress (/netmask) #. 2. if ipaddress has a "/netmask", then get just the ipaddress #. 3. resolve the ipaddress (ex: myhost.redhat.com) #. if it resolves, netbios_name = 1st element of hostname ('myhost') #. else netbios_name = ipaddress #. netbios_name = self.__getNetbiosName(ipaddresses) #. self.share_options["global"]["netbios name"] = netbios_name #. ## Write out file ### #. ## print [global] options in order ### #. ## print [sharename] options in order ### #. ## Invoke __init__ now to reinitialize object data, since #. ## share is gone, but device still exists. #. !/usr/bin/python #. For a filesystem that runs over 1 line - #. subsequent lines have null values in #. columns already presented on the previous #. line.. #. processed all 6 tokens #. !/usr/bin/python #. ## File doesn't exist, so open it for write ### #: src/configure/clusterpkg/util_lock_module.py:40 #, python-format msgid "" "Error: %s is already running under process %s, and has the configuration " "file locked" msgstr "" "S'ha produït un error: %s ja està corrent sota el procés %s, i té bloquejat " "el fitxer de configuració" #. !/usr/bin/python #. Do this 1st, to prevent --name from being stripped #. by 'import gtk' in cluster_functions. #. ## Global variables ### #. ## Parse the cluster.xml into DOM nodes, and lock the cluster.xml #. ## Another process already has /etc/cluster.xml locked #. ## Check Shared State ### #. ## Shared Storage was previously initialized and is responding #. ## fine. #. ## Shared Storage is NOT responding - maybe it hasn't been #. ## initialized yet. #. if clu.created_config: #. ## Since shared storage initialization failed, remove default #. ## config file that was created. #. ## Shared Storage was initialized successfully ### #: src/configure/redhat-config-cluster-cmd.py:57 #, python-format msgid "" "\n" "*** Configuration file %s was created." msgstr "" "\n" "*** S'ha creat el fitxer de configuració %s." #: src/configure/redhat-config-cluster-cmd.py:59 msgid "" "\n" "*** Shared Storage was initialized successfully.\n" "\n" "====================================================" msgstr "" "\n" "*** S'ha inicialitzat correctament el magatzem compartit.\n" "\n" "====================================================" #. ## attributes for the cluster as a whole #: src/configure/redhat-config-cluster-cmd.py:70 msgid "Error: config_viewnumber cannot be changed" msgstr "S'ha produït un error: no es pot canviar config_viewnumber" # Mozilla 1.3->typeError #. ## attributes for the cluster's Shared State #. print "redhat-config-cluster-cmd modify_sharedstate TOP!" #: src/configure/redhat-config-cluster-cmd.py:76 #: src/configure/redhat-config-cluster-cmd.py:89 #: src/configure/redhat-config-cluster-cmd.py:126 #: src/configure/redhat-config-cluster-cmd.py:149 #: src/configure/redhat-config-cluster-cmd.py:160 #: src/configure/redhat-config-cluster-cmd.py:170 #: src/configure/redhat-config-cluster-cmd.py:180 #: src/configure/redhat-config-cluster-cmd.py:194 #: src/configure/redhat-config-cluster-cmd.py:210 #: src/configure/redhat-config-cluster-cmd.py:253 #: src/configure/redhat-config-cluster-cmd.py:269 #: src/configure/redhat-config-cluster-cmd.py:337 #: src/configure/redhat-config-cluster-cmd.py:346 #: src/configure/redhat-config-cluster-cmd.py:386 #: src/configure/redhat-config-cluster-cmd.py:402 #: src/configure/redhat-config-cluster-cmd.py:414 #: src/configure/redhat-config-cluster-cmd.py:442 #: src/configure/redhat-config-cluster-cmd.py:481 #: src/configure/redhat-config-cluster-cmd.py:565 #: src/configure/redhat-config-cluster-cmd.py:590 #: src/configure/redhat-config-cluster-cmd.py:607 #: src/configure/redhat-config-cluster-cmd.py:679 #: src/configure/redhat-config-cluster-cmd.py:695 #: src/configure/redhat-config-cluster-cmd.py:769 #: src/configure/redhat-config-cluster-cmd.py:831 #: src/configure/redhat-config-cluster-cmd.py:843 #: src/configure/redhat-config-cluster-cmd.py:901 #: src/configure/redhat-config-cluster-cmd.py:918 #: src/configure/redhat-config-cluster-cmd.py:956 #: src/configure/redhat-config-cluster-cmd.py:972 #: src/configure/redhat-config-cluster-cmd.py:1008 msgid "Error:" msgstr "Error:" #: src/configure/redhat-config-cluster-cmd.py:200 #: src/configure/redhat-config-cluster-cmd.py:274 #: src/configure/redhat-config-cluster-cmd.py:392 #: src/configure/redhat-config-cluster-cmd.py:486 #: src/configure/redhat-config-cluster-cmd.py:613 #: src/configure/redhat-config-cluster-cmd.py:707 #: src/configure/redhat-config-cluster-cmd.py:848 #: src/configure/redhat-config-cluster-cmd.py:923 #: src/configure/redhat-config-cluster-cmd.py:977 #, python-format msgid "Error: Option \"%s\" requires \"%s\"" msgstr "S'ha produït un error: l'opció \"%s\" necessita \"%s\"" #. print "redhat-config-cluster-cmd modify_member TOP" #. print _("Error:"), e.getMessage() #: src/configure/redhat-config-cluster-cmd.py:208 #: src/configure/redhat-config-cluster-cmd.py:224 #, python-format msgid "Error: Member '%s' does not exist in cluster" msgstr "S'ha produït un error: el membre '%s' no existeix en el cluster" #. print _("Error:"), e.getMessage() #: src/configure/redhat-config-cluster-cmd.py:281 #, python-format msgid "Error: Powercontroller '%s' does not exist in Member '%s'" msgstr "" "S'ha produït un error: el controlador d'energia '%s' no existeix en el " "membre '%s'" #. ## test to see if valid ip address ### #. ## Valid dns name will fall in here, so see if that's #. ## what it is. #. ## User passed in a 'powercontroller=' with a value containing #. ## a valid ip address, but no port. #: src/configure/redhat-config-cluster-cmd.py:314 msgid "" "Error: --powercontroller value is missing a port number - value must be in " "format '--powercontroller=ip,port'" msgstr "" "S'ha produït un error: manca el número del port a --powercontroller. El " "valor ha de tenir el format '--powercontroller=ip,port'" #: src/configure/redhat-config-cluster-cmd.py:400 #, python-format msgid "Error: Failover Domain '%s' does not exist in cluster" msgstr "Error: El domini d'emergència '%s' no existeix al cluster" #. print _("Error:"), e.getMessage() #: src/configure/redhat-config-cluster-cmd.py:493 #, python-format msgid "Error: Failover Domain Node '%s' does not exist in Failover Domain '%s'" msgstr "Error: El node del domini d'emergència '%s' no existeix en el domini d'emergència '%s'" #. print _("Error:"), e.getMessage() #: src/configure/redhat-config-cluster-cmd.py:620 #: src/configure/redhat-config-cluster-cmd.py:631 #, python-format msgid "Error: Service '%s' does not exist in cluster" msgstr "S'ha produït un error: el servei '%s' no existeix en el cluster" #. print _("Error:"), e.getMessage() #: src/configure/redhat-config-cluster-cmd.py:714 #, python-format msgid "Error: Device '%s' does not exist in Service '%s'" msgstr "" "S'ha produït un error: el dispositiu '%s' no existeix en el servei '%s'" #: src/configure/redhat-config-cluster-cmd.py:727 #, python-format msgid "Error: Device \"%s\" does not exist for Service \"%s\"" msgstr "" "S'ha produït un error: el dispositiu \"%s\" no existeix en el servei \"%s\"" #. print _("Error:"), e.getMessage() #: src/configure/redhat-config-cluster-cmd.py:855 #, python-format msgid "Error: NFS Export '%s' does not exist in Device '%s'" msgstr "" "S'ha produït un error: l'exportació NFS '%s' no existeix en el dispositiu '%" "s'" #: src/configure/redhat-config-cluster-cmd.py:868 #, python-format msgid "Error: NFS Export \"%s\" does not exist for Device \"%s\"" msgstr "" "S'ha produït un error: l'exportació NFS \"%s\" no existeix per al dispositiu " "\"%s\"" #. print _("Error:"), e.getMessage() #: src/configure/redhat-config-cluster-cmd.py:930 #, python-format msgid "" "Error: NFS Export Client '%s' does not exist for NFS Export Directory '%s'" msgstr "" "S'ha produït un error: el client d'exportació NFS '%s' no existeix per al " "directori d'exportació '%s'" #: src/configure/redhat-config-cluster-cmd.py:943 #, python-format msgid "Error: Client \"%s\" does not exist for NFS Export \"%s\"" msgstr "" "S'ha produït un error: el client \"%s\" no existeix per a l'exportació NFS " "\"%s\"" #. print _("Error:"), e.getMessage() #: src/configure/redhat-config-cluster-cmd.py:984 #, python-format msgid "Error: IP Address '%s' does not exist in service '%s'" msgstr "S'ha produït un error: l'adreça IP '%s' no existeix en el servei '%s'" #: src/configure/redhat-config-cluster-cmd.py:997 #, python-format msgid "Error: IP Address \"%s\" does not exist for Service \"%s\"" msgstr "" "S'ha produït un error: l'adreça IP \"%s\" no existeix en el servei \"%s\"" #. share_list = [] #. for service in services: #. devices = service.get_devices() #. for device in devices: #. if device.get("sharename") != "": #. share_list.append(device.get("sharename")) #. return share_list #. ## Parse the cluster.xml into DOM nodes, and lock the cluster.xml #. Used to see if data #. changed when user quits. #. ## constants for notebook pages ### #. Main window #. delete-event allows you to click the 'X'(upper right) to close #. the window and stop the application. It also allows you to #. click on the down arrow(upper left) to close and stop the app. #. ################################## #. ## Populate Cluster attributes ### #. ################################## #. get general cluster attributes #. ####################################### #. ## Create Daemon Properties Dialog ### #. ####################################### #. ################################ #. ## Populate Members Treeview ### #. ################################ #. ################################# #. ## Populate Services Treeview ### #. ################################# #. ######################################### #. ## Populate Failover Domains Listview ### #. ######################################### #. ######################################################### #. ## Save device 'share' (samba) info, so we can compare #. ## at the end. In on_save_activiate, if devices or #. ## samba shares were deleted, we must then delete the #. ## /etc/samba/smb.conf.sharename files. #. ######################################################### #. self.share_list_before = sambaSharesSnapshot(self.clu) #. ################################### #. ## Save NFS export druid dialog ### #. ################################### #. ##################################### #. ## Save samba export druid dialog ### #. ##################################### #. none of cluster options changed - just return #. ## At least 1 cluster option changed ### #. ## Invoke service 'validate' to validate all options #. Don't refresh - leave bad values #. on screen. #: src/configure/cluster-config.py:261 src/configure/clientDialog.py:72 #: src/configure/daemonPropDialog.py:278 src/configure/daemonPropDialog.py:303 #: src/configure/deviceDialog.py:130 src/configure/failoverdomainDialog.py:98 #: src/configure/serviceDialog.py:95 src/configure/sharedstateDialog.py:116 #, python-format msgid "" "%s\n" "\n" "Press 'OK' to Continue, or 'Cancel' to Exit." msgstr "" "%s\n" "\n" "Premeu 'D'acord' per continuar, o 'Cancel·la' per sortir." #. Don't refresh - leave bad values #. on screen. #. Need to differentiate this #. 'Cancel' from the main Dialog #. 'Cancel', so make this rc #. gtk.RESPONSE_REJECT. #. ## Validation passed on all fields - now "set" each by calling #. ## the ClusterEntity "set". #. ## Now connect the buttons to the functions ### #. ## Load screen widgets with data from XML DOM for selected client ### #: src/configure/clientDialog.py:130 #, python-format msgid "%s " msgstr "%s " #. Client key field is "name" #. ## Must be an "add" ### #. ## model.append needs the "iter" of the *parent* of the #. ## thing that is being appended. #. parent_iter = self.model.iter_parent(iter) #. ## rc was gtk.RESPONSE_REJECT: #. ## 1. User got a FATAL error and clicked 'OK' (only option) #. ## so display same dialog again, #. ## OR #. ## 2. User got a WARNING and clicked 'Cancel' to go back #. ## and re-enter. #. !/usr/bin/python #. # daemonPropDialog.py #. # This program is free software; you can redistribute it and/or modify #. # it under the terms of the GNU General Public License as published by #. # the Free Software Foundation; either version 2 of the License, or #. # (at your option) any later version. #. # This program is distributed in the hope that it will be useful, #. # but WITHOUT ANY WARRANTY; without even the implied warranty of #. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #. # GNU General Public License for more details. #. # You should have received a copy of the GNU General Public License #. # along with this program; if not, write to the Free Software #. # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #. ########################################################################### #. NOTES: #. ====== #. 05/20/2003 HM - Commented out all code referring to 'clupowerd', since #. clupowerd has been removed from the daemonPropDialog #. in glade. #. 03/20/2003 HM - Commented out all code referring to Stability ('strict' #. and 'adaptive', since we've decided to turn both on #. by default and not expose them to users. #. ########################################################################### #. WARNING #. # #. # I18N #. # #. ## FAILOVER_SECONDS key is the failover seconds #. ## value is "tko_count|interval" combination that equals #. ## the failover seconds(when multiplied together. The #. ## interval is in microseconds. #. ## STABILITY key is the stability scale units(1-3) #. ## value is the 'strict' and 'adaptive' fields, and whether #. ## or not(0 or 1) they are on. #. ## If tko_count and interval combo don't exist in FAILOVER_SECONDS, #. ## then default to 1st(slowest) FAILOVER_SECONDS element. #. ## If strict and adaptive combo doesn't exist in STABILITY, #. ## then default to highest STABILITY element. #. get general cluster attributes #. self.clupowerd = clu.getclupowerd() #: src/configure/daemonPropDialog.py:159 #, python-format msgid "%2d second failover" msgstr "%2d segons sistema d'emergència" #. ## Copy the new values from the Gui widgets into the DOM xml ### #. stability_scale_units = int(self.glade_xml.get_widget('clumembd_stability_hscale').get_value()) #. (clumembd_strict, clumembd_adaptive) = getStabilityStrictAndAdaptive(stability_scale_units) #. ######################################### #. clupowerd_loglevel = self.glade_xml.get_widget('clupowerd_loglevel_optionmenu').get_history() #. ######################################### #: src/configure/daemonPropDialog.py:207 msgid "" "Network Tiebreaker was selected but no IP Address was entered.\n" "\n" "Please enter an IP Address for Network Tiebreaker." msgstr "La xarxa desemparada s'ha sel·leccionat però no s'ha especificat la direcció IP.\n" "Si us plau introduiu la direcció IP per la xarxa desemparada" #. Don't refresh - leave bad values #. on screen. #: src/configure/daemonPropDialog.py:219 msgid "" "Disk Tiebreaker was selected but no Disk Ping Interval was entered.\n" "\n" "Please enter a Disk Ping Interval (in seconds) for Disk Tiebreaker." msgstr "El disc desemparat ha estat sel·leccionat però no s'ha especificat el interval del ping pel disc.\n" "\n" "Si us plau introduiu l'interval del ping pel disk (en segons) pel sistema d'emergència del disc." #. Don't refresh - leave bad values #. on screen. #. ######################################### #. ######################################### #. ######################################### #. "strict" : clumembd_strict, #. "adaptive" : clumembd_adaptive, #. clupowerd_options = { "loglevel" : clupowerd_loglevel } #. ## Invoke service 'validate' to validate all options #: src/configure/daemonPropDialog.py:277 #, python-format msgid "" "Ping Interval * %d must be less than Failover time. Click 'OK' to change " "'cluquorumd' Ping Interval to %d" msgstr "Interval del ping * %d ha de ser inferior del temps del sistema d'emergència. Premeu 'D'acord' per canviar " "'cluquorumd' interval del ping a %d" #. Don't refresh - leave bad values #. on screen. #. ## Validation passed on all fields - now "set" each by calling #. ## the ClusterEntity "set". #. self.clumembd.set("strict", clumembd_strict) #. self.clumembd.set("adaptive", clumembd_adaptive) #. self.clupowerd.set("loglevel", clupowerd_loglevel) #. ## clumembd 'multicast' *IS* checked #. ## clumembd 'multicast' is *NOT* checked #. ## Ping Interval is selected ### #. ## Tiebreaker IP is selected ### #. ## Create gtk Menu of loglevels that will be used to create #. ## loglevel optionmenu's for each of the daemons. #. ## Now connect the buttons to the functions ### #. ## clumembd ### #. ## Load 'clumembd' Speed fields to screen ### #. ## Load 'clumembd' Stability fields to screen ### #. strict = self.clumembd.get("strict") #. adaptive = self.clumembd.get("adaptive") #. (label_text, stability_scale_units) = getStabilityLabelAndUnits(strict, adaptive) #. stability_scale_widget = self.glade_xml.get_widget('clumembd_stability_hscale') #. stability_scale_widget.connect("value_changed", self.on_stability_value_changed) #. self.stability_label = self.glade_xml.get_widget('clumembd_stability_text_label') #. self.stability_label.set_text(label_text) #. stability_scale_widget.set_value(stability_scale_units) #. ## Load 'clumembd' remaining fields to screen ### #. default is TRUE (or yes) #. default is TRUE (or yes) #. ## Load 'clupowerd' options to screen ### #. self.build_optionmenu(self.clupowerd) #. ## Load 'cluquorumd' options to screen ### #. ## Figure out how many members have been defined ### #. ownerDocument = self.cluquorumd.node.ownerDocument #. members_node = ownerDocument.getElementsByTagName("members")[0] #. from clusterpkg.members_module import members #. members_entity = members(members_node) #. members_list = members_entity.get_list() #. count_members = len(members_list) #: src/configure/daemonPropDialog.py:460 msgid "Cluster has 2 members - Network Tiebreaker IP Address is recommended" msgstr "El cluster té 2 membres -La direcció IP de la xarxa desemparada es recomanada" #: src/configure/daemonPropDialog.py:482 msgid "Cluster has 4 members - Network Tiebreaker IP Address is required" msgstr "El cluster té 4 membres - La direcció IP de la xarxa desemparada és necessària" #: src/configure/daemonPropDialog.py:494 #, python-format msgid "" "Cluster has %s members:\n" "Disk Tiebreaker and Network Tiebreaker will not be used." msgstr "El cluster té %s membres:\n" "El disc desemparat i la xarxa desemparada no es poden utilitzar." #. Don't refresh - leave bad values #. on screen. #. Need to differentiate this #. 'Cancel' from the main Dialog #. 'Cancel', so make this rc #. gtk.RESPONSE_REJECT. #. ## Now connect the buttons to the functions ### #. ## Load screen widgets with data from XML DOM for selected device ### #. ## parent is a "serviceItem" instance ### #: src/configure/deviceDialog.py:217 #, python-format msgid "%s " msgstr "%s " #. ## set up the treeview to do multiple selection ### #. ## "get" the new values from the Gui widgets ### #. ## Now connect the buttons to the functions ### #. ## Populate the screen widgets ### #. ## find members currently in XML (in memory) ### #. ## To get current list of members, need to get DOM XML #. ## ownerDocument(root DOM XML node), so we can then #. ## find(using getElementsByTagName) the 'members' node. #. ## need this model.clear ### #. ## Only load nodes to the list screen that were not #. ## previously selected. #. ## parent is failoverdomainnodesListview object ### #. failoverdomainnode key field is "name" #. # #. # I18N #. # #. print "failoverdomainnodesListview __init__ TOP:" #. ## This is a 'List', so use 'ListStore' (not TreeStore) ### #: src/configure/failoverdomainnodesListview.py:32 msgid "Node" msgstr "Node" #: src/configure/failoverdomainnodesListview.py:78 #, python-format msgid "Are you sure you want to remove '%s'?" msgstr "Esteu segur que voleu suprimir '%s'?" #. ## iter == None, which means at the top level, adding a 'failoverdomain' #: src/configure/failoverdomainsListview.py:85 #: src/configure/membersTreeview.py:106 src/configure/servicesTreeview.py:173 #, python-format msgid "Are you sure you want to remove %s '%s'?" msgstr "Esteu segur que voleu esborrar %s '%s'?" #. ## remove "item" from DOM XML ### #. ## remove "iter" from Gui ### #. !/usr/bin/python #. # memberDialog.py #. # This program is free software; you can redistribute it and/or modify #. # it under the terms of the GNU General Public License as published by #. # the Free Software Foundation; either version 2 of the License, or #. # (at your option) any later version. #. # This program is distributed in the hope that it will be useful, #. # but WITHOUT ANY WARRANTY; without even the implied warranty of #. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #. # GNU General Public License for more details. #. # You should have received a copy of the GNU General Public License #. # along with this program; if not, write to the Free Software #. # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #. # #. # I18N #. # #. gtk.Dialog): #. Reset GUI widget values back to what they were - in this dialog #. one or more widgets could have been set to illegal values, which #. they would still have if we didn't reset them here. #. ## "get" the new values from the Gui widgets ### #. ## Invoke member 'validate' to validate all options #. print "memberDialog check 'except': in FATAL now!" #. Don't refresh - leave bad values #. on screen. #: src/configure/memberDialog.py:79 src/configure/nfsexportDialog.py:71 #: src/configure/powercontrollerDialog.py:137 #: src/configure/serviceIPAddressDialog.py:82 #, python-format msgid "" "%s\n" "\n" "Press 'OK' to Continue, or 'Cancel' to Exit." msgstr "" "%s\n" "\n" "Premeu 'D'acord' per continuar, o 'Cancel·la' per sortir." #. Don't refresh - leave bad values #. on screen. #. Need to differentiate this #. 'Cancel' from the main Dialog #. 'Cancel', so make this rc #. gtk.RESPONSE_REJECT. #. ## Validation passed on all fields - now "set" each by calling #. ## the ClusterEntity "set". #. for "validate" #. ## Now connect the buttons to the functions ### #. ## Load screen widgets with data from XML DOM for selected service ### #. ## find failover domains currently in XML (in memory) ### #. ## To get current list of failover domains, need to get DOM XML #. ## ownerDocument(root DOM XML node), so we can then #. ## find(using getElementsByTagName) the 'failoverdomains' node. #. ## parent is "servicesTreeview" instance ### #: src/configure/serviceDialog.py:203 #, python-format msgid "%s " msgstr "%s " #. Don't refresh - leave bad values #. on screen. #. Need to differentiate this #. 'Cancel' from the main Dialog #. 'Cancel', so make this rc #. gtk.RESPONSE_REJECT. #. ## Validation passed - now 'set' DOM XML options ### #. ## Now connect the buttons to the functions ### #. ## Load screen widgets with data from XML DOM for selected device ### #: src/configure/nfsexportDialog.py:123 #, python-format msgid "%s " msgstr "%s " #. Don't refresh - leave bad values #. on screen. #. Need to differentiate this #. 'Cancel' from the main Dialog #. 'Cancel', so make this rc #. gtk.RESPONSE_REJECT. #. ## Validation passed - now 'set' options ### #. ## If this was previously a 'Network' powercontroller, then #. ## remove the old network options. #. ## Must be network powercontroller ### #. ## If this was previously a 'Serial' powercontroller, then #. ## remove the old serial options. #. type gulm #. #################################################################### #. get_other_member_name: #. Given a powercontroller, that is a child of a member, find #. the name of the *other* member. This can only be done for #. serial powercontrollers that are valid only for 2-node #. clusters. #. #################################################################### #. ## 'Serial' selected - 1. unprotect 'Serial' fields ### #. set Serial Device *Owner* to name of *other* member - #. *NOT* the name of the member that this powercontroller #. is a child of. #. ## 'Serial' selected - 2. protect 'Network' fields ### #. ## 'Network' selected - 1. unprotect 'Network' fields ### #. ## 'Network' selected - 2. protect 'Serial' fields ### #. gulm selected #. Protect all other fields #. ## When loading screen for the 1st time, we invoke radio button #. ## set_active to set one of the radio buttons to "on", which fires #. ## this function. When that happens(firsttime) just return. #. ## Now connect the buttons to the functions ### #. ## Load screen widgets with data from XML DOM for selected #. ## powercontroller. #. ## On "add", if 2 members in cluster, default to 'Serial' #. set Serial Device *Owner* to name of *other* member - #. *NOT* the name of the member that this powercontroller #. is a child of. #. ## 'add', but count_members >2, so default to 'Network' #. ####################### #. ## Must be "modify" ### #. ####################### #. set Serial radiobutton #. set Serial Type combo box #. set Serial Device #. set Serial Port combo box #. set Serial Device *Owner* to name of *other* member - #. *NOT* the name of the member that this powercontroller #. is a child of. #. set Network options to null #. User must have chosen "Network" radiobutton #. set Network Type combo box #. set Serial options to null #. type is gulm stonith driver #. set serial and network options to null #. set Serial options to null #. set Network options to null #. ## parent is a 'memberItem' #: src/configure/powercontrollerDialog.py:455 #, python-format msgid "%s: device=%s " msgstr "%s: device=%s " #: src/configure/powercontrollerDialog.py:461 #, python-format msgid "%s: ip=%s, port=%s " msgstr "%s: ip=%s, port=%s " #: src/configure/powercontrollerDialog.py:463 #, python-format msgid "%s: " msgstr "%s: " #. ## Want to add an item at the same level as the currently #. ## selected item. So call item.add with the iter of the #. ## current iter's parent, since that parent will also #. ## be the parent of the item being added. #. print "servicesTreeview add_child TOP" #. ## Since the current item will be the parent of the item being #. ## added, pass the current item's iter to item.add_child. #: src/configure/servicesTreeview.py:161 #, python-format msgid "Service '%s' must be disabled before '%s' delete allowed" msgstr "S'ha d'inhabilitar el servei '%s' abans que es pugui suprimir '%s'" #. Don't refresh - leave bad values #. on screen. #. ## Validation passed - now 'set' options ### #. ## If sharestate was previously 'sfs', then delete sfs options ### #. ## If sharestate was previously 'raw', then delete raw options ### #. ## 'Raw' selected - 1. unprotect 'Raw' fields and load ### #. ## 'Raw' selected - 2. protect 'SFS' fields and init to null ### #. ## 'SFS' selected - 1. unprotect 'SFS' fields and load ### #. ## 'SFS' selected - 2. protect 'Raw' fields and init to null ### #. ## When loading screen for the 1st time, we invoke radio button #. ## set_active to set one of the radio buttons to "on", which fires #. ## this function. When that happens(firsttime) just return. #. !/usr/bin/python #. # deviceOrServiceIPAddressDialog.py #. # This program is free software; you can redistribute it and/or modify #. # it under the terms of the GNU General Public License as published by #. # the Free Software Foundation; either version 2 of the License, or #. # (at your option) any later version. #. # This program is distributed in the hope that it will be useful, #. # but WITHOUT ANY WARRANTY; without even the implied warranty of #. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #. # GNU General Public License for more details. #. # You should have received a copy of the GNU General Public License #. # along with this program; if not, write to the Free Software #. # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #. # #. # I18N #. # #. (gtk.Dialog): #. ## "get" the new values from the Gui widgets ### #. ## Connect the buttons to the functions ### #. !/usr/bin/python #. # serviceIPAddressDialog.py #. # This program is free software; you can redistribute it and/or modify #. # it under the terms of the GNU General Public License as published by #. # the Free Software Foundation; either version 2 of the License, or #. # (at your option) any later version. #. # This program is distributed in the hope that it will be useful, #. # but WITHOUT ANY WARRANTY; without even the implied warranty of #. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #. # GNU General Public License for more details. #. # You should have received a copy of the GNU General Public License #. # along with this program; if not, write to the Free Software #. # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #. # #. # I18N #. # #. (gtk.Dialog): #. ## "get" the new values from the Gui widgets ### #. ## If user didn't update any fields, then just return. #. Don't refresh - leave bad values #. on screen. #. ## WARNING because IP address gethostbyname(DNS lookup) #. ## failed. #: src/configure/serviceIPAddressDialog.py:80 #, python-format msgid "" "%s\n" "\n" "Press 'OK' to Accept, or 'Cancel' to change it." msgstr "" "%s\n" "\n" "Premeu 'D'acord' per acceptar, o 'Cancel·la' per canviar-ho." #. Don't refresh - leave bad values #. on screen. #. Need to differentiate this #. 'Cancel' from the main Dialog #. 'Cancel', so make this rc #. gtk.RESPONSE_REJECT. #. print "AAAAAAAAAAAAA - rc =", rc #. print " gtk.RESPONSE_OK =", gtk.RESPONSE_OK #. print " gtk.RESPONSE_CANCEL =", gtk.RESPONSE_CANCEL #. print " gtk.RESPONSE_REJECT =", gtk.RESPONSE_REJECT #. ## Validation passed - now 'set' DOM XML options ### #. ## Now connect the buttons to the functions ### #. ## Load screen widgets with data from XML DOM for selected #. ## service_ipaddress. #. if self.monitor_link != None: #: src/configure/serviceIPAddressDialog.py:161 #, python-format msgid "%s " msgstr "%s " #: src/configure/nfsExportDruid.py:99 src/configure/smbShareDruid.py:83 msgid "Mountpoint" msgstr "Punt de muntatge" #. ######################### #. ## Last Page - Finish ### #. ######################### #. ############################################################ #. ## NOTE: if radiobutton is "connect"ed to a function, then #. ## invoking the radiobutton's 'set_active' will fire #. ## the function. #. ############################################################ #. print 'on_svcRadiobuttonChanged TOP' #. ## 'Existing Service' was selected, so #. ## * turn on 'Existing' #. ## * turn off 'New' #. ## 'New Service' was selected, so #. ## * turn on 'New' #. ## * turn off 'Existing' #. print "deviceRadiobuttonChanged TOP now!" #. print " device existing" #. ## 'Existing Device' was selected, so #. ## * turn on 'Existing' #. ## * turn off 'New' #. print " device new" #. ## 'New Device' was selected, so #. ## * turn on 'New' #. ## * turn off 'Existing' #. print "on_deviceRadiobuttonChanged TOP now!" #. print "nfsExportDruid 'cancel' now!" #. print "nfsExportDruid 'run' now!" #. don't load service if it doesn't have an ip #. ## initialize screen fields ### #: src/configure/nfsExportDruid.py:208 msgid "You must enter a directory name" msgstr "Heu d'introduir un nom de directori" #: src/configure/nfsExportDruid.py:211 msgid "Directory Name must start with a slash" msgstr "El nom del directori ha de començar amb una barra" #. if not os.path.isdir(dirname): #. errorMessage(_("Name specified is not a directory")) #. return TRUE #. ## Verify that directory name isn't a dup of existing ### #: src/configure/nfsExportDruid.py:243 msgid "NFS Export directory already exists in cluster" msgstr "El directori d'exportació NFS ja existeix en el cluster" #. ################################################################# #. ## NFS Export Directory Page done - now prep for Service Page ### #. ################################################################# #: src/configure/nfsExportDruid.py:272 src/configure/smbShareDruid.py:203 msgid "Service IP Address already exists in cluster" msgstr "L'adreça de servei IP ja existeix en el cluster" #. ## This whole section copied from service_ipaddress_module.py ### #: src/configure/nfsExportDruid.py:277 src/configure/smbShareDruid.py:208 msgid "Service IP Address not found in DNS" msgstr "No s'ha trobat l'adreça del servei IP en el DNS" #: src/configure/nfsExportDruid.py:283 src/configure/smbShareDruid.py:214 msgid "Service IP Address not on same network as this host" msgstr "" "L'adreça de servei IP no està a la mateixa xarxa que aquest ordinador" #: src/configure/nfsExportDruid.py:287 src/configure/smbShareDruid.py:218 msgid "Service IP Address already in use on network" msgstr "Ja s'està fent servir l'adreça de servei IP a la xarxa" #. Passed validation #. print "on_ServicePage_next TOP now!" #. ## 'Existing Service' selected ### #: src/configure/nfsExportDruid.py:303 src/configure/smbShareDruid.py:230 msgid "" "When 'Existing Service' is selected, you must select one of the existing " "services" msgstr "" "Si seleccioneu 'Servei existent', heu de seleccionar un servei existent" #. ## Set Device Model before display Device page ### #. ## Export directory *IS* under the device mountpoint, so #. ## load this device into 'Existing Device' model #. ## 'New Service' selected ### #: src/configure/nfsExportDruid.py:341 src/configure/smbShareDruid.py:266 msgid "" "When 'New Service' is selected, you must enter a name for the new service" msgstr "Si seleccioneu 'Nou servei', heu d'introduir un nom per al nou servei" #: src/configure/nfsExportDruid.py:344 src/configure/smbShareDruid.py:269 msgid "" "When 'New Service' is selected, you must enter an ip address for the new " "service" msgstr "" "Si seleccioneu 'Nou servei', heu d'introduir una adreça ip per al nou servei" #. ## Verify that the new service name does not already exist ### #: src/configure/nfsExportDruid.py:350 src/configure/smbShareDruid.py:275 msgid "New Service name already exists" msgstr "El nou nom de servei ja existeix" #. ## Validate IP Address ### #. return to druid #. ################################################### #. ## Service Page done - now prep for Device Page ### #. ################################################### #. if self.first_time_device: #. pass #. ## Enable choice of existing 'device' from that #. ## existing service #. ## Disable existing device - only enable new device ### #: src/configure/nfsExportDruid.py:381 src/configure/smbShareDruid.py:291 #, python-format msgid "Existing Service '%s' was selected" msgstr "S'ha seleccionat el servei existent '%s'" #. ## The existing service DOES have devices defined. #. ## Enable choice of existing 'device' from that existing svc #. ## The existing service selected has NO devices defined. #. ## So treat it like the "New" radiobutton was selected. #. ## User added a new service, so only allow user to #. ## *add a new* device #: src/configure/nfsExportDruid.py:384 src/configure/smbShareDruid.py:312 #, python-format msgid "New Service '%s' was specified" msgstr "S'ha especificat el nou servei '%s'" #. self.existDeviceRadiobutton.set_active(FALSE) #. ## 'Existing Device' selected ### #: src/configure/nfsExportDruid.py:398 src/configure/smbShareDruid.py:331 msgid "" "When 'Existing Device' is selected, you must select one of the existing " "devices" msgstr "" "Si seleccioneu 'Dispositiu existent', heu de seleccionar un dels dispositius " "existents" #. ## Verify that the export directory is *underneath* the mountpoint #. ## #. ## This check shouldn't even be necessary for *existing* #. ## devices, since an existing device presented in the #. ## selection list should only be presented in that list #. ## if the export directory *is* under the device mountpoint. #: src/configure/nfsExportDruid.py:411 src/configure/nfsExportDruid.py:439 msgid "Export Directory must be underneath device mountpoint" msgstr "" "El directori d'exportació ha d'estar per sota del punt de muntatge del " "dispositiu" #. ## 'New Device' selected ### #: src/configure/nfsExportDruid.py:422 src/configure/smbShareDruid.py:348 msgid "Special File name is required for a new device" msgstr "Es necessita un nom de fitxer especial per un nou dispositiu" #: src/configure/nfsExportDruid.py:434 src/configure/smbShareDruid.py:360 msgid "Device Mountpoint is required for a new device" msgstr "Es necessita un punt de muntatge per als nous dispositius" #. if not stat.S_ISDIR(mode): #. errorMessage(_("Mount Point must be a directory")) #. return TRUE #. ## Verify that neither #. ## * the new device name, nor #. ## * the new device mountpoint #. ## already exists in the cluster. #: src/configure/nfsExportDruid.py:464 src/configure/smbShareDruid.py:384 msgid "Device Special File already exists in cluster" msgstr "El fitxer de dispositiu especial ja existeix en el cluster" #: src/configure/nfsExportDruid.py:469 src/configure/smbShareDruid.py:389 msgid "Device mountpoint already exists in cluster" msgstr "El punt de muntatge del dispositiu ja existeix al cluster" #: src/configure/smbShareDruid.py:337 msgid "" "Selected Device already contains a Samba Share Name - please select a " "different device" msgstr "" "El dispositiu seleccionat ja conté un nom de recurs compartit Samba. " "Seleccioneu un dispositiu diferent" #. ## New device, so set sharename to null ### #: src/configure/smbShareDruid.py:400 msgid "Share Name is required" msgstr "Es necessita el nom del recurs compartit" #. return to druid #: src/configure/smbShareDruid.py:406 msgid "Share Name may not contain spaces" msgstr "El nom del recurs compartit no pot contenir espais" #. return to druid #. ########################################################### #. ## Done with Share Name Page - Now prep for Finish Page ### #. ########################################################### #. ## We know that self.sharename is not null ### #. ## sharename being added ### #: src/configure/smbShareDruid.py:433 #, python-format msgid "" "\n" "When you press 'Apply' below, and then\n" "File => Save on the menu, samba configuration\n" "file\n" "\n" " %s\n" "\n" "will be created ***ON THIS MEMBER ONLY***.\n" "\n" "Remember to copy the samba configuration file\n" "to *ALL* other cluster members.\n" msgstr "" "\n" "Quan premeu 'Aplica' a sota, i després\n" "Fitxer/Desa en el menú, es crearà el fitxer\n" "de configuració\n" "\n" " %s\n" "\n" "només en ***aquest membre***.\n" "\n" #. ## sharename being changed ### #: src/configure/smbShareDruid.py:450 #, python-format msgid "" "\n" "When you press 'Apply' below, and then\n" "File => Save on the menu, the following\n" "will occur:\n" "\n" " 1. file '%s'\n" " will be renamed to '%s'\n" "\n" " 2. inside that file, all occurrences of\n" " '%s' will be changed to '%s'\n" "\n" "These changes will be made ***ON THIS MEMBER ONLY***.\n" "\n" "Remember to copy the new samba configuration file\n" "to, and remove the old samba configuration file from,\n" " *ALL* other cluster members.\n" msgstr "" "\n" "Quan premeu 'Aplica' a sota, i després\n" "Fitxer/Desa en el menú:\n" "\n" " 1. Es reanomenarà el fitxer '%s'\n" " com a '%s'\n" "\n" " 2. Es canviaran les concordances de\n" " '%s' per '%s'\n" "\n" "Aquests canvis s'aplicaran només a ***aquest membre***.\n" "\n" "Recordeu copiar el nou fitxer de configuració de samba\n" "a tots els membres del cluster i suprimiu el fitxer de\n" "configuració de tots els membres.\n" #. print "\nSmb Druid Finish now" #. print "--------------------" #. print " Svc name = [%s]" % self.service_name #. print " Svc existing = [%s]" % self.existing_service #. print " Svc new = [%s]" % self.new_service #. print #. print " Dev name = [%s]" % self.device_name #. print " Dev mount = [%s]" % self.device_mountpoint #. print " Dev sharename = [%s]" % self.sharename #. for "validate" #. ## do 'df [smbexport dir]' to get device ### #. dir_df = cluDF(self.dirname) #. filesystem = dir_df.get_filesystem() #. mountpoint = dir_df.get_mountpoint() #. print "\ndf filesystem=[%s]" % filesystem #. print "\ndf mountpoint=[%s]" % mountpoint #. ## Now add the SMB Sharename to the Device ### #. !/usr/bin/python #. ## powercontroller types can be UPPER case in old cluster.conf, so #. ## convert them to lower case here. #. #. Single Network Power Switch. #. #. #. Multiple network power switches. #. #. #. added 8/25/2003 HM - convert 'apcplus' to 'apcmaster' #. #. #. The 'login' was used as the /dev/ttyS* device in the old version #. of RHCM. Filter out "unused" things... #. #. #. The 'power switch port name' was stored as a member attribute in #. the old version of RHCM. #. #. #. Use the first member's quorum partition definitions. #. Complain if the quorum partition definitions do not match. #. #: src/convert/cluster-convert.py:107 #, python-format msgid "Warning: Raw Primary Partition mismatch: %s != %s" msgstr "Avís: Discrepància en les dades sense processar de la primera partició primària: %s != %s " #: src/convert/cluster-convert.py:108 src/convert/cluster-convert.py:116 #, python-format msgid "Warning: Cluster will use %s" msgstr "Avís: el cluster farà servir %s" #: src/convert/cluster-convert.py:110 src/convert/cluster-convert.py:118 #, python-format msgid "Warning: Reconfigure member %s to match." msgstr "Avís: torneu a configurar el membre %s per concordar." #: src/convert/cluster-convert.py:115 #, python-format msgid "Warning: Raw Shadow Partition mismatch: %s != %s" msgstr "Avís: Discrepància en les dades sense processar de la partició de sombra %s != %s " #. rec="%s\t\t%s/>\n" % (rec,getNFSExportsXML(exports)) #. #################### #. ## 'cluster' tag ### #. #################### #. ## add 'config_viewnumber' option ### #. #. Get daemons #. #. daemons=["cluquorumd","clurmtabd","clusvcmgrd"] #. for d in daemons: #. rec="%s\t<%s%s/>\n" % (rec,d,buildAttributes(conf.vars[d])) #. ######################## #. ## 'clumembd' daemon ### #. ######################## #. ######################## #. ## 'clulockd' daemon ### #. ######################## #. ########################## #. ## 'cluquorumd' daemon ### #. ########################## #. ######################### #. ## 'clurmtabd' daemon ### #. ######################### #. ## 'pollinterval' option was not included, so provide one #. ########################## #. ## 'clusvcmgrd' daemon ### #. ########################## #. #. Get the member + switch information from the members section. #. #. #. Get the shared state information from the members section. #. #. #. Get the service information from the members section. #. #: src/convert/cluster-convert.py:264 msgid "" "cluster-convert.py - convert old style cluster conf to cluster.xml\n" "\n" "Usage: cluster-convert.py inputfile outputfile" msgstr "" "cluster-convert.py: converteix la configuració de cluster antiga a cluster." "xml\n" "\n" "Ús: cluster-convert.py fitxerEntrada fitxerSortida"