Add gethomepage as dashboard
This commit is contained in:
		
							parent
							
								
									2a86c1bd88
								
							
						
					
					
						commit
						ad52cec21e
					
				
					 4 changed files with 208 additions and 0 deletions
				
			
		
							
								
								
									
										24
									
								
								filter_plugins/tailscale_to_dashboard.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								filter_plugins/tailscale_to_dashboard.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					class FilterModule(object):
 | 
				
			||||||
 | 
					    def filters(self):
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					            'tailscale_to_dashboard': self.tailscale_to_dashboard,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def tailscale_to_dashboard(self, tailscale):
 | 
				
			||||||
 | 
					        ts_key = tailscale["key"]
 | 
				
			||||||
 | 
					        machines = tailscale["machines"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        result = []
 | 
				
			||||||
 | 
					        for (key, props) in machines.items():
 | 
				
			||||||
 | 
					            result.append({
 | 
				
			||||||
 | 
					                key: {
 | 
				
			||||||
 | 
					                    "href": "https://login.tailscale.com/admin/machines/" + props["ip"],
 | 
				
			||||||
 | 
					                    "widget": {
 | 
				
			||||||
 | 
					                        "type": "tailscale",
 | 
				
			||||||
 | 
					                        "deviceid": props["id"],
 | 
				
			||||||
 | 
					                        "key": ts_key
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return result
 | 
				
			||||||
| 
						 | 
					@ -29,6 +29,8 @@
 | 
				
			||||||
      tags: [forgejo, git, development]
 | 
					      tags: [forgejo, git, development]
 | 
				
			||||||
    - role: forgejo_runner
 | 
					    - role: forgejo_runner
 | 
				
			||||||
      tags: [forgejo-runner, ci, development]
 | 
					      tags: [forgejo-runner, ci, development]
 | 
				
			||||||
 | 
					    - role: gethomepage
 | 
				
			||||||
 | 
					      tags: [gethomepage, dashboard]
 | 
				
			||||||
    - role: harbor
 | 
					    - role: harbor
 | 
				
			||||||
      tags: [harbor, registry, development]
 | 
					      tags: [harbor, registry, development]
 | 
				
			||||||
    - role: healthcheck
 | 
					    - role: healthcheck
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										69
									
								
								roles/gethomepage/tasks/main.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								roles/gethomepage/tasks/main.yml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,69 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					- name: Set common facts
 | 
				
			||||||
 | 
					  ansible.builtin.import_tasks: tasks/set-default-facts.yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy {{ svc.name }}
 | 
				
			||||||
 | 
					  vars:
 | 
				
			||||||
 | 
					    svc: "{{ gethomepage_svc }}"
 | 
				
			||||||
 | 
					    compose: "{{ gethomepage_compose }}"
 | 
				
			||||||
 | 
					  block:
 | 
				
			||||||
 | 
					    - name: Import prepare tasks for common service
 | 
				
			||||||
 | 
					      ansible.builtin.import_tasks: tasks/prepare-common-service.yml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Set config path
 | 
				
			||||||
 | 
					      ansible.builtin.set_fact:
 | 
				
			||||||
 | 
					        config_path: "{{ (service_path, 'config') | path_join }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Create config directory
 | 
				
			||||||
 | 
					      ansible.builtin.file:
 | 
				
			||||||
 | 
					        path: "{{ config_path }}"
 | 
				
			||||||
 | 
					        state: directory
 | 
				
			||||||
 | 
					        mode: "0755"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Template settings
 | 
				
			||||||
 | 
					      ansible.builtin.template:
 | 
				
			||||||
 | 
					        src: yml.j2
 | 
				
			||||||
 | 
					        dest: "{{ (config_path, 'settings.yaml') | path_join }}"
 | 
				
			||||||
 | 
					        mode: "0644"
 | 
				
			||||||
 | 
					      vars:
 | 
				
			||||||
 | 
					        yml: "{{ gethomepage_settings_yml }}"
 | 
				
			||||||
 | 
					      register: cmd_result_settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Template services
 | 
				
			||||||
 | 
					      ansible.builtin.template:
 | 
				
			||||||
 | 
					        src: yml.j2
 | 
				
			||||||
 | 
					        dest: "{{ (config_path, 'services.yaml') | path_join }}"
 | 
				
			||||||
 | 
					        mode: "0644"
 | 
				
			||||||
 | 
					      vars:
 | 
				
			||||||
 | 
					        yml: "{{ gethomepage_services_yml }}"
 | 
				
			||||||
 | 
					      register: cmd_result_services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Template booksmarks
 | 
				
			||||||
 | 
					      ansible.builtin.template:
 | 
				
			||||||
 | 
					        src: yml.j2
 | 
				
			||||||
 | 
					        dest: "{{ (config_path, 'booksmarks.yaml') | path_join }}"
 | 
				
			||||||
 | 
					        mode: "0644"
 | 
				
			||||||
 | 
					      vars:
 | 
				
			||||||
 | 
					        yml: "{{ gethomepage_bookmarks_yml }}"
 | 
				
			||||||
 | 
					      register: cmd_result_booksmarks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Template widgets
 | 
				
			||||||
 | 
					      ansible.builtin.template:
 | 
				
			||||||
 | 
					        src: yml.j2
 | 
				
			||||||
 | 
					        dest: "{{ (config_path, 'widgets.yaml') | path_join }}"
 | 
				
			||||||
 | 
					        mode: "0644"
 | 
				
			||||||
 | 
					      vars:
 | 
				
			||||||
 | 
					        yml: "{{ gethomepage_widgets_yml }}"
 | 
				
			||||||
 | 
					      register: cmd_result_widgets
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Set the docker force-recreate flag
 | 
				
			||||||
 | 
					      ansible.builtin.set_fact:
 | 
				
			||||||
 | 
					        docker_force_recreate: --force-recreate
 | 
				
			||||||
 | 
					      when: | # noqa: no-handler We need to handle the restart per service. Handlers don't support variables.
 | 
				
			||||||
 | 
					        cmd_result_settings.changed
 | 
				
			||||||
 | 
					        or cmd_result_services.changed
 | 
				
			||||||
 | 
					        or cmd_result_booksmarks.changed
 | 
				
			||||||
 | 
					        or cmd_result_widgets.changed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Import start tasks for common service
 | 
				
			||||||
 | 
					      ansible.builtin.import_tasks: tasks/start-common-service.yml
 | 
				
			||||||
							
								
								
									
										113
									
								
								roles/gethomepage/vars/main.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								roles/gethomepage/vars/main.yml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,113 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					gethomepage_svc:
 | 
				
			||||||
 | 
					  domain: dashboard.serguzim.me
 | 
				
			||||||
 | 
					  name: gethomepage
 | 
				
			||||||
 | 
					  port: 3000
 | 
				
			||||||
 | 
					  caddy_extra: import auth_serguzim_me
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gethomepage_settings_yml:
 | 
				
			||||||
 | 
					  title: serguzim.net Dashboard
 | 
				
			||||||
 | 
					  startUrl: https://{{ gethomepage_svc.domain }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  useEqualHeights: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  layout:
 | 
				
			||||||
 | 
					    - Infrastructure:
 | 
				
			||||||
 | 
					        style: row
 | 
				
			||||||
 | 
					        columns: 4
 | 
				
			||||||
 | 
					    - Services:
 | 
				
			||||||
 | 
					        style: row
 | 
				
			||||||
 | 
					        columns: 4
 | 
				
			||||||
 | 
					    - External:
 | 
				
			||||||
 | 
					        style: row
 | 
				
			||||||
 | 
					        columns: 4
 | 
				
			||||||
 | 
					    - VPN:
 | 
				
			||||||
 | 
					        style: row
 | 
				
			||||||
 | 
					        columns: 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gethomepage_services_yml:
 | 
				
			||||||
 | 
					  - Infrastructure:
 | 
				
			||||||
 | 
					      - reverse-proxy@node002.serguzim.net:
 | 
				
			||||||
 | 
					          widget:
 | 
				
			||||||
 | 
					            type: caddy
 | 
				
			||||||
 | 
					            url: http://node002.vpn.serguzim.net:2019
 | 
				
			||||||
 | 
					      - faas.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://faas.serguzim.me
 | 
				
			||||||
 | 
					      - s3.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://s3.serguzim.me
 | 
				
			||||||
 | 
					  - Services:
 | 
				
			||||||
 | 
					      - analytics.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://analytics.serguzim.me
 | 
				
			||||||
 | 
					      - auth.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://auth.serguzim.me
 | 
				
			||||||
 | 
					          widget:
 | 
				
			||||||
 | 
					            type: authentik
 | 
				
			||||||
 | 
					            url: https://auth.serguzim.me
 | 
				
			||||||
 | 
					            key: "{{ vault_gethomepage.authentik.key }}"
 | 
				
			||||||
 | 
					      - coder.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://coder.serguzim.me
 | 
				
			||||||
 | 
					      - git.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://git.serguzim.me
 | 
				
			||||||
 | 
					      - inventory.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://inventory.serguzim.me
 | 
				
			||||||
 | 
					      - mail.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://mail.serguzim.me
 | 
				
			||||||
 | 
					      - media.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://media.serguzim.me
 | 
				
			||||||
 | 
					      - push.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://push.serguzim.me
 | 
				
			||||||
 | 
					      - recipes.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://recipes.serguzim.me
 | 
				
			||||||
 | 
					      - registry.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://registry.serguzim.me
 | 
				
			||||||
 | 
					      - rss.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://rss.serguzim.me
 | 
				
			||||||
 | 
					      - status.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://status.serguzim.me
 | 
				
			||||||
 | 
					          widget:
 | 
				
			||||||
 | 
					            type: uptimekuma
 | 
				
			||||||
 | 
					            url: https://status.serguzim.me
 | 
				
			||||||
 | 
					            slug: serguzim-net
 | 
				
			||||||
 | 
					      - tick.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://tick.serguzim.me
 | 
				
			||||||
 | 
					      - wiki.serguzim.me:
 | 
				
			||||||
 | 
					          href: https://wiki.serguzim.me
 | 
				
			||||||
 | 
					  - External:
 | 
				
			||||||
 | 
					      - Nextdns:
 | 
				
			||||||
 | 
					          href: https://my.nextdns.io
 | 
				
			||||||
 | 
					          widget:
 | 
				
			||||||
 | 
					            type: nextdns
 | 
				
			||||||
 | 
					            profile: "{{ vault_gethomepage.nextdns.profile }}"
 | 
				
			||||||
 | 
					            key: "{{ vault_gethomepage.nextdns.key }}"
 | 
				
			||||||
 | 
					  - VPN: "{{ vault_tailscale | tailscale_to_dashboard }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gethomepage_bookmarks_yml:
 | 
				
			||||||
 | 
					  - Developer:
 | 
				
			||||||
 | 
					      - Github:
 | 
				
			||||||
 | 
					          - abbr: GH
 | 
				
			||||||
 | 
					            href: https://github.com/
 | 
				
			||||||
 | 
					  - Social:
 | 
				
			||||||
 | 
					      - Reddit:
 | 
				
			||||||
 | 
					          - abbr: RE
 | 
				
			||||||
 | 
					            href: https://reddit.com/
 | 
				
			||||||
 | 
					  - Entertainment:
 | 
				
			||||||
 | 
					      - YouTube:
 | 
				
			||||||
 | 
					          - abbr: YT
 | 
				
			||||||
 | 
					            href: https://youtube.com/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gethomepage_widgets_yml:
 | 
				
			||||||
 | 
					  - resources:
 | 
				
			||||||
 | 
					      cpu: true
 | 
				
			||||||
 | 
					      memory: true
 | 
				
			||||||
 | 
					      disk: /
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - search:
 | 
				
			||||||
 | 
					      provider: duckduckgo
 | 
				
			||||||
 | 
					      target: _blank
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gethomepage_compose:
 | 
				
			||||||
 | 
					  watchtower: true
 | 
				
			||||||
 | 
					  image: ghcr.io/gethomepage/homepage
 | 
				
			||||||
 | 
					  volumes:
 | 
				
			||||||
 | 
					    - /var/run/docker.sock:/var/run/docker.sock
 | 
				
			||||||
 | 
					    - ./config:/app/config/
 | 
				
			||||||
		Reference in a new issue