Jika Anda terjebak dengan kesalahan Tidak dapat menambahkan kolom NOT NULL dengan nilai default NULL saat mengisi atau menyinkronkan basis data neutron, inilah cara Anda dapat memperbaikinya. Sebelum kita melihat solusinya, lihat snapshot errornya:
# 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']
Kesalahannya aneh karena, instalasi OpenStack saya menggunakan database MySQL, tetapi kesalahannya mengatakan SQLite.
Solusi:
Karena instalasi saya seharusnya menggunakan database MySQL, saya dengan cepat memverifikasi neutron.conf file untuk melihat apakah variabel koneksi telah diatur dengan benar. Anehnya, ada variabel koneksi tambahan yang menunjuk ke SQLite dan itulah penyebab kasus saya.
# 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
Jadi solusinya adalah mengomentari variabel koneksi yang mengarah ke sqlite.
# connection = sqlite:////var/lib/neutron/neutron.sqlite
Itu dia! Jika Anda tertarik untuk mengetahui mengapa sqlite tidak dapat menambahkan kolom address_scopes dengan batasan NOT NULL pada tabel yang ada, maka inilah alasannya.
Menurut dokumen SQLite ALTER TABLE, jika batasan NOT NULL ditentukan maka kolom harus memiliki nilai default selain NULL.