إدارة Github: عبر Terraform إلى حل Ansible المخصص

لدينا أكثر من 350 شخصًا وأكثر من 400 مستودع على جيثب. يمكن أن يكون لكل لفت عدة مدراء ، ويفعلون ما يرونه مناسبًا - وبطبيعة الحال ، يحدث أن شخصًا ما لا يعرف ما يفعله الآخر. عندما سئمنا النظر إلى عذاب الآخرين في البنية التحتية وإضافة / إزالة الأشخاص يدويًا ، قررنا أننا سنذهب إلى الإدارة المركزية ، البنية التحتية ككود.



صورة



واخترنا Terraform كمنصة.



"لدي مكعبات بالأحرف O ، P ، A ..."



بدا كل شيء سلسًا على الورق. Terraform شائع ، لا ينبغي أن يكون من الصعب العثور على أشخاص يعرفون ذلك. لديها حالة ، و TF يجلب الموارد لتتناسب - يمكننا دائمًا التأكد من أن التكوين الحقيقي هو بالضبط كما هو موضح. ولم تعد هناك حاجة لتسلق واجهة مستخدم الويب - لقد نظرت إلى التكوين ورأيت كل شيء.



. 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