Mengelola Github: melalui Terraform ke solusi kustom yang memungkinkan

Kami memiliki 350+ orang dan 400+ repositori di Github. Setiap lobak dapat memiliki beberapa admin, dan mereka melakukan apa yang mereka inginkan - secara alami, kebetulan satu orang tidak tahu apa yang dilakukan yang lain. Ketika kami bosan melihat siksaan orang lain dalam infrastruktur dan menambahkan / menghapus orang secara manual, kami memutuskan bahwa kami akan pergi ke manajemen terpusat, Infrastruktur sebagai Kode.



gambar



Dan kami memilih Terraform sebagai platformnya.



"Saya memiliki kubus dengan huruf O, P, A ..."



Semuanya tampak mulus di atas kertas. Terraform sangat populer, seharusnya tidak sulit untuk menemukan orang yang mengetahuinya. Ia memiliki status, dan TF membawa sumber daya yang sesuai - kita selalu dapat memastikan bahwa konfigurasi sebenarnya persis seperti yang dijelaskan. Dan tidak perlu lagi memanjat UI Web - saya melihat konfigurasi dan melihat semuanya.



. TF , . 20 , โ€” Github- API.



, :



  1. .
  2. .
  3. .
  4. .
  5. .
  6. .


.  , Terraform : 1 4. , 2 5. : TF , , .  โ€” , .  , - -   PR, c . โ€ฆ



. . :



resource "github_membership" "membership_for_" {
    username = ""
    role     = "member"
}

resource "github_team" "team_" {
    name           = ""
    description    = ""
    privacy        = "closed"
    parent_team_id = "123456"
}

resource "github_team_membership" "team___membership" {
    team_id  = "${data.terraform_remote_state.teams.team__id}"
    username = ""
    role     = "member"
}

resource "github_repository" "" {
    name          = ""
    description   = ""
    homepage_url  = ""
    has_projects  = false
    has_wiki      = true
    has_issues    = true
    has_downloads = true
    private       = true
    archived      = false
    topics        = ["yii", "school", "mobile"]
}

resource "github_team_repository" "team__repo_" {
    team_id    = "${data.terraform_remote_state.teams.team__id}"
    repository = "${data.terraform_remote_state.repos.repo__name}"
    permission = "push"
}

resource "github_repository_collaborator" "__collaborator" {
    repository = ""
    username   = ""
    permission = "admin"
}


, , - , - .  โ€” .  โ€” . ...



, id.  โ€” โ€” , id .  .  . - .  โ€” ?  .



ยซ ยป .  โ€” ยซ ยป.  .  ?  ?  ?  .  , .  , โ€” .



TF, , - . - , . Terraform !  , : TF, - TF.  ...



-, -!



gambar



โ€” API.  โ€” . , Terraform , 800 , 801 - , , .



  • .
  • , .  resource, value 123456, , .
  • - โ€” , --  .
  • / / โ€” .


YAML





skyeng:
  name: Skyeng
  admin:
    - aleksandr.sergeich

  member:
    - andrey.vadimych
    - denis.andreich
    - mikhail.leonidych
    - vladimir.nickolaich




qa-team:
  privacy: secret

  maintainer:
    - denis.andreich

  member:
    - andrey.vadimych
    - mikhail.leonidych
    - vladimir.nickolaich




alerta:
  description: >-
    Alerta monitoring system
  homepage: https://alerta.io

  teams:
    admin:
      - admin-team

    push:
      - dev-team
      - qa-team

  collaborators:
    direct:
      - denis.andreich

    outside:
      - william.shakespeare


, โ€”



, TF โ€” , โ€ฆ  Ansible, .



: , โ€” .  CI/CD.  - : , .  .  , .



:



ansible-playbook gitwand.yml
    -e github_repos__state=present
    -e github_repos__include=my_repo


- โ€” :



ansible-playbook gitwand.yml
    -e github_teams__state=present
    -e github_teams__include=my_team


, github_teams__include.



.  LDAP, , , .  , , , - .  Github-.





.




All Articles