HPMI
Estoy tratando de usar mi repositorio privado de git como fuente para los módulos de terraformación.
La clave pública ssh se ha copiado en github.
Intenté las siguientes opciones como fuente pero nada funcionó:
- git::git@github.com:/terraform-modules//subdirección
- github.com/terraform-modules//subdirección
- git@github.com:/terraform-modules//subdirección
- git::https://MÁQUINA-USUARIO:MACHINE-PASS@github.com/terraform-modules//sub-dir
- git::https://github.com//terraform-modules.git//subdir
- https://GIT_HUB_PAT@github.com/terraform-modules.git//subdirectorio
Cualquier ayuda es muy apreciada.
Hacer referencia a la sección de repositorios privados de Github en el siguiente enlace tampoco ayudó.
https://github.com/alibaba/terraform-provider/blob/master/vendor/github.com/hashicorp/terraform/website/docs/modules/sources.html.markdown
Repositorios privados de GitHub Si necesita que Terraform obtenga módulos de repositorios privados de GitHub, debe proporcionar a Terraform las credenciales para autenticarse como usuario con acceso de lectura a esos repositorios.
Si ejecuta Terraform solo en su máquina local, puede especificar la fuente del módulo como un URI SSH (como git@github.com:hashicorp/example.git) y Terraform usará su clave SSH predeterminada para autenticarse.
Si usa Terraform Enterprise, puede usar SSH URI. Deberá agregar una clave privada SSH a su organización y asignarla a cualquier espacio de trabajo que obtenga módulos de repositorios privados. Consulte los documentos de Terraform Enterprise sobre las claves SSH para la clonación de módulos.
Si necesita ejecutar Terraform en una máquina remota como un trabajador de CI, debe escribir una clave SSH en el disco y configurar la variable de entorno GIT_SSH_COMMAND adecuadamente durante el proceso de aprovisionamiento del trabajador, o cree un usuario de máquina de GitHub con acceso de lectura a los repositorios en cuestión e incruste sus credenciales en los parámetros de origen de los módulos: module “private-infra” { source = “git::https://MÁQUINA-USUARIO:MACHINE-PASS@github.com/org/privatemodules//modules/foo” }
Tenga en cuenta que Terraform no admite interpolaciones en el parámetro de origen de un módulo, por lo que debe codificar el nombre de usuario y la contraseña de la máquina si utiliza este método.
Esto funcionó para mí:
- Configure sus claves ssh; asegúrese de que su
~/.ssh/config
archivo tiene un bloque como este:
Host USERNAME.github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
- Agrega esto a tu
.tf
archivo:
module "name_of_module" {
source = "git@USERNAME.github.com:USERNAME/REPONAME.git//SUBDIR"
...
}
esto funcionó para mí
module "name_of_module" {
source = "git::https://<user>:<pat>@github.com/folder/terraform-azure-core-resource-group.git"
...
}
jon duarte
Cosas necesarias:
- Una cuenta de máquina de GitHub (Nota: esto no es muy diferente funcionalmente de una cuenta de GitHub normal; se denomina “máquina” según el uso previsto). Ver usuarios de máquinas.
- Una clave ssh. Nota: utilicé RSA. Ejemplo de cómo generar uno:
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- Asocie la clave pública con la cuenta de máquina de GitHub. Ver agregar-una-nueva-clave-ssh-a-su-cuenta-github.
- Luego, ya sea en su repositorio particular O como un secreto organizacional, agregue el privado clave ssh en GitHub.
Nota: Si configura el secreto organizacional para que esté disponible para repositorios específicos, asegúrese de especificar el repositorio que tiene el código de Terraform que está intentando importar.
- Luego, en su archivo yaml GitHub Action, agregue el código que agrega el privado ssh key al agente ssh del runner, para poder clonar el módulo Terraform que se encuentra en un repositorio privado de GitHub. Ejemplo:
- name: Terraform Init
id: init
run: terraform init
env:
GIT_SSH_COMMAND: "echo '${{ secrets.ORG_PRIVATE_SSH_KEY }}' > id_rsa
&& ssh-keyscan github.com > known_hosts
&& chmod 600 id_rsa known_hosts
&& ssh -i ./id_rsa -o UserKnownHostsFile=./known_hosts"
- name: Terraform Plan
id: plan
if: github.event_name == 'pull_request'
run: terraform plan -no-color
continue-on-error: true
env:
GIT_SSH_COMMAND: "echo '${{ secrets.ORG_PRIVATE_SSH_KEY }}' > id_rsa
&& ssh-keyscan github.com > known_hosts
&& chmod 600 id_rsa known_hosts
&& ssh -i ./id_rsa -o UserKnownHostsFile=./known_hosts"
Referencia/Crédito:
https://github.com/hashicorp/setup-terraform/issues/33
Nota: Parece que hay muchas maneras de hacer esas cosas cuando busco en Google, pero trabajé en esto durante semanas probando las diversas opciones y, finalmente, pude hacerlo con esto Y entendí cómo funcionaba. 🙂 Animo comentarios.
-
Oye, me preguntaba en qué casos funciona esto. Digamos que quiero importar un módulo desde un repositorio privado, y estoy ejecutando el código desde una VM donde no he configurado ninguna otra credencial (sin ssh-key o PAT), podría agregar esta acción de github y permitirme cargar el privado ¿módulo? Porque lo he estado probando y todavía no puedo hacerlo funcionar.
–Steve Ahlswede
1 de julio de 2022 a las 11:22
aiqencia
Probado en bitbucket. Debería ser lo mismo en github:
source = "git::https://@bitbucket.com/mycompany/my-project.git"
No optaré por SSH, y ninguno de los anteriores me funciona en el CI para repositorio privado
git config --global url."https://${USER}:${USER_READONLY_TOKEN}@github.com/my_orgnization".insteadOf "https://github.com/my_orgnization"
Asegúrese de que el token tenga privilegios de solo lectura y organizaciones my_orgnization
el nombre es correcto
- run:
name: remote backend
command: |
git config --global url."https://${USER}:${USER_READONLY_TOKEN}@github.com/my_orgnization".insteadOf "https://github.com/my_orgnization"
terraform init
Arian Al Lami
en nuestra organización también usábamos módulos de terrafom creados en los repositorios privados de git y funcionaba localmente, pero en la acción de github era muy difícil de resolver. así es como lo resuelvo. Necesita una cuenta de usuario que sea miembro del repositorio y tenga el token de acceso de git asociado y cambie su archivo de plan de flujo de trabajo como se muestra a continuación:
jobs:
plan:
environment: production
runs-on: ubuntu-latest
name: New Relic terraform plan
steps:
- name: Checkout
uses: actions/checkout@v2
- name: terraform plan
uses: dflook/terraform-apply@v1.15.0
env:
TERRAFORM_HTTP_CREDENTIALS: github.com/DigitalInnovation=<userName>:${{ secrets.GIT_TOKEN }}
Prashant Kalkar
Recientemente resolví este problema.
Para su desarrollo local, puede continuar usando la url SSH git, de la siguiente manera:
module <moduleName> {
source = "git::git@github.com:<orgName>/<moduleRepo>.git//<modulePath>?ref=<moduleTag>"
...
}
Para el flujo de trabajo de acciones de Github, puede cambiar a la URL https anulando la URL de configuración de Git. El trabajo de flujo de trabajo tendrá el siguiente aspecto:
jobs:
<jobName>:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
El GITHUB_TOKEN está disponible como secreto para hablar con los repositorios de Github. Asegúrese de configurar el repositorio para los permisos de token como se especifica aquí: https://docs.github.com/en/actions/security-guides/automatic-token-authentication
Una vez que tenga la variable de entorno para el token (GH_TOKEN) aquí. Luego, puede anular la configuración de url de git de la siguiente manera para pedirle a git que use url https en lugar de url ssh como lo usa el código de terraform.
git config --global url."https://oauth2:$GH_TOKEN@github.com/<orgName>/<moduleRepo>.git".insteadOf "ssh://git@github.com/<orgName>/<moduleRepo>.git"
Ahora, terraform init
debería funcionar en el flujo de trabajo de github sin necesidad de configurar la clave ssh.
Aquí hay más detalles aquí: Terraform Git Clone no parece funcionar con GITHUB_TOKEN pero funciona cuando se usa un PAT