Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"version": "0.2.0",
"configurations": [
{
"name":"Module Debug",
"type":"debugpy",
"request":"launch",
"module":"spaceone.core.command",
"python":"${workspaceFolder}/.venv/bin/python",
"env": {
//"PYTHONPATH":"./src:"
"PYTHONPATH":"${workspaceFolder}/../api/dist/python:./src:./src/spaceone"
},
"args":[
"grpc",
"spaceone.inventory"
]
}
]
}
39 changes: 38 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ The following is a list of services being collected and service code information
|5|BigQuery|bigquery|
|6|Cloud Pub/Sub|pubsub|
|7|Cloud Functions|cloudfunctions|
|8|Recommender|recommender
|8|Recommender|recommender|
|9|Firebase|firebase

If you want to know the detailed service endpoint, please check the [content details](###content-details) below.

Expand Down Expand Up @@ -90,6 +91,8 @@ If you want to know the detailed service endpoint, please check the [content det
* [Recommender](#recommender)
* [Recommendation](#recommendation)
* [Insight](#insight)
* [Firebase](#firebase)
* [Project](#project)
* [Options](#options)
* [CloudServiceType](#cloud-service-type--specify-what-to-collect)
* [ServiceCodeMapper](#service-code-mapper--update-service-code-in-cloud-service-type)
Expand Down Expand Up @@ -421,6 +424,40 @@ Please, set authentication privilege for followings:
- https://cloudasset.googleapis.com/v1/{parent=*/*}/assets
- https://recommender.googleapis.com/v1/{parent=projects/*/locations/*/insightTypes/*}/insights

#### [Firebase](https://firebase.google.com/docs/reference/firebase-management/rest)
- #### Project
- IAM
- firebase.projects.searchApps
- firebase.projects.get

- Service Endpoint
- https://firebase.googleapis.com/v1beta1/projects/{parent}/searchApps

---

## Firebase

### Project

Firebase 프로젝트 정보를 수집합니다. Firebase Management API의 `searchApps` 엔드포인트를 사용하여 특정 프로젝트의 Firebase 앱들을 가져옵니다.

#### 수집되는 정보:
- Project ID
- Display Name
- Project Number
- State (ACTIVE, DELETED 등)
- Firebase Apps (iOS, Android, Web 앱들)
- Platform Statistics (플랫폼별 앱 개수)
- App Count (총 앱 개수)

#### 사용 예시:
```bash
# Firebase 프로젝트만 수집
{
"cloud_service_types": ["Firebase"]
}
```

---

## Options
Expand Down
17 changes: 16 additions & 1 deletion src/spaceone/inventory/api/plugin/collector.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import logging

from spaceone.api.inventory.plugin import collector_pb2_grpc, collector_pb2
from spaceone.api.inventory.plugin import collector_pb2, collector_pb2_grpc
from spaceone.core.pygrpc import BaseAPI
from spaceone.inventory.service import CollectorService

Expand Down Expand Up @@ -40,3 +40,18 @@ def collect(self, request, context):
with collector_svc:
for resource in collector_svc.collect(params):
yield self.locator.get_info("ResourceInfo", resource)

def get_firebase_apps(self, request, context):
"""
특정 프로젝트의 Firebase 앱들을 조회합니다.
Firebase Management API의 searchApps 엔드포인트를 사용합니다.
"""
params, metadata = self.parse_request(request, context)

collector_svc: CollectorService = self.locator.get_service(
"CollectorService", metadata
)

with collector_svc:
apps = collector_svc.get_firebase_projects(params)
return self.locator.get_info("FirebaseAppsInfo", apps)
26 changes: 26 additions & 0 deletions src/spaceone/inventory/conf/cloud_service_conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
"TopicManager",
],
"CloudFunctions": ["FunctionGen2Manager", "FunctionGen1Manager"],
"Firebase": ["FirebaseProjectManager"],
"CloudRun": ["CloudRunServiceManager", "CloudRunJobManager", "CloudRunWorkerPoolManager", "CloudRunDomainMappingManager"],
# "Recommender": ["RecommendationManager"],
}

Expand Down Expand Up @@ -91,6 +93,30 @@
"labels_key": "resource.labels.function_name",
}
},
"Firebase": {
"Project": {
"resource_type": "firebase_project",
"labels_key": "resource.labels.project_id",
}
},
"CloudRun": {
"Service": {
"resource_type": "cloud_run_service",
"labels_key": "resource.labels.service_name",
},
"Job": {
"resource_type": "cloud_run_job",
"labels_key": "resource.labels.job_name",
},
"WorkerPool": {
"resource_type": "cloud_run_worker_pool",
"labels_key": "resource.labels.worker_pool_name",
},
"DomainMapping": {
"resource_type": "cloud_run_domain_mapping",
"labels_key": "resource.labels.domain_mapping_name",
}
},
"Recommender": {},
}

Expand Down
33 changes: 18 additions & 15 deletions src/spaceone/inventory/connector/__init__.py
Original file line number Diff line number Diff line change
@@ -1,41 +1,44 @@
from spaceone.inventory.connector.bigquery.sql_workspace import SQLWorkspaceConnector
from spaceone.inventory.connector.cloud_functions.eventarc import EventarcConnector
from spaceone.inventory.connector.cloud_functions.function_gen1 import (
FunctionGen1Connector,
)
from spaceone.inventory.connector.cloud_functions.function_gen2 import (
FunctionGen2Connector,
)
from spaceone.inventory.connector.cloud_run.cloud_run_v1 import CloudRunV1Connector
from spaceone.inventory.connector.cloud_run.cloud_run_v2 import CloudRunV2Connector
from spaceone.inventory.connector.cloud_sql.instance import CloudSQLInstanceConnector
from spaceone.inventory.connector.cloud_storage.monitoring import MonitoringConnector
from spaceone.inventory.connector.cloud_storage.storage import StorageConnector
from spaceone.inventory.connector.cloud_sql.instance import CloudSQLInstanceConnector
from spaceone.inventory.connector.compute_engine.instance_template import (
InstanceTemplateConnector,
)
from spaceone.inventory.connector.compute_engine.disk import DiskConnector
from spaceone.inventory.connector.compute_engine.instance_group import (
InstanceGroupConnector,
)
from spaceone.inventory.connector.compute_engine.instance_template import (
InstanceTemplateConnector,
)
from spaceone.inventory.connector.compute_engine.machine_image import (
MachineImageConnector,
)
from spaceone.inventory.connector.compute_engine.disk import DiskConnector
from spaceone.inventory.connector.compute_engine.snapshot import SnapshotConnector
from spaceone.inventory.connector.compute_engine.vm_instance import VMInstanceConnector
from spaceone.inventory.connector.networking.route import RouteConnector
from spaceone.inventory.connector.firebase.project import FirebaseProjectConnector
from spaceone.inventory.connector.networking.external_ip_address import (
ExternalIPAddressConnector,
)
from spaceone.inventory.connector.networking.firewall import FirewallConnector
from spaceone.inventory.connector.networking.load_balancing import (
LoadBalancingConnector,
)
from spaceone.inventory.connector.networking.route import RouteConnector
from spaceone.inventory.connector.networking.vpc_network import VPCNetworkConnector
from spaceone.inventory.connector.pub_sub.schema import SchemaConnector
from spaceone.inventory.connector.pub_sub.subscription import SubscriptionConnector
from spaceone.inventory.connector.pub_sub.snapshot import SnapshotConnector
from spaceone.inventory.connector.pub_sub.subscription import SubscriptionConnector
from spaceone.inventory.connector.pub_sub.topic import TopicConnector
from spaceone.inventory.connector.cloud_functions.function_gen2 import (
FunctionGen2Connector,
)
from spaceone.inventory.connector.cloud_functions.function_gen1 import (
FunctionGen1Connector,
)
from spaceone.inventory.connector.cloud_functions.eventarc import EventarcConnector
from spaceone.inventory.connector.recommender.cloud_asset import CloudAssetConnector
from spaceone.inventory.connector.recommender.insight import InsightConnector
from spaceone.inventory.connector.recommender.recommendation import (
RecommendationConnector,
)
from spaceone.inventory.connector.recommender.cloud_asset import CloudAssetConnector
4 changes: 4 additions & 0 deletions src/spaceone/inventory/connector/cloud_run/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from spaceone.inventory.connector.cloud_run.cloud_run_v1 import CloudRunV1Connector
from spaceone.inventory.connector.cloud_run.cloud_run_v2 import CloudRunV2Connector

__all__ = ["CloudRunV1Connector", "CloudRunV2Connector"]
33 changes: 33 additions & 0 deletions src/spaceone/inventory/connector/cloud_run/cloud_run_v1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import logging

from spaceone.inventory.libs.connector import GoogleCloudConnector

__all__ = ["CloudRunV1Connector"]

_LOGGER = logging.getLogger(__name__)


class CloudRunV1Connector(GoogleCloudConnector):
google_client_service = "run"
version = "v1"

def __init__(self, **kwargs):
super().__init__(**kwargs)

def list_locations(self) -> list:
try:
request = self.client.projects().locations().list(name=f"projects/{self.project_id}")
response = request.execute()
return response.get('locations', [])
except Exception as e:
_LOGGER.error(f"Failed to list locations from Cloud Run API: {str(e)}")
return []

def list_domain_mappings(self, parent: str) -> list:
try:
request = self.client.namespaces().domainmappings().list(parent=parent)
response = request.execute()
return response.get('items', [])
except Exception as e:
_LOGGER.error(f"Failed to list Cloud Run v1 domain mappings: {str(e)}")
return []
78 changes: 78 additions & 0 deletions src/spaceone/inventory/connector/cloud_run/cloud_run_v2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import logging

from spaceone.inventory.libs.connector import GoogleCloudConnector

__all__ = ["CloudRunV2Connector"]

_LOGGER = logging.getLogger(__name__)


class CloudRunV2Connector(GoogleCloudConnector):
google_client_service = "run"
version = "v2"

def __init__(self, **kwargs):
super().__init__(**kwargs)

def list_services(self, parent: str) -> list:
try:
request = self.client.projects().locations().services().list(parent=parent)
response = request.execute()
return response.get('services', [])
except Exception as e:
_LOGGER.error(f"Failed to list Cloud Run services: {str(e)}")
return []

def list_revisions(self, parent: str) -> list:
try:
request = self.client.projects().locations().services().revisions().list(parent=parent)
response = request.execute()
return response.get('revisions', [])
except Exception as e:
_LOGGER.error(f"Failed to list Cloud Run revisions: {str(e)}")
return []

def list_jobs(self, parent: str) -> list:
try:
request = self.client.projects().locations().jobs().list(parent=parent)
response = request.execute()
return response.get('jobs', [])
except Exception as e:
_LOGGER.error(f"Failed to list Cloud Run jobs: {str(e)}")
return []

def list_executions(self, parent: str) -> list:
try:
request = self.client.projects().locations().jobs().executions().list(parent=parent)
response = request.execute()
return response.get('executions', [])
except Exception as e:
_LOGGER.error(f"Failed to list Cloud Run executions: {str(e)}")
return []

def list_tasks(self, parent: str) -> list:
try:
request = self.client.projects().locations().jobs().executions().tasks().list(parent=parent)
response = request.execute()
return response.get('tasks', [])
except Exception as e:
_LOGGER.error(f"Failed to list Cloud Run tasks: {str(e)}")
return []

def list_worker_pools(self, parent: str) -> list:
try:
request = self.client.projects().locations().workerPools().list(parent=parent)
response = request.execute()
return response.get('workerPools', [])
except Exception as e:
_LOGGER.error(f"Failed to list Cloud Run worker pools: {str(e)}")
return []

def list_worker_pool_revisions(self, parent: str) -> list:
try:
request = self.client.projects().locations().workerPools().revisions().list(parent=parent)
response = request.execute()
return response.get('revisions', [])
except Exception as e:
_LOGGER.error(f"Failed to list Cloud Run worker pool revisions: {str(e)}")
return []
3 changes: 3 additions & 0 deletions src/spaceone/inventory/connector/firebase/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from spaceone.inventory.connector.firebase.project import FirebaseProjectConnector

__all__ = ["FirebaseProjectConnector"]
Loading
Loading