Gestión de Github: a través de Terraform a una solución Ansible personalizada

Tenemos más de 350 personas y más de 400 repositorios en Github. Cada nabo puede tener varios administradores, y ellos hacen lo que les parece conveniente; naturalmente, sucede que una persona no sabe lo que hace la otra. Cuando nos cansamos de mirar el tormento de otros en la infraestructura y agregar / eliminar personas manualmente, decidimos que iríamos a la administración centralizada, Infraestructura como Código.



imagen



Y elegimos Terraform como plataforma.



"Tengo cubos con las letras O, P, A ..."



Todo parecía liso en el papel. Terraform es popular, no debería ser difícil encontrar personas que lo conozcan. Tiene un estado, y TF aporta recursos para que coincida; siempre podemos estar seguros de que la configuración real es exactamente como se describe. Y ya no hay necesidad de escalar la interfaz de usuario web: miré la configuración y vi todo.



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



-, -!



imagen



— 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