diff options
| author | Amy Fong <amy.fong@windriver.com> | 2014-04-08 11:52:38 -0400 |
|---|---|---|
| committer | Bruce Ashfield <bruce.ashfield@windriver.com> | 2014-04-10 14:38:56 -0400 |
| commit | 7f2b6ebfc0d2e4d2b8c8e6d3208a2cae435d0eeb (patch) | |
| tree | 48a42db440207178364a9f9d9a38e1a073166d42 /meta-openstack/recipes-devtools/python | |
| parent | f72e9d29b18bb4c6ca076f1e729b6572e4928d4d (diff) | |
| download | meta-cloud-services-7f2b6ebfc0d2e4d2b8c8e6d3208a2cae435d0eeb.tar.gz | |
Enable python-horizon to run from apache.
- modify python-horizon to install files needed for horizon/apache
- add apache configuration file (openstack-dashboard-apache.conf) to setup a
virtual host running from port 80 to run the mod_wsgi/openstack-dashboard app
- add horizon-apache and apache2 to controller task list
- Note: local_settings.py differs from the one in examples in two ways:
1. LOCAL_PATH = "/usr/share/openstack-dashboard/openstack_dashboard/static"
since the apache app runs as daemon, we neeed to specify a path where
daemon has write permissions
2. configure python-horizon/apache to use memcached. (see CACHES)
Signed-off-by: Amy Fong <amy.fong@windriver.com>
Diffstat (limited to 'meta-openstack/recipes-devtools/python')
4 files changed, 543 insertions, 2 deletions
diff --git a/meta-openstack/recipes-devtools/python/python-horizon/horizon.init b/meta-openstack/recipes-devtools/python/python-horizon/horizon.init index 994fbec..1c03b78 100644 --- a/meta-openstack/recipes-devtools/python/python-horizon/horizon.init +++ b/meta-openstack/recipes-devtools/python/python-horizon/horizon.init | |||
| @@ -66,6 +66,10 @@ status() | |||
| 66 | echo "$DESC is not running" | 66 | echo "$DESC is not running" |
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | if [ -e /etc/apache2/conf.d/openstack-dashboard-apache.conf ]; then | ||
| 70 | chown -R daemon /usr/share/openstack-dashboard/openstack_dashboard/static | ||
| 71 | fi | ||
| 72 | |||
| 69 | case "$1" in | 73 | case "$1" in |
| 70 | start) | 74 | start) |
| 71 | start | 75 | start |
diff --git a/meta-openstack/recipes-devtools/python/python-horizon/local_settings.py b/meta-openstack/recipes-devtools/python/python-horizon/local_settings.py new file mode 100644 index 0000000..8046b69 --- /dev/null +++ b/meta-openstack/recipes-devtools/python/python-horizon/local_settings.py | |||
| @@ -0,0 +1,450 @@ | |||
| 1 | import os | ||
| 2 | |||
| 3 | from django.utils.translation import ugettext_lazy as _ | ||
| 4 | |||
| 5 | from openstack_dashboard import exceptions | ||
| 6 | |||
| 7 | DEBUG = True | ||
| 8 | TEMPLATE_DEBUG = DEBUG | ||
| 9 | |||
| 10 | # Required for Django 1.5. | ||
| 11 | # If horizon is running in production (DEBUG is False), set this | ||
| 12 | # with the list of host/domain names that the application can serve. | ||
| 13 | # For more information see: | ||
| 14 | # https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts | ||
| 15 | #ALLOWED_HOSTS = ['horizon.example.com', ] | ||
| 16 | |||
| 17 | # Set SSL proxy settings: | ||
| 18 | # For Django 1.4+ pass this header from the proxy after terminating the SSL, | ||
| 19 | # and don't forget to strip it from the client's request. | ||
| 20 | # For more information see: | ||
| 21 | # https://docs.djangoproject.com/en/1.4/ref/settings/#secure-proxy-ssl-header | ||
| 22 | # SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https') | ||
| 23 | |||
| 24 | # If Horizon is being served through SSL, then uncomment the following two | ||
| 25 | # settings to better secure the cookies from security exploits | ||
| 26 | #CSRF_COOKIE_SECURE = True | ||
| 27 | #SESSION_COOKIE_SECURE = True | ||
| 28 | |||
| 29 | # Overrides for OpenStack API versions. Use this setting to force the | ||
| 30 | # OpenStack dashboard to use a specfic API version for a given service API. | ||
| 31 | # NOTE: The version should be formatted as it appears in the URL for the | ||
| 32 | # service API. For example, The identity service APIs have inconsistent | ||
| 33 | # use of the decimal point, so valid options would be "2.0" or "3". | ||
| 34 | # OPENSTACK_API_VERSIONS = { | ||
| 35 | # "identity": 3 | ||
| 36 | # } | ||
| 37 | |||
| 38 | # Set this to True if running on multi-domain model. When this is enabled, it | ||
| 39 | # will require user to enter the Domain name in addition to username for login. | ||
| 40 | # OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = False | ||
| 41 | |||
| 42 | # Overrides the default domain used when running on single-domain model | ||
| 43 | # with Keystone V3. All entities will be created in the default domain. | ||
| 44 | # OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default' | ||
| 45 | |||
| 46 | # Set Console type: | ||
| 47 | # valid options would be "AUTO", "VNC" or "SPICE" | ||
| 48 | # CONSOLE_TYPE = "AUTO" | ||
| 49 | |||
| 50 | # Default OpenStack Dashboard configuration. | ||
| 51 | HORIZON_CONFIG = { | ||
| 52 | 'dashboards': ('project', 'admin', 'settings',), | ||
| 53 | 'default_dashboard': 'project', | ||
| 54 | 'user_home': 'openstack_dashboard.views.get_user_home', | ||
| 55 | 'ajax_queue_limit': 10, | ||
| 56 | 'auto_fade_alerts': { | ||
| 57 | 'delay': 3000, | ||
| 58 | 'fade_duration': 1500, | ||
| 59 | 'types': ['alert-success', 'alert-info'] | ||
| 60 | }, | ||
| 61 | 'help_url': "http://docs.openstack.org", | ||
| 62 | 'exceptions': {'recoverable': exceptions.RECOVERABLE, | ||
| 63 | 'not_found': exceptions.NOT_FOUND, | ||
| 64 | 'unauthorized': exceptions.UNAUTHORIZED}, | ||
| 65 | } | ||
| 66 | |||
| 67 | # Specify a regular expression to validate user passwords. | ||
| 68 | # HORIZON_CONFIG["password_validator"] = { | ||
| 69 | # "regex": '.*', | ||
| 70 | # "help_text": _("Your password does not meet the requirements.") | ||
| 71 | # } | ||
| 72 | |||
| 73 | # Disable simplified floating IP address management for deployments with | ||
| 74 | # multiple floating IP pools or complex network requirements. | ||
| 75 | # HORIZON_CONFIG["simple_ip_management"] = False | ||
| 76 | |||
| 77 | # Turn off browser autocompletion for the login form if so desired. | ||
| 78 | # HORIZON_CONFIG["password_autocomplete"] = "off" | ||
| 79 | |||
| 80 | LOCAL_PATH = "/usr/share/openstack-dashboard/openstack_dashboard/static" | ||
| 81 | |||
| 82 | # Set custom secret key: | ||
| 83 | # You can either set it to a specific value or you can let horizion generate a | ||
| 84 | # default secret key that is unique on this machine, e.i. regardless of the | ||
| 85 | # amount of Python WSGI workers (if used behind Apache+mod_wsgi): However, there | ||
| 86 | # may be situations where you would want to set this explicitly, e.g. when | ||
| 87 | # multiple dashboard instances are distributed on different machines (usually | ||
| 88 | # behind a load-balancer). Either you have to make sure that a session gets all | ||
| 89 | # requests routed to the same dashboard instance or you set the same SECRET_KEY | ||
| 90 | # for all of them. | ||
| 91 | from horizon.utils import secret_key | ||
| 92 | SECRET_KEY = secret_key.generate_or_read_from_file(os.path.join(LOCAL_PATH, '.secret_key_store')) | ||
| 93 | |||
| 94 | # We recommend you use memcached for development; otherwise after every reload | ||
| 95 | # of the django development server, you will have to login again. To use | ||
| 96 | # memcached set CACHES to something like | ||
| 97 | CACHES = { | ||
| 98 | 'default': { | ||
| 99 | 'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache', | ||
| 100 | 'LOCATION' : '127.0.0.1:11211', | ||
| 101 | } | ||
| 102 | } | ||
| 103 | |||
| 104 | #CACHES = { | ||
| 105 | # 'default': { | ||
| 106 | # 'BACKEND' : 'django.core.cache.backends.locmem.LocMemCache' | ||
| 107 | # } | ||
| 108 | #} | ||
| 109 | |||
| 110 | # Send email to the console by default | ||
| 111 | EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' | ||
| 112 | # Or send them to /dev/null | ||
| 113 | #EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend' | ||
| 114 | |||
| 115 | # Configure these for your outgoing email host | ||
| 116 | # EMAIL_HOST = 'smtp.my-company.com' | ||
| 117 | # EMAIL_PORT = 25 | ||
| 118 | # EMAIL_HOST_USER = 'djangomail' | ||
| 119 | # EMAIL_HOST_PASSWORD = 'top-secret!' | ||
| 120 | |||
| 121 | # For multiple regions uncomment this configuration, and add (endpoint, title). | ||
| 122 | # AVAILABLE_REGIONS = [ | ||
| 123 | # ('http://cluster1.example.com:5000/v2.0', 'cluster1'), | ||
| 124 | # ('http://cluster2.example.com:5000/v2.0', 'cluster2'), | ||
| 125 | # ] | ||
| 126 | |||
| 127 | OPENSTACK_HOST = "127.0.0.1" | ||
| 128 | OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST | ||
| 129 | OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member" | ||
| 130 | |||
| 131 | # Disable SSL certificate checks (useful for self-signed certificates): | ||
| 132 | # OPENSTACK_SSL_NO_VERIFY = True | ||
| 133 | |||
| 134 | # The CA certificate to use to verify SSL connections | ||
| 135 | # OPENSTACK_SSL_CACERT = '/path/to/cacert.pem' | ||
| 136 | |||
| 137 | # The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the | ||
| 138 | # capabilities of the auth backend for Keystone. | ||
| 139 | # If Keystone has been configured to use LDAP as the auth backend then set | ||
| 140 | # can_edit_user to False and name to 'ldap'. | ||
| 141 | # | ||
| 142 | # TODO(tres): Remove these once Keystone has an API to identify auth backend. | ||
| 143 | OPENSTACK_KEYSTONE_BACKEND = { | ||
| 144 | 'name': 'native', | ||
| 145 | 'can_edit_user': True, | ||
| 146 | 'can_edit_group': True, | ||
| 147 | 'can_edit_project': True, | ||
| 148 | 'can_edit_domain': True, | ||
| 149 | 'can_edit_role': True | ||
| 150 | } | ||
| 151 | |||
| 152 | OPENSTACK_HYPERVISOR_FEATURES = { | ||
| 153 | 'can_set_mount_point': True, | ||
| 154 | } | ||
| 155 | |||
| 156 | # The OPENSTACK_NEUTRON_NETWORK settings can be used to enable optional | ||
| 157 | # services provided by neutron. Options currenly available are load | ||
| 158 | # balancer service, security groups, quotas, VPN service. | ||
| 159 | OPENSTACK_NEUTRON_NETWORK = { | ||
| 160 | 'enable_lb': False, | ||
| 161 | 'enable_firewall': False, | ||
| 162 | 'enable_quotas': True, | ||
| 163 | 'enable_vpn': False, | ||
| 164 | # The profile_support option is used to detect if an external router can be | ||
| 165 | # configured via the dashboard. When using specific plugins the | ||
| 166 | # profile_support can be turned on if needed. | ||
| 167 | 'profile_support': None, | ||
| 168 | #'profile_support': 'cisco', | ||
| 169 | } | ||
| 170 | |||
| 171 | # The OPENSTACK_IMAGE_BACKEND settings can be used to customize features | ||
| 172 | # in the OpenStack Dashboard related to the Image service, such as the list | ||
| 173 | # of supported image formats. | ||
| 174 | # OPENSTACK_IMAGE_BACKEND = { | ||
| 175 | # 'image_formats': [ | ||
| 176 | # ('', ''), | ||
| 177 | # ('aki', _('AKI - Amazon Kernel Image')), | ||
| 178 | # ('ami', _('AMI - Amazon Machine Image')), | ||
| 179 | # ('ari', _('ARI - Amazon Ramdisk Image')), | ||
| 180 | # ('iso', _('ISO - Optical Disk Image')), | ||
| 181 | # ('qcow2', _('QCOW2 - QEMU Emulator')), | ||
| 182 | # ('raw', _('Raw')), | ||
| 183 | # ('vdi', _('VDI')), | ||
| 184 | # ('vhd', _('VHD')), | ||
| 185 | # ('vmdk', _('VMDK')) | ||
| 186 | # ] | ||
| 187 | # } | ||
| 188 | |||
| 189 | # OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints | ||
| 190 | # in the Keystone service catalog. Use this setting when Horizon is running | ||
| 191 | # external to the OpenStack environment. The default is 'publicURL'. | ||
| 192 | #OPENSTACK_ENDPOINT_TYPE = "publicURL" | ||
| 193 | |||
| 194 | # SECONDARY_ENDPOINT_TYPE specifies the fallback endpoint type to use in the | ||
| 195 | # case that OPENSTACK_ENDPOINT_TYPE is not present in the endpoints | ||
| 196 | # in the Keystone service catalog. Use this setting when Horizon is running | ||
| 197 | # external to the OpenStack environment. The default is None. This | ||
| 198 | # value should differ from OPENSTACK_ENDPOINT_TYPE if used. | ||
| 199 | #SECONDARY_ENDPOINT_TYPE = "publicURL" | ||
| 200 | |||
| 201 | # The number of objects (Swift containers/objects or images) to display | ||
| 202 | # on a single page before providing a paging element (a "more" link) | ||
| 203 | # to paginate results. | ||
| 204 | API_RESULT_LIMIT = 1000 | ||
| 205 | API_RESULT_PAGE_SIZE = 20 | ||
| 206 | |||
| 207 | # The timezone of the server. This should correspond with the timezone | ||
| 208 | # of your entire OpenStack installation, and hopefully be in UTC. | ||
| 209 | TIME_ZONE = "UTC" | ||
| 210 | |||
| 211 | # When launching an instance, the menu of available flavors is | ||
| 212 | # sorted by RAM usage, ascending. Provide a callback method here | ||
| 213 | # (and/or a flag for reverse sort) for the sorted() method if you'd | ||
| 214 | # like a different behaviour. For more info, see | ||
| 215 | # http://docs.python.org/2/library/functions.html#sorted | ||
| 216 | # CREATE_INSTANCE_FLAVOR_SORT = { | ||
| 217 | # 'key': my_awesome_callback_method, | ||
| 218 | # 'reverse': False, | ||
| 219 | # } | ||
| 220 | |||
| 221 | # The Horizon Policy Enforcement engine uses these values to load per service | ||
| 222 | # policy rule files. The content of these files should match the files the | ||
| 223 | # OpenStack services are using to determine role based access control in the | ||
| 224 | # target installation. | ||
| 225 | |||
| 226 | # Path to directory containing policy.json files | ||
| 227 | #POLICY_FILES_PATH = os.path.join(ROOT_PATH, "conf") | ||
| 228 | # Map of local copy of service policy files | ||
| 229 | #POLICY_FILES = { | ||
| 230 | # 'identity': 'keystone_policy.json', | ||
| 231 | # 'compute': 'nova_policy.json' | ||
| 232 | #} | ||
| 233 | |||
| 234 | # Trove user and database extension support. By default support for | ||
| 235 | # creating users and databases on database instances is turned on. | ||
| 236 | # To disable these extensions set the permission here to something | ||
| 237 | # unusable such as ["!"]. | ||
| 238 | # TROVE_ADD_USER_PERMS = [] | ||
| 239 | # TROVE_ADD_DATABASE_PERMS = [] | ||
| 240 | |||
| 241 | LOGGING = { | ||
| 242 | 'version': 1, | ||
| 243 | # When set to True this will disable all logging except | ||
| 244 | # for loggers specified in this configuration dictionary. Note that | ||
| 245 | # if nothing is specified here and disable_existing_loggers is True, | ||
| 246 | # django.db.backends will still log unless it is disabled explicitly. | ||
| 247 | 'disable_existing_loggers': False, | ||
| 248 | 'handlers': { | ||
| 249 | 'null': { | ||
| 250 | 'level': 'DEBUG', | ||
| 251 | 'class': 'django.utils.log.NullHandler', | ||
| 252 | }, | ||
| 253 | 'console': { | ||
| 254 | # Set the level to "DEBUG" for verbose output logging. | ||
| 255 | 'level': 'INFO', | ||
| 256 | 'class': 'logging.StreamHandler', | ||
| 257 | }, | ||
| 258 | }, | ||
| 259 | 'loggers': { | ||
| 260 | # Logging from django.db.backends is VERY verbose, send to null | ||
| 261 | # by default. | ||
| 262 | 'django.db.backends': { | ||
| 263 | 'handlers': ['null'], | ||
| 264 | 'propagate': False, | ||
| 265 | }, | ||
| 266 | 'requests': { | ||
| 267 | 'handlers': ['null'], | ||
| 268 | 'propagate': False, | ||
| 269 | }, | ||
| 270 | 'horizon': { | ||
| 271 | 'handlers': ['console'], | ||
| 272 | 'level': 'DEBUG', | ||
| 273 | 'propagate': False, | ||
| 274 | }, | ||
| 275 | 'openstack_dashboard': { | ||
| 276 | 'handlers': ['console'], | ||
| 277 | 'level': 'DEBUG', | ||
| 278 | 'propagate': False, | ||
| 279 | }, | ||
| 280 | 'novaclient': { | ||
| 281 | 'handlers': ['console'], | ||
| 282 | 'level': 'DEBUG', | ||
| 283 | 'propagate': False, | ||
| 284 | }, | ||
| 285 | 'cinderclient': { | ||
| 286 | 'handlers': ['console'], | ||
| 287 | 'level': 'DEBUG', | ||
| 288 | 'propagate': False, | ||
| 289 | }, | ||
| 290 | 'keystoneclient': { | ||
| 291 | 'handlers': ['console'], | ||
| 292 | 'level': 'DEBUG', | ||
| 293 | 'propagate': False, | ||
| 294 | }, | ||
| 295 | 'glanceclient': { | ||
| 296 | 'handlers': ['console'], | ||
| 297 | 'level': 'DEBUG', | ||
| 298 | 'propagate': False, | ||
| 299 | }, | ||
| 300 | 'neutronclient': { | ||
| 301 | 'handlers': ['console'], | ||
| 302 | 'level': 'DEBUG', | ||
| 303 | 'propagate': False, | ||
| 304 | }, | ||
| 305 | 'heatclient': { | ||
| 306 | 'handlers': ['console'], | ||
| 307 | 'level': 'DEBUG', | ||
| 308 | 'propagate': False, | ||
| 309 | }, | ||
| 310 | 'ceilometerclient': { | ||
| 311 | 'handlers': ['console'], | ||
| 312 | 'level': 'DEBUG', | ||
| 313 | 'propagate': False, | ||
| 314 | }, | ||
| 315 | 'troveclient': { | ||
| 316 | 'handlers': ['console'], | ||
| 317 | 'level': 'DEBUG', | ||
| 318 | 'propagate': False, | ||
| 319 | }, | ||
| 320 | 'swiftclient': { | ||
| 321 | 'handlers': ['console'], | ||
| 322 | 'level': 'DEBUG', | ||
| 323 | 'propagate': False, | ||
| 324 | }, | ||
| 325 | 'openstack_auth': { | ||
| 326 | 'handlers': ['console'], | ||
| 327 | 'level': 'DEBUG', | ||
| 328 | 'propagate': False, | ||
| 329 | }, | ||
| 330 | 'nose.plugins.manager': { | ||
| 331 | 'handlers': ['console'], | ||
| 332 | 'level': 'DEBUG', | ||
| 333 | 'propagate': False, | ||
| 334 | }, | ||
| 335 | 'django': { | ||
| 336 | 'handlers': ['console'], | ||
| 337 | 'level': 'DEBUG', | ||
| 338 | 'propagate': False, | ||
| 339 | }, | ||
| 340 | 'iso8601': { | ||
| 341 | 'handlers': ['null'], | ||
| 342 | 'propagate': False, | ||
| 343 | }, | ||
| 344 | } | ||
| 345 | } | ||
| 346 | |||
| 347 | SECURITY_GROUP_RULES = { | ||
| 348 | 'all_tcp': { | ||
| 349 | 'name': 'ALL TCP', | ||
| 350 | 'ip_protocol': 'tcp', | ||
| 351 | 'from_port': '1', | ||
| 352 | 'to_port': '65535', | ||
| 353 | }, | ||
| 354 | 'all_udp': { | ||
| 355 | 'name': 'ALL UDP', | ||
| 356 | 'ip_protocol': 'udp', | ||
| 357 | 'from_port': '1', | ||
| 358 | 'to_port': '65535', | ||
| 359 | }, | ||
| 360 | 'all_icmp': { | ||
| 361 | 'name': 'ALL ICMP', | ||
| 362 | 'ip_protocol': 'icmp', | ||
| 363 | 'from_port': '-1', | ||
| 364 | 'to_port': '-1', | ||
| 365 | }, | ||
| 366 | 'ssh': { | ||
| 367 | 'name': 'SSH', | ||
| 368 | 'ip_protocol': 'tcp', | ||
| 369 | 'from_port': '22', | ||
| 370 | 'to_port': '22', | ||
| 371 | }, | ||
| 372 | 'smtp': { | ||
| 373 | 'name': 'SMTP', | ||
| 374 | 'ip_protocol': 'tcp', | ||
| 375 | 'from_port': '25', | ||
| 376 | 'to_port': '25', | ||
| 377 | }, | ||
| 378 | 'dns': { | ||
| 379 | 'name': 'DNS', | ||
| 380 | 'ip_protocol': 'tcp', | ||
| 381 | 'from_port': '53', | ||
| 382 | 'to_port': '53', | ||
| 383 | }, | ||
| 384 | 'http': { | ||
| 385 | 'name': 'HTTP', | ||
| 386 | 'ip_protocol': 'tcp', | ||
| 387 | 'from_port': '80', | ||
| 388 | 'to_port': '80', | ||
| 389 | }, | ||
| 390 | 'pop3': { | ||
| 391 | 'name': 'POP3', | ||
| 392 | 'ip_protocol': 'tcp', | ||
| 393 | 'from_port': '110', | ||
| 394 | 'to_port': '110', | ||
| 395 | }, | ||
| 396 | 'imap': { | ||
| 397 | 'name': 'IMAP', | ||
| 398 | 'ip_protocol': 'tcp', | ||
| 399 | 'from_port': '143', | ||
| 400 | 'to_port': '143', | ||
| 401 | }, | ||
| 402 | 'ldap': { | ||
| 403 | 'name': 'LDAP', | ||
| 404 | 'ip_protocol': 'tcp', | ||
| 405 | 'from_port': '389', | ||
| 406 | 'to_port': '389', | ||
| 407 | }, | ||
| 408 | 'https': { | ||
| 409 | 'name': 'HTTPS', | ||
| 410 | 'ip_protocol': 'tcp', | ||
| 411 | 'from_port': '443', | ||
| 412 | 'to_port': '443', | ||
| 413 | }, | ||
| 414 | 'smtps': { | ||
| 415 | 'name': 'SMTPS', | ||
| 416 | 'ip_protocol': 'tcp', | ||
| 417 | 'from_port': '465', | ||
| 418 | 'to_port': '465', | ||
| 419 | }, | ||
| 420 | 'imaps': { | ||
| 421 | 'name': 'IMAPS', | ||
| 422 | 'ip_protocol': 'tcp', | ||
| 423 | 'from_port': '993', | ||
| 424 | 'to_port': '993', | ||
| 425 | }, | ||
| 426 | 'pop3s': { | ||
| 427 | 'name': 'POP3S', | ||
| 428 | 'ip_protocol': 'tcp', | ||
| 429 | 'from_port': '995', | ||
| 430 | 'to_port': '995', | ||
| 431 | }, | ||
| 432 | 'ms_sql': { | ||
| 433 | 'name': 'MS SQL', | ||
| 434 | 'ip_protocol': 'tcp', | ||
| 435 | 'from_port': '1433', | ||
| 436 | 'to_port': '1433', | ||
| 437 | }, | ||
| 438 | 'mysql': { | ||
| 439 | 'name': 'MYSQL', | ||
| 440 | 'ip_protocol': 'tcp', | ||
| 441 | 'from_port': '3306', | ||
| 442 | 'to_port': '3306', | ||
| 443 | }, | ||
| 444 | 'rdp': { | ||
| 445 | 'name': 'RDP', | ||
| 446 | 'ip_protocol': 'tcp', | ||
| 447 | 'from_port': '3389', | ||
| 448 | 'to_port': '3389', | ||
| 449 | }, | ||
| 450 | } | ||
diff --git a/meta-openstack/recipes-devtools/python/python-horizon/openstack-dashboard-apache.conf b/meta-openstack/recipes-devtools/python/python-horizon/openstack-dashboard-apache.conf new file mode 100644 index 0000000..5b77639 --- /dev/null +++ b/meta-openstack/recipes-devtools/python/python-horizon/openstack-dashboard-apache.conf | |||
| @@ -0,0 +1,55 @@ | |||
| 1 | LoadModule wsgi_module /usr/lib64/apache2/modules/mod_wsgi.so | ||
| 2 | |||
| 3 | # python 2.7.2 has a bug that causes fork run in sub interpreters to fail | ||
| 4 | # http://bugs.python.org/issue13156 | ||
| 5 | WSGIApplicationGroup %{GLOBAL} | ||
| 6 | |||
| 7 | <VirtualHost *:80> | ||
| 8 | ServerAdmin webmaster@localhost | ||
| 9 | WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi | ||
| 10 | WSGIDaemonProcess horizon user=daemon group=daemon home=/usr/share/openstack-dashboard/openstack_dashboard/static | ||
| 11 | #WSGIProcessGroup openstack-dashboard | ||
| 12 | Alias /static /usr/share/openstack-dashboard/openstack_dashboard/static | ||
| 13 | |||
| 14 | DocumentRoot /usr/share/apache2/default-site/htdocs | ||
| 15 | |||
| 16 | <Directory /> | ||
| 17 | AllowOverride None | ||
| 18 | </Directory> | ||
| 19 | |||
| 20 | <Directory /usr/share/openstack-dashboard/openstack_dashboard/wsgi/> | ||
| 21 | <IfVersion < 2.3> | ||
| 22 | Order allow,deny | ||
| 23 | Allow from all | ||
| 24 | </IfVersion> | ||
| 25 | <IfVersion >= 2.3> | ||
| 26 | Require all granted | ||
| 27 | </IfVersion> | ||
| 28 | </Directory> | ||
| 29 | |||
| 30 | Alias /static/horizon %PYTHON_SITEPACKAGES%/horizon/static/horizon | ||
| 31 | |||
| 32 | <Directory %PYTHON_SITEPACKAGES%/horizon/static/horizon> | ||
| 33 | <IfVersion < 2.3> | ||
| 34 | Order allow,deny | ||
| 35 | Allow from all | ||
| 36 | </IfVersion> | ||
| 37 | <IfVersion >= 2.3> | ||
| 38 | Require all granted | ||
| 39 | </IfVersion> | ||
| 40 | </Directory> | ||
| 41 | |||
| 42 | <Directory /usr/share/openstack-dashboard/openstack_dashboard/static/> | ||
| 43 | <IfVersion < 2.3> | ||
| 44 | Order allow,deny | ||
| 45 | Allow from all | ||
| 46 | </IfVersion> | ||
| 47 | <IfVersion >= 2.3> | ||
| 48 | Require all granted | ||
| 49 | </IfVersion> | ||
| 50 | </Directory> | ||
| 51 | |||
| 52 | ErrorLog /var/log/apache2/openstack-dashboard-error.log | ||
| 53 | LogLevel debug | ||
| 54 | CustomLog /var/log/apache2/openstack-dashboard-access.log combined | ||
| 55 | </VirtualHost> | ||
diff --git a/meta-openstack/recipes-devtools/python/python-horizon_git.bb b/meta-openstack/recipes-devtools/python/python-horizon_git.bb index c3e167f..153f4d4 100644 --- a/meta-openstack/recipes-devtools/python/python-horizon_git.bb +++ b/meta-openstack/recipes-devtools/python/python-horizon_git.bb | |||
| @@ -27,12 +27,14 @@ DEPENDS_${PN} += "python-django \ | |||
| 27 | python-pbr \ | 27 | python-pbr \ |
| 28 | " | 28 | " |
| 29 | 29 | ||
| 30 | PR = "r1" | 30 | PR = "r2" |
| 31 | SRCNAME = "horizon" | 31 | SRCNAME = "horizon" |
| 32 | 32 | ||
| 33 | SRC_URI = "git://github.com/openstack/${SRCNAME}.git;branch=stable/havana \ | 33 | SRC_URI = "git://github.com/openstack/${SRCNAME}.git;branch=stable/havana \ |
| 34 | file://horizon.init \ | 34 | file://horizon.init \ |
| 35 | file://fix_bindir_path.patch \ | 35 | file://fix_bindir_path.patch \ |
| 36 | file://openstack-dashboard-apache.conf \ | ||
| 37 | file://local_settings.py \ | ||
| 36 | " | 38 | " |
| 37 | 39 | ||
| 38 | SRCREV="b2259b352fd1e00a269b8275afa8093223598235" | 40 | SRCREV="b2259b352fd1e00a269b8275afa8093223598235" |
| @@ -68,9 +70,25 @@ do_install_append() { | |||
| 68 | # mv ${D}${datadir}/bin ${DASHBOARD_DIR}/bin | 70 | # mv ${D}${datadir}/bin ${DASHBOARD_DIR}/bin |
| 69 | 71 | ||
| 70 | cp run_tests.sh ${HORIZON_CONF_DIR} | 72 | cp run_tests.sh ${HORIZON_CONF_DIR} |
| 73 | |||
| 74 | # the following are setup required for horizon-apache | ||
| 75 | install -d ${D}/usr/share/openstack-dashboard | ||
| 76 | cp -a ${S}/openstack_dashboard ${D}/usr/share/openstack-dashboard/ | ||
| 77 | cp ${S}/manage.py ${D}/usr/share/openstack-dashboard | ||
| 78 | |||
| 79 | install -D -m 644 ${WORKDIR}/local_settings.py \ | ||
| 80 | ${D}/etc/openstack-dashboard/local_settings.py | ||
| 81 | ln -fs /etc/openstack-dashboard/local_settings.py \ | ||
| 82 | ${D}/usr/share/openstack-dashboard/openstack_dashboard/local/local_settings.py | ||
| 83 | |||
| 84 | install -D -m 644 ${WORKDIR}/openstack-dashboard-apache.conf \ | ||
| 85 | ${D}/etc/apache2/conf.d/openstack-dashboard-apache.conf | ||
| 86 | sed -i -e 's#%PYTHON_SITEPACKAGES%#${PYTHON_SITEPACKAGES_DIR}#' ${D}/etc/apache2/conf.d/openstack-dashboard-apache.conf | ||
| 87 | |||
| 88 | ln -fs openstack_dashboard/static ${D}/usr/share/openstack-dashboard/static | ||
| 71 | } | 89 | } |
| 72 | 90 | ||
| 73 | PACKAGES += "${SRCNAME}-tests ${SRCNAME}" | 91 | PACKAGES += "${SRCNAME}-tests ${SRCNAME} ${SRCNAME}-apache" |
| 74 | 92 | ||
| 75 | FILES_${PN} = "${libdir}/*" | 93 | FILES_${PN} = "${libdir}/*" |
| 76 | 94 | ||
| @@ -81,6 +99,12 @@ FILES_${SRCNAME} = "${bindir}/* \ | |||
| 81 | ${datadir}/* \ | 99 | ${datadir}/* \ |
| 82 | " | 100 | " |
| 83 | 101 | ||
| 102 | FILES_${SRCNAME}-apache = "/etc/apache2 \ | ||
| 103 | /etc/openstack-dashboard/ \ | ||
| 104 | /usr/share/openstack-dashboard/ \ | ||
| 105 | /var/lib/openstack-dashboard \ | ||
| 106 | " | ||
| 107 | |||
| 84 | RDEP_ARCH_VAR = "" | 108 | RDEP_ARCH_VAR = "" |
| 85 | RDEP_ARCH_VAR_arm = "nodejs" | 109 | RDEP_ARCH_VAR_arm = "nodejs" |
| 86 | RDEP_ARCH_VAR_i686 = "nodejs" | 110 | RDEP_ARCH_VAR_i686 = "nodejs" |
| @@ -113,3 +137,11 @@ RDEPENDS_${SRCNAME} = "${PN}" | |||
| 113 | INITSCRIPT_PACKAGES = "${SRCNAME}" | 137 | INITSCRIPT_PACKAGES = "${SRCNAME}" |
| 114 | INITSCRIPT_NAME_${SRCNAME} = "horizon" | 138 | INITSCRIPT_NAME_${SRCNAME} = "horizon" |
| 115 | INITSCRIPT_PARAMS_${SRCNAME} = "${OS_DEFAULT_INITSCRIPT_PARAMS}" | 139 | INITSCRIPT_PARAMS_${SRCNAME} = "${OS_DEFAULT_INITSCRIPT_PARAMS}" |
| 140 | |||
| 141 | RDEPENDS_${SRCNAME}-apache = "\ | ||
| 142 | apache2 \ | ||
| 143 | mod-wsgi \ | ||
| 144 | python-lesscpy \ | ||
| 145 | memcached \ | ||
| 146 | python-memcached \ | ||
| 147 | " | ||
