标签: packer

github 帖子 /repos/{owner}/{repo}/actions/runners/registration-token API 上的“资源无法通过集成访问”

我正在从我的 github 工作流程(操作)发出一个 curl 发布请求,以获取自托管运行器的注册令牌,但我收到以下响应:

{
  "message": "Resource not accessible by integration",
  "documentation_url": "https://docs.github.com/rest/reference/actions#create-a-registration-token-for-a-repository"
}
Run Code Online (Sandbox Code Playgroud)

下面是我的 github 工作流程的精简版本:


name: get-token

"on":
  push: { branches: ["token"] }

jobs:
  
  print-token:
    name: print-token
    environment: dev
    # needs: pre-pkr
    runs-on: ubuntu-latest

    steps:
      - name: Check out code
        uses: actions/checkout@v2

      - name: Get registration token
        id: getRegToken
        run: |
          curl -X POST -H \"Accept: application/vnd.github.v3+json\"  -H 'Authorization: token ${{ secrets.GITHUB_TOKEN }}' https://api.github.com/repos/myprofile/myrepo/actions/runners/registration-token
Run Code Online (Sandbox Code Playgroud)

最终我想将此令牌传递给我使用 packer build 命令创建的 ami(下一步)。我也尝试使用加壳器的 shell 配置程序执行上述curl 请求,但响应相同。无法弄清楚我是否必须允许 github ui 的某些权限?或者还有什么办法可以做到这一点?提前致谢。

git packer github-actions

93
推荐指数
5
解决办法
12万
查看次数

将Amazon EC2 AMI转换为Virtual或Vagrant框

我想复制正在运行的EC2实例的磁盘映像(抓住AMI)并将其导入虚拟盒或最终使用Vagrant运行.我看到打包器(http://www.packer.io/)允许你创建AMI和相应的Vagrant盒子一起工作,但是我目前运行的实例已经运行了两年以上并且很难复制.

我想这个问题在devops社区很常见,但是我的在线研究还没有找到解决方案.有没有可以让你完成这项任务的工具?

virtualbox amazon-ec2 packer ec2-ami vagrant

41
推荐指数
2
解决办法
3万
查看次数

docker和packer有何不同?配置图像时我应该选择哪一个?

包装工和码头工人有何不同?提供/维护哪一个更容易/最快?为什么?拥有docker文件的优缺点是什么?

packer docker dockerfile docker-compose

33
推荐指数
2
解决办法
1万
查看次数

如何自动将打包器输出ami id链接到terraform变量?

我正在使用带有ansible配置器的打包器来构建一个ami,并使用这个ami作为源来设置基础设施 - 与本文有点类似:http://www.paulstack.co.uk/blog/2016/01/ 02 /建筑物-AN-elasticsearch群集式-AWS与-封隔器和terraform

当命令packer build pack.json成功完成时,我以这种格式获得输出ami id:

eu-central-1: ami-12345678
Run Code Online (Sandbox Code Playgroud)

在我的terraform变量中,variables.tf我需要指定源ami id,region等.这里的问题是我不想手动或多次指定它们.对于区域(我事先知道),因为我可以在两种情况下使用环境变量,所以很容易,但是输出ami呢?是否有内置的方式来链接这些产品或一些不那么hacky方法来做到这一点?

编辑: Hacky方法适用于任何可能感兴趣的人.在这个解决方案中,我是grep来自packer输出的aws region&ami,并在perl中使用正则表达式将结果写入terraform.tfvars文件:

vars=$(pwd)"/terraform.tfvars"
packer build pack.json | \
    tee /dev/tty | \
    grep -E -o '\w{2}-\w+-\w{1}: ami-\w+' | \
    perl -ne '@parts = split /[:,\s]+/, $_; print "aws_amis." . $parts[0] ." = \"" . $parts[1] . "\"\n"' > ${vars}
Run Code Online (Sandbox Code Playgroud)

bash packer amazon-web-services terraform

18
推荐指数
2
解决办法
5621
查看次数

使用Packer.io创建基本AWS AMI时遇到问题.SSH超时

我正在尝试按照这些说明使用Packer.io构建基本的AWS镜像.但这对我不起作用.

这是我的模板文件:

{
  "variables": {
    "aws_access_key": "",
    "aws_secret_key": ""
  },
  "builders": [{
    "type": "amazon-ebs",
    "access_key": "{{user `aws_access_key`}}",
    "secret_key": "{{user `aws_secret_key`}}",
    "region": "us-east-1",
    "source_ami": "ami-146e2a7c",
    "instance_type": "t2.micro",
    "ssh_username": "ubuntu",
    "ami_name": "packer-example {{timestamp}}",

    # The following 2 lines don't appear in the tutorial.
    # But I had to add them because it said this source AMI
    # must be launched inside a VPC.
    "vpc_id": "vpc-98765432",
    "subnet_id": "subnet-12345678"
  }]
}
Run Code Online (Sandbox Code Playgroud)

您会注意到我必须通过在底部添加两条线(对于VPC和子网)来偏离指令.这是因为我不断收到以下错误:

==> amazon-ebs: Error launching source instance: The specified instance type …
Run Code Online (Sandbox Code Playgroud)

packer amazon-web-services

15
推荐指数
1
解决办法
1万
查看次数

Docker图像格式

我想建立一个没有docker iself的Docker镜像.我看过Packer,但它要求在构建器主机上安装Docker.

我查看了Docker Registry API文档,但这些信息似乎并不存在.

我想这个图像只是一个tarball,但我希望看到格式的完整规范,即需要什么样的格式,并且需要任何元数据文件.我可以尝试从注册表中下载图像并查看其中的内容,但是没有关于如何获取图像本身的信息.

我的项目的想法是实现一个脚本,从我编译的atefacts创建一个图像,并将其上传到注册表.我想将OpenEmbedded用于此目的,基本上这将是对Bitbake的扩展.

packer openembedded docker yocto

14
推荐指数
2
解决办法
1万
查看次数

由于sudo需要tty,Packer构建失败

我的打包器构建失败,显示以下消息:

sudo: sorry, you must have a tty to run sudo.
Run Code Online (Sandbox Code Playgroud)

我的主机是带有vagrant和virtualbox的Windows 8,我的客人是centos7.在研究它是我的理解,不要求suty的tty是消息的原因.但我有以下内容ks.cfg:

sed -i 's/^.*requiretty/#Defaults requiretty/' /etc/sudoers
Run Code Online (Sandbox Code Playgroud)

可能问题是我需要在Windows vagrant ssh端设置一些东西,以便创建一个伪造的tty?

这是我第一次去打包机.

我正在使用我下载的打包器构建.

packer.json如下:

{
  "variables": {
    "version": "{{env `VERSION`}}"
  },
  "provisioners": [
    {
      "type": "shell",
      "execute_command": "sudo {{.Vars}} sh {{.Path}}",
      "scripts": [
        "scripts/vagrant.sh",
        "scripts/vmtools.sh",
        "scripts/cleanup.sh",
        "scripts/zerodisk.sh"
      ]
    }
  ],
  "post-processors": [
    {
      "type": "vagrant",
      "output": "INSANEWORKS-CentOS-7.0-x86_64-{{user `version`}}-{{.Provider}}.box"
    }
  ],
  "builders": [
    {
      "type": "virtualbox-iso",
      "iso_url": "http://ftp.iij.ad.jp/pub/linux/centos/7/isos/x86_64/CentOS-7-x86_64-NetInstall-1503.iso",
      "iso_checksum": "498bb78789ddc7973fe14358822eb1b48521bbaca91c17bd132c7f8c903d79b3",
      "iso_checksum_type": "sha256",
      "ssh_username": "vagrant",
      "ssh_password": "vagrant",
      "ssh_wait_timeout": "45m",
      "ssh_disable_agent": …
Run Code Online (Sandbox Code Playgroud)

sudo virtualbox packer vagrant

14
推荐指数
2
解决办法
6956
查看次数

什么要加入AWS AMI以及使用cloud-init进行配置?

我正在使用AWS Cloudformation为我的Web应用程序设置网络基础结构的许多元素(VPC,安全组,子网,自动调节组等).我希望整个过程自动化.我想点击一个按钮,然后能够启动整个事情.

我已经成功创建了一个Cloudformation模板,用于设置所有这些网络基础架构.但是,EC2实例目前在没有任何所需软件的情况下启动.现在我想弄清楚如何最好地在他们身上获得该软件.

为此,我正在使用Packer.io创建AMI .但有些人反而催促我使用Cloud-Init.我应该使用什么启发式方法来决定将哪些内容融入AMI和/或通过Cloud-Init配置什么?

例如,我想预先配置EC2实例以允许me(saqib)在没有自己笔记本电脑密码的情况下登录.因此EC2必须有用户.该用户必须具有主目录.并且在该主目录中必须存在.ssh/known_hosts包含加密代码的文件.我应该将这些目录烘焙到AMI吗?或者我应该使用cloud-init来设置它们?我该如何决定这个和其他类似的案例呢?

packer amazon-web-services cloud-init aws-cloudformation amazon-ami

11
推荐指数
2
解决办法
6293
查看次数

Packer 无法以 sudo 身份执行 shell 配置程序

我有一个shell provisioner包装机与用户连接到一个盒子vagrant

{
  "environment_vars": [
    "HOME_DIR=/home/vagrant"
  ],
  "expect_disconnect": true,
  "scripts": [
    "scripts/foo.sh"
  ],
  "type": "shell"
}
Run Code Online (Sandbox Code Playgroud)

脚本的内容是:

whoami
sudo su
whoami
Run Code Online (Sandbox Code Playgroud)

并且输出奇怪地仍然存在:

whoami
sudo su
whoami
Run Code Online (Sandbox Code Playgroud)

为什么我不能切换到root用户?如何以 root 身份执行语句?请注意,我不想引用所有语句sudo "statement |foo",而是像演示的那样全局切换用户sudo su

shell provisioning root packer

11
推荐指数
1
解决办法
1万
查看次数

何时在Packer vs Terraform中进行配置?

我正处于需要在启动时为EC2实例提供一些软件包的情况。存在两个(企业/公司)约束:

  • 我需要在特定的AMI之上进行配置,这将添加诸如LDAP / AD访问之类的企业内容。
  • 这些更改旨在用于所有内部开发机器

主要由于第二个约束,我想知道在哪里放置配置的最佳位置。这就是我想出的

在Terraform中提供

正如它指出的那样,我只是在terraform中提供必要的实例。如果我将这些资源打包到模块中,则配置不会“泄漏”。缺点

  • 我将无法在模块顶部添加一组其他的设置步骤?
  • 设置的更改可能会导致实例在应用时被销毁?
  • 由于要尝试安装软件包,因此耗时很长

在Packer中置备

这是基于这样的假设,即Packer允许您在AMI之上进行配置,以便可以“扩展” AMI。另外,此方法仅在AWS中使用,因此不必使用其他构建器。Packer中的资源调配使Terraform代码更加简单,并且Terraform代码的应用将变得更快,因为它只是您启动的AMI。

对我来说,这两种方法都有自己的位置。但是我真正想知道的是,什么时候选择Packer Provisioning而不是Terraform Provisioning?

amazon-ec2 packer amazon-web-services terraform

10
推荐指数
1
解决办法
4259
查看次数