Unable to run Packer to create Image - Unable to find role

Hi Team,

We are unable to create image using packer.

Can someone explain why the code fails even though ROLE:“ansible-role-vault”
is installed successfully.
==> azure-arm.vault: Provisioning with Ansible…
azure-arm.vault: Creating Ansible staging directory…
azure-arm.vault: Creating directory: /tmp/packer-provisioner-ansible-local/634fb667-a789-7c1d-ed01-720099d80860
azure-arm.vault: Uploading main Playbook file…
azure-arm.vault: Uploading galaxy file…
azure-arm.vault: Uploading inventory file…
azure-arm.vault: Executing Ansible Galaxy: cd /tmp/packer-provisioner-ansible-local/634fb667-a789-7c1d-ed01-720099d80860 && ansible-galaxy install -r /tmp/packer-provisioner-ansible-local/634fb667-a789-7c1d-ed01-720099d80860/requirements.yml -p /tmp/packer-provisioner-ansible-local/634fb667-a789-7c1d-ed01-720099d80860/galaxy_roles
azure-arm.vault: Starting galaxy role install process
azure-arm.vault: - extracting ansible-role-vault to /tmp/packer-provisioner-ansible-local/634fb667-a789-7c1d-ed01-720099d80860/galaxy_roles/ansible-role-vault
azure-arm.vault: - ansible-role-vault was installed successfully
azure-arm.vault: Executing Ansible: cd /tmp/packer-provisioner-ansible-local/634fb667-a789-7c1d-ed01-720099d80860 && ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 ansible-playbook /tmp/packer-provisioner-ansible-local/634fb667-a789-7c1d-ed01-720099d80860/install.yml --extra-vars “packer_build_name=vault packer_builder_type=azure-arm packer_http_addr=ERR_HTTP_ADDR_NOT_IMPLEMENTED_BY_BUILDER -o IdentitiesOnly=yes” --extra-vars ‘packer_build=true vault_version=1.12.0+ent vault_install_directory=/opt/vault/bin vault_local_binary_location=/tmp/vault’ -c local -i /tmp/packer-provisioner-ansible-local/634fb667-a789-7c1d-ed01-720099d80860/packer-provisioner-ansible-local1817232293
==> azure-arm.vault: ERROR! the role ‘ansible-role-vault’ was not found in /tmp/packer-provisioner-ansible-local/634fb667-a789-7c1d-ed01-720099d80860/roles:/home/azureuser/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/tmp/packer-provisioner-ansible-local/634fb667-a789-7c1d-ed01-720099d80860
==> azure-arm.vault:
==> azure-arm.vault: The error appears to be in ‘/tmp/packer-provisioner-ansible-local/634fb667-a789-7c1d-ed01-720099d80860/install.yml’: line 6, column 7, but may
==> azure-arm.vault: be elsewhere in the file depending on the exact syntax problem.
==> azure-arm.vault:
==> azure-arm.vault: The offending line appears to be:
==> azure-arm.vault:
==> azure-arm.vault: roles:
==> azure-arm.vault: - ansible-role-vault
==> azure-arm.vault: ^ here
==> azure-arm.vault: Provisioning step had errors: Running the cleanup provisioner, if present…

Regards

Ajit Singh

The error is simple, ansible-role-vault’ was not found.
Which directory is your role ? Do you need a requirements.yml ?

In case anybody comes across this, this appears to related to ansible-local provisioner installs galaxy roles to <staging dir>/galaxy_roles/ but does not add that to Ansible's role path · Issue #111 · hashicorp/packer-plugin-ansible · GitHub. To solve the problem, you can add galaxy_roles_path = "/home/ec2-user/.ansible/roles" to your provisioner.

provisioner "ansible-local" {
    galaxy_file     = "ansible/requirements.yml"
    playbook_dir    = "ansible"
    playbook_file   = "ansible/playbook.yml"
    # Workaround for plugin issue
    # https://github.com/hashicorp/packer-plugin-ansible/issues/111
    galaxy_roles_path = "/home/ec2-user/.ansible/roles"
  }

Obviously I run in AWS. You may need to put a different path :slight_smile: