Se sei bloccato con un errore Impossibile aggiungere una colonna NOT NULL con valore predefinito NULL durante la compilazione o la sincronizzazione del database dei neutroni, ecco come puoi risolverlo. Prima di vedere la soluzione, dai un'occhiata all'istantanea dell'errore:
# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) Cannot add a NOT NULL column with default value NULL [SQL: u'ALTER TABLE address_scopes ADD COLUMN ip_version INTEGER NOT NULL']
L'errore è strano perché la mia installazione di OpenStack utilizza il database MySQL, ma l'errore dice SQLite.
Soluzione:
Poiché la mia installazione doveva utilizzare il database MySQL, ho verificato rapidamente neutron.conf per vedere se la variabile di connessione è stata impostata correttamente. Sorprendentemente, c'era una variabile di connessione aggiuntiva che puntava a SQLite e questo era il colpevole nel mio caso.
# vim /etc/neutron/neutron.conf
[database] connection = mysql+pymysql://neutron:osneutron@controller/neutron The SQLAlchemy connection string to use to connect to the database. (string # value) # Deprecated group/name - [DEFAULT]/sql_connection # Deprecated group/name - [DATABASE]/sql_connection # Deprecated group/name - [sql]/connection connection = sqlite:////var/lib/neutron/neutron.sqlite
Quindi la soluzione era commentare la variabile di connessione che punta a sqlite.
# connection = sqlite:////var/lib/neutron/neutron.sqlite
Questo è tutto! Se sei interessato a sapere perché sqlite non è stato in grado di aggiungere una colonna address_scopes con un vincolo come NOT NULL su una tabella esistente, ecco il motivo.
Secondo SQLite ALTER TABLE doc, se viene specificato il vincolo NOT NULL, la colonna deve avere un valore predefinito diverso da NULL.