~james-page/charms/trusty/nova-cloud-controller/fixup-allowedunits-migration

« back to all changes in this revision

Viewing changes to hooks/nova_cc_utils.py

  • Committer: james.page at ubuntu
  • Date: 2015-04-20 10:21:36 UTC
  • Revision ID: james.page@ubuntu.com-20150420102136-uj9hjyr5llwmjf59
Revert previous commit, work incomplete

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
import os
2
 
import shutil
3
2
import subprocess
4
3
import ConfigParser
5
4
 
20
19
    get_host_ip,
21
20
    get_hostname,
22
21
    get_os_codename_install_source,
23
 
    git_install_requested,
24
 
    git_clone_and_install,
25
 
    git_src_dir,
26
22
    is_ip,
27
23
    os_release,
28
24
    save_script_rc as _save_script_rc)
35
31
)
36
32
 
37
33
from charmhelpers.core.hookenv import (
38
 
    charm_dir,
39
34
    config,
40
35
    log,
41
36
    relation_get,
47
42
)
48
43
 
49
44
from charmhelpers.core.host import (
50
 
    adduser,
51
 
    add_group,
52
 
    add_user_to_group,
53
 
    mkdir,
54
45
    service,
55
46
    service_start,
56
47
    service_stop,
57
48
    service_running,
58
 
    lsb_release,
 
49
    lsb_release
59
50
)
60
51
 
61
 
from charmhelpers.core.templating import render
62
 
 
63
52
from charmhelpers.contrib.network.ip import (
64
53
    is_ipv6
65
54
)
83
72
    'python-memcache',
84
73
]
85
74
 
86
 
BASE_GIT_PACKAGES = [
87
 
    'libxml2-dev',
88
 
    'libxslt1-dev',
89
 
    'python-dev',
90
 
    'python-pip',
91
 
    'python-setuptools',
92
 
    'zlib1g-dev',
93
 
]
94
 
 
95
 
LATE_GIT_PACKAGES = [
96
 
    'novnc',
97
 
    'spice-html5',
98
 
    'websockify',
99
 
]
100
 
 
101
 
# ubuntu packages that should not be installed when deploying from git
102
 
GIT_PACKAGE_BLACKLIST = [
103
 
    'neutron-server',
104
 
    'neutron-plugin-ml2',
105
 
    'nova-api-ec2',
106
 
    'nova-api-os-compute',
107
 
    'nova-api-os-volume',
108
 
    'nova-cert',
109
 
    'nova-conductor',
110
 
    'nova-consoleauth',
111
 
    'nova-novncproxy',
112
 
    'nova-objectstore',
113
 
    'nova-scheduler',
114
 
    'nova-spiceproxy',
115
 
    'nova-xvpvncproxy',
116
 
    'python-keystoneclient',
117
 
    'python-six',
118
 
    'quantum-server',
119
 
]
120
 
 
121
75
BASE_SERVICES = [
122
76
    'nova-api-ec2',
123
77
    'nova-api-os-compute',
423
377
        packages.extend(pkgs)
424
378
    if console_attributes('packages'):
425
379
        packages.extend(console_attributes('packages'))
426
 
 
427
 
    if git_install_requested():
428
 
        packages = list(set(packages))
429
 
        packages.extend(BASE_GIT_PACKAGES)
430
 
        # don't include packages that will be installed from git
431
 
        for p in GIT_PACKAGE_BLACKLIST:
432
 
            if p in packages:
433
 
                packages.remove(p)
434
 
 
435
380
    return list(set(packages))
436
381
 
437
382
 
1029
974
                   ' main')
1030
975
        apt_update()
1031
976
        apt_install('haproxy/trusty-backports', fatal=True)
1032
 
 
1033
 
 
1034
 
def git_install(projects_yaml):
1035
 
    """Perform setup, and install git repos specified in yaml parameter."""
1036
 
    if git_install_requested():
1037
 
        git_pre_install()
1038
 
        git_clone_and_install(projects_yaml, core_project='nova')
1039
 
        git_post_install(projects_yaml)
1040
 
 
1041
 
 
1042
 
def git_pre_install():
1043
 
    """Perform pre-install setup."""
1044
 
    dirs = [
1045
 
        '/var/lib/nova',
1046
 
        '/var/lib/nova/buckets',
1047
 
        '/var/lib/nova/CA',
1048
 
        '/var/lib/nova/CA/INTER',
1049
 
        '/var/lib/nova/CA/newcerts',
1050
 
        '/var/lib/nova/CA/private',
1051
 
        '/var/lib/nova/CA/reqs',
1052
 
        '/var/lib/nova/images',
1053
 
        '/var/lib/nova/instances',
1054
 
        '/var/lib/nova/keys',
1055
 
        '/var/lib/nova/networks',
1056
 
        '/var/lib/nova/tmp',
1057
 
        '/var/lib/neutron',
1058
 
        '/var/lib/neutron/lock',
1059
 
        '/var/log/nova',
1060
 
        '/etc/neutron',
1061
 
        '/etc/neutron/plugins',
1062
 
        '/etc/neutron/plugins/ml2',
1063
 
    ]
1064
 
 
1065
 
    adduser('nova', shell='/bin/bash', system_user=True)
1066
 
    subprocess.check_call(['usermod', '--home', '/var/lib/nova', 'nova'])
1067
 
    add_group('nova', system_group=True)
1068
 
    add_user_to_group('nova', 'nova')
1069
 
 
1070
 
    adduser('neutron', shell='/bin/bash', system_user=True)
1071
 
    add_group('neutron', system_group=True)
1072
 
    add_user_to_group('neutron', 'neutron')
1073
 
 
1074
 
    for d in dirs:
1075
 
        mkdir(d, owner='nova', group='nova', perms=0755, force=False)
1076
 
 
1077
 
 
1078
 
def git_post_install(projects_yaml):
1079
 
    """Perform post-install setup."""
1080
 
    src_etc = os.path.join(git_src_dir(projects_yaml, 'nova'), 'etc/nova')
1081
 
    configs = [
1082
 
        {'src': src_etc,
1083
 
         'dest': '/etc/nova'},
1084
 
    ]
1085
 
 
1086
 
    for c in configs:
1087
 
        if os.path.exists(c['dest']):
1088
 
            shutil.rmtree(c['dest'])
1089
 
        shutil.copytree(c['src'], c['dest'])
1090
 
 
1091
 
    render('git/nova_sudoers', '/etc/sudoers.d/nova_sudoers', {}, perms=0o440)
1092
 
 
1093
 
    nova_cc = 'nova-cloud-controller'
1094
 
    nova_user = 'nova'
1095
 
    start_dir = '/var/lib/nova'
1096
 
    nova_conf = '/etc/nova/nova.conf'
1097
 
    nova_ec2_api_context = {
1098
 
        'service_description': 'Nova EC2 API server',
1099
 
        'service_name': nova_cc,
1100
 
        'user_name': nova_user,
1101
 
        'start_dir': start_dir,
1102
 
        'process_name': 'nova-api-ec2',
1103
 
        'executable_name': '/usr/local/bin/nova-api-ec2',
1104
 
        'config_files': [nova_conf],
1105
 
    }
1106
 
    nova_api_os_compute_context = {
1107
 
        'service_description': 'Nova OpenStack Compute API server',
1108
 
        'service_name': nova_cc,
1109
 
        'user_name': nova_user,
1110
 
        'start_dir': start_dir,
1111
 
        'process_name': 'nova-api-os-compute',
1112
 
        'executable_name': '/usr/local/bin/nova-api-os-compute',
1113
 
        'config_files': [nova_conf],
1114
 
    }
1115
 
    nova_cells_context = {
1116
 
        'service_description': 'Nova cells',
1117
 
        'service_name': nova_cc,
1118
 
        'user_name': nova_user,
1119
 
        'start_dir': start_dir,
1120
 
        'process_name': 'nova-cells',
1121
 
        'executable_name': '/usr/local/bin/nova-cells',
1122
 
        'config_files': [nova_conf],
1123
 
    }
1124
 
    nova_cert_context = {
1125
 
        'service_description': 'Nova cert',
1126
 
        'service_name': nova_cc,
1127
 
        'user_name': nova_user,
1128
 
        'start_dir': start_dir,
1129
 
        'process_name': 'nova-cert',
1130
 
        'executable_name': '/usr/local/bin/nova-cert',
1131
 
        'config_files': [nova_conf],
1132
 
    }
1133
 
    nova_conductor_context = {
1134
 
        'service_description': 'Nova conductor',
1135
 
        'service_name': nova_cc,
1136
 
        'user_name': nova_user,
1137
 
        'start_dir': start_dir,
1138
 
        'process_name': 'nova-conductor',
1139
 
        'executable_name': '/usr/local/bin/nova-conductor',
1140
 
        'config_files': [nova_conf],
1141
 
    }
1142
 
    nova_consoleauth_context = {
1143
 
        'service_description': 'Nova console auth',
1144
 
        'service_name': nova_cc,
1145
 
        'user_name': nova_user,
1146
 
        'start_dir': start_dir,
1147
 
        'process_name': 'nova-consoleauth',
1148
 
        'executable_name': '/usr/local/bin/nova-consoleauth',
1149
 
        'config_files': [nova_conf],
1150
 
    }
1151
 
    nova_console_context = {
1152
 
        'service_description': 'Nova console',
1153
 
        'service_name': nova_cc,
1154
 
        'user_name': nova_user,
1155
 
        'start_dir': start_dir,
1156
 
        'process_name': 'nova-console',
1157
 
        'executable_name': '/usr/local/bin/nova-console',
1158
 
        'config_files': [nova_conf],
1159
 
    }
1160
 
    nova_novncproxy_context = {
1161
 
        'service_description': 'Nova NoVNC proxy',
1162
 
        'service_name': nova_cc,
1163
 
        'user_name': nova_user,
1164
 
        'start_dir': start_dir,
1165
 
        'process_name': 'nova-novncproxy',
1166
 
        'executable_name': '/usr/local/bin/nova-novncproxy',
1167
 
        'config_files': [nova_conf],
1168
 
    }
1169
 
    nova_objectstore_context = {
1170
 
        'service_description': 'Nova object store',
1171
 
        'service_name': nova_cc,
1172
 
        'user_name': nova_user,
1173
 
        'start_dir': start_dir,
1174
 
        'process_name': 'nova-objectstore',
1175
 
        'executable_name': '/usr/local/bin/nova-objectstore',
1176
 
        'config_files': [nova_conf],
1177
 
    }
1178
 
    nova_scheduler_context = {
1179
 
        'service_description': 'Nova scheduler',
1180
 
        'service_name': nova_cc,
1181
 
        'user_name': nova_user,
1182
 
        'start_dir': start_dir,
1183
 
        'process_name': 'nova-scheduler',
1184
 
        'executable_name': '/usr/local/bin/nova-scheduler',
1185
 
        'config_files': [nova_conf],
1186
 
    }
1187
 
    nova_spiceproxy_context = {
1188
 
        'service_description': 'Nova spice proxy',
1189
 
        'service_name': nova_cc,
1190
 
        'user_name': nova_user,
1191
 
        'start_dir': start_dir,
1192
 
        'process_name': 'nova-spicehtml5proxy',
1193
 
        'executable_name': '/usr/local/bin/nova-spicehtml5proxy',
1194
 
        'config_files': [nova_conf],
1195
 
    }
1196
 
    nova_xvpvncproxy_context = {
1197
 
        'service_description': 'Nova XVPVNC proxy',
1198
 
        'service_name': nova_cc,
1199
 
        'user_name': nova_user,
1200
 
        'start_dir': start_dir,
1201
 
        'process_name': 'nova-xvpvncproxy',
1202
 
        'executable_name': '/usr/local/bin/nova-xvpvncproxy',
1203
 
        'config_files': [nova_conf],
1204
 
    }
1205
 
 
1206
 
    # NOTE(coreycb): Needs systemd support
1207
 
    templates_dir = 'hooks/charmhelpers/contrib/openstack/templates'
1208
 
    templates_dir = os.path.join(charm_dir(), templates_dir)
1209
 
    render('git.upstart', '/etc/init/nova-api-ec2.conf',
1210
 
           nova_ec2_api_context, perms=0o644,
1211
 
           templates_dir=templates_dir)
1212
 
    render('git.upstart', '/etc/init/nova-api-os-compute.conf',
1213
 
           nova_api_os_compute_context, perms=0o644,
1214
 
           templates_dir=templates_dir)
1215
 
    render('git.upstart', '/etc/init/nova-cells.conf',
1216
 
           nova_cells_context, perms=0o644,
1217
 
           templates_dir=templates_dir)
1218
 
    render('git.upstart', '/etc/init/nova-cert.conf',
1219
 
           nova_cert_context, perms=0o644,
1220
 
           templates_dir=templates_dir)
1221
 
    render('git.upstart', '/etc/init/nova-conductor.conf',
1222
 
           nova_conductor_context, perms=0o644,
1223
 
           templates_dir=templates_dir)
1224
 
    render('git.upstart', '/etc/init/nova-consoleauth.conf',
1225
 
           nova_consoleauth_context, perms=0o644,
1226
 
           templates_dir=templates_dir)
1227
 
    render('git.upstart', '/etc/init/nova-console.conf',
1228
 
           nova_console_context, perms=0o644,
1229
 
           templates_dir=templates_dir)
1230
 
    render('git.upstart', '/etc/init/nova-novncproxy.conf',
1231
 
           nova_novncproxy_context, perms=0o644,
1232
 
           templates_dir=templates_dir)
1233
 
    render('git.upstart', '/etc/init/nova-objectstore.conf',
1234
 
           nova_objectstore_context, perms=0o644,
1235
 
           templates_dir=templates_dir)
1236
 
    render('git.upstart', '/etc/init/nova-scheduler.conf',
1237
 
           nova_scheduler_context, perms=0o644,
1238
 
           templates_dir=templates_dir)
1239
 
    render('git.upstart', '/etc/init/nova-spiceproxy.conf',
1240
 
           nova_spiceproxy_context, perms=0o644,
1241
 
           templates_dir=templates_dir)
1242
 
    render('git.upstart', '/etc/init/nova-xvpvncproxy.conf',
1243
 
           nova_xvpvncproxy_context, perms=0o644,
1244
 
           templates_dir=templates_dir)
1245
 
 
1246
 
    apt_update()
1247
 
    apt_install(LATE_GIT_PACKAGES, fatal=True)