Manage Community lifecycle via Kubernetes CRDs


Concept
community-operator-v2 is a Kubernetes operator. This operator watch and reconcile the custom resources to manage the community lifecycle.
currently supported:
- Support Telegram Handler
- Support Twitter Handler
- Support Slack Handler
- Support Discord Handler
- Support Facebook Handler
- Support Instagram Handler
- Manage and broadcast community message like weekly, announcement, and meetup automatically.
- Auto generate Meetup poster
- Auto generate community website and populate community message like weekly, announcement and meetup.
Define a community, you can create multiple community object to manage multiple community.
apiVersion: community.zufardhiyaulhaq.com/v1alpha1
kind: Community
metadata:
name: community-sample
spec:
socialMedia:
telegram:
- telegramhandler-sample
twitter:
- twitterhandler-sample
You can define list of social media that this community run. Any message like weekly, announcement, and meetup will automatically broadcasted in all the community social media. spec.socialMedia.telegram
is a list of TelegramHandler object and spec.socialMedia.twitter
is a list of TwitterHandler object.
TelegramHandler CRD
Define an entrypoint to access the community telegram channel or group.
apiVersion: community.zufardhiyaulhaq.com/v1alpha1
kind: TelegramHandler
metadata:
name: telegramhandler-sample
spec:
type: group
credential: "-9999999999"
authentication:
token:
secret:
name: telegramhandler-secret-sample
key: token
spec.type
support both group
and channel
.
TwitterHandler CRD
Define an entrypoint to access the community twitter account.
apiVersion: community.zufardhiyaulhaq.com/v1alpha1
kind: TwitterHandler
metadata:
name: twitterhandler-sample
spec:
authentication:
apiKey:
secret:
name: twitterhandler-secret-sample
key: apiKey
apiKeySecret:
secret:
name: twitterhandler-secret-sample
key: apiKeySecret
accessToken:
secret:
name: twitterhandler-secret-sample
key: accessToken
accessTokenSecret:
secret:
name: twitterhandler-secret-sample
key: accessTokenSecret
Announcement CRD
You can send custom announcement to your community via Announcement CRD.
apiVersion: community.zufardhiyaulhaq.com/v1alpha1
kind: Announcement
metadata:
name: announcement-sample
spec:
community:
- "community-sample"
spec:
subject: Your subject here
body: >-
Your Announcement Body here
imageUrl: https://your.image.here
tags:
- list
- of
- tag
You can select multiple Community object under spec.community
.
Meetup CRD
You can send Meetup message to your community.
apiVersion: community.zufardhiyaulhaq.com/v1alpha1
kind: Meetup
metadata:
name: meetup-sample
spec:
community:
- "community-sample"
spec:
name: "name"
date: "date"
time: "time"
place: "place"
registrationUrl: https://your.registration.url.here
imageUrl: https://your.image.here
tags:
- list
- of
- tag
sponsors:
- name: sponsor-name
speakers:
- name: speaker-name
position: speaker-position
company: speaker-company
title: talk-title
You can select multiple Community object under spec.community
.
Weekly CRD
Weekly is a update about your community. In tech community, things keep changing every week and we need a specific handler to send weekly update to the community.
apiVersion: community.zufardhiyaulhaq.com/v1alpha1
kind: Weekly
metadata:
name: weekly-sample
spec:
community:
- "community-sample"
spec:
name: "name"
date: "date"
imageUrl: https://your.image.here
tags:
- list
- of
- tag
articles:
- title: article-title
url: https://your.article.url.here
type: article-type
You can select multiple Community object under spec.community
.
Installing
To install the chart with the release name my-release
:
helm repo add community-operator-v2 https://zufardhiyaulhaq.com/community-operator-v2/charts/releases/
helm install my-community-operator-v2 community-operator-v2/community-operator-v2 --values values.yaml
Usage
- Apply some example
kubectl apply -f examples/
Values
Key |
Type |
Default |
Description |
operator.image |
string |
"zufardhiyaulhaq/community-operator-v2" |
|
operator.replica |
int |
1 |
|
operator.tag |
string |
"v1.0.0" |
|
resources.limits.cpu |
string |
"200m" |
|
resources.limits.memory |
string |
"100Mi" |
|
resources.requests.cpu |
string |
"100m" |
|
resources.requests.memory |
string |
"20Mi" |
|
see example files here