Moving mutable configuration to the database
February 20, 2019 by @devth
February 20, 2019 by @devth
It's time to move mutable config to the database in adherence with immutable infrastructure practices. Yetibot embraces modern infrastructure. We made a lot of progress moving to mostly-immutable configuration. This is the next step, and is done as of Yetibot 0.5.0
.
One reason why we haven't done this up till now is that mutable config has never been relied upon much. Its purpose was to:
jira-project
, broadcast
, jenkins-default
or any other arbitrary room-specific key/value) for the channel
commandcategory
commandPreviously these values would be persisted to a local edn file which by default lives at config/mutable.edn
. However, in modern cloud environments this is not durable. For example when running Yetibot on Kubernetes this would be lost on each pod creation (unless a durable disk was mounted, but that's an unnecessary complication). We already have a durable place to store keys and values: the Postgres database.
All of these use cases will now move to a single yetibot_channels
table.
Given that mutable config hasn't been heavily used the migration should be quite painless. We are not providing an automated migration tool, so your options are:
channel set jia-project myjira
config/mutable.edn
and manually copy the key/values and chat source rooms to the yetibot_channels
Postgres table. For example, if your mutable.edn
looks like: {:room
{:ybslack
{"#general" {:disabled-categories #{:crude}},
"#dev" {"jira-project" "YETIBOT",
"nope" "lol",
:disabled-categories #{:crude}}}}}
You would create rows in yetibot_channels
:
chat_source_adapter | chat_source_room | key | value |
---|---|---|---|
:ybslack | #general | disabled-categories | #{:crude} |
:ybslack | #dev | jira-project | YETIBOT |
:ybslack | #dev | nope | lol |
:ybslack | #dev | disabled-categories | #{:crude} |
All values in the table are strings.
If you use IRC, your channels to join config will be lost as well. Simply re-invite Yetibot to the proper channels and they will be stored in the database.
Here's the Pull Request that made these changes.