Githubの管理:Terraformを介してカスタムAnsibleソリューションに

Githubには350人以上の人と400人以上のリポジトリがあります。各カブには複数の管理者がいる可能性があり、彼らは適切と思われることを行います。当然、一方の人がもう一方の人が何をしているかを知らないことがあります。インフラストラクチャ内の他の人の苦痛を見て、手動で人を追加/削除することにうんざりしたとき、私たちは集中管理、コードとしてのインフラストラクチャに行くことにしました。



画像



そして、プラットフォームとしてTerraformを選択しました。



「O、P、Aの文字が入ったキューブがあります...」



紙の上ではすべてが滑らかに見えました。Terraformは人気があり、それを知っている人を見つけるのは難しいことではありません。状態があり、TFは一致するリソースをもたらします。実際の構成が説明どおりであることを常に確認できます。そして、もうWebUIにアクセスする必要はありません。構成を確認してすべてを確認しました。



. 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.  ...



-, -!



画像



— 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