Juju bundle openstack deployment on a single server

Hello,

For testing purposes, I am trying to install all the components of OpenStack on a single server with Ubuntu 22.04 LTS to test deployment via a bundle with Juju. However, I am encountering several issues and cannot find a detailed guide or documentation that suits my case.

Let me explain the steps I have followed:

  1. On an Ubuntu 22.04 LTS machine, which I use as the Juju controller, I run juju add-cloud and configure it as manual.
  2. juju bootstrap mycloud manual-controller
  3. juju add-model default
  4. juju add-machine ssh:root@ip-server
  5. juju deploy ./openstack/bundle.yaml --map-machines=existing

This is the bundle I am using:

name: openstack-base
series: jammy
variables:
  #openstack-origin: &openstack-origin cloud:antelope
  series: &series jammy
  data-port: &data-port br-ex:enp0s31f6
  osd-devices: &osd-devices /dev/md1p1
  expected-osd-count: &expected-osd-count 1
  expected-mon-count: &expected-mon-count 1
machines:
  '0':
    series: *series
relations:
- - nova-compute:amqp
  - rabbitmq-server:amqp
- - nova-cloud-controller:identity-service
  - keystone:identity-service
- - glance:identity-service
  - keystone:identity-service
- - neutron-api:identity-service
  - keystone:identity-service
- - neutron-api:amqp
  - rabbitmq-server:amqp
- - glance:amqp
  - rabbitmq-server:amqp
- - nova-cloud-controller:image-service
  - glance:image-service
- - nova-compute:image-service
  - glance:image-service
- - nova-cloud-controller:cloud-compute
  - nova-compute:cloud-compute
- - nova-cloud-controller:amqp
  - rabbitmq-server:amqp
- - openstack-dashboard:identity-service
  - keystone:identity-service
- - nova-cloud-controller:neutron-api
  - neutron-api:neutron-api
- - cinder:image-service
  - glance:image-service
- - cinder:amqp
  - rabbitmq-server:amqp
- - cinder:identity-service
  - keystone:identity-service
- - cinder:cinder-volume-service
  - nova-cloud-controller:cinder-volume-service
- - cinder-ceph:storage-backend
  - cinder:storage-backend
- - ceph-mon:client
  - nova-compute:ceph
- - nova-compute:ceph-access
  - cinder-ceph:ceph-access
- - ceph-mon:client
  - cinder-ceph:ceph
- - ceph-mon:client
  - glance:ceph
- - ceph-osd:mon
  - ceph-mon:osd
- - ntp:juju-info
  - nova-compute:juju-info
- - ceph-radosgw:mon
  - ceph-mon:radosgw
- - ceph-radosgw:identity-service
  - keystone:identity-service
- - placement:identity-service
  - keystone:identity-service
- - placement:placement
  - nova-cloud-controller:placement
- - keystone:shared-db
  - keystone-mysql-router:shared-db
- - cinder:shared-db
  - cinder-mysql-router:shared-db
- - glance:shared-db
  - glance-mysql-router:shared-db
- - nova-cloud-controller:shared-db
  - nova-mysql-router:shared-db
- - neutron-api:shared-db
  - neutron-mysql-router:shared-db
- - openstack-dashboard:shared-db
  - dashboard-mysql-router:shared-db
- - placement:shared-db
  - placement-mysql-router:shared-db
- - vault:shared-db
  - vault-mysql-router:shared-db
- - keystone-mysql-router:db-router
  - mysql-innodb-cluster:db-router
- - cinder-mysql-router:db-router
  - mysql-innodb-cluster:db-router
- - nova-mysql-router:db-router
  - mysql-innodb-cluster:db-router
- - glance-mysql-router:db-router
  - mysql-innodb-cluster:db-router
- - neutron-mysql-router:db-router
  - mysql-innodb-cluster:db-router
- - dashboard-mysql-router:db-router
  - mysql-innodb-cluster:db-router
- - placement-mysql-router:db-router
  - mysql-innodb-cluster:db-router
- - vault-mysql-router:db-router
  - mysql-innodb-cluster:db-router
- - neutron-api-plugin-ovn:neutron-plugin
  - neutron-api:neutron-plugin-api-subordinate
- - ovn-central:certificates
  - vault:certificates
- - ovn-central:ovsdb-cms
  - neutron-api-plugin-ovn:ovsdb-cms
- - neutron-api:certificates
  - vault:certificates
- - ovn-chassis:nova-compute
  - nova-compute:neutron-plugin
- - ovn-chassis:certificates
  - vault:certificates
- - ovn-chassis:ovsdb
  - ovn-central:ovsdb
- - vault:certificates
  - neutron-api-plugin-ovn:certificates
- - vault:certificates
  - cinder:certificates
- - vault:certificates
  - glance:certificates
- - vault:certificates
  - keystone:certificates
- - vault:certificates
  - nova-cloud-controller:certificates
- - vault:certificates
  - openstack-dashboard:certificates
- - vault:certificates
  - placement:certificates
- - vault:certificates
  - ceph-radosgw:certificates
- - vault:certificates
  - mysql-innodb-cluster:certificates
applications:
  ceph-mon:
    annotations:
      gui-x: '790'
      gui-y: '1540'
    charm: ch:ceph-mon
    channel: quincy/stable
    series: *series
    num_units: 1
    options:
      expected-osd-count: *expected-osd-count
      monitor-count: *expected-mon-count
    to:
    - '0'
  ceph-osd:
    annotations:
      gui-x: '1065'
      gui-y: '1540'
    charm: ch:ceph-osd
    channel: quincy/stable
    series: *series
    num_units: 1
    options:
      osd-devices: *osd-devices
    to:
    - '0'
  ceph-radosgw:
    annotations:
      gui-x: '850'
      gui-y: '900'
    charm: ch:ceph-radosgw
    channel: quincy/stable
    series: *series
    num_units: 1
    to:
    - '0'
  cinder-mysql-router:
    annotations:
      gui-x: '900'
      gui-y: '1400'
    charm: ch:mysql-router
    channel: 8.0/stable
    series: *series
  cinder:
    annotations:
      gui-x: '980'
      gui-y: '1270'
    charm: ch:cinder
    channel: yoga/stable
    series: *series
    num_units: 1
    options:
      block-device: None
      glance-api-version: 2
    to:
    - '0'
  cinder-ceph:
    annotations:
      gui-x: '1120'
      gui-y: '1400'
    charm: ch:cinder-ceph
    channel: yoga/stable
    series: *series
    num_units: 0
  glance-mysql-router:
    annotations:
      gui-x: '-290'
      gui-y: '1400'
    charm: ch:mysql-router
    channel: 8.0/stable
    series: *series
  glance:
    annotations:
      gui-x: '-230'
      gui-y: '1270'
    charm: ch:glance
    channel: yoga/stable
    series: *series
    num_units: 1
    to:
    - '0'
  keystone-mysql-router:
    annotations:
      gui-x: '230'
      gui-y: '1400'
    charm: ch:mysql-router
    channel: 8.0/stable
    series: *series
  keystone:
    annotations:
      gui-x: '300'
      gui-y: '1270'
    charm: ch:keystone
    channel: yoga/stable
    series: *series
    num_units: 1
    to:
    - '0'
  neutron-mysql-router:
    annotations:
      gui-x: '505'
      gui-y: '1385'
    charm: ch:mysql-router
    channel: 8.0/stable
    series: *series
  neutron-api-plugin-ovn:
    annotations:
      gui-x: '690'
      gui-y: '1385'
    charm: ch:neutron-api-plugin-ovn
    channel: yoga/stable
    series: *series
  neutron-api:
    annotations:
      gui-x: '580'
      gui-y: '1270'
    charm: ch:neutron-api
    channel: yoga/stable
    series: *series
    num_units: 1
    options:
      neutron-security-groups: true
      flat-network-providers: physnet1
    to:
    - '0'
  placement-mysql-router:
    annotations:
      gui-x: '1320'
      gui-y: '1385'
    charm: ch:mysql-router
    channel: 8.0/stable
    series: *series
  placement:
    annotations:
      gui-x: '1320'
      gui-y: '1270'
    charm: ch:placement
    channel: yoga/stable
    series: *series
    num_units: 1
    to:
    - '0'
  nova-mysql-router:
    annotations:
      gui-x: '-30'
      gui-y: '1385'
    charm: ch:mysql-router
    channel: 8.0/stable
    series: *series
  nova-cloud-controller:
    annotations:
      gui-x: '35'
      gui-y: '1270'
    charm: ch:nova-cloud-controller
    channel: yoga/stable
    series: *series
    num_units: 1
    options:
      network-manager: Neutron
    to:
    - '0'
  nova-compute:
    annotations:
      gui-x: '190'
      gui-y: '890'
    charm: ch:nova-compute
    channel: yoga/stable
    series: *series
    num_units: 1
    options:
      config-flags: default_ephemeral_format=ext4
      enable-live-migration: true
      enable-resize: true
      migration-auth-type: ssh
    to:
    - '0'
  ntp:
    annotations:
      gui-x: '315'
      gui-y: '1030'
    charm: ch:ntp
    series: *series
    num_units: 0
  dashboard-mysql-router:
    annotations:
      gui-x: '510'
      gui-y: '1030'
    charm: ch:mysql-router
    channel: 8.0/stable
    series: *series
  openstack-dashboard:
    annotations:
      gui-x: '585'
      gui-y: '900'
    charm: ch:openstack-dashboard
    channel: yoga/stable
    series: *series
    num_units: 1
    to:
    - '0'
  rabbitmq-server:
    annotations:
      gui-x: '300'
      gui-y: '1550'
    charm: ch:rabbitmq-server
    channel: 3.9/stable
    series: *series
    num_units: 1
    to:
    - '0'
  mysql-innodb-cluster:
    annotations:
      gui-x: '535'
      gui-y: '1550'
    charm: ch:mysql-innodb-cluster
    channel: 8.0/stable
    series: *series
    num_units: 1
    to:
    - '0'
  ovn-central:
    annotations:
      gui-x: '70'
      gui-y: '1550'
    charm: ch:ovn-central
    channel: 22.03/stable
    series: *series
    num_units: 1
    to:
    - '0'
  ovn-chassis:
    annotations:
      gui-x: '120'
      gui-y: '1030'
    charm: ch:ovn-chassis
    channel: 22.03/stable
    series: *series
    options:
      ovn-bridge-mappings: physnet1:br-ex
      bridge-interface-mappings: *data-port
    subordinate-to:
      - neutron-api
    num_units: 0
  mysql-router:
    annotations:
      gui-x: '1535'
      gui-y: '1560'
    charm: ch:mysql-router
    channel: 8.0/stable
    series: *series
  vault:
    annotations:
      gui-x: '1610'
      gui-y: '1430'
    charm: ch:vault
    channel: 1.7/stable
    series: *series
    num_units: 1
    to:
    - '0'
  vault-mysql-router:
    annotations:
      gui-x: '1535'
      gui-y: '1560'
    charm: ch:mysql-router
    channel: 8.0/stable
    series: *series

Finally, the result of juju status is as follows:

Unit                      Workload  Agent  Machine  Public address  Ports           Message
ceph-mon/0*               error     idle   0        192.168.11.230                  hook failed: "osd-relation-joined"
ceph-osd/0*               waiting   idle   0        192.168.11.230                  Incomplete relation: monitor
ceph-radosgw/0*           waiting   idle   0        192.168.11.230  80/tcp          Incomplete relations: mon, identity
cinder/0*                 error     idle   0        192.168.11.230                  hook failed: "install"
glance/0*                 error     idle   0        192.168.11.230                  hook failed: "install"
keystone/0*               error     idle   0        192.168.11.230                  hook failed: "install"
mysql-innodb-cluster/0*   error     idle   0        192.168.11.230                  hook failed: "install"
neutron-api/0*            error     idle   0        192.168.11.230                  hook failed: "install"
nova-cloud-controller/0*  error     idle   0        192.168.11.230                  hook failed: "install"
nova-compute/0*           error     idle   0        192.168.11.230                  hook failed: "install"
openstack-dashboard/0*    error     idle   0        192.168.11.230                  hook failed: "install"
ovn-central/0*            error     idle   0        192.168.11.230                  hook failed: "install"
placement/0*              error     idle   0        192.168.11.230                  hook failed: "install"
rabbitmq-server/0*        active    idle   0        192.168.11.230  5672,15672/tcp  Unit is ready
vault/0*                  waiting   idle   0        192.168.11.230                  'shared-db' incomplete
  vault-mysql-router/0*   blocked   idle            192.168.11.230                  'db-router' missing, MySQL Router not yet bootstrapped

The components with hook failed have this error:

2023-11-10 11:23:42 INFO juju.worker.uniter resolver.go:161 awaiting error resolution for "install" hook
 not in list '{}'"  WARNING unit.glance/0.install logger.go:60 Traceback (mos
2023-11-10 11:23:56 WARNING unit.glance/0.install logger.go:60 KeyError: "Item 'antelope' is not in list '('diablo', 'essex', 'folsom', 'grizzly', 'havana', 'icehouse', 'juno', 'kilo', 'liberty', 'mitaka', 'newton', 'ocata', 'pike', 'queens', 'rocky', 'stein', 'train', 'ussuri', 'victoria', 'wallaby', 'xena', 'yoga')'"

Mysql-innodb presents this error:

2023-11-10 11:39:26 WARNING unit.mysql-innodb-cluster/0.install logger.go:60 MySQLdb._exceptions.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
2023-11-10 11:39:26 ERROR juju.worker.uniter.operation runhook.go:180 hook "install" (via explicit, bespoke hook script) failed: exit status 1

Do I need to configure it in some way?

I hope you can help me or provide me with useful resources.

Thanks in advance.

The error message about not finding antelope is concerning. Are you sure you had the antelope line commented out when you ran the deploy command? Can you remove that line entirely and retry? I fail to see where Juju can be getting the string ‘antelope’ from.

I also wonder the same thing, but I’m sure that string is not present in the yaml file. Deleting the commented line, the issue persists