New Maas deploy - python failures

I have been trying to follow instruction steps for deployment of maas.

MAAS | How to do a fresh install of MAAS

Seemed very simple. But after several attepts… I keep getting what is connection errors. I figured it was at first that the documentation “A$$umed” you had postgres listening and disable firewall etc… so I did those also… but no change.

Below is quick set of setup steps I did / am doing: Then error on maas initialization:

sudo snap install --channel=latest/edge maas
sudo systemctl disable --now systemd-timesyncd
sudo apt update -y
sudo apt install -y postgresql
sudo apt install postgresql-client

Posgres Setup

MAAS_DBUSER=maasdbadmin
MAAS_DBPASS=password!
MAAS_DBNAME=$(hostname)_db
HOSTNAME=$(hostname)
sudo -i -u postgres psql -c "CREATE USER \"$MAAS_DBUSER\" WITH ENCRYPTED PASSWORD '$MAAS_DBPASS'"
sudo -i -u postgres createdb -O "$MAAS_DBUSER" "$MAAS_DBNAME"


echo "host    $MAAS_DBNAME    $MAAS_DBUSER    0/0     md5" |sudo tee -a  /etc/postgresql/14/main/pg_hba.conf
echo "host    all             all             172.16.0.0/16            trust" |sudo tee -a  /etc/postgresql/14/main/pg_hba.conf 
echo "host    all             all             172.16.0.0/16            md5" |sudo tee -a  /etc/postgresql/14/main/pg_hba.conf
echo "host    all             all             172.16.0.0/16            ident" |sudo tee -a  /etc/postgresql/14/main/pg_hba.conf 
sudo echo "listen_addresses = '*'" >> /etc/postgresql/14/main/postgresql.conf
sudo ufw allow 5432/tcp	
sudo systemctl restart postgresql.service
netstat -anpt | grep LISTEN
sudo maas init region+rack --database-uri "postgres://$MAAS_DBUSER:$MAAS_DBPASS@$HOSTNAME/$MAAS_DBNAME"


maasadmin@spc-maas-prod:~$ sudo maas init region+rack --database-uri “postgres://$MAAS_DBUSER:$MAAS_DBPASS@$HOSTNAME/$MAAS_DBNAME”
MAAS URL [default=http://172.16.110.2:5240/MAAS]: http://spc-maas-prod.acme.local:5240/MAAS
Failed to perfom migrations:ations
Traceback (most recent call last):
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 219, in ensure_connection
self.connect()
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 200, in connect
self.connection = self.get_new_connection(conn_params)
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/db/backends/postgresql/base.py”, line 187, in get_new_connection
connection = Database.connect(**conn_params)
File “/snap/maas/30516/usr/lib/python3/dist-packages/psycopg2/init.py”, line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name “1lab@spc-maas-prod” to address: Name or service not known

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/snap/maas/30516/bin/maas-region”, line 8, in
sys.exit(run())
File “/snap/maas/30516/lib/python3.10/site-packages/maasserver/region_script.py”, line 81, in run
run_django(is_snap, is_devenv)
File “/snap/maas/30516/lib/python3.10/site-packages/maasserver/region_script.py”, line 70, in run_django
management.execute_from_command_line()
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/core/management/init.py”, line 419, in execute_from_command_line
utility.execute()
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/core/management/init.py”, line 413, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/core/management/base.py”, line 354, in run_from_argv
self.execute(*args, **cmd_options)
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/core/management/base.py”, line 398, in execute
output = self.handle(*args, **options)
File “/snap/maas/30516/lib/python3.10/site-packages/maasserver/management/commands/dbupgrade.py”, line 210, in handle
conn.ensure_connection()
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 218, in ensure_connection
with self.wrap_database_errors:
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/db/utils.py”, line 90, in exit
raise dj_exc_value.with_traceback(traceback) from exc_value
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 219, in ensure_connection
self.connect()
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 200, in connect
self.connection = self.get_new_connection(conn_params)
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30516/usr/lib/python3/dist-packages/django/db/backends/postgresql/base.py”, line 187, in get_new_connection
connection = Database.connect(**conn_params)
File “/snap/maas/30516/usr/lib/python3/dist-packages/psycopg2/init.py”, line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not translate host name “1lab@spc-maas-prod” to address: Name or service not known

Hi @penguinpages

Can you try with HOSTNAME=localhost?

Change of variable of “HOSTNAME” to “localhost” vs CNAME of host… No change… See below

maasadmin@spc-maas-prod:~$ HOSTNAME=localhost
maasadmin@spc-maas-prod:~$ MAAS_DBUSER=maasdbadmin
MAAS_DBPASS=password
MAAS_DBNAME=$(hostname)_db
maasadmin@spc-maas-prod:~$ sudo -i -u postgres psql -c “CREATE USER “$MAAS_DBUSER” WITH ENCRYPTED PASSWORD ‘$MAAS_DBPASS’”
sudo -i -u postgres createdb -O “$MAAS_DBUSER” “$MAAS_DBNAME”
[sudo] password for maasadmin:
ERROR: role “maasdbadmin” already exists
createdb: error: database creation failed: ERROR: database “spc-maas-prod_db” already exists
maasadmin@spc-maas-prod:~$ sudo -i -u postgres createdb -O “$MAAS_DBUSER” “$MAAS_DBNAME”
createdb: error: database creation failed: ERROR: database “spc-maas-prod_db” already exists
maasadmin@spc-maas-prod:~$ sudo maas init region+rack --database-uri “postgres://$MAAS_DBUSER:$MAAS_DBPASS@$HOSTNAME/$MAAS_DBNAME”
MAAS URL [default=http://172.16.110.2:5240/MAAS]:
Failed to perfom migrations:ations
Traceback (most recent call last):
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 219, in ensure_connection
self.connect()
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 200, in connect
self.connection = self.get_new_connection(conn_params)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/postgresql/base.py”, line 187, in get_new_connection
connection = Database.connect(**conn_params)
File “/snap/maas/30518/usr/lib/python3/dist-packages/psycopg2/init.py”, line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name “1lab@localhost” to address: Name or service not known

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/snap/maas/30518/bin/maas-region”, line 8, in
sys.exit(run())
File “/snap/maas/30518/lib/python3.10/site-packages/maasserver/region_script.py”, line 81, in run
run_django(is_snap, is_devenv)
File “/snap/maas/30518/lib/python3.10/site-packages/maasserver/region_script.py”, line 70, in run_django
management.execute_from_command_line()
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/core/management/init.py”, line 419, in execute_from_command_line
utility.execute()
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/core/management/init.py”, line 413, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/core/management/base.py”, line 354, in run_from_argv
self.execute(*args, **cmd_options)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/core/management/base.py”, line 398, in execute
output = self.handle(*args, **options)
File “/snap/maas/30518/lib/python3.10/site-packages/maasserver/management/commands/dbupgrade.py”, line 210, in handle
conn.ensure_connection()
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 218, in ensure_connection
with self.wrap_database_errors:
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/utils.py”, line 90, in exit
raise dj_exc_value.with_traceback(traceback) from exc_value
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 219, in ensure_connection
self.connect()
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 200, in connect
self.connection = self.get_new_connection(conn_params)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/postgresql/base.py”, line 187, in get_new_connection
connection = Database.connect(**conn_params)
File “/snap/maas/30518/usr/lib/python3/dist-packages/psycopg2/init.py”, line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not translate host name “1lab@localhost” to address: Name or service not known

1 Like

Uhm I can’t reproduce this. Just tried on a brand new ubuntu 22.04 and works fine

ubuntu@discoursetest:~$ history
    1  sudo snap install maas --channel=latest/edge
    2  sudo apt update -y
    3  sudo apt install -y postgresql
    4  MAAS_DBUSER=maasdbadmin
    5  MAAS_DBPASS=password!
    6  MAAS_DBNAME=maasdb
    7  HOSTNAME=localhost
    8  sudo -i -u postgres psql -c "CREATE USER \"$MAAS_DBUSER\" WITH ENCRYPTED PASSWORD '$MAAS_DBPASS'"
    9  sudo -i -u postgres createdb -O "$MAAS_DBUSER" "$MAAS_DBNAME"
   10  sudo maas init region+rack --database-uri "postgres://$MAAS_DBUSER:$MAAS_DBPASS@$HOSTNAME/$MAAS_DBNAME"

Could you start from scratch and retry? There should be no need to disable firewall and other stuff unless you have a special setup

reset VM clone to pre-install of postgres… and ran all above but this time HOSTNAME=localhost as variable (vs actual hostname) but fails.

I have a snapshot just before maas init … so errors below:

##############

maasadmin@spc-maas-prod:~$ sudo maas init region+rack --database-uri “postgres://$MAAS_DBUSER:$MAAS_DBPASS@$HOSTNAME/$MAAS_DBNAME”
MAAS URL [default=http://172.16.110.2:5240/MAAS]:
Failed to perfom migrations:ations
Traceback (most recent call last):
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 219, in ensure_connection
self.connect()
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 200, in connect
self.connection = self.get_new_connection(conn_params)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/postgresql/base.py”, line 187, in get_new_connection
connection = Database.connect(**conn_params)
File “/snap/maas/30518/usr/lib/python3/dist-packages/psycopg2/init.py”, line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name “1lab@localhost” to address: Name or service not known

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/snap/maas/30518/bin/maas-region”, line 8, in
sys.exit(run())
File “/snap/maas/30518/lib/python3.10/site-packages/maasserver/region_script.py”, line 81, in run
run_django(is_snap, is_devenv)
File “/snap/maas/30518/lib/python3.10/site-packages/maasserver/region_script.py”, line 70, in run_django
management.execute_from_command_line()
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/core/management/init.py”, line 419, in execute_from_command_line
utility.execute()
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/core/management/init.py”, line 413, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/core/management/base.py”, line 354, in run_from_argv
self.execute(*args, **cmd_options)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/core/management/base.py”, line 398, in execute
output = self.handle(*args, **options)
File “/snap/maas/30518/lib/python3.10/site-packages/maasserver/management/commands/dbupgrade.py”, line 210, in handle
conn.ensure_connection()
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 218, in ensure_connection
with self.wrap_database_errors:
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/utils.py”, line 90, in exit
raise dj_exc_value.with_traceback(traceback) from exc_value
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 219, in ensure_connection
self.connect()
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 200, in connect
self.connection = self.get_new_connection(conn_params)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30518/usr/lib/python3/dist-packages/django/db/backends/postgresql/base.py”, line 187, in get_new_connection
connection = Database.connect(**conn_params)
File “/snap/maas/30518/usr/lib/python3/dist-packages/psycopg2/init.py”, line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not translate host name “1lab@localhost” to address: Name or service not known

Just random guessing: maybe your password contains some chars that need to be escaped?
Are you using password! as password or another one? I don’t get where this 1lab@localhost actually comes from.
Can you retry by putting the parameters directly without using the variables?

I noted that also.

And…you are correct password has string value such as “Verygood1@lab”

So can I just put variable in ’ ’ ?

Ex:
MAAS_DBPASS=‘Verygood1@lab’
maasadmin@spc-maas-dr:~$ MAAS_DBPASS=‘Verygood1@lab’
maasadmin@spc-maas-dr:~$ echo $MAAS_DBPASS
Verygood1@lab

Yes, that should work

reverted snapshot pre Postgres install / maas channel. Tried option with localhost and real hostname. same errors

MAAS_DBUSER=maasdbadmin

MAAS_DBPASS=‘Verygood1@lab’

MAAS_DBNAME=$(hostname)_db

HOSTNAME=localhost

HOSTNAME=$(hostname)

sudo -i -u postgres psql -c “CREATE USER “$MAAS_DBUSER” WITH ENCRYPTED PASSWORD ‘$MAAS_DBPASS’”

sudo -i -u postgres createdb -O “$MAAS_DBUSER” “$MAAS_DBNAME”

maasadmin@spc-maas-prod:~$ sudo maas init region+rack --database-uri “postgres://$MAAS_DBUSER:$MAAS_DBPASS@$HOSTNAME/$MAAS_DBNAME”
MAAS URL [default=http://172.16.110.2:5240/MAAS]:
Failed to perfom migrations:ations
Traceback (most recent call last):
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 219, in ensure_connection
self.connect()
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 200, in connect
self.connection = self.get_new_connection(conn_params)
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/db/backends/postgresql/base.py”, line 187, in get_new_connection
connection = Database.connect(**conn_params)
File “/snap/maas/30532/usr/lib/python3/dist-packages/psycopg2/init.py”, line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name “1lab@localhost” to address: Name or service not known

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/snap/maas/30532/bin/maas-region”, line 8, in
sys.exit(run())
File “/snap/maas/30532/lib/python3.10/site-packages/maasserver/region_script.py”, line 81, in run
run_django(is_snap, is_devenv)
File “/snap/maas/30532/lib/python3.10/site-packages/maasserver/region_script.py”, line 70, in run_django
management.execute_from_command_line()
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/core/management/init.py”, line 419, in execute_from_command_line
utility.execute()
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/core/management/init.py”, line 413, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/core/management/base.py”, line 354, in run_from_argv
self.execute(*args, **cmd_options)
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/core/management/base.py”, line 398, in execute
output = self.handle(*args, **options)
File “/snap/maas/30532/lib/python3.10/site-packages/maasserver/management/commands/dbupgrade.py”, line 210, in handle
conn.ensure_connection()
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 218, in ensure_connection
with self.wrap_database_errors:
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/db/utils.py”, line 90, in exit
raise dj_exc_value.with_traceback(traceback) from exc_value
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 219, in ensure_connection
self.connect()
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 200, in connect
self.connection = self.get_new_connection(conn_params)
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30532/usr/lib/python3/dist-packages/django/db/backends/postgresql/base.py”, line 187, in get_new_connection
connection = Database.connect(**conn_params)
File “/snap/maas/30532/usr/lib/python3/dist-packages/psycopg2/init.py”, line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: could not translate host name “1lab@localhost” to address: Name or service not known

If your database, option values, username or password contain characters used to delineate DSN parts, you can escape them via URI hex encodings:

: = %3a   / = %2f   @ = %40
+ = %2b   ( = %28   ) = %29
? = %3f   = = %3d   & = %26

In your case you have to use

MAAS_DBPASS='Verygood1%40lab'

and you should be good to go

Thougth… Every time I run maas init it returns URL it will ?? connect to

MAAS URL [default=http://172.16.110.2:5240/MAAS]:

I assumed this was the admin portal . I tried also to replace URL string with host’s fqdn

Ex: MAAS URL [default=http://172.16.110.2:5240/MAAS]: http://spc-maas-prod.acme.local:5240/MAAS

But no change.

I disabled firewall thinking that was what was in way. no change

I did review of python /snap/maas/30532/usr/lib/python3/dist-packages/django/db/backends/base/base.py

   @async_unsafe
    def ensure_connection(self):
        """Guarantee that a connection to the database is established."""
        if self.connection is None:
            with self.wrap_database_errors:
                self.connect()

Seems basic database connection error… hense the steps in my posting to enable listener on all interfaces and for any host… But default for postgres is “local all postgres” so I assume installation is using Unix Domain socket connection

I guess you missed my last message

Yes… I did but … came back and tried KISS

MAAS_DBUSER=maasdbadmin

MAAS_DBPASS=Maaspassw0rd

MAAS_DBNAME=maasdb

#MAAS_DBNAME=$(hostname)_db

HOSTNAME=localhost

I think this is all about password. it is now deploying but as stupid simple password. Which is now a post deploy problem.

maasadmin@spc-maas-prod:~$ MAAS_DBNAME=maasdb
maasadmin@spc-maas-prod:~$ MAAS_DBUSER=maasdbadmin
MAAS_DBPASS=Maaspassw0rd
MAAS_DBNAME=maasdb
#MAAS_DBNAME=$(hostname)_db
HOSTNAME=localhost
maasadmin@spc-maas-prod:~$ sudo -i -u postgres psql -c “CREATE USER “$MAAS_DBUSER” WITH ENCRYPTED PASSWORD ‘$MAAS_DBPASS’”
CREATE ROLE
maasadmin@spc-maas-prod:~$ sudo -i -u postgres createdb -O “$MAAS_DBUSER” “$MAAS_DBNAME”
maasadmin@spc-maas-prod:~$ sudo maas init region+rack --database-uri “postgres://$MAAS_DBUSER:$MAAS_DBPASS@$HOSTNAME/$MAAS_DBNAME”
MAAS URL [default=http://172.16.110.2:5240/MAAS]:
MAAS has been set up.

If you want to configure external authentication or use
MAAS with Canonical RBAC, please run

sudo maas configauth

To create admins when not using external authentication, run

sudo maas createadmin

To enable TLS for secured communication, please run

sudo maas config-tls enable

I also tested with second system to deploy with variable for hostname set to actual hostname but it failed That was only delta between two.

maasadmin@spc-maas-dr:~$ MAAS_DBUSER=maasdbadmin
MAAS_DBPASS=Maaspassw0rd
MAAS_DBNAME=maasdb
HOSTNAME=spc-maas-dr
maasadmin@spc-maas-dr:~$ sudo -i -u postgres psql -c “CREATE USER “$MAAS_DBUSER” WITH ENCRYPTED PASSWORD ‘$MAAS_DBPASS’”
CREATE ROLE
maasadmin@spc-maas-dr:~$ sudo -i -u postgres createdb -O “$MAAS_DBUSER” “$MAAS_DBNAME”
maasadmin@spc-maas-dr:~$ sudo maas init region+rack --database-uri “postgres://$MAAS_DBUSER:$MAAS_DBPASS@$HOSTNAME/$MAAS_DBNAME”
MAAS URL [default=http://172.16.120.2:5240/MAAS]:
Failed to perfom migrations:ations
Traceback (most recent call last):
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 219, in ensure_connection
self.connect()
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 200, in connect
self.connection = self.get_new_connection(conn_params)
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/db/backends/postgresql/base.py”, line 187, in get_new_connection
connection = Database.connect(**conn_params)
File “/snap/maas/30540/usr/lib/python3/dist-packages/psycopg2/init.py”, line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: connection to server at “spc-maas-dr” (127.0.1.1), port 5432 failed: Connection refused
Is the server running on that host and accepting TCP/IP connections?

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File “/snap/maas/30540/bin/maas-region”, line 8, in
sys.exit(run())
File “/snap/maas/30540/lib/python3.10/site-packages/maasserver/region_script.py”, line 81, in run
run_django(is_snap, is_devenv)
File “/snap/maas/30540/lib/python3.10/site-packages/maasserver/region_script.py”, line 70, in run_django
management.execute_from_command_line()
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/core/management/init.py”, line 419, in execute_from_command_line
utility.execute()
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/core/management/init.py”, line 413, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/core/management/base.py”, line 354, in run_from_argv
self.execute(*args, **cmd_options)
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/core/management/base.py”, line 398, in execute
output = self.handle(*args, **options)
File “/snap/maas/30540/lib/python3.10/site-packages/maasserver/management/commands/dbupgrade.py”, line 210, in handle
conn.ensure_connection()
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 218, in ensure_connection
with self.wrap_database_errors:
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/db/utils.py”, line 90, in exit
raise dj_exc_value.with_traceback(traceback) from exc_value
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 219, in ensure_connection
self.connect()
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/db/backends/base/base.py”, line 200, in connect
self.connection = self.get_new_connection(conn_params)
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/utils/asyncio.py”, line 33, in inner
return func(*args, **kwargs)
File “/snap/maas/30540/usr/lib/python3/dist-packages/django/db/backends/postgresql/base.py”, line 187, in get_new_connection
connection = Database.connect(**conn_params)
File “/snap/maas/30540/usr/lib/python3/dist-packages/psycopg2/init.py”, line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: connection to server at “spc-maas-dr” (127.0.1.1), port 5432 failed: Connection refused
Is the server running on that host and accepting TCP/IP connections?

well postgres by default listens to localhost. If you want postgres to listen to another address you have to configure it. If you really want to do it, you can edit the postgres config file at /etc/postgresql/14/main/postgresql.conf and set listen_addresses according to your needs. Then you have also to edit /etc/postgresql/14/main/pg_hba.conf accordingly

So in summary here. This deployment / maas ignition script uses python… which cannot use:

  1. Set of variable “HOSTNAME=” variable as target CNAME (instead only works with “localhost”) which is low impact, but then why even ask for “hostname” if you fail with ?? Maybe note that for more advanced deployment you have to follow steps for enabling postgres to listen for TCP external connections and firewall etc… But I tried that and showed listener was working on eth0, but still failed. So only use “localhost”

  2. System asks for password set as variable “MAAS_DBPASS=” but due to ??? python parsing… really cannot use any complex password. My guess is postgres takes pass word normal when setting the DB password, but then maas init translates it per DSN table. Ex: MAAS_DBPASS=‘Verygood1%40lab’ fails still. Option would be to fix this deployment script to handle characters in passwords with complexity, or instruct deployment steps to use non-complex password, and post install to reset password in postgres then also in maas … (not sure steps to do this yet). But in secure environments… password minimums of complexity are hard enforced, so this may not be an option.

Hi @penguinpages thanks for your inputs.
I personally think that for the base installation the documentation for setting up postgres is pretty much complete.
In case you need a more advanced/production setup, you have to know what you are doing and/or get consultancy(not on a forum) and/or take a look at the postgres documentation.

FYI Postgres listens only to localhost by default, it’s not MAAS specific. If you want to bind another address, then you have to configure postgres, not MAAS. DSN is not MAAS specific. You should read the official postgres doc if you need to handle special cases