{"id":22002972,"url":"https://github.com/rssnyder/harness-ccm-python","last_synced_at":"2026-04-27T18:03:36.102Z","repository":{"id":219834833,"uuid":"746726126","full_name":"rssnyder/harness-ccm-python","owner":"rssnyder","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-11T20:29:05.000Z","size":33,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-22T23:07:49.060Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rssnyder.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-01-22T14:56:10.000Z","updated_at":"2025-03-11T20:23:25.000Z","dependencies_parsed_at":"2024-02-01T17:36:58.298Z","dependency_job_id":null,"html_url":"https://github.com/rssnyder/harness-ccm-python","commit_stats":null,"previous_names":["rssnyder/harness-ccm-python"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rssnyder/harness-ccm-python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rssnyder%2Fharness-ccm-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rssnyder%2Fharness-ccm-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rssnyder%2Fharness-ccm-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rssnyder%2Fharness-ccm-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rssnyder","download_url":"https://codeload.github.com/rssnyder/harness-ccm-python/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rssnyder%2Fharness-ccm-python/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32348058,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T17:12:42.749Z","status":"ssl_error","status_checked_at":"2026-04-27T17:12:41.658Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-29T23:42:12.273Z","updated_at":"2026-04-27T18:03:36.088Z","avatar_url":"https://github.com/rssnyder.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# harness-ccm-python\n\nall examples are for python \u003e= 3.8\n\nall code uses the following for configuration:\n\n- `HARNESS_URL`: url for your harness instances, usually `app.harness.io` or `app3.harness.io`\n- `HARNESS_ACCOUNT_ID`: account id\n- `HARNESS_PLATFORM_API_KEY`: api token\n\n## costcategories\n\nhelper classes for dealing with cost categories\n\n## perspectives\n\nhelper classes for dealing with perspectives\n\n## example_accounts_csv.py\n\nexample python for taking a csv of cloud accounts and \"buckets\" they are in and creating a cost category from this information\n\ninput:\n```\ncloudType,AccountID,CategoryName\naws,000000000001,bucket1\naws,000000000002,bucket2\naws,000000000003,bucket3\nazure,0000-000-000-0001,bucket1\nazure,0000-000-000-0002,bucket2\nazure,0000-000-000-0003,bucket3\ngcp,proj-0001,bucket1\ngcp,proj-0002,bucket2\ngcp,proj-0003,bucket3\n```\n\nthe csv should have a header row, where all columns after the first two are the names of the cost categories you want to create\n\nif you want to created shared buckets, name the bucket starting with `shared_\u003cTYPE\u003e_` where `\u003cTYPE\u003e` is one of `EQUAL` or `PROPORTIONAL`, example:\n\n```\naws,000000000003,shared_EQUAL_Shared Services E\naws,000000000004,shared_EQUAL_Shared Services E\naws,000000000005,shared_PROPORTIONAL_Shared Services F\n```\n\noutput:\n\na cost category with three buckets [`bucket1`, `bucket2`, `bucket3`] with an aws, azure, and gcp account in each \n\n## example_per_bucket.py\n\ncreate a perspective for every bucket in a cost category\n\n```\npython example_per_bucket.py \"A Folder\" \"A Cost Category\"\n```\n\nif the folder dosnt exist, it will be created\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frssnyder%2Fharness-ccm-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frssnyder%2Fharness-ccm-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frssnyder%2Fharness-ccm-python/lists"}