# DevStack

## DevStack

> &#x20;***DevStack** is a series of extensible scripts used to quickly bring up a complete OpenStack environment based on the latest versions of everything from git master. It is used interactively as a development environment and as the basis for much of the OpenStack project’s functional testing.* [Homepage](https://docs.openstack.org/devstack/latest/index.html)

* [DevStack Source Code](https://git.openstack.org/cgit/openstack-dev/devstack)
* [Deploy multi node OpenStack on Virtual Machines.](https://git.openstack.org/cgit/openstack/training-labs)

```bash
xe1gyq@server:~$ sudo apt install git bridge-utils
```

```bash
xe1gyq@server:~$ sudo useradd -s /bin/bash -d /opt/stack -m stack
xe1gyq@server:~$ echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
xe1gyq@server:~$ sudo su - stack
stack@server:~$ git clone https://git.openstack.org/openstack-dev/devstack
Cloning into 'devstack'...
remote: Counting objects: 41006, done.
remote: Compressing objects: 100% (20359/20359), done.
remote: Total 41006 (delta 29114), reused 31408 (delta 20002)
Receiving objects: 100% (41006/41006), 8.32 MiB | 629.00 KiB/s, done.
Resolving deltas: 100% (29114/29114), done.
```

```bash
stack@server:~$ cd devstack/
stack@server:~/devstack$ ls
clean.sh     extras.d          HACKING.rst      Makefile    run_tests.sh  tests
data         files             inc              openrc      samples       tools
doc          functions         lib              pkg         setup.cfg     tox.ini
exerciserc   functions-common  LICENSE          playbooks   setup.py      unstack.sh
exercises    FUTURE.rst        local.conf       README.rst  stackrc
exercise.sh  gate              MAINTAINERS.rst  roles       stack.sh
```

```bash
stack@server:~/devstack$ nano local.conf
[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
```

```bash
stack@server:~/devstack$ ./stack.sh
```

## DevStack :: Succesful Run

```bash
=========================
DevStack Component Timing
 (times are in seconds)  
=========================
run_process           16
test_with_retry        2
apt-get-update       195
osc                  159
wait_for_service      16
git_timed            1357
dbsync                54
pip_install          616
apt-get              266
-------------------------
Unaccounted time     441
=========================
Total runtime        3122



This is your host IP address: 192.168.1.127
This is your host IPv6 address: ::1
Horizon is now available at http://192.168.1.127/dashboard
Keystone is serving at http://192.168.1.127/identity/
The default users are: admin and demo
The password: devstack

WARNING: 
Using lib/neutron-legacy is deprecated, and it will be removed in the future


Services are running under systemd unit files.
For more information see: 
https://docs.openstack.org/devstack/latest/systemd.html

DevStack Version: queens
Change: 730ce45466a903c639554b2e70f6e40a02e9e29d Create NOVA_READY_TIMEOUT in is_nova_ready function 2018-02-23 16:52:23 -0500
OS Version: Ubuntu 17.10 artful

2018-02-24 22:26:29.052 | stack.sh completed in 3122 seconds.
```

## DevStack :: Working Dashboard

API Access Service Service EndPoint

```bash
Block Storage     http://192.168.1.127/volume/
Compute     http://192.168.1.127/compute/v2.1
Compute_Legacy     http://192.168.1.127/compute/v2/42ec24a506d14f19aa9e8cccf89ff698
Identity     http://192.168.1.127/identity
Image     http://192.168.1.127/image
Network     http://192.168.1.127:9696/
Placement     http://192.168.1.127/placement
Volume     http://192.168.1.127/volume/v1/42ec24a506d14f19aa9e8cccf89ff698
Volumev2     http://192.168.1.127/volume/v2/42ec24a506d14f19aa9e8cccf89ff698
Volumev3     http://192.168.1.127/volume/v3/42ec24a506d14f19aa9e8cccf89ff698
```

## DevStack :: Clonned Repositories

```bash
stack@server:~/devstack$ ls ..
bin     data      devstack.subunit  horizon   logs     nova   requirements
cinder  devstack  glance            keystone  neutron  noVNC  tempest
stack@server:~/devstack$
```

## DevStack :: OpenRc

```bash
stack@server:~/devstack$ source openrc admin admin
WARNING: setting legacy OS_TENANT_NAME to support cli tools.
stack@server:~/devstack$
```

## DevStack :: OpenStack Components

* Keystone
* Glance
* Nova
* Cinder
* Neutron
* Horizon

```bash
stack@server:~/devstack$ glance --version
2.9.1
stack@server:~/devstack$ nova --version
9.1.1
stack@server:~/devstack$ cinder --version
3.5.0
stack@server:~/devstack$ neutron --version
neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead.
6.7.0
```

## DevStack :: Opt Installation

```bash
stack@server:~$ cd /opt/stack/
stack@server:~$ ls
bin     data      devstack.subunit  horizon   logs     nova   requirements
cinder  devstack  glance            keystone  neutron  noVNC  tempest
stack@server:~$
```

## DevStack :: SystemCtl

```bash
stack@server:~$ sudo systemctl status | grep devstack
           │ │ │ ├─11834 grep --color=auto devstack
             ├─system-devstack.slice
             │ ├─devstack@dstat.service
             │ │ ├─15593 /bin/bash /opt/stack/devstack/tools/dstat.sh /opt/stack/logs
             │ ├─devstack@n-api.service
             │ ├─devstack@n-novnc.service
             │ ├─devstack@etcd.service
             │ ├─devstack@g-reg.service
             │ ├─devstack@q-dhcp.service
             │ ├─devstack@q-l3.service
             │ ├─devstack@keystone.service
             │ ├─devstack@q-meta.service
             │ ├─devstack@c-sch.service
             │ ├─devstack@c-vol.service
             │ ├─devstack@n-cpu.service
             │ ├─devstack@placement-api.service
             │ ├─devstack@n-sch.service
             │ ├─devstack@q-agt.service
             │ ├─devstack@q-svc.service
             │ ├─devstack@n-cond-cell1.service
             │ ├─devstack@g-api.service
             │ ├─devstack@n-api-meta.service
             │ ├─devstack@c-api.service
             │ ├─devstack@n-super-cond.service
             │ └─devstack@n-cauth.service
stack@server:~$
```

## DevStack :: SystemCtl

```bash
xe1gyq@server:~$ ifconfig
br-ex: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.24.4.1  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::34ab:3bff:fed8:554a  prefixlen 64  scopeid 0x20<link>
        inet6 2001:db8::2  prefixlen 64  scopeid 0x0<global>
        ether 36:ab:3b:d8:55:4a  txqueuelen 1000  (Ethernet)
        RX packets 32  bytes 2090 (2.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 93  bytes 11626 (11.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.127  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::56ee:75ff:fe2d:1df4  prefixlen 64  scopeid 0x20<link>
        ether 54:ee:75:2d:1d:f4  txqueuelen 1000  (Ethernet)
        RX packets 696589  bytes 1016574577 (1.0 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 412919  bytes 33444162 (33.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xf1600000-f1620000  

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 402940  bytes 188780888 (188.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 402940  bytes 188780888 (188.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

qbr3d975c95-ea: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 1e:28:15:95:48:73  txqueuelen 1000  (Ethernet)
        RX packets 32  bytes 3657 (3.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

qvb3d975c95-ea: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        inet6 fe80::1c28:15ff:fe95:4873  prefixlen 64  scopeid 0x20<link>
        ether 1e:28:15:95:48:73  txqueuelen 1000  (Ethernet)
        RX packets 25  bytes 3305 (3.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 29  bytes 3817 (3.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

qvo3d975c95-ea: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        inet6 fe80::7444:feff:fe12:7301  prefixlen 64  scopeid 0x20<link>
        ether 76:44:fe:12:73:01  txqueuelen 1000  (Ethernet)
        RX packets 29  bytes 3817 (3.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 25  bytes 3305 (3.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tap3d975c95-ea: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::fc16:3eff:fef5:b316  prefixlen 64  scopeid 0x20<link>
        ether fe:16:3e:f5:b3:16  txqueuelen 1000  (Ethernet)
        RX packets 7  bytes 800 (800.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28  bytes 3680 (3.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:92:0d:0a  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlp4s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether e8:b1:fc:08:6b:b4  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

xe1gyq@server:~$
```

## DevStack :: OpenStack Command Line

```bash
stack@server:~/tempest$ openstack help
usage: openstack [--version] [-v | -q] [--log-file LOG_FILE] [-h] [--debug]
                 [--os-cloud <cloud-config-name>]
                 [--os-region-name <auth-region-name>]
                 [--os-cacert <ca-bundle-file>] [--os-cert <certificate-file>]
                 [--os-key <key-file>] [--verify | --insecure]
...
...
stack@server:~$ openstack server list

stack@server:~$
```

```bash
stack@server:~$ cat /etc/openstack/clouds.yaml 
clouds:
  devstack:
    auth:
      auth_url: http://192.168.1.127/identity
      password: devstack
      project_domain_id: default
      project_name: demo
      user_domain_id: default
      username: demo
    identity_api_version: '3'
    region_name: RegionOne
    volume_api_version: '2'
  devstack-admin:
    auth:
      auth_url: http://192.168.1.127/identity
      password: devstack
      project_domain_id: default
      project_name: admin
      user_domain_id: default
      username: admin
    identity_api_version: '3'
    region_name: RegionOne
    volume_api_version: '2'
  devstack-alt:
    auth:
      auth_url: http://192.168.1.127/identity
      password: devstack
      project_domain_id: default
      project_name: alt_demo
      user_domain_id: default
      username: alt_demo
    identity_api_version: '3'
    region_name: RegionOne
    volume_api_version: '2'
stack@server:~$
```

## DevStack :: OpenStackClient :: Image

```bash
stack@server:~/devstack$ openstack image list
+--------------------------------------+--------------------------+--------+
| ID                                   | Name                     | Status |
+--------------------------------------+--------------------------+--------+
| aac2d54d-275b-4b21-9ee7-33313a6dbc9d | cirros-0.3.5-x86_64-disk | active |
+--------------------------------------+--------------------------+--------+
stack@server:~/devstack$ openstack image show aac2d54d-275b-4b21-9ee7-33313a6dbc9d
+------------------+------------------------------------------------------+
| Field            | Value                                                |
+------------------+------------------------------------------------------+
| checksum         | f8ab98ff5e73ebab884d80c9dc9c7290                     |
| container_format | bare                                                 |
| created_at       | 2018-02-24T22:23:17Z                                 |
| disk_format      | qcow2                                                |
| file             | /v2/images/aac2d54d-275b-4b21-9ee7-33313a6dbc9d/file |
| id               | aac2d54d-275b-4b21-9ee7-33313a6dbc9d                 |
| min_disk         | 0                                                    |
| min_ram          | 0                                                    |
| name             | cirros-0.3.5-x86_64-disk                             |
| owner            | 42ec24a506d14f19aa9e8cccf89ff698                     |
| protected        | False                                                |
| schema           | /v2/schemas/image                                    |
| size             | 13267968                                             |
| status           | active                                               |
| tags             |                                                      |
| updated_at       | 2018-02-24T22:23:17Z                                 |
| virtual_size     | None                                                 |
| visibility       | public                                               |
+------------------+------------------------------------------------------+
stack@server:~/devstack$
```

## DevStack :: OpenStackClient :: Compute

```bash
stack@server:~/devstack$ openstack compute service list
+----+------------------+--------+----------+---------+-------+----------------------------+
| ID | Binary           | Host   | Zone     | Status  | State | Updated At                 |
+----+------------------+--------+----------+---------+-------+----------------------------+
|  3 | nova-scheduler   | server | internal | enabled | up    | 2018-02-24T23:58:43.000000 |
|  5 | nova-consoleauth | server | internal | enabled | up    | 2018-02-24T23:58:47.000000 |
|  6 | nova-conductor   | server | internal | enabled | up    | 2018-02-24T23:58:48.000000 |
|  1 | nova-conductor   | server | internal | enabled | up    | 2018-02-24T23:58:47.000000 |
|  2 | nova-compute     | server | nova     | enabled | up    | 2018-02-24T23:58:41.000000 |
+----+------------------+--------+----------+---------+-------+----------------------------+
stack@server:~/devstack$
```

## DevStack :: OpenStackClient :: Flavor

```bash
stack@server:~/devstack$ openstack flavor list
+----+-----------+-------+------+-----------+-------+-----------+
| ID | Name      |   RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+-----------+-------+------+-----------+-------+-----------+
| 1  | m1.tiny   |   512 |    1 |         0 |     1 | True      |
| 2  | m1.small  |  2048 |   20 |         0 |     1 | True      |
| 3  | m1.medium |  4096 |   40 |         0 |     2 | True      |
| 4  | m1.large  |  8192 |   80 |         0 |     4 | True      |
| 42 | m1.nano   |    64 |    0 |         0 |     1 | True      |
| 5  | m1.xlarge | 16384 |  160 |         0 |     8 | True      |
| 84 | m1.micro  |   128 |    0 |         0 |     1 | True      |
| c1 | cirros256 |   256 |    0 |         0 |     1 | True      |
| d1 | ds512M    |   512 |    5 |         0 |     1 | True      |
| d2 | ds1G      |  1024 |   10 |         0 |     1 | True      |
| d3 | ds2G      |  2048 |   10 |         0 |     2 | True      |
| d4 | ds4G      |  4096 |   20 |         0 |     4 | True      |
+----+-----------+-------+------+-----------+-------+-----------+
stack@server:~/devstack$
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://theiotlearninginitiative.gitbook.io/edgecomputingsolutions/introduction/stacks/openstack/playground/devstack.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
