lost and found ( for me ? )

KVM : add a device with virsh attach-device

small tips.

prepare an xml file

$ cat network-add.xml
<interface type='network'>
  <source network='net-192.168.42'/>
  <model type='virtio'/>
</interface>

$ virsh dumpxml m-node03 | grep network
    <interface type='network'>
      <source network='net-192.168.40'/>
    <interface type='network'>
      <source network='net-192.168.41'/>
$
$ virsh attach-device m-node03 network-add.xml --config
Device attached successfully

$
$ virsh dumpxml m-node03 | grep network
    <interface type='network'>
      <source network='net-192.168.40'/>
    <interface type='network'>
      <source network='net-192.168.41'/>
    <interface type='network'>
      <source network='net-192.168.42'/>
$

deploy OpenStack with Ubuntu Autopilot

Here are logs when I set up OpenStack with Ubuntu Autopilot.

Reference
https://www.ubuntu.com/download/cloud/autopilot

MAAS Server : Trusty ( not Xenial ) which is running as an LXD container.
MAAS Version 1.9.4+bzr4592-0ubuntu1 (14.04.1)

All nodes managed by MAAS have two NICs and two HDDs.

Network setting of MAAS nodes.
eth0 : PXE network ( auto assign )
eth1 : public network ( unconfigured )

Assume you already finished step 5. ( Register your hardware with MAAS)


root@maas-trusty:~# juju genrate-config

eidt environments.yaml
root@maas-trusty:~/.juju# pwd
/root/.juju

root@maas-trusty:~/.juju# ls
environments  environments.yaml  ssh

   maas:
       type: maas
       maas-server: 'http://192.168.100.10/MAAS/'
       maas-oauth: 'credentials'
       bootstrap-timeout: 1800

# export JUJU_ENV=maas
#JUJU_BOOTSTRAP_TO=m-bootstrap01.maas openstack-install

Bootstrap autopilot.


login into Autopilot

Go to Openstack tab and click “Configure”

Select components you want to install

Open vSwitch configuration.


At least, select three nodes.
I selected four nodes. click “Autopilot placement”

Click “install”



Installing..

MAAS GUI

Complete





Resource usage of each node.

Manage processes on each node.


Juju
Reference
http://askubuntu.com/questions/597979/landscape-openstack-juju-management
root@maas-trusty:~# export JUJU_HOME=~/.cloud-install/juju

root@maas-trusty:~# juju status --format short

- haproxy/0: 192.168.100.33 (started) 80/tcp, 443/tcp, 10000/tcp
- landscape-server/0: 192.168.100.35 (started)
- postgresql/0: 192.168.100.36 (started) 5432/tcp
- rabbitmq-server/0: 192.168.100.34 (started) 5672/tcp

root@maas-trusty:~# juju ssh landscape-server/0 sudo 'JUJU_HOME=/var/lib/landscape/juju-homes/`sudo ls -rt /var/lib/landscape/juju-homes/ | tail -1` sudo -u landscape -E bash'

landscape@juju-machine-0-lxc-1:~$ juju status --format short

- base-machine/0: m-node01.maas (started)
 - landscape-client/1: m-node01.maas (started)
 - ntp/0: m-node01.maas (started)
- base-machine/1: m-node04.maas (started)
 - landscape-client/10: m-node04.maas (started)
 - ntp/1: m-node04.maas (started)
- base-machine/2: m-node02.maas (started)
 - landscape-client/12: m-node02.maas (started)
 - ntp/3: m-node02.maas (started)
- base-machine/3: m-node03.maas (started)
 - landscape-client/11: m-node03.maas (started)
 - ntp/2: m-node03.maas (started)
- ceilometer/0: 192.168.100.42 (started) 8777/tcp
 - landscape-client/7: 192.168.100.42 (started)
- ceph-mon/0: 192.168.100.50 (started)
 - landscape-client/21: 192.168.100.50 (started)
- ceph-mon/1: 192.168.100.48 (started)
 - landscape-client/18: 192.168.100.48 (started)
- ceph-mon/2: 192.168.100.57 (started)
 - landscape-client/17: 192.168.100.57 (started)
- ceph-osd/0: m-node01.maas (started)
 - landscape-client/0: m-node01.maas (started)
- ceph-osd/1: m-node02.maas (started)
 - landscape-client/2: m-node02.maas (started)
- ceph-osd/2: m-node04.maas (started)
 - landscape-client/3: m-node04.maas (started)
- ceph-osd/3: m-node03.maas (started)
 - landscape-client/4: m-node03.maas (started)
- ceph-radosgw/0: 192.168.100.41 (started) 80/tcp
 - landscape-client/5: 192.168.100.41 (started)
- cinder/0: 192.168.100.51 (started) 8776/tcp
 - landscape-client/23: 192.168.100.51 (started)
- glance/0: 192.168.100.54 (started) 9292/tcp
 - landscape-client/24: 192.168.100.54 (started)
- glance-simplestreams-sync/0: 192.168.100.53 (started)
 - landscape-client/20: 192.168.100.53 (started)
- keystone/0: 192.168.100.40 (started) 5000/tcp
 - landscape-client/8: 192.168.100.40 (started)
- mongodb/0: 192.168.100.46 (started) 27017/tcp, 27019/tcp, 27021/tcp, 28017/tcp
 - landscape-client/19: 192.168.100.46 (started)
- mysql/0: 192.168.100.52 (started)
 - landscape-client/27: 192.168.100.52 (started)
- neutron-api/0: 192.168.100.49 (started) 9696/tcp
 - landscape-client/22: 192.168.100.49 (started)
- neutron-gateway/0: m-node01.maas (started)
 - landscape-client/6: m-node01.maas (started)
- nova-cloud-controller/0: 192.168.100.39 (started) 8774/tcp
 - landscape-client/9: 192.168.100.39 (started)
- nova-compute-kvm/0: m-node02.maas (started)
 - ceilometer-agent/2: m-node02.maas (started)
 - landscape-client/15: m-node02.maas (started)
 - neutron-openvswitch/2: m-node02.maas (started)
- nova-compute-kvm/1: m-node03.maas (started)
 - ceilometer-agent/1: m-node03.maas (started)
 - landscape-client/14: m-node03.maas (started)
 - neutron-openvswitch/1: m-node03.maas (started)
- nova-compute-kvm/2: m-node04.maas (started)
 - ceilometer-agent/0: m-node04.maas (started)
 - landscape-client/13: m-node04.maas (started)
 - neutron-openvswitch/0: m-node04.maas (started)
- ntpmaster/0: 192.168.100.55 (started) 123/udp
 - landscape-client/16: 192.168.100.55 (started)
- openstack-dashboard/0: 192.168.100.56 (started) 80/tcp, 443/tcp
 - landscape-client/25: 192.168.100.56 (started)
- rabbitmq-server/0: 192.168.100.47 (started) 5672/tcp
 - landscape-client/26: 192.168.100.47 (started)

landscape@juju-machine-0-lxc-1:~$ juju ssh nova-compute-kvm/0 virsh list --all
Id    Name                           State
----------------------------------------------------

Connection to m-node02.maas closed.
landscape@juju-machine-0-lxc-1:~$

Access to the OpenStack dashboard.

Manage OpenStack via CLI.
Download novarc and source that.

root@maas-trusty:~# keystone catalog
Service: compute
+-------------+----------------------------------------------------------------+
|   Property  |                             Value                              |
+-------------+----------------------------------------------------------------+
|   adminURL  | http://192.168.100.39:8774/v2/9b156a924fa84f08bb10764d3afe84e7 |
|      id     |                2329924ec32a44469bbde17c19dc08b2                |
| internalURL | http://192.168.100.39:8774/v2/9b156a924fa84f08bb10764d3afe84e7 |
|  publicURL  | http://192.168.100.39:8774/v2/9b156a924fa84f08bb10764d3afe84e7 |
|    region   |                            region1                             |
+-------------+----------------------------------------------------------------+
Service: network
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminURL  |    http://192.168.100.49:9696    |
|      id     | 460fa7233d484a85828dd3b527678326 |
| internalURL |    http://192.168.100.49:9696    |
|  publicURL  |    http://192.168.100.49:9696    |
|    region   |             region1              |
+-------------+----------------------------------+
Service: volumev2

Add one more nova-compute node.
Access to landscape server.
root@maas-trusty:~# export JUJU_HOME=~/.cloud-install/juju
root@maas-trusty:~# juju ssh landscape-server/0

ubuntu@juju-machine-0-lxc-1:~$
ubuntu@juju-machine-0-lxc-1:~$ sudo su -
root@juju-machine-0-lxc-1:~# export JUJU_HOME=/var/lib/landscape/juju-homes/1/
root@juju-machine-0-lxc-1:~# juju status --format short | grep compute
- nova-compute-kvm/0: m-node02.maas (started)
- nova-compute-kvm/1: m-node03.maas (started)
- nova-compute-kvm/2: m-node04.maas (started)

root@juju-machine-0-lxc-1:~# juju add-unit nova-compute-kvm
root@juju-machine-0-lxc-1:~#

root@juju-machine-0-lxc-1:~# juju status --format short | grep compute
- nova-compute-kvm/0: m-node02.maas (started)
- nova-compute-kvm/1: m-node03.maas (started)
- nova-compute-kvm/2: m-node04.maas (started)
- nova-compute-kvm/3:  (pending)

root@juju-machine-0-lxc-1:~# juju status --format short | grep compute
- nova-compute-kvm/0: m-node02.maas (started)
- nova-compute-kvm/1: m-node03.maas (started)
- nova-compute-kvm/2: m-node04.maas (started)

root@juju-machine-0-lxc-1:~# juju status --format short | grep compute
- nova-compute-kvm/0: m-node02.maas (started)
- nova-compute-kvm/1: m-node03.maas (started)
- nova-compute-kvm/2: m-node04.maas (started)
- nova-compute-kvm/3: m-node08.maas (started)

root@maas-trusty:~# source  novarc_admin
root@maas-trusty:~# openstack compute service list
+----------------+----------------------+----------+---------+-------+----------------------------+
| Binary         | Host                 | Zone     | Status  | State | Updated At                 |
+----------------+----------------------+----------+---------+-------+----------------------------+
| nova-scheduler | juju-machine-0-lxc-0 | internal | enabled | up    | 2017-02-16T08:30:52.000000 |
| nova-conductor | juju-machine-0-lxc-0 | internal | enabled | up    | 2017-02-16T08:30:53.000000 |
| nova-cert      | juju-machine-0-lxc-0 | internal | enabled | up    | 2017-02-16T08:30:54.000000 |
| nova-compute   | m-node03             | nova     | enabled | up    | 2017-02-16T08:30:50.000000 |
| nova-compute   | m-node02             | nova     | enabled | up    | 2017-02-16T08:30:50.000000 |
| nova-compute   | m-node04             | nova     | enabled | up    | 2017-02-16T08:30:53.000000 |
| nova-compute   | m-node08             | nova     | enabled | up    | 2017-02-16T08:30:56.000000 |
+----------------+----------------------+----------+---------+-------+----------------------------+

Remove a nova-compute-kvm
on the landscape server.
root@juju-machine-0-lxc-1:~# export JUJU_HOME=/var/lib/landscape/juju-homes/1

root@juju-machine-0-lxc-1:~# juju remove-unit nova-compute-kvm/3

root@juju-machine-0-lxc-1:~# juju status --format  short | grep kvm
- nova-compute-kvm/0: m-node02.maas (started)
- nova-compute-kvm/1: m-node03.maas (started)
- nova-compute-kvm/2: m-node04.maas (started)
- nova-compute-kvm/3: m-node08.maas (stopped)
root@juju-machine-0-lxc-1:~#

root@juju-machine-0-lxc-1:~# juju status --format  short | grep kvm
- nova-compute-kvm/0: m-node02.maas (started)
- nova-compute-kvm/1: m-node03.maas (started)
- nova-compute-kvm/2: m-node04.maas (started)

Ubuntu Juju and MAAS : set up OpenStack LXD with Juju bundle

Here are logs when setting up OpenStack LXD with Juju bundle.
( https://jujucharms.com/u/openstack-charmers-next/openstack-lxd/ )

As for nova compute nodes, use LXD instead of KVM.

- neutron gateway

eth0 : 192.168.100.0/24 ( default gateway. used for PXE boot )
eth1 : unnumbered ( used for external network. flat network. 192.168.101.0/24 )

- other nodes

eth0 : 192.168.100.0/24 ( default gateway. used for PXE boot )

All nodes have two disks, 4GB memory and 4 cores.

Here is a Juju bundle I used to set up openstack nova lxd.
# cat bundle.yaml.01
machines:
 '0':
   constraints: arch=amd64
   series: xenial
 '1':
   constraints: arch=amd64
   series: xenial
 '2':
   constraints: arch=amd64
   series: xenial
 '3':
   constraints: arch=amd64
   series: xenial
relations:
- - nova-compute:amqp
 - rabbitmq-server:amqp
- - neutron-gateway:amqp
 - rabbitmq-server:amqp
- - keystone:shared-db
 - mysql:shared-db
- - nova-cloud-controller:identity-service
 - keystone:identity-service
- - glance:identity-service
 - keystone:identity-service
- - neutron-api:identity-service
 - keystone:identity-service
- - neutron-openvswitch:neutron-plugin-api
 - neutron-api:neutron-plugin-api
- - neutron-api:shared-db
 - mysql:shared-db
- - neutron-api:amqp
 - rabbitmq-server:amqp
- - neutron-gateway:neutron-plugin-api
 - neutron-api:neutron-plugin-api
- - glance:shared-db
 - mysql:shared-db
- - 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
- - nova-cloud-controller:quantum-network-service
 - neutron-gateway:quantum-network-service
- - nova-compute:neutron-plugin
 - neutron-openvswitch:neutron-plugin
- - neutron-openvswitch:amqp
 - rabbitmq-server:amqp
- - openstack-dashboard:identity-service
 - keystone:identity-service
- - nova-cloud-controller:shared-db
 - mysql:shared-db
- - nova-cloud-controller:neutron-api
 - neutron-api:neutron-api
- - ceph-mon:client
 - nova-compute:ceph
- - ceph-mon:client
 - glance:ceph
- - ceph-osd:mon
 - ceph-mon:osd
- - ntp:juju-info
 - nova-compute:juju-info
- - ntp:juju-info
 - neutron-gateway:juju-info
- - ceph-radosgw:mon
 - ceph-mon:radosgw
- - ceph-radosgw:identity-service
 - keystone:identity-service
- - nova-compute:lxd
 - lxd:lxd
series: xenial
services:
 ceph-mon:
   annotations:
     gui-x: '750'
     gui-y: '500'
   charm: cs:~openstack-charmers-next/xenial/ceph-mon
   num_units: 3
   to:
   - 'lxc:1'
   - 'lxc:2'
   - 'lxc:3'
 ceph-osd:
   annotations:
     gui-x: '1000'
     gui-y: '500'
   charm: cs:~openstack-charmers-next/xenial/ceph-osd
   num_units: 3
   options:
     osd-devices: /srv/ceph-osd
     osd-reformat: 'yes'
     ceph-public-network: 192.168.100.0/24
   to:
   - '1'
   - '2'
   - '3'
 ceph-radosgw:
   annotations:
     gui-x: '1000'
     gui-y: '250'
   charm: cs:~openstack-charmers-next/xenial/ceph-radosgw
   num_units: 1
   options:
   to:
   - lxc:0
 glance:
   annotations:
     gui-x: '250'
     gui-y: '0'
   charm: cs:~openstack-charmers-next/xenial/glance
   num_units: 1
   to:
   - lxc:2
 keystone:
   annotations:
     gui-x: '500'
     gui-y: '0'
   charm: cs:~openstack-charmers-next/xenial/keystone
   num_units: 1
   options:
     admin-password: openstack
   to:
   - lxc:3
 mysql:
   annotations:
     gui-x: '0'
     gui-y: '250'
   charm: cs:~openstack-charmers-next/xenial/percona-cluster
   num_units: 1
   options:
     max-connections: 20000
   to:
   - lxc:0
 neutron-api:
   annotations:
     gui-x: '500'
     gui-y: '500'
   charm: cs:~openstack-charmers-next/xenial/neutron-api
   num_units: 1
   options:
     neutron-security-groups: true
     l2-population: true
     overlay-network-type: vxlan
     default-tenant-network-type: vxlan
     flat-network-providers:  physnet1
   to:
   - lxc:1
 neutron-gateway:
   annotations:
     gui-x: '0'
     gui-y: '0'
   charm: cs:~openstack-charmers-next/xenial/neutron-gateway
   num_units: 1
   options:
     instance-mtu: 1456
     bridge-mappings: physnet1:br-ex
     data-port: br-ex:eth1
     os-data-network: 192.168.100.0/24
   to:
   - '0'
 neutron-openvswitch:
   annotations:
     gui-x: '250'
     gui-y: '500'
   charm: cs:~openstack-charmers-next/xenial/neutron-openvswitch
   num_units: 0
 nova-cloud-controller:
   annotations:
     gui-x: '0'
     gui-y: '500'
   charm: cs:~openstack-charmers-next/xenial/nova-cloud-controller
   num_units: 1
   options:
     network-manager: Neutron
     os-public-network: 192.168.100.0/24
     os-admin-network: 192.168.100.0/24
     use-internal-endpoints: true
   to:
   - lxc:2
 nova-compute:
   annotations:
     gui-x: '250'
     gui-y: '250'
   charm: cs:~openstack-charmers-next/xenial/nova-compute
   num_units: 3
   options:
     enable-live-migration: true
     enable-resize: true
     migration-auth-type: ssh
     virt-type: lxd
   to:
   - '1'
   - '2'
   - '3'
 ntp:
   annotations:
     gui-x: '1000'
     gui-y: '0'
   charm: cs:~openstack-charmers-next/xenial/ntp
   num_units: 0
 openstack-dashboard:
   annotations:
     gui-x: '500'
     gui-y: '-250'
   charm: cs:~openstack-charmers-next/xenial/openstack-dashboard
   num_units: 1
   to:
   - lxc:3
   options:
     neutron-network-lb: true
 rabbitmq-server:
   annotations:
     gui-x: '500'
     gui-y: '250'
   charm: cs:~openstack-charmers-next/xenial/rabbitmq-server
   num_units: 1
   options:
      access-network: 192.168.100.0/24
   to:
   - lxc:0
 lxd:
   annotations:
     gui-x: '750'
     gui-y: '250'
   charm: cs:~openstack-charmers-next/xenial/lxd
   num_units: 0
   options:
     storage-type: lvm
     overwrite: true

on juju, deploy openstack bundle.
root@maas01:~/Openstack_nova_lxd# juju deploy ./bundle.yaml.01

root@maas01:~/Openstack_nova_lxd# juju status
Model    Controller          Cloud/Region  Version
default  my-maas-controller  my-maas       2.0.0

App                    Version      Status   Scale  Charm                  Store       Rev  OS      Notes
ceph-mon               10.2.3       active       3  ceph-mon               jujucharms  253  ubuntu
ceph-osd               10.2.3       active       3  ceph-osd               jujucharms  264  ubuntu
ceph-radosgw           10.2.3       active       1  ceph-radosgw           jujucharms  246  ubuntu
glance                 12.0.0       active       1  glance                 jujucharms  262  ubuntu
keystone               9.2.0        active       1  keystone               jujucharms  281  ubuntu
lxd                    2.0.8        active       3  lxd                    jujucharms  226  ubuntu
mysql                  5.6.21-25.8  active       1  percona-cluster        jujucharms  239  ubuntu
neutron-api            8.3.0        active       1  neutron-api            jujucharms  275  ubuntu
neutron-gateway        8.3.0        active       1  neutron-gateway        jujucharms  268  ubuntu
neutron-openvswitch    8.3.0        active       3  neutron-openvswitch    jujucharms  252  ubuntu
nova-cloud-controller  13.1.2       active       1  nova-cloud-controller  jujucharms  278  ubuntu
nova-compute           13.1.2       active       3  nova-compute           jujucharms  294  ubuntu
ntp                                 unknown      4  ntp                    jujucharms    1  ubuntu
openstack-dashboard    9.1.0        active       1  openstack-dashboard    jujucharms  258  ubuntu
rabbitmq-server        3.5.7        active       1  rabbitmq-server        jujucharms  249  ubuntu

Unit                      Workload  Agent      Machine  Public address  Ports           Message
ceph-mon/0                active    idle       1/lxd/0  192.168.100.55                  Unit is ready and clustered
ceph-mon/1                active    idle       2/lxd/0  192.168.100.63                  Unit is ready and clustered
ceph-mon/2*               active    idle       3/lxd/0  192.168.100.56                  Unit is ready and clustered
ceph-osd/0*               active    idle       1        192.168.100.51                  Unit is ready (1 OSD)
ceph-osd/1                active    idle       2        192.168.100.52                  Unit is ready (1 OSD)
ceph-osd/2                active    idle       3        192.168.100.53                  Unit is ready (1 OSD)
ceph-radosgw/0*           active    idle       0/lxd/0  192.168.100.54  80/tcp          Unit is ready
glance/0*                 active    idle       2/lxd/1  192.168.100.64  9292/tcp        Unit is ready
keystone/0*               active    idle       3/lxd/1  192.168.100.60  5000/tcp        Unit is ready
mysql/0*                  active    executing  0/lxd/1  192.168.100.58                  (update-status) Unit is ready
neutron-api/0*            active    idle       1/lxd/1  192.168.100.62  9696/tcp        Unit is ready
neutron-gateway/0*        active    idle       0        192.168.100.50                  Unit is ready
 ntp/3                   unknown   idle                192.168.100.50
nova-cloud-controller/0*  active    idle       2/lxd/2  192.168.100.57  8774/tcp        Unit is ready
nova-compute/0*           active    idle       1        192.168.100.51                  Unit is ready
 lxd/1                   active    idle                192.168.100.51                  Unit is ready
 neutron-openvswitch/1   active    idle                192.168.100.51                  Unit is ready
 ntp/1                   unknown   idle                192.168.100.51
nova-compute/1            active    idle       2        192.168.100.52                  Unit is ready
 lxd/2                   active    idle                192.168.100.52                  Unit is ready
 neutron-openvswitch/2   active    idle                192.168.100.52                  Unit is ready
 ntp/2                   unknown   idle                192.168.100.52
nova-compute/2            active    idle       3        192.168.100.53                  Unit is ready
 lxd/0*                  active    idle                192.168.100.53                  Unit is ready
 neutron-openvswitch/0*  active    idle                192.168.100.53                  Unit is ready
 ntp/0*                  unknown   idle                192.168.100.53
openstack-dashboard/0*    active    idle       3/lxd/2  192.168.100.61  80/tcp,443/tcp  Unit is ready
rabbitmq-server/0*        active    idle       0/lxd/2  192.168.100.59  5672/tcp        Unit is ready

Machine  State    DNS             Inst id              Series  AZ
0        started  192.168.100.50  xph4w3               xenial  default
0/lxd/0  started  192.168.100.54  juju-2065f1-0-lxd-0  xenial
0/lxd/1  started  192.168.100.58  juju-2065f1-0-lxd-1  xenial
0/lxd/2  started  192.168.100.59  juju-2065f1-0-lxd-2  xenial
1        started  192.168.100.51  8bxdbq               xenial  default
1/lxd/0  started  192.168.100.55  juju-2065f1-1-lxd-0  xenial
1/lxd/1  started  192.168.100.62  juju-2065f1-1-lxd-1  xenial
2        started  192.168.100.52  yg4x6f               xenial  default
2/lxd/0  started  192.168.100.63  juju-2065f1-2-lxd-0  xenial
2/lxd/1  started  192.168.100.64  juju-2065f1-2-lxd-1  xenial
2/lxd/2  started  192.168.100.57  juju-2065f1-2-lxd-2  xenial
3        started  192.168.100.53  tefb3k               xenial  default
3/lxd/0  started  192.168.100.56  juju-2065f1-3-lxd-0  xenial
3/lxd/1  started  192.168.100.60  juju-2065f1-3-lxd-1  xenial
3/lxd/2  started  192.168.100.61  juju-2065f1-3-lxd-2  xenial

Relation                 Provides               Consumes               Type
mon                      ceph-mon               ceph-mon               peer
mon                      ceph-mon               ceph-osd               regular
mon                      ceph-mon               ceph-radosgw           regular
ceph                     ceph-mon               glance                 regular
ceph                     ceph-mon               nova-compute           regular
cluster                  ceph-radosgw           ceph-radosgw           peer
identity-service         ceph-radosgw           keystone               regular
cluster                  glance                 glance                 peer
identity-service         glance                 keystone               regular
shared-db                glance                 mysql                  regular
image-service            glance                 nova-cloud-controller  regular
image-service            glance                 nova-compute           regular
amqp                     glance                 rabbitmq-server        regular
cluster                  keystone               keystone               peer
shared-db                keystone               mysql                  regular
identity-service         keystone               neutron-api            regular
identity-service         keystone               nova-cloud-controller  regular
identity-service         keystone               openstack-dashboard    regular
lxd-migration            lxd                    lxd                    peer
lxd                      lxd                    nova-compute           regular
cluster                  mysql                  mysql                  peer
shared-db                mysql                  neutron-api            regular
shared-db                mysql                  nova-cloud-controller  regular
cluster                  neutron-api            neutron-api            peer
neutron-plugin-api       neutron-api            neutron-gateway        regular
neutron-plugin-api       neutron-api            neutron-openvswitch    regular
neutron-api              neutron-api            nova-cloud-controller  regular
amqp                     neutron-api            rabbitmq-server        regular
cluster                  neutron-gateway        neutron-gateway        peer
quantum-network-service  neutron-gateway        nova-cloud-controller  regular
juju-info                neutron-gateway        ntp                    subordinate
amqp                     neutron-gateway        rabbitmq-server        regular
neutron-plugin           neutron-openvswitch    nova-compute           regular
amqp                     neutron-openvswitch    rabbitmq-server        regular
cluster                  nova-cloud-controller  nova-cloud-controller  peer
cloud-compute            nova-cloud-controller  nova-compute           regular
amqp                     nova-cloud-controller  rabbitmq-server        regular
lxd                      nova-compute           lxd                    subordinate
neutron-plugin           nova-compute           neutron-openvswitch    subordinate
compute-peer             nova-compute           nova-compute           peer
juju-info                nova-compute           ntp                    subordinate
amqp                     nova-compute           rabbitmq-server        regular
ntp-peers                ntp                    ntp                    peer
cluster                  openstack-dashboard    openstack-dashboard    peer
cluster                  rabbitmq-server        rabbitmq-server        peer

root@maas01:~/Openstack_nova_lxd#

Juju GUI

Openstack dashboard
root@maas01:~# juju expose openstack-dashboard
root@maas01:~# juju status openstack-dashboard
Model    Controller          Cloud/Region  Version
default  my-maas-controller  my-maas       2.0.0

App                  Version  Status  Scale  Charm                Store       Rev  OS      Notes
openstack-dashboard  9.1.0    active      1  openstack-dashboard  jujucharms  258  ubuntu  exposed

Unit                    Workload  Agent  Machine  Public address  Ports           Message
openstack-dashboard/0*  active    idle   3/lxd/2  192.168.100.61  80/tcp,443/tcp  Unit is ready

Machine  State    DNS             Inst id              Series  AZ
3        started  192.168.100.53  tefb3k               xenial  default
3/lxd/2  started  192.168.100.61  juju-2065f1-3-lxd-2  xenial

Relation          Provides             Consumes             Type
identity-service  keystone             openstack-dashboard  regular
cluster           openstack-dashboard  openstack-dashboard  peer

Access to the dashboard.
user : admin
credentials : openstack

root@maas01:~/Openstack_nova_lxd# source novarc

root@maas01:~/Openstack_nova_lxd# keystone catalog
Service: object-store
+-------------+-----------------------------------+
|   Property  |               Value               |
+-------------+-----------------------------------+
|   adminURL  |   http://192.168.100.54:80/swift  |
|      id     |  0253f9d51ccb4a64811ae471a32533da |
| internalURL | http://192.168.100.54:80/swift/v1 |
|  publicURL  | http://192.168.100.54:80/swift/v1 |
|    region   |             RegionOne             |
+-------------+-----------------------------------+
Service: image
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminURL  |    http://192.168.100.64:9292    |
|      id     | 164d34c63c0d423198649b3979d1cc4c |
| internalURL |    http://192.168.100.64:9292    |
|  publicURL  |    http://192.168.100.64:9292    |
|    region   |            RegionOne             |
+-------------+----------------------------------+
Service: compute
+-------------+----------------------------------------------------------------+
|   Property  |                             Value                              |
+-------------+----------------------------------------------------------------+
|   adminURL  | http://192.168.100.57:8774/v2/63b3a27e7af14ded8a64bd8390d1f255 |
|      id     |                6d44f211663647429ed4683fed0ddf0e                |
| internalURL | http://192.168.100.57:8774/v2/63b3a27e7af14ded8a64bd8390d1f255 |
|  publicURL  | http://192.168.100.57:8774/v2/63b3a27e7af14ded8a64bd8390d1f255 |
|    region   |                           RegionOne                            |
+-------------+----------------------------------------------------------------+
Service: network
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminURL  |    http://192.168.100.62:9696    |
|      id     | 12bc247facc34aae812892ae2ac0c5fc |
| internalURL |    http://192.168.100.62:9696    |
|  publicURL  |    http://192.168.100.62:9696    |
|    region   |            RegionOne             |
+-------------+----------------------------------+
Service: identity
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminURL  | http://192.168.100.60:35357/v2.0 |
|      id     | 394e31ed50fc4a16a35c157d56bd1f7a |
| internalURL | http://192.168.100.60:5000/v2.0  |
|  publicURL  | http://192.168.100.60:5000/v2.0  |
|    region   |            RegionOne             |
+-------------+----------------------------------+
root@maas01:~/Openstack_nova_lxd#

# openstack
(openstack) service list
+----------------------------------+----------+--------------+
| ID                               | Name     | Type         |
+----------------------------------+----------+--------------+
| 30cccff3b60c404ab6ccd8b1d22fc106 | swift    | object-store |
| a82a210faeb44fb98a55ad06fd49958b | keystone | identity     |
| d3ea43a8897949808d80ffd79ac98ca8 | neutron  | network      |
| d94920c87b7d42e784c068574a6a532f | nova     | compute      |
| df0ce5f2f88245a38f3816b2307b954a | glance   | image        |
+----------------------------------+----------+--------------+

# neutron
(neutron) agent-list
+--------------------------------------+--------------------+----------+-------------------+-------+----------------+---------------------------+
| id                                   | agent_type         | host     | availability_zone | alive | admin_state_up | binary                    |
+--------------------------------------+--------------------+----------+-------------------+-------+----------------+---------------------------+
| 06699000-5727-4543-b2cc-9d4617bb82f9 | Open vSwitch agent | m-node02 |                   | :-)   | True           | neutron-openvswitch-agent |
| 1302e487-7610-4107-8b60-b98661c4445d | Open vSwitch agent | m-node05 |                   | :-)   | True           | neutron-openvswitch-agent |
| 273fc1f2-85d9-4044-9677-81ed5c72afc1 | Metering agent     | m-node02 |                   | :-)   | True           | neutron-metering-agent    |
| 2859ae68-46ee-4f03-997a-2e1521e6a829 | Loadbalancer agent | m-node02 |                   | :-)   | True           | neutron-lbaas-agent       |
| 297295c9-e282-4ae3-9df7-a9ea026f380c | Metadata agent     | m-node02 |                   | :-)   | True           | neutron-metadata-agent    |
| 38223912-436c-46c2-94f6-c59c43cbd35f | L3 agent           | m-node02 | nova              | :-)   | True           | neutron-l3-agent          |
| 6cea681b-6f36-4183-bd90-5eac9c3a2e0d | Open vSwitch agent | m-node04 |                   | :-)   | True           | neutron-openvswitch-agent |
| 83999884-1e52-439e-a4a4-408ac62b9269 | Open vSwitch agent | m-node03 |                   | :-)   | True           | neutron-openvswitch-agent |
| 929e28c2-c150-4762-b433-ab22659d0f3f | DHCP agent         | m-node02 | nova              | :-)   | True           | neutron-dhcp-agent        |
+--------------------------------------+--------------------+----------+-------------------+-------+----------------+---------------------------+
(neutron)

add an LXD image
root@maas01:~/Openstack_nova_lxd# wget http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-root.tar.gz

root@maas01:~/Openstack_nova_lxd# glance image-create --name=xenial --visibility public --container-format=bare --disk-form
at=root-tar --property architecture="x86_64" < ./xenial-server-cloudimg-amd64-root.tar.gz

root@maas01:~/Openstack_nova_lxd# openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| b275050e-f217-4bf1-8b3c-fc5a9a662389 | xenial | active |
+--------------------------------------+--------+--------+

- configure tenant network ( vxlan )

(neutron) net-create internal
(neutron) subnet-create internal 10.0.100.0/24
(neutron) router-create my-router
(neutron) router-interface-add my-router bc31e3f5-c423-4a61-9a68-31bce2339a70

- configure provider network ( external network. flat network )

(neutron) net-create --provider:network_type flat --provider:physical_network physnet1 --router:external=true external

(neutron) subnet-create --tenant-id services external 192.168.101.0/24 --disable-dhcp --allocation-pool start=192.168.101.1
50,end=192.168.101.200 --gateway 192.168.101.1

(neutron) router-gateway-set my-router external
- security group
root@maas01:~/Openstack_nova_lxd# neutron security-group-rule-create --protocol icmp --direction ingress default

# neutron security-group-rule-create --protocol tcp \
>     --port-range-min 22 --port-range-max 22 \
>     --direction ingress default

Boot an instance
root@maas01:~/Openstack_nova_lxd# nova keypair-add --pub-key ~/.ssh/id_rsa.pub mykey

root@maas01:~/Openstack_nova_lxd# nova boot --image xenial --flavor m1.tiny --key-name mykey --nic net-id=c1a961b6-18a4-4d4
a-98f0-e4d46301efa1 xenial01

root@maas01:~/Openstack_nova_lxd# openstack server list
+--------------------------------------+----------+--------+---------------------+
| ID                                   | Name     | Status | Networks            |
+--------------------------------------+----------+--------+---------------------+
| 489100f6-341e-4295-9622-a9741ce3d222 | xenial01 | BUILD  | internal=10.0.100.3 |
+--------------------------------------+----------+--------+---------------------+

Access to the instance from neutron-gateway’s qrouter namespace.
root@maas01:~/Openstack_nova_lxd# juju scp ~/.ssh/id_rsa neutron-gateway/0:

root@maas01:~/Openstack_nova_lxd# juju ssh neutron-gateway/0

ubuntu@m-node02:~$ ip netns
qrouter-3a2da265-5ddd-4448-8d28-8689c79671ce (id: 4)
qdhcp-c1a961b6-18a4-4d4a-98f0-e4d46301efa1 (id: 3)

ubuntu@m-node02:~$ sudo ip netns exec qrouter-3a2da265-5ddd-4448-8d28-8689c79671ce ping 10.0.100.3 -c 3
PING 10.0.100.3 (10.0.100.3) 56(84) bytes of data.
64 bytes from 10.0.100.3: icmp_seq=1 ttl=64 time=1.45 ms
64 bytes from 10.0.100.3: icmp_seq=2 ttl=64 time=0.439 ms
64 bytes from 10.0.100.3: icmp_seq=3 ttl=64 time=0.471 ms

ubuntu@m-node02:~$ sudo ip netns exec qrouter-3a2da265-5ddd-4448-8d28-8689c79671ce ssh -i ./id_rsa ubuntu@10.0.100.3
The authenticity of host '10.0.100.3 (10.0.100.3)' can't be established.
ECDSA key fingerprint is SHA256:BPHutVGSPPj9TEaBtILsK9fnTnAbllywv8oo/6ZdNEU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.100.3' (ECDSA) to the list of known hosts.

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@xenial01:~$ ip -4 a s | grep inet
   inet 127.0.0.1/8 scope host lo
   inet 10.0.100.3/24 brd 10.0.100.255 scope global eth0

- floating ip

(neutron) floatingip-create external

(neutron) floatingip-list
+--------------------------------------+------------------+---------------------+---------+
| id                                   | fixed_ip_address | floating_ip_address | port_id |
+--------------------------------------+------------------+---------------------+---------+
| 4bac2512-df44-44ed-99ab-c555a9e3d48e |                  | 192.168.101.151     |         |
+--------------------------------------+------------------+---------------------+---------+
(neutron)

(neutron) floatingip-associate 4bac2512-df44-44ed-99ab-c555a9e3d48e 3bbfc49c-cecd-4814-89a6-794291419808

root@maas01:~/Openstack_nova_lxd# openstack server list
+--------------------------------------+----------+--------+--------------------------------------+
| ID                                   | Name     | Status | Networks                             |
+--------------------------------------+----------+--------+--------------------------------------+
| 489100f6-341e-4295-9622-a9741ce3d222 | xenial01 | ACTIVE | internal=10.0.100.3, 192.168.101.151 |
+--------------------------------------+----------+--------+--------------------------------------+

send ping to the floating ip
root@maas01:~# ping 192.168.101.151
PING 192.168.101.151 (192.168.101.151) 56(84) bytes of data.
64 bytes from 192.168.101.151: icmp_seq=1 ttl=63 time=2.45 ms
^C

SSH to the instance via floating ip
root@maas01:~# ssh -i ~/.ssh/id_rsa ubuntu@192.168.101.151
The authenticity of host '192.168.101.151 (192.168.101.151)' can't be established.
ECDSA key fingerprint is SHA256:BPHutVGSPPj9TEaBtILsK9fnTnAbllywv8oo/6ZdNEU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.101.151' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-62-generic x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage

 Get cloud support with Ubuntu Advantage Cloud Guest:
   http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.


Last login: Mon Feb  6 04:01:24 2017 from 10.0.100.1
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@xenial01:~$ logout
Connection to 192.168.101.151 closed.

on the nova LXD host.
the instance(xenial01) is running as LXD container.
ubuntu@m-node03:~$ sudo lxc list
Generating a client certificate. This may take a minute...
If this is your first time using LXD, you should also run: sudo lxd init
To start your first container, try: lxc launch ubuntu:16.04

+---------------------+---------+-----------------------+------+------------+-----------+
|        NAME         |  STATE  |         IPV4          | IPV6 |    TYPE    | SNAPSHOTS |
+---------------------+---------+-----------------------+------+------------+-----------+
| instance-00000001   | RUNNING | 10.0.100.3 (eth0)     |      | PERSISTENT | 0         |
+---------------------+---------+-----------------------+------+------------+-----------+
| juju-2065f1-1-lxd-0 | RUNNING | 192.168.100.55 (eth0) |      | PERSISTENT | 0         |
+---------------------+---------+-----------------------+------+------------+-----------+
| juju-2065f1-1-lxd-1 | RUNNING | 192.168.100.62 (eth0) |      | PERSISTENT | 0         |
+---------------------+---------+-----------------------+------+------------+-----------+

ubuntu@m-node03:~$ sudo lxc config show instance-00000001
name: instance-00000001
profiles:
- instance-00000001
config:
 volatile.base_image: 0754869e9f77f9a16a45d44fdadd18db2e2f64ab43435fb778b916ea043d9a43
 volatile.idmap.base: "0"
 volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":100000,"Nsid":0,"Maprange":327680000},{"Isuid":false,"Isgid":true,"Hostid":100000,"Nsid":0,"Maprange":327680000}]'
 volatile.last_state.idmap: '[{"Isuid":true,"Isgid":false,"Hostid":100000,"Nsid":0,"Maprange":327680000},{"Isuid":false,"Isgid":true,"Hostid":100000,"Nsid":0,"Maprange":327680000}]'
 volatile.last_state.power: RUNNING
 volatile.qbr3bbfc49c-ce.name: eth0
devices: {}
ephemeral: false

ubuntu@m-node03:~$ sudo lxc exec instance-00000001 bash
root@xenial01:~# ip -4 a s | grep inet
   inet 127.0.0.1/8 scope host lo
   inet 10.0.100.3/24 brd 10.0.100.255 scope global eth0
root@xenial01:~#

Here is an output of dashboard.