diff --git a/snap-overlay/bin/set-default-config b/snap-overlay/bin/set-default-config index 26fd08d..729b725 100755 --- a/snap-overlay/bin/set-default-config +++ b/snap-overlay/bin/set-default-config @@ -20,6 +20,9 @@ snapctl set \ config.network.ext-cidr=10.20.20.1/24 \ config.network.security-rules=true \ config.network.dashboard-allowed-hosts="*" \ + config.network.ports.dashboard=80 \ + config.network.ports.mysql=3306 \ + config.network.ports.rabbit=5672 \ ; # Passwords, certs, etc. diff --git a/snap-overlay/snap-openstack.yaml b/snap-overlay/snap-openstack.yaml index 1615eeb..d8bda03 100644 --- a/snap-overlay/snap-openstack.yaml +++ b/snap-overlay/snap-openstack.yaml @@ -17,6 +17,7 @@ setup: - "{snap_common}/etc/cinder/uwsgi/snap" - "{snap_common}/etc/nova/uwsgi/snap" - "{snap_common}/etc/horizon/uwsgi/snap" + - "{snap_common}/etc/rabbitmq" - "{snap_common}/fernet-keys" - "{snap_common}/lib" - "{snap_common}/lib/images" @@ -53,6 +54,7 @@ setup: neutron.nova.conf.j2: "{snap_common}/etc/neutron/neutron.conf.d/nova.conf" neutron.database.conf.j2: "{snap_common}/etc/neutron/neutron.conf.d/database.conf" neutron.conf.d.rabbitmq.conf.j2: "{snap_common}/etc/neutron/neutron.conf.d/rabbitmq.conf" + rabbitmq.conf.j2: "{snap_common}/etc/rabbitmq/rabbitmq.config" chmod: "{snap_common}/instances": 0755 @@ -69,6 +71,9 @@ setup: extcidr: 'config.network.ext-cidr' dns: 'config.network.dns' dashboard_allowed_hosts: 'config.network.dashboard-allowed-hosts' + dashboard_port: 'config.network.ports.dashboard' + mysql_port: 'config.network.ports.mysql' + rabbit_port: 'config.network.ports.rabbit' entry_points: keystone-manage: binary: "{snap}/bin/keystone-manage" diff --git a/snap-overlay/templates/glance.database.conf.j2 b/snap-overlay/templates/glance.database.conf.j2 index bb9a32b..c4c0d81 100644 --- a/snap-overlay/templates/glance.database.conf.j2 +++ b/snap-overlay/templates/glance.database.conf.j2 @@ -1,2 +1,2 @@ [database] -connection = mysql+pymysql://glance:glance@{{ control_ip }}/glance +connection = mysql+pymysql://glance:glance@{{ control_ip }}:{{ mysql_port }}/glance diff --git a/snap-overlay/templates/horizon-nginx.conf.j2 b/snap-overlay/templates/horizon-nginx.conf.j2 index c06b400..394e4e9 100644 --- a/snap-overlay/templates/horizon-nginx.conf.j2 +++ b/snap-overlay/templates/horizon-nginx.conf.j2 @@ -2,7 +2,7 @@ # to define this template. Be sure to update "listen" with the port number and # also update "api-name" for the socket. server { - listen 80; + listen {{ dashboard_port }}; error_log syslog:server=unix:/dev/log; access_log syslog:server=unix:/dev/log; location / { diff --git a/snap-overlay/templates/keystone.database.conf.j2 b/snap-overlay/templates/keystone.database.conf.j2 index ad29228..a480ec7 100644 --- a/snap-overlay/templates/keystone.database.conf.j2 +++ b/snap-overlay/templates/keystone.database.conf.j2 @@ -1,2 +1,2 @@ [database] -connection = mysql+pymysql://keystone:keystone@{{ control_ip }}/keystone +connection = mysql+pymysql://keystone:keystone@{{ control_ip }}:{{ mysql_port }}/keystone diff --git a/snap-overlay/templates/neutron.conf.d.rabbitmq.conf.j2 b/snap-overlay/templates/neutron.conf.d.rabbitmq.conf.j2 index 95406d0..ef149bc 100644 --- a/snap-overlay/templates/neutron.conf.d.rabbitmq.conf.j2 +++ b/snap-overlay/templates/neutron.conf.d.rabbitmq.conf.j2 @@ -1,2 +1,2 @@ [DEFAULT] -transport_url = rabbit://openstack:rabbitmq@{{ control_ip }} +transport_url = rabbit://openstack:rabbitmq@{{ control_ip }}:{{ rabbit_port }} diff --git a/snap-overlay/templates/neutron.database.conf.j2 b/snap-overlay/templates/neutron.database.conf.j2 index 8d22851..fe12945 100644 --- a/snap-overlay/templates/neutron.database.conf.j2 +++ b/snap-overlay/templates/neutron.database.conf.j2 @@ -1,2 +1,2 @@ [database] -connection = mysql+pymysql://neutron:neutron@{{ control_ip }}/neutron +connection = mysql+pymysql://neutron:neutron@{{ control_ip }}:{{ mysql_port }}/neutron diff --git a/snap-overlay/templates/nova.conf.d.database.conf.j2 b/snap-overlay/templates/nova.conf.d.database.conf.j2 index 3eaddf9..51ded26 100644 --- a/snap-overlay/templates/nova.conf.d.database.conf.j2 +++ b/snap-overlay/templates/nova.conf.d.database.conf.j2 @@ -1,5 +1,5 @@ [database] -connection = mysql+pymysql://nova:nova@{{ control_ip }}/nova +connection = mysql+pymysql://nova:nova@{{ control_ip }}:{{ mysql_port }}/nova [api_database] -connection = mysql+pymysql://nova_api:nova_api@{{ control_ip }}/nova_api +connection = mysql+pymysql://nova_api:nova_api@{{ control_ip }}:{{ mysql_port }}/nova_api diff --git a/snap-overlay/templates/nova.conf.d.rabbitmq.conf.j2 b/snap-overlay/templates/nova.conf.d.rabbitmq.conf.j2 index 95406d0..ef149bc 100644 --- a/snap-overlay/templates/nova.conf.d.rabbitmq.conf.j2 +++ b/snap-overlay/templates/nova.conf.d.rabbitmq.conf.j2 @@ -1,2 +1,2 @@ [DEFAULT] -transport_url = rabbit://openstack:rabbitmq@{{ control_ip }} +transport_url = rabbit://openstack:rabbitmq@{{ control_ip }}:{{ rabbit_port }} diff --git a/snap-overlay/templates/rabbitmq.conf.j2 b/snap-overlay/templates/rabbitmq.conf.j2 new file mode 100644 index 0000000..5b4e22b --- /dev/null +++ b/snap-overlay/templates/rabbitmq.conf.j2 @@ -0,0 +1,6 @@ +[ + {rabbit, [ + {tcp_listeners, [{{ rabbit_port}}]} + ] + } +]. \ No newline at end of file diff --git a/snap-wrappers/mysql/mysql-start-server b/snap-wrappers/mysql/mysql-start-server index 3b15767..3f813b6 100755 --- a/snap-wrappers/mysql/mysql-start-server +++ b/snap-wrappers/mysql/mysql-start-server @@ -17,12 +17,16 @@ set -e init_config() { + # Write out config. + # Include 'client' section for pymysql client. + # TODO: is [mysql] section necessary? mkdir -p "${CONFDIR}" echo "Generating config file in ${CONFFILE}..." cat > ${CONFFILE} < master +if [ -z "$(snapctl get config.network.ports.dashboard)" ]; then + snapctl set config.network.ports.dashboard=80 +fi + +if [ -z "$(snapctl get config.network.ports.mysql)" ]; then + snapctl set config.network.ports.mysql=3306 +fi + +if [ -z "$(snapctl get config.network.ports.rabbit)" ]; then + snapctl set config.network.ports.rabbit=5672 +fi + snap-openstack setup # Write any template changes. diff --git a/snapcraft.yaml b/snapcraft.yaml index 26faa11..618e7be 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -778,11 +778,11 @@ parts: rm -f $SNAPCRAFT_PART_INSTALL/usr/bin/erl rm -f $SNAPCRAFT_PART_INSTALL/usr/lib/rabbitmq/bin/rabbitmq-script-wrapper # NOTE(jamespage): The versioned path below is brittle. - rm -f $SNAPCRAFT_PART_INSTALL/usr/lib/rabbitmq/lib/rabbitmq_server-3.5.7/sbin/rabbitmq-defaults + rm -f $SNAPCRAFT_PART_INSTALL/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.10/sbin/rabbitmq-defaults snapcraftctl build organize: rabbitmq-script-wrapper: usr/lib/rabbitmq/bin/rabbitmq-script-wrapper - rabbitmq-defaults: usr/lib/rabbitmq/lib/rabbitmq_server-3.5.7/sbin/rabbitmq-defaults + rabbitmq-defaults: usr/lib/rabbitmq/lib/rabbitmq_server-3.6.10/sbin/rabbitmq-defaults erl: usr/bin/erl # Memcached Token Caching diff --git a/tests/framework.py b/tests/framework.py index 4cf84fb..faa7642 100644 --- a/tests/framework.py +++ b/tests/framework.py @@ -224,7 +224,13 @@ class Framework(unittest.TestCase): # Test print('Verifying GUI for (IP: {})'.format(host.horizon_ip)) # Verify that our GUI is working properly - self.driver.get("http://{}/".format(host.horizon_ip)) + dashboard_port = check_output(*host.prefix, 'sudo', 'snap', 'get', + 'microstack', + 'config.network.ports.dashboard') + self.driver.get("http://{}:{}/".format( + host.horizon_ip, + dashboard_port + )) # Login to horizon! self.driver.find_element(By.ID, "id_username").click() self.driver.find_element(By.ID, "id_username").send_keys("admin") diff --git a/tools/init/init/questions/__init__.py b/tools/init/init/questions/__init__.py index 5f15771..7718b4a 100644 --- a/tools/init/init/questions/__init__.py +++ b/tools/init/init/questions/__init__.py @@ -267,7 +267,9 @@ class RabbitMq(Question): config_key = 'config.services.control-plane' def _wait(self) -> None: - nc_wait(_env['control_ip'], '5672') + rabbit_port = check_output( + 'snapctl', 'get', 'config.network.ports.rabbit') + nc_wait(_env['control_ip'], rabbit_port) log_file = '{SNAP_COMMON}/log/rabbitmq/startup_log'.format(**_env) log_wait(log_file, 'completed') @@ -301,7 +303,9 @@ class DatabaseSetup(Question): config_key = 'config.services.control-plane' def _wait(self) -> None: - nc_wait(_env['control_ip'], '3306') + mysql_port = check_output( + 'snapctl', 'get', 'config.network.ports.mysql') + nc_wait(_env['control_ip'], mysql_port) log_wait('{SNAP_COMMON}/log/mysql/error.log'.format(**_env), 'mysqld: ready for connections.') diff --git a/tools/init/init/shell.py b/tools/init/init/shell.py index 3caa482..f9c85b3 100644 --- a/tools/init/init/shell.py +++ b/tools/init/init/shell.py @@ -127,9 +127,8 @@ def sql(cmd: str) -> None: :param cmd: sql to execute. """ - mysql_conf = '${SNAP_USER_COMMON}/etc/mysql/my.cnf'.format(**_env) - connection = pymysql.connect(host='localhost', user='root', - read_default_file=mysql_conf) + mysql_conf = '{SNAP_COMMON}/etc/mysql/my.cnf'.format(**_env) + connection = pymysql.connect(read_default_file=mysql_conf) with connection.cursor() as cursor: cursor.execute(cmd) diff --git a/tools/launch/launch/main.py b/tools/launch/launch/main.py index 93a3080..9b8aaba 100644 --- a/tools/launch/launch/main.py +++ b/tools/launch/launch/main.py @@ -146,15 +146,29 @@ def launch(name, args): '-c', 'floating_ip_address', 'external') check('openstack', 'server', 'add', 'floating', 'ip', server_id, ip) + username = '' + if args.flavor: + # Try to guess at a username. + # TODO: make this more sophisticated. + if 'fedora' in args.flavor.lower(): + username = 'fedora' + if 'ubuntu' in args.flavor.lower(): + username = 'ubuntu' + if 'cirros' in args.flavor.lower(): + username = 'cirros' + print("""\ -Server {} launched! (status is {}) +Server {name} launched! (status is {status}) Access it with `ssh -i \ -$HOME/.ssh/id_microstack` @{}""".format(name, status, ip)) +$HOME/.ssh/id_microstack` {username}@{ip}""".format(name=name, status=status, + username=username, ip=ip)) gate = check_output('snapctl', 'get', 'config.network.ext-gateway') - print('You can also visit the OpenStack dashboard at http://{}'.format( - gate)) + port = check_output('snapctl', 'get', 'config.network.ports.dashboard') + + print('You can also visit the OpenStack dashboard at http://{}:{}'.format( + gate, port)) def main():