为Juju Operator Framework Charms的PostgreSQL数据库关系
项目描述
Juju Operator Framework Charm接口的PostgreSQL关系
要在您的Juju Operator Framework charm中使用此接口,请指示charmcraft将其嵌入到您构建的Operator Framework charm中,通过将ops-lib-pgsql添加到您的requirements.txt
文件中:
ops
ops-lib-pgsql
您的charm需要在metadata.yaml
文件中声明其接口的使用
requires:
db:
interface: pgsql
limit: 1 # Most charms only handle a single PostgreSQL Application.
您的charm需要启动并处理事件
pgsql = ops.lib.use("pgsql", 1, "postgresql-charmers@lists.launchpad.net")
class MyCharm(ops.charm.CharmBase):
_state = ops.framework.StoredState()
def __init__(self, *args):
super().__init__(*args)
self._state.set_default(db_conn_str=None, db_uri=None, db_ro_uris=[])
self.db = pgsql.PostgreSQLClient(self, 'db') # 'db' relation in metadata.yaml
self.framework.observe(self.db.on.database_relation_joined, self._on_database_relation_joined)
self.framework.observe(self.db.on.master_changed, self._on_master_changed)
self.framework.observe(self.db.on.standby_changed, self._on_standby_changed)
def _on_database_relation_joined(self, event: pgsql.DatabaseRelationJoinedEvent):
if self.model.unit.is_leader():
# Provide requirements to the PostgreSQL server.
event.database = 'mydbname' # Request database named mydbname
event.extensions = ['citext'] # Request the citext extension installed
elif event.database != 'mydbname':
# Leader has not yet set requirements. Defer, incase this unit
# becomes leader and needs to perform that operation.
event.defer()
return
def _on_master_changed(self, event: pgsql.MasterChangedEvent):
if event.database != 'mydbname':
# Leader has not yet set requirements. Wait until next event,
# or risk connecting to an incorrect database.
return
# The connection to the primary database has been created,
# changed or removed. More specific events are available, but
# most charms will find it easier to just handle the Changed
# events. event.master is None if the master database is not
# available, or a pgsql.ConnectionString instance.
self._state.db_conn_str = None if event.master is None else event.master.conn_str
self._state.db_uri = None if event.master is None else event.master.uri
# You probably want to emit an event here or call a setup routine to
# do something useful with the libpq connection string or URI now they
# are available.
def _on_standby_changed(self, event: pgsql.StandbyChangedEvent):
if event.database != 'mydbname':
# Leader has not yet set requirements. Wait until next event,
# or risk connecting to an incorrect database.
return
# Charms needing access to the hot standby databases can get
# their connection details here. Applications can scale out
# horizontally if they can make use of the read only hot
# standby replica databases, rather than only use the single
# master. event.stanbys will be an empty list if no hot standby
# databases are available.
self._state.db_ro_uris = [c.uri for c in event.standbys]
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
ops-lib-pgsql-1.4.zip (25.0 kB 查看散列)
构建版本
ops_lib_pgsql-1.4-py2.py3-none-any.whl (21.1 kB 查看哈希值)
关闭
ops-lib-pgsql-1.4.zip 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3ea802a1a9e6be4457dbe49959a76c50d63b689abc1b803c127bd24e5bd98654 |
|
MD5 | 2da14a07f9b939ffa5ef0c85512cf0be |
|
BLAKE2b-256 | 4c9a9ee6cdd38308847df589f2e7e885784d5e450d5a7d8fdd8112bb5d343a15 |
关闭
ops_lib_pgsql-1.4-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 85b07a364339da2423c2631680f03aab8f9b4d8a6493efc66303224ff9ab34af |
|
MD5 | 021c8028136f4572bb8f041a969c6a72 |
|
BLAKE2b-256 | 72cfd6ad2887b77b403a01f640861dfb657de51aefcd928b68bbc46ea0b7c13f |