Start the cluster.
(self, wait=60, *, server_settings={}, **opts)
| 165 | return output.decode() |
| 166 | |
| 167 | def start(self, wait=60, *, server_settings={}, **opts): |
| 168 | """Start the cluster.""" |
| 169 | status = self.get_status() |
| 170 | if status == 'running': |
| 171 | return |
| 172 | elif status == 'not-initialized': |
| 173 | raise ClusterError( |
| 174 | 'cluster in {!r} has not been initialized'.format( |
| 175 | self._data_dir)) |
| 176 | |
| 177 | port = opts.pop('port', None) |
| 178 | if port == 'dynamic': |
| 179 | port = find_available_port() |
| 180 | |
| 181 | extra_args = ['--{}={}'.format(k, v) for k, v in opts.items()] |
| 182 | extra_args.append('--port={}'.format(port)) |
| 183 | |
| 184 | sockdir = server_settings.get('unix_socket_directories') |
| 185 | if sockdir is None: |
| 186 | sockdir = server_settings.get('unix_socket_directory') |
| 187 | if sockdir is None and _system != 'Windows': |
| 188 | sockdir = tempfile.gettempdir() |
| 189 | |
| 190 | ssl_key = server_settings.get('ssl_key_file') |
| 191 | if ssl_key: |
| 192 | # Make sure server certificate key file has correct permissions. |
| 193 | keyfile = os.path.join(self._data_dir, 'srvkey.pem') |
| 194 | shutil.copy(ssl_key, keyfile) |
| 195 | os.chmod(keyfile, 0o600) |
| 196 | server_settings = server_settings.copy() |
| 197 | server_settings['ssl_key_file'] = keyfile |
| 198 | |
| 199 | if sockdir is not None: |
| 200 | if self._pg_version < (9, 3): |
| 201 | sockdir_opt = 'unix_socket_directory' |
| 202 | else: |
| 203 | sockdir_opt = 'unix_socket_directories' |
| 204 | |
| 205 | server_settings[sockdir_opt] = sockdir |
| 206 | |
| 207 | for k, v in server_settings.items(): |
| 208 | extra_args.extend(['-c', '{}={}'.format(k, v)]) |
| 209 | |
| 210 | if _system == 'Windows': |
| 211 | # On Windows we have to use pg_ctl as direct execution |
| 212 | # of postgres daemon under an Administrative account |
| 213 | # is not permitted and there is no easy way to drop |
| 214 | # privileges. |
| 215 | if os.getenv('ASYNCPG_DEBUG_SERVER'): |
| 216 | stdout = sys.stdout |
| 217 | print( |
| 218 | 'asyncpg.cluster: Running', |
| 219 | ' '.join([ |
| 220 | self._pg_ctl, 'start', '-D', self._data_dir, |
| 221 | '-o', ' '.join(extra_args) |
| 222 | ]), |
| 223 | file=sys.stderr, |
| 224 | ) |