Feature #469

Επέκταση του UI ώστε να κάνει κλήσεις στο /networks API

Added by Vangelis Koukis almost 13 years ago. Updated almost 13 years ago.

Status:Closed Start date:05/07/2011
Priority:High Due date:
Assignee:Christos Psaltis % Done:

0%

Category:Cyclades UI Spent time: -
Target version:v0.4

Description

Αφού το #415 έκλεισε, ανοίγει εδώ το δεύτερο μέρος του.
Το UI επεκτείνεται ώστε να κάνει κλήσεις στο /networks API (#409), το API είναι πλήρως τεκμηριωμένο από τον [verigak].


Related issues

related to Synnefo - Feature #661: To UI πρέπει να εκτελεί κλήσεις για αλλαγή των firewall p... Closed 06/08/2011
related to Synnefo - Feature #409: Επέκταση του API ώστε να υποστηρίζει χειρισμό ιδιωτικών δ... Closed 04/12/2011
related to Synnefo - Feature #415: Επέκταση του UI ώστε να χειρίζεται το δημόσιο και ιδιωτικ... Closed 04/13/2011
related to Synnefo - Feature #659: To API πρέπει να υποστηρίζει firewall profiles Closed 06/08/2011
related to Synnefo - Bug #591: Το networks tab δεν κανει σωστό positioning του Internet ... Closed 06/01/2011
related to Synnefo - Bug #471: Ειδοποίηση του χρήστη όταν κάτι είναι σε εξέλιξη στο UI Closed 05/07/2011
blocked by Synnefo - Bug #569: Κάθε δίκτυο στο /networks του API πρέπει να έχει κατάσταση Closed 05/23/2011
blocks Synnefo - Feature #407: Υποστήριξη δικτύων από το Synnefo Closed 04/12/2011

Associated revisions

Revision 5cd5ab8d
Added by Mike Muzurakis almost 13 years ago

move error dialog to home template, Refs #469

Revision 318f8360
Added by Mike Muzurakis almost 13 years ago

fix confirmation box positioning in private network vms, Refs #469

History

#1 Updated by Vangelis Koukis almost 13 years ago

  • Target version set to v0.3

#2 Updated by Vangelis Koukis almost 13 years ago

  • Target version changed from v0.3 to v0.4

#3 Updated by Christos Psaltis almost 13 years ago

  • Assignee changed from Dimitris Moraitis to Christos Psaltis

#4 Updated by Christos Psaltis almost 13 years ago

  • Status changed from New to Assigned

#5 Updated by Markos Gogoulos almost 13 years ago

  • Assignee changed from Christos Psaltis to Markos Gogoulos

#6 Updated by Christos Psaltis almost 13 years ago

  • Assignee changed from Markos Gogoulos to Christos Psaltis

Οι GET /networks και GET /networks/detail δεν σου επιστρέφουν έαν ένα δίκτυο είναι public ή όχι. Από την άλλη η GET /servers/id/ips από το spec σου δίνει public ips και private ips. Αυτό που δεν έχω καταλάβει είναι πώς σχετίζονται αυτά μεταξύ τους και τί είναι αυτό που πρέπει να δείχνω στο τέλος.

Για παράδειγμα θα πρέπει να κάνω ένα GET /networks και τόσα GET /servers/id/ips όσα είναι τα machines, και μετά από εκεί να ελέγξω τις τιμές των ip και να αποφασίσω εάν κάποιο δίκτυο είναι public?

Μήπως μου διαφεύγει κάτι;

#7 Updated by Christos Psaltis almost 13 years ago

Η απάντηση του Κωνσταντίνου στο #541 μου έλυσε και αυτήν την απορία, ευχαριστώ.

#8 Updated by Christos Psaltis almost 13 years ago

Κάνοντας διάφορα εδώ έχω συναντήσει το παρακάτω θέμα.

Η αρχική μου ιδέα ήταν να κάνω διαρκώς GET networks/detail και να ενημερώνω τη λίστα όπως και στα machines. Ωστόσο λείπουν πληροφορίες που της έχει μόνο στο GET servers/detail. Η αλήθεια είναι ότι η δεύτερη κλήση θα πρέπει να γίνεται συνεχώς ούτως ή άλλως ώστε να ενημερώνεται το ui για τυχόν αλλαγές στην κατάσταση των μηχανημάτων, πχ delete, stop κλπ. Η μόνη πληροφορία που δεν έχει το servers/detail ακι την έχει μόνο η networks/detail είναι τα ονόματα των ιδιωτικών δικτύων.

Για τον παραπάνω λόγο θα χρειαστεί να κάνω δύο επαναλαμβανόμενα calls ένα GET networks/detail και ένα GET servers/detail. Εάν αυτό δεν σας προκαλεί θέμα λόγω αύξησης του load να συνεχίσω έτσι. Διαφορετικά η μόνη λύση που βλέπω είναι να αλλάξει το api έτσι ώστε η μία από τις δύο κλήσεις, πιθανότατα η servers/detail, να επιστρέφει όλα τα δεδομένα που πρέπει να απεικονιστούν στο networks section.

#9 Updated by Vangelis Koukis almost 13 years ago

Έχεις δίκιο. Η βασική κλήση είναι η GET /servers/detail. Από εκεί μπορείς να έχεις ποια μηχανήματα υπάρχουν, σε ποια δίκτυα είναι συνδεδεμένα, IPs / MACs για κάθε σύνδεση. Οπότε, όταν μια τέτοια κλήση επιστρέψει νέα δεδομένα (όχι HTTP 304 NOT MODIFIED), μπορείς να ανανεώνεις το view. Η δεύτερη κλήση, GET /networks/detail χρειάζεται για τα ονόματα των ιδιωτικών δικτύων, τα οποία αν καταλαβαίνω καλά δεν επιστρέφει η /servers/detail, αν κάνω λάθος ο [verigak] με διορθώνει.

Οπότε, ναι, περιοδικά θα γίνονται δύο κλήσεις όταν είναι στο networks tab, μία για /servers/detail [όλη η πληροφορία που ουσιαστικά παρουσιάζεται], μία για /networks/detail [τα ονόματα των δικτύων].

#10 Updated by Christos Psaltis almost 13 years ago

  • Status changed from Assigned to Feedback

Δύο ερωτήματα σχετικά με τις ενέργειες σε μηχανήματα στο networks:

1. Όταν ένας server γίνεται disconnected από το public network τί θα πρέπει να γίνεται με τις ip του; Από ότι βλέπω δεν υπάρχει κάποια κλήση που μπορεί να τροποποιήσει public ips, ούτε στο openstack api ούτε στο δικό μας implementation. Μου διαφεύγει κάτι;

2. Tο action details σε servers στο public network ή σε κάποιο private τί θα πρέπει να επιστρέφει; Το GET server details; Και αν ναι πώς θα πρέπει να φαίνεται αυτό;

#11 Updated by Christos Psaltis almost 13 years ago

Να προσθέσω άλλα δύο θέματα εδώ:

1. Όταν σβήσω ένα ιδιωτικό δίκτυο που περιέχει κάποιον server, τότε η server details μου λέει ότι το status του server είναι unknown και σαν συνέπεια στη λίστα των μηχανημάτων φαίνονται πλέον ώς ανενεργά.

2. Δεν υπάρχει κάποιο state στα δίκτυα που να μου επιτρέπει να καταλάβω εάν έχουν σβηστεί ή όχι. Οπότε την επόμενη φορά που το δίκτυο θα πάρει κάποιο change δε θα ξέρω εάν είναι νέο ή σβησμένο.

#12 Updated by Vangelis Koukis almost 13 years ago

  • Status changed from Feedback to Assigned

Για το (2) έχει ανοίξει το #569, θα το δει o [verigak]. Τα δίκτυα θα έχουν τουλάχιστον τις καταστάσεις ACTIVE, DELETED. Ο κώδικας για τα δίκτυα στο UI μπορεί να έχει ακριβώς την ίδια συμπεριφορά που υλοποιεί για τις μηχανές.

Για το (1), δεν το κατάλαβα: λες ότι επιστρέφεται status="UNKNOWN" από την απάντηση GET /servers/detail; αυτό είναι γενικότερο θέμα, που παρατηρήσαμε κι εμείς σε άσχετη φάση, ίσως να είναι διαφορετικό bug. Όπως και να έχει, το UI εκεί έχει θέμα, δεν χειρίζεται σωστά την περίπτωση status="UNKNOWN", το εμφανίζει "Running". Έχω ανοίξει το #571 που περιγράφει ακριβώς τι συμβαίνει στην πλευρά του UI.

Επαναλαμβάνω, ότι δεν θα έπρεπε το API να επιστρέφει κάτι τέτοιο, αν μπορείτε να πείτε ακριβώς τι κάνετε και βλέπετε μηχανήματα UKNOWN θα βόλευε. Συμπληρώστε στο #571. Και πάλι όμως, το UI πρέπει να χειρίζεται την κατάσταση UNKNOWN και να μη βγάζει (ψευδώς) ότι το μηχάνημα είναι "Running".

Εδώ η δουλειά μπορεί να συνεχιστεί με προβληματική την απάντηση ?changes-since, θα κλείσει μέσα στην εβδομάδα.

#13 Updated by Christos Psaltis almost 13 years ago

Συνεχίζοντας εδώ,

1. Όταν ένα μηχάνημα είναι σταματημένο, τότε θεωρούμε ότι έχει ips, public και private? Θα πρέπει να εμφναίζεται στα αντίστοιχα δίκτυα;
2. Υπάρχουν κάποια δημόσια ip που δεν θεωρούνται έγκυρα, πχ 0.0.0.0 (v4), και αν ναι ποια; Σε αυτήν την περίπτωση θα πρέπει να μπαίνουν μόνο στα ιδιωτικά δίκτυα οι συγκεκριμένοι σέρβερ;
3. Αυτό που δεν μπορώ να δοκιμάσω από την δική μας πλευρά είναι το τί γίνεται εάν ένας χρήστης συνδεθεί, πχ με ssh, σε κάποιο μηχάνημα και αλλάξει από κει την public ip του. Για να προχωρήσω θα το κάνω χωρίς να το έχω δοκιμάσει.

Επίσης να θυμίσω λίγο και το σημείο 10 παραπάνω, μάλλον παράπεσε ανάμεσα στα υπόλοιπα.

#14 Updated by Vangelis Koukis almost 13 years ago

Christos Psaltis wrote:

Συνεχίζοντας εδώ,

Με διορθώνει ο [verigak] αν κάτι ξεφύγει.

1. Όταν ένα μηχάνημα είναι σταματημένο, τότε θεωρούμε ότι έχει ips, public και private? Θα πρέπει να εμφναίζεται στα αντίστοιχα δίκτυα;

Δεν παίζει ρόλο αν το μηχάνημα είναι σταματημένο. Αν είναι συνδεδεμένο με κάποιο δίκτυο, αυτό θα εμφανίζεται στην απάντηση /servers/detail.
Το μηχάνημα θα πρέπει να εμφανίζεται κανονικά, σβησμένο ή αναμμένο, στα δίκτυα στα οποία το GET /servers/detail το εμφανίζει συνδεδεμένο.
Εδώ βολεύει να υπάρχει κάποια οργάνωση Model-View-Controller στο UI: το UI κρατάει κάπου την κατάσταση των servers και των δικτύων (Model), η Javascript με ?changes-since τα ανανεώνει περιοδικά (Controller) και φτιάχνει από αυτά Views (HTML5, DOM) για να τα δείχνει.

2. Υπάρχουν κάποια δημόσια ip που δεν θεωρούνται έγκυρα, πχ 0.0.0.0 (v4), και αν ναι ποια; Σε αυτήν την περίπτωση θα πρέπει να μπαίνουν μόνο στα ιδιωτικά δίκτυα οι συγκεκριμένοι σέρβερ;

Το UI εμφανίζει ακριβώς ότι του επιστρέφει το API. Άμα το API του πει ότι ένα μηχάνημα έχει IPv4 0.0.0.0 σε ένα δίκτυο, θα γράφει 0.0.0.0.
Αν κάποιο attribute δεν υπάρχει, ας το εμφανίζει κενό.

3. Αυτό που δεν μπορώ να δοκιμάσω από την δική μας πλευρά είναι το τί γίνεται εάν ένας χρήστης συνδεθεί, πχ με ssh, σε κάποιο μηχάνημα και αλλάξει από κει την public ip του. Για να προχωρήσω θα το κάνω χωρίς να το έχω δοκιμάσει.

Δεν γίνεται τίποτε. Οι χρήστες δεν έχουν δικαίωμα να αλλάζουν IPs μέσα στο μηχάνημα. Αν το κάνουν δεν θα έχουν δίκτυο.
Υπάρχει ένας ολόκληρος μηχανισμός από πίσω, δεν είναι μόνο ό,τι βλέπετε στο API. Ο μηχανισμός αυτός ξέρει τι IPs έχουν ανατεθεί, τις απαντάει με DHCP, και αν κάποιος καρφώσει άσχετη IP με το χέρι, δεν μπορεί να δρομολογήσει πακέτα προς το δίκτυο. Οπότε δεν υπάρχει λόγος να σας απασχολεί αυτό.

Επίσης να θυμίσω λίγο και το σημείο 10 παραπάνω, μάλλον παράπεσε ανάμεσα στα υπόλοιπα.

Αν λες το σημείο (1), έχω ανοίξει το #571 για το UI (χειρισμός κατάστασης "UNKNOWN") και προσπαθώ να δω γιατί συμβαίνει έτσι κι αλλιώς αυτό στο API, αν έχετε reproducible τρόπο στείλτε.

#15 Updated by Christos Psaltis almost 13 years ago

οκ με όσα λες.

Δεν αναφερόμουν στο 11, που άνοιξαν τα tickets, αλλά στο σημείο 10. Εκεί ρωτάω τί γίνεται με το action disconnect στους servers των δημοσίων δικτύων και το action details στους servers και των δύο τύπων δικτύων.

#16 Updated by Vangelis Koukis almost 13 years ago

Christos Psaltis wrote:

Δύο ερωτήματα σχετικά με τις ενέργειες σε μηχανήματα στο networks:

1. Όταν ένας server γίνεται disconnected από το public network τί θα πρέπει να γίνεται με τις ip του; Από ότι βλέπω δεν υπάρχει κάποια κλήση που μπορεί να τροποποιήσει public ips, ούτε στο openstack api ούτε στο δικό μας implementation. Μου διαφεύγει κάτι;

Όχι, δεν μπορεί να γίνει disconnected από το public δίκτυο, ούτε υπάρχει κλήση που να τροποποιεί public IPs, τα πάντα στο δημόσιο δίκτυο θεωρούμε ότι αποφασίζονται από το API.

Αν κάποιος δεν θέλει υποστήριξη για δημόσιο δίκτυο, υπάρχουν firewall profiles, αύριο θα είναι διαθέσιμη τεκμηρίωση για τη χρήση τους από τον [verigak].

2. Tο action details σε servers στο public network ή σε κάποιο private τί θα πρέπει να επιστρέφει; Το GET server details; Και αν ναι πώς θα πρέπει να φαίνεται αυτό;

Θα απαντήσει ο Κωνσταντίνος σε αυτό.

#17 Updated by Constantinos Venetsanopoulos almost 13 years ago

To details θα πρέπει να τον πετάει στο αντίστοιχο single view του συγκεκριμένου machine

#18 Updated by Christos Psaltis almost 13 years ago

Ακόμα μία ερώτηση εδώ.

Το edit action στα ιδιωτικά δίκτυα κάνει:
α) rename το δίκτυο;
β) τίποτα, αλλά πρέπει να μείνει;
γ) τίποτα και πρέπει να φύγει;
δ) κάτι άλλο

#19 Updated by Constantinos Venetsanopoulos almost 13 years ago

τίποτα και πρέπει να φύγει. Το rename γίνεται με μολυβάκι ακριβώς όπως και στο machines

#20 Updated by Christos Psaltis almost 13 years ago

  • Status changed from Assigned to Feedback

Εντάξει και αυτό, όλες οι λειτουργίες είναι έτοιμες και διορθώθηκαν λίγα css προβληματάκια που υπήρχαν μέχρι τώρα.

#21 Updated by Vangelis Koukis almost 13 years ago

  • Status changed from Feedback to Assigned

Προσπαθώ να κάνω merge εδώ και υπάρχουν θέματα.

Έκανα ένα πρώτο merge του api-current στο ui-0.4 και σκάει γιατί:

[31/5/2011 12:22:04 μμ] JavaScript - http://62.217.120.67:8000/
Unknown thread
Uncaught exception: TypeError: Cannot convert 'server.addresses.values0' to object
Error thrown at line 337, column 12 in <anonymous function>(i, server) in http://62.217.120.67:8000/:
machine.find("a.ip span.public").text(String(server.addresses.values0.values0.addr).replace(',',' '));
called via Function.prototype.call() from line 49, column 866 in <anonymous function: each>(a, b, d) in http://62.217.120.67:8000/static/jquery.tools.min.js:
var f,e=0,j=a.length,i=j===w||c.isFunction(a);
called from line 253, column 4 in update_machines_view(data) in http://62.217.120.67:8000/:
$.each(data.servers.values, function(i,server) {
called from line 248, column 16 in <anonymous function: success>(data, textStatus, jqXHR) in http://62.217.120.67:8000/static/synnefo.js:
update_machines_view(data);
called from line 143, column 1033 in b() in http://62.217.120.67:8000/static/jquery.tools.min.js:
e.success&&
called via Function.prototype.call() from line 149, column 367 in <anonymous function: x.onreadystatechange>(q) in http://62.217.120.67:8000/static/jquery.tools.min.js:
j||b();

Το UI δεν πρέπει να κάνει υποθέσεις για την απάντηση.
Το μηχάνημα μπορεί να μην έχει IPv4, IPv6, να μην είναι στο public δίκτυο [ακόμη] κλπ.
Γενικά, αν κάτι δεν έχει τιμή ακόμη, μπορεί να λείπει εντελώς από την απάντηση [ipv4, ipv6 ή και το "addresses" attribute όπως είναι].
Αν κάποιο attribute δεν υπάρχει, πρέπει να πιάνετε το exception και να βγάζετε το αντίστοιχο πεδίο άδειο.
Επίσης, δεν υπάρχει εγγύηση ότι το public δίκτυο είναι το πρώτο δίκτυο της απάντησης. Το public δίκτυο είναι αυτό που έχει id="public" στην απάντηση GET /servers.

Αναλυτική περιγραφή του API και των επεκτάσεων:
http://trac.cslab.ece.ntua.gr:8081/cloud/wiki/OpenStackAPI#ListNetworks

#22 Updated by Christos Psaltis almost 13 years ago

  • Status changed from Assigned to Feedback

Εδώ έχουν γίνει πολλές διορθώσεις και πλέον παίζει κανονικά με το merge του api-current. To τελευταίο commit είναι το commit:ccaa2c33.

Ένας από τους λόγους που χτυπούσε ήταν ότι τo δημόσιο δίκτυο αντί για id='public' έχει πλέον name='public'. Αυτό είναι διαφορετικό από ότι ίσχυε μέχρι τώρα και από τα docs του openstack και δεν ξέρω αν είναι επιλογή ή κάποιο πρόβλημα.

#23 Updated by Vangelis Koukis almost 13 years ago

Αυτό θα το αλλάξουμε, θα είναι id="public" για το δημόσιο δίκτυο, id=κάτι-άλλο-μοναδικό για τα ιδιωτικά δίκτυα.

Και στα docs του openstack αυτό είναι πολύ θολό: δεν φαίνεται υποχρεωτικό να υπάρχει καν id="public", το id είναι απλώς ένα id.
Από την άλλη πλευρά, στην τρέχουσα έκδοση του API τους δεν έχουν και τη δυνατότητα να δημιουργήσει ο χρήστης δικά του δίκτυα. Οπότε τους αρκούσε ένα σταθερό id="public" κι ένα id="private", προδιαγεγραμμένα.

Δοκιμάζω τώρα το αποτέλεσμα του merge, θα ανοίξω ότι tickets προκύψουν.

#24 Updated by Vangelis Koukis almost 13 years ago

  • Status changed from Feedback to Assigned

Με μια πρώτη δοκιμή υπάρχουν τα εξής θέματα:

θ1)

Vangelis Koukis wrote:

Οπότε, ναι, περιοδικά θα γίνονται δύο κλήσεις όταν είναι στο networks tab, μία για /servers/detail [όλη η πληροφορία που ουσιαστικά παρουσιάζεται], μία για /networks/detail [τα ονόματα των δικτύων].

Αυτό δεν φαίνεται να γίνεται, και προκαλεί πρόβλημα. Φτιάχνω ένα νέο δίκτυο, το οποίο δεν εμφανίζεται ποτέ, γιατί το UI δεν κάνει GET /networks, κάνει μόνο GET /servers.

Δοκιμάζω με Opera.

θ2) Στο κουτί που ζητάει τη δημιουργία νέου δικτύου πρέπει να παίζουν Enter / Esc.
θ3) έχει θέμα το παράθυρο για νέο ιδιωτικό δίκτυο αν επιστραφεί σφάλμα κατά τη δημιουργία του νέου δικτύου [μένει για πάντα στην οθόνη], το περιγράφω στο #471.

#25 Updated by Mike Muzurakis almost 13 years ago

Εδώ έγιναν τα θ2, θ3

#26 Updated by Vangelis Koukis almost 13 years ago

Ναι, τα θ2, θ3 φαίνεται πως είναι ΟΚ τώρα.

Υπάρχουν ακόμη κάποια θέματα, π.χ. τώρα έχω φτιάξει ιδιωτικό δίκτυο, το βλέπω με cloud lsnet, δεν εμφανίζεται καθόλου στο UI. [API και UI που τρέχει στο 62.217.120.67:8000].

Οπότε, για να κλείσουμε το ζήτημα του merge, παρακαλώ κάντε μια περιήγηση στο networks tab κι επιβεβαιώσετε ότι γενικότερα δουλεύει σωστά, ώστε να το δω μια και καλή.

#27 Updated by Mike Muzurakis almost 13 years ago

πράγματα, τα δίκτυα έοχυν εμφανίσει προβλήματα που δεν έβλεπα πριν (φαντάζομαι μετά τo merge με το api-current). Μόλις διορθωθούν, θα το γυρίσω σε feedback για να γίνει συνολικός έλεγχος πριν κλείσει.

#28 Updated by Christos Psaltis almost 13 years ago

Εντάξει και το θ1 στο commit:9bb263c1, εδώ έχουμε πάλι μια εμφάνιση του #317. Η λύση είναι προσωρινή καθώς δεν επιτρέπει σωστό error reporting και θα πρέπει στο 0.5 να βρούμε κάποιον τρόπο να το λύσουμε μια και καλή αυτό.

Δεν έχει κλείσει εντελώς το ticket αυτό, θα ενημερώσω σε λίγο.

#29 Updated by Christos Psaltis almost 13 years ago

  • Status changed from Assigned to Feedback

Εδώ δεν μπορώ να προσθέσω servers σε κάποιο δίκτυο ούτε με το ui αλλά και ούτε με το cloud tool.

Το post επιστρέφει επιτυχία, αλλά η λίστα με τους servers που έχει πλέον το δίκτυο είναι κενή. Το ίδιο παρατηρώ είτε πάω στο localhost:8000/api/v1.1/network/details είτε κάνω netinfo με το tool. Φαίνεται σαν πρόβλημα του api. Έχω κάνει merge την τελευταία έκδοση, με τις αλλαγές στο settings.py, και δεν διορθώθηκε.

Μπορείτε να επιβεβαιώσετε και σεις αυτήν την συμπεριφορά; Μήπως μου έχει ξεφύγει κάποιο updated setting?

#30 Updated by Christos Psaltis almost 13 years ago

Επίσης σχετικά με το πρόβλημα που αναφέρεται στο σημείο 26 πιο πάνω, δεν κατάφερα να το αναπαράγω τοπικά και το 62.217.120.67:8000 μου δίνει 502.

#31 Updated by Vangelis Koukis almost 13 years ago

  • Status changed from Feedback to Assigned

Christos Psaltis wrote:

Εδώ δεν μπορώ να προσθέσω servers σε κάποιο δίκτυο ούτε με το ui αλλά και ούτε με το cloud tool.

Το post επιστρέφει επιτυχία, αλλά η λίστα με τους servers που έχει πλέον το δίκτυο είναι κενή. Το ίδιο παρατηρώ είτε πάω στο localhost:8000/api/v1.1/network/details είτε κάνω netinfo με το tool. Φαίνεται σαν πρόβλημα του api. Έχω κάνει merge την τελευταία έκδοση, με τις αλλαγές στο settings.py, και δεν διορθώθηκε.

Μπορείτε να επιβεβαιώσετε και σεις αυτήν την συμπεριφορά; Μήπως μου έχει ξεφύγει κάποιο updated setting?

Ναι, αυτό είναι θέμα υλοποίησης της πλευράς του API, υπάρχει μικρό πρόβλημα με την ενημέρωση της ΒΔ. Δεν απασχολεί το UI. Αν δεν το βγάζει το command line εργαλείο, δεν το βγάζει.

#32 Updated by Vangelis Koukis almost 13 years ago

Christos Psaltis wrote:

Επίσης σχετικά με το πρόβλημα που αναφέρεται στο σημείο 26 πιο πάνω, δεν κατάφερα να το αναπαράγω τοπικά και το 62.217.120.67:8000 μου δίνει 502.

Το έχω τώρα να τρέχει, συνδέσου.
Υπάρχουν δύο ιδιωτικά δίκτυα, το "new1" και το "aa1".
Όταν πρωτομπαίνω στο network tab, μου βγάζει μόνο το public δίκτυο "Internet".

Τώρα βλέπω ότι αν το αφήσω ~5 δευτερόλεπτα βγάζει και τα υπόλοιπα από κάτω. Αλλά θα περίμενε κανείς αυτά να βγαίνουν όλα μαζί, στην αρχή.

#33 Updated by Vangelis Koukis almost 13 years ago

Κι ένα τελευταίο: το public δίκτυο έχει id="public", το API έχει ανανεωθεί ώστε να το κάνει σωστά αυτό.
Τα ονόματα είναι user-manageable πράγματα (το attribute "name") ας μην βασίζεται το UI σε αυτό.

#34 Updated by Christos Psaltis almost 13 years ago

  • Status changed from Assigned to Feedback

Εφόσον αφήνουμε την προσθήκη server σε ιδιωτικό δίκτυο, τότε το θέμα της αναμονής για να σου βγάλει τα ιδιωτικά δίκτυα, συμπίπτει με το #591 που έχει αναφέρει ο Κωνσταντίνος. Όσο για το id = 'public', αυτό έχει ήδη αλλάξει σε σχέση με χθες και είμαστε οκ.

Νομίζω ότι εάν δεν έχει εντοπιστεί κάτι άλλο και έχουμε ήδη το #591, που κοιτάω τώρα, μπορεί να κλείσει αυτό.

#35 Updated by Vangelis Koukis almost 13 years ago

  • Status changed from Feedback to Assigned

Δείτε στο http://62.217.120.67:8001, το UI σκάει εξ αρχής.
Ενδεικτικά:

[1/6/2011 4:17:49 μμ] JavaScript - http://62.217.120.67:8001/
Unknown thread
Uncaught exception: TypeError: Cannot convert 'a' to object
Error thrown at line 49, column 866 in &lt;anonymous function: each&gt;(a, b, d) in http://62.217.120.67:8001/static/jquery.tools.min.js:
var f,e=0,j=a.length,i=j===w||c.isFunction(a);
called from line 1295, column 16 in &lt;anonymous function&gt;(i, value) in http://62.217.120.67:8001/static/synnefo.js:
$.each (value.values, function(i, ip) {
called via Function.prototype.call() from line 49, column 866 in &lt;anonymous function: each&gt;(a, b, d) in http://62.217.120.67:8001/static/jquery.tools.min.js:
var f,e=0,j=a.length,i=j===w||c.isFunction(a);
called from line 1293, column 8 in get_public_ips(server) in http://62.217.120.67:8001/static/synnefo.js:
$.each (server.addresses.values, function(i, value) {
called from line 369, column 12 in &lt;anonymous function&gt;(i, server) in http://62.217.120.67:8001/:
var ips = get_public_ips(server);
called via Function.prototype.call() from line 49, column 866 in &lt;anonymous function: each&gt;(a, b, d) in http://62.217.120.67:8001/static/jquery.tools.min.js:
var f,e=0,j=a.length,i=j===w||c.isFunction(a);
called from line 253, column 4 in update_machines_view(data) in http://62.217.120.67:8001/:
$.each(data.servers.values, function(i,server) {
called from line 248, column 16 in &lt;anonymous function: success&gt;(data, textStatus, jqXHR) in http://62.217.120.67:8001/static/synnefo.js:
update_machines_view(data);
called from line 143, column 1033 in b() in http://62.217.120.67:8001/static/jquery.tools.min.js:
e.success&&
called via Function.prototype.call() from line 149, column 367 in &lt;anonymous function: x.onreadystatechange&gt;(q) in http://62.217.120.67:8001/static/jquery.tools.min.js:
j||b();
var f,e=0,j=a.length,i=j===w||c.isFunction(a);
called from line 1293, column 8 in get_public_ips(server) in http://62.217.120.67:8001/static/synnefo.js:
$.each (server.addresses.values, function(i, value) {
called from line 369, column 12 in &lt;anonymous function&gt;(i, server) in http://62.217.120.67:8001/:
var ips = get_public_ips(server);
called via Function.prototype.call() from line 49, column 866 in &lt;anonymous function: each&gt;(a, b, d) in http://62.217.120.67:8001/static/jquery.tools.min.js:
var f,e=0,j=a.length,i=j===w||c.isFunction(a);
called from line 253, column 4 in update_machines_view(data) in http://62.217.120.67:8001/:
$.each(data.servers.values, function(i,server) {
called from line 248, column 16 in &lt;anonymous function: success&gt;(data, textStatus, jqXHR) in http://62.217.120.67:8001/static/synnefo.js:
update_machines_view(data);
called from line 143, column 1033 in b() in http://62.217.120.67:8001/static/jquery.tools.min.js:
e.success&&
called via Function.prototype.call() from line 149, column 367 in &lt;anonymous function: x.onreadystatechange&gt;(q) in http://62.217.120.67:8001/static/jquery.tools.min.js:
j||b();

#36 Updated by Christos Psaltis almost 13 years ago

Νομίζω ότι με το commit:4667a575 έχει λυθεί αυτό. Μπορείτε να κάνετε ένα pull και να το δω ξανά;

#37 Updated by Constantinos Venetsanopoulos almost 13 years ago

Έγινε pull, δες το γιατί δεν παίζει καθόλου

#38 Updated by Vangelis Koukis almost 13 years ago

Επίσης, το networks tab δεν ανανεώνεται σωστά. Και πάλι καθυστερεί σημαντικά να ανανεωθεί, απλώς βγάζει το spinner στο ενδιάμεσο.

Έχε υπόψη ότι το κάθε πότε κάνει poll τελικά θα είναι configurable και θα αλλάξει αρκετές φορές από τους διαχειριστές μέχρι το τελικό deployment. Αυτό, γιατί είναι trade-off ανάμεσα στην αποκρισιμότητα του interface (πόσο γρήγορα τσιμπάει τις αλλαγές) και τον φόρτο στην υπηρεσία.

Οπότε, θα μπορούσε να είναι και 20sec. Απ'ό,τι καταλαβαίνω, τώρα πρέπει να περιμένει κανείς κάποιους κύκλους για να δείξει όλα τα δεδομένα, χωρίς να υπάρχει λόγος. Τα δεδομένα πρέπει την πρώτη φορά να έρχονται σωστά, με τη μία, και μετά να ξεκινάει το refresh. Όπως θα έπρεπε [είχα την εντύπωση ότι έτσι συνέβαινε] να γίνεται και με τους servers.

#39 Updated by Christos Psaltis almost 13 years ago

  • Status changed from Assigned to Feedback

Δοκιμάστε ένα τελευταίο pull, νομίζω το πρόβλημα λύθηκε. Το έχω δοκιμάσει στη δική μου βάση με στοιχεία αντίστοιχα των instances στην :8000 και :8001.

Μαζί με αυτό λύθηκε πιστεύω και η δεύτερη παρατήρηση του #591. Θα γράψω και εκεί.

#40 Updated by Vangelis Koukis almost 13 years ago

  • Status changed from Feedback to Assigned

Πράγματι, τώρα παίζει πολύ καλύτερα. Μπορώ να προσθέσω ιδιωτικό δίκτυο, να δω τα μηχανήματα που έχει μέσα κλπ.
Όμως, υπάρχει το εξής: Ζητάω να προστεθεί ένα μηχάνημα στο "new1" πχ, και βλέπω άπειρα POSTs στον runserver. Παλιότερα είχα δει καμιά 20αριά, τώρα βλέπω 5:

[01/Jun/2011 16:02:08] "POST /api/v1.1/networks/18/action HTTP/1.0" 202 0
[01/Jun/2011 16:02:08] "POST /api/v1.1/networks/18/action HTTP/1.0" 202 0
[01/Jun/2011 16:02:09] "POST /api/v1.1/networks/18/action HTTP/1.0" 202 0
[01/Jun/2011 16:02:09] "POST /api/v1.1/networks/18/action HTTP/1.0" 202 0
[01/Jun/2011 16:02:09] "POST /api/v1.1/networks/18/action HTTP/1.0" 202 0

#41 Updated by Christos Psaltis almost 13 years ago

Σε ποιο instance το δοκιμάζεις, γιατί τοπικά δεν μου προκαλείται ούτε με το tool ούτε με το ui. Την προσθήκη την κάνεις από το UI?

#42 Updated by Vangelis Koukis almost 13 years ago

Christos Psaltis wrote:

Σε ποιο instance το δοκιμάζεις, γιατί τοπικά δεν μου προκαλείται ούτε με το tool ούτε με το ui. Την προσθήκη την κάνεις από το UI?

Δοκιμάζω στο 62.217.120.67:8000, με Opera.
Αν κάνεις tools/cloud ls θα δεις ότι ο ένας server που υπάρχει έχει κάρτα δικτύου στο ίδιο ιδιωτικό δίκτυο 4-5 φορές, μία για κάθε POST που έγινε.

#43 Updated by Christos Psaltis almost 13 years ago

Το φαντάστηκα ότι ήταν αυτό από το id του server και έκανα διάφορες δοκιμές χωρίς να καταφέρω να το αναπαράγω. Η κονσόλα του opera έδειχνε μόνο μία κλήση σε όλες τις δοκιμές που έκανα.

Μερικές σημειώσεις εδώ:

1. Το instance στην :8000 δεν είναι στην τελευταία έκδοση. Δε νομίζω ότι παίζει κάποιο ρόλο αυτό όμως.
2. Πώς κατάφερες να προσθέσεις μηχανές στο ιδιωτικό δίκτυο. Στο δικό μου instance δεν μπορώ να το κάνω ούτε με το tool, ούτε με το ui. Έχεις κάποια άλλη έκδοση με uncommited αλλαγές; Ίσως εκεί να έχουμε κάποιο θέμα.
3. Γιατί το api σου επιτρέπει να κάνεις πολλαπλά post με τον ίδιο server στο ίδιο δίκτυο; Υπάρχει κάποιος λόγος ή είναι κάτι που θα αλλάξει στο μέλλον;

#44 Updated by Vangelis Koukis almost 13 years ago

Christos Psaltis wrote:

Το φαντάστηκα ότι ήταν αυτό από το id του server και έκανα διάφορες δοκιμές χωρίς να καταφέρω να το αναπαράγω. Η κονσόλα του opera έδειχνε μόνο μία κλήση σε όλες τις δοκιμές που έκανα.

Μερικές σημειώσεις εδώ:

1. Το instance στην :8000 δεν είναι στην τελευταία έκδοση. Δε νομίζω ότι παίζει κάποιο ρόλο αυτό όμως.

Σίγουρα; έκανα git pull και δεν έφερε κάτι, βασικά είναι στο commit:1c298d4d.

2. Πώς κατάφερες να προσθέσεις μηχανές στο ιδιωτικό δίκτυο. Στο δικό μου instance δεν μπορώ να το κάνω ούτε με το tool, ούτε με το ui. Έχεις κάποια άλλη έκδοση με uncommited αλλαγές; Ίσως εκεί να έχουμε κάποιο θέμα.

Όχι, τρέχω το τελευταίο ui-0.4, στο οποίο προηγούμενα είχα κάνει merge/push το τελευταίο api-current.
Δοκίμασε με ένα εντελώς νέο instance σου, γιατί μπορεί να έχει παίξει θέμα με το network configuration αυτού που έχεις τώρα, να είναι στραμπουληγμένο στο ganeti λόγω bugs προηγουμένων εκδόσεων. Επίσης, μπορείς να δοκιμάσεις να σβήσεις όλα τα ιδιωτικά σου δίκτυα, αν δεν τα χρειάζεσαι.

3. Γιατί το api σου επιτρέπει να κάνεις πολλαπλά post με τον ίδιο server στο ίδιο δίκτυο; Υπάρχει κάποιος λόγος ή είναι κάτι που θα αλλάξει στο μέλλον;

Γενικά το API είναι τελείως ασύγχρονο, δεν ξέρει ότι έχεις ζητήσει να μπει μια νέα σύνδεση όταν του ζητάς τη δεύτερη. Λέει ότι έχεις συνδεθεί, όταν το Ganeti [αργότερα] του το αναφέρει, και μπει στη ΒΔ.

Επίσης, δεν αποκλείεται πράγματι κάποιος να θέλει δύο κάρτες δικτύου στο ίδιο ιδιωτικό δίκτυο, π.χ. για δοκιμές.

Τέλος, για την προσθήκη μηχανήματος σε ιδιωτικό δίκτυο, γενικά μου παίζει αυτό:

devel@store67:~/synnefo [ui-0.4]$ tools/cloud createnet kalhmera
created: 2011-06-01T18:53:34.779572+00:00
id: 22
name: kalhmera
servers:
status: ACTIVE
updated: 2011-06-01T18:53:34.779602+00:00
devel@store67:~/synnefo [ui-0.4]$ tools/cloud connect 79 22
devel@store67:~/synnefo [ui-0.4]$ tools/cloud ls -l
79 ll
addresses: public/public aa:00:00:59:4e:ef [192.168.32.7]
18/lkl aa:00:00:98:bc:2a
18/lkl aa:00:00:61:92:a6
18/lkl aa:00:00:37:af:a8
20/lllkk aa:00:00:ea:a2:f1
21/xristos aa:00:00:ab:57:d7
22/kalhmera aa:00:00:50:29:8e
created: 2011-06-01T15:52:26+00:00
flavorRef: 1
imageRef: 4
metadata: OS="redhat"
progress: 100
status: ACTIVE
updated: 2011-06-01T18:53:46+00:00

#45 Updated by Mike Muzurakis almost 13 years ago

  • Status changed from Assigned to Feedback

Σε μας είναι οκ τώρα τα δίκτυα. Έκανα push τις τελευταίες αλλαγές.

Παρατηρήσαμε ένα μικρό glitch όμως: Ενώ κάνουμε ένα POST για να προσθέσουμε σέρβερ σε ένα ιδιωτικό δίκτυο, μερικές φορές (μάλλον είναι θέμα timimg με το scheduled GET ή με το πόσο γρήγορα απαντάει το API?) παίρνουμε 2x2 200άρια GETs, ενώ θα έπρεπε να παίρνουμε 2x1 (ένα για το servers και ένα για το networks). Όταν παίρνουμε 2 servers/detail, το 1ο επιστρέφει μεν τον server που κάναμε add, αλλά χωρίς να τον έχει στο δίκτυο, ενώ το επόμενο GET 200 που έρχεται στο επόμενο refresh έχει το server μέσα στο δίκτυο. Δεν είναι critical, γιατί τελικά ο σέρβερ ζωγραφίζεται, απλά όταν συμβαίνει αυτό, αργεί να ζωγραφιστεί.

Το ερώτημα είναι, γιατί την 1η φορά το API μας απαντάει 200, και μας στέλνει το server όπως ήταν και πριν (χωρίς να τον έχει βάλει στο δίκτυο);

Κατά τα άλλα πρέπει να διορθώθηκαν τα προβλήματα.

#46 Updated by Christos Psaltis almost 13 years ago

Να συμπληρώσω εδώ ότι για να λειτουργήσει η προσθήκη server σε δίκτυο, στο τοπικό μας instance, σβήστηκαν όλα τα μηχανήματα και τα δίκτυα που υπήρχαν ήδη και τέλος σβήστηκε και ξαναφτιάχτηκε η βάση.

Επίσης, μέχρι τώρα εργαστήκαμε στη λογική ότι δε θα επιτρέπεται η πολλαπλή προσθήκη ενός server στο ίδιο ιδιωτικό δίκτυο. Για να αλλάξει αυτό χρειάζονται εκτεταμένες επεμβάσεις σε διάφορα σημεία. Εάν θέλετε να το υποστηρίξουμε στο ui θα ήταν καλύτερο να ανοίξει σε νέο ticket σε επόμενο milestone.

#47 Updated by Vangelis Koukis almost 13 years ago

Mike Muzurakis wrote:

Σε μας είναι οκ τώρα τα δίκτυα. Έκανα push τις τελευταίες αλλαγές.

ΟΚ, θα το δοκιμάσω αργότερα μέσα στη μέσα.

Γενικότερα, όχι μόνο για τώρα, χρειάζεται τεκμηρίωση της υλοποίησης.
Οπότε, ας γράφεται για κάθε πρόβλημα μια σύντομη περιγραφή της αιτίας του και στα tickets, ώστε η τελική τεκμηρίωση του κώδικα να είναι ευκολότερη.

Τι έφταιγε και συνέβαιναν πολλαπλά POST;

Παρατηρήσαμε ένα μικρό glitch όμως: Ενώ κάνουμε ένα POST για να προσθέσουμε σέρβερ σε ένα ιδιωτικό δίκτυο, μερικές φορές (μάλλον είναι θέμα timimg με το scheduled GET ή με το πόσο γρήγορα απαντάει το API?) παίρνουμε 2x2 200άρια GETs, ενώ θα έπρεπε να παίρνουμε 2x1 (ένα για το servers και ένα για το networks). Όταν παίρνουμε 2 servers/detail, το 1ο επιστρέφει μεν τον server που κάναμε add, αλλά χωρίς να τον έχει στο δίκτυο, ενώ το επόμενο GET 200 που έρχεται στο επόμενο refresh έχει το server μέσα στο δίκτυο. Δεν είναι critical, γιατί τελικά ο σέρβερ ζωγραφίζεται, απλά όταν συμβαίνει αυτό, αργεί να ζωγραφιστεί.

Γιατί αργεί να ζωγραφιστεί;
πράγματι, ο server γυρίζει γιατί κάποιο μέρος του API πειράζει την αντίστοιχη γραμμή στη ΒΔ. Να τεκμηριωθεί γιατί αυτό είναι πρόβλημα για το UI;

Το ερώτημα είναι, γιατί την 1η φορά το API μας απαντάει 200, και μας στέλνει το server όπως ήταν και πριν (χωρίς να τον έχει βάλει στο δίκτυο);

Κατά τα άλλα πρέπει να διορθώθηκαν τα προβλήματα.

#48 Updated by Vangelis Koukis almost 13 years ago

  • Status changed from Feedback to Assigned

Christos Psaltis wrote:

Επίσης, μέχρι τώρα εργαστήκαμε στη λογική ότι δε θα επιτρέπεται η πολλαπλή προσθήκη ενός server στο ίδιο ιδιωτικό δίκτυο. Για να αλλάξει αυτό χρειάζονται εκτεταμένες επεμβάσεις σε διάφορα σημεία. Εάν θέλετε να το υποστηρίξουμε στο ui θα ήταν καλύτερο να ανοίξει σε νέο ticket σε επόμενο milestone.

Ναι, αυτή η υπόθεση δεν πρέπει να γίνει. Δεν υπάρχει λόγος να μπει τέτοιος περιορισμός, μάλλον υποβαθμίζει την ποιότητα του κώδικα.
Ας το αφήσουμε για την επόμενη έκδοση.
Μπορείς να γράψεις δύο λόγια σε ποια σημεία κάνει τέτοια υπόθεση μοναδικών συνδέσεων το UI;

#49 Updated by Mike Muzurakis almost 13 years ago

  • Status changed from Assigned to Feedback

Για τα πολλαπλά POST: Έλειπε ένα return false; στο τέλος της function που εκτελείται όταν κάποιος πατάει Add για να προσθέσει ένα vm σε ένα ιδιωτικό δίκτυο. ( http://api.jquery.com/live#caveats )

Για το ζήτημα με τα διπλά GET, αργεί να ζωγραφιστεί για τον εξής λόγο: Στο 1ο GET, το API επιστρέφει οτι υπάρχει αλλαγή (200) και δίνει πίσω το vm που άλλαξε, χωρίς όμως να το έχει μέσα στο δίκτυο στο οποίο έγινε add. Οπότε εφόσον το UI παίρνει 200, περνάει τις αλλαγές κανονικά για το vm και με βάση αυτό που του έχει επιστρέψει το API, το vm δεν ανήκει στο συγκεκριμένο δίκτυο οπότε δεν το ζωγραφίζει εκεί. Στο επόμενο GET 200, ξαναεπιστρέφεται το ίδιο vm αυτήν τη φορά με το δίκτυο περασμένο στα details του, οπότε το UI βλέπει το 200, διαβάζει την αλλαγή και το περνάει. Αν είναι δύσκολο να αλλάξει αυτό στο API, μπορούμε στην v0.5 να βρούμε κάποιο workaround στο UI, αλλά κτγμ δεν είναι και η πιο καθαρή λύση καθώς το UI θα κάνει στη συγκεκριμένη περίπτωση άλλα από αυτά που του λέει ρητά το API.

Τέλος για τα πολλαπλά vms στο ίδιο ιδιωτικό δίκτυο: Σε 2 σήμεία έχει γίνει η υπόθεση οτι δεν θα επιτρέπονται πολλαπλά vms στο ίδιο δίκτυο: Το ένα είναι περισσότερο defensive coding στο οποίο ο κώδικας του UI δεν επιτρέπει να ζωγραφιστεί 2 φορές το ίδιο μηχάνημα σε ένα δίκτυο και το άλλο είναι στον Add machine to network wizard όπου (υποθέτωντας οτι δεν θα γίνεται να προσθέσεις το ίδιο μηχάνημα 2 φορές στο δίκτυο) δείχνουμε τα vms που δεν είναι ήδη συνδεδεμένα στο δίκτυο αντί για όλα τα vms του χρήστη.

#50 Updated by Christos Psaltis almost 13 years ago

Με ένα γρήγορο brainstorming να συμπληρώσω τα css id του κάθε server. Τώρα φτιάχνονται ως net-network.id-server-server.id. Εάν αλλάξει αυτό θα πρέπει να αλλάξει σε όλες τις κλήσεις ο τρόπος που εξάγεται το networkID ή το serverID. Φαντάζομαι ότι υπάρχουν και άλλα σημεία που επηρεάζονται και δεν είναι τόσο προφανή.

#51 Updated by Vangelis Koukis almost 13 years ago

  • Status changed from Feedback to Closed

Αυτό κλείνει, η βασική λειτουργικότητα φαίνεται πως είναι ΟΚ, δημιουργούμε ιδιωτικά δίκτυα, συνδέουμε/αποσυνδέουμε servers σε/από αυτά.
Υπάρχουν διάφορα μικρά θέματα που θα ανοίξουν χωριστά, ως bugs, για τη v0.5.

Also available in: Atom PDF