标签: cloud-init

是否可以在 cloud-config 中使用变量

当使用cloud init 的#cloud-config 创建配置文件时,我将如何使用变量来填充值?

在我的特定情况下,我想自动启动 EC2 实例作为预配置的 salt minions。salt minion 云配置示例

假设我想获取特定的 EC2 实例 ID 并将其设置为 salt minion 的 ID。

我将如何为每个实例动态设置值?

amazon-ec2 boto cloud-init salt-stack

6
推荐指数
1
解决办法
7474
查看次数

我可以在不使用openstack或EC2的情况下运行cloud-init环境吗?

我创建了一个基于KVM的多个Linux主机的环境.我正在使用virt-manager创建不同的虚拟机,而我正在使用Linux网桥在不同主机中的虚拟机之间创建连接.

现在,我想拥有一个自动配置服务器,以便我的虚拟机可以根据每个虚拟机的唯一ID自动配置其名称,IP地址,运行一些脚本等.是否可以在非openstack环境中复制某种cloud-init设置?

我尝试以下列方式使用cloud-init数据源NoCloud.首先,我在VM中安装了cloud-init并配置了cloud.cfg:

datasource:
  NoCloud
datasource_list: [ NoCloud ]
disable_ec2_metadata: True
Run Code Online (Sandbox Code Playgroud)

然后,我创建了一个用户数据文件和元数据文件,其中包含以下内容:

用户数据:

#cloud-config
hostname: prueba
password: passw0rd
chpasswd: { expire: False }
ssh_pwauth: True
Run Code Online (Sandbox Code Playgroud)

元数据:

instance-id: iid-local01
local-hostname: prueba
Run Code Online (Sandbox Code Playgroud)

然后,我生成了一个iso文件:

genisoimage  -output seed.iso -volid cidata -joliet -rock user-data meta-data
Run Code Online (Sandbox Code Playgroud)

最后,我已将磁盘连接到VM并启动它.这是XML的相关部分:

<disk type='file' device='disk'>
  <driver name='qemu' type='raw'/>
  <source file='/opt/images/seed.iso'/>
  <backingStore/>
  <target dev='vdb' bus='virtio'/>
  <alias name='virtio-disk1'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
Run Code Online (Sandbox Code Playgroud)

当VM启动时,它会说:

2015-05-12 12:12:40,394 - util.py[WARNING]: Getting data from <class 'cloudinit.sources.DataSourceNoCloud.DataSourceNoCloudNet'> failed
 * Stopping Read required files in advance …
Run Code Online (Sandbox Code Playgroud)

linux openstack cloud-init

6
推荐指数
1
解决办法
5520
查看次数

cloud-config以什么用户身份运行?

当分解一个AWS或其他云供应商实例,并使用cloud-init来配置主机时,称为bash脚本的用户是谁运行的?

cloud-init

6
推荐指数
1
解决办法
1964
查看次数

附加 cloud-init write_files

write_files与 cloud-init 一起使用时,是否可以附加内容?如果是这样,如何?

write_files: [
  {
    "path": "/home/user/some-file",
    "content": "\nLine to append!"
  }
]
Run Code Online (Sandbox Code Playgroud)

cloud-init

6
推荐指数
2
解决办法
3478
查看次数

我可以以与 root 不同的用户身份运行 cloud init 吗?

由于使用 git 时的权限问题,我尝试以与 root 不同的用户身份运行 cloud init。有这样的办法吗?

linux cloud-init

6
推荐指数
1
解决办法
4242
查看次数

在cloud-init中创建systemd单元并启用它

我在 cloud-init 文件中创建了以下 systemd 单元:

- path: /etc/systemd/system/multi-user.target.wants/docker-compose.service
  owner: root:root
  permissions: '0755'
  content: |
      [Unit]
      Description=Docker Compose Boot Up
      Requires=docker.service
      After=docker.service

      [Service]
      Type=simple
      ExecStart=/usr/local/bin/docker-compose -f /opt/data/docker-compose.yml up -d
      Restart=always
      RestartSec=30

      [Install]
      WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

当我尝试跑步时

sudo systemctl enable docker-compose.service

创建符号链接我得到这个:

Failed to execute operation: No such file or directory

不过我确信该文件位于/etc/systemd/system/multi-user.target.wants

cloud-init systemd ubuntu-16.04

5
推荐指数
1
解决办法
6815
查看次数

如何使用 cloud-init 和 Terraform 设置主机名?

我从 Terraform 开始。我试图让它设置一个友好的主机名,而不是ip-10.10.10.10AWS 使用的通常的主机名。但是,我还没有找到如何去做。

我尝试使用配置器,如下所示:

provisioner "local-exec" {
   command = "sudo hostnamectl set-hostname friendly.example.com"
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,主机名没有改变。

所以现在,我正在尝试这个:

resource "aws_instance" "example" {
  ami           = "ami-XXXXXXXX"
  instance_type = "t2.micro"
  tags = {
    Name    = "friendly.example.com"
  }
  user_data = "${data.template_file.user_data.rendered}"
}

data "template_file" "user_data" {
  template = "${file("user-data.conf")}"
  vars {
    hostname = "${aws_instance.example.tags.Name}"
  }
}
Run Code Online (Sandbox Code Playgroud)

user-data.conf我有一行使用变量,如下所示:

hostname = ${hostname}
Run Code Online (Sandbox Code Playgroud)

但这给了我一个循环依赖:

$ terraform apply
Error: Error asking for user input: 1 error(s) occurred:
* Cycle: aws_instance.example, data.template_file.user_data
Run Code Online (Sandbox Code Playgroud)

另外,这意味着我必须user_data为每个实例创建不同的资源,这似乎有点痛苦。你不能重复使用它们吗?那应该是模板的目的吧? …

cloud-init terraform

5
推荐指数
1
解决办法
8399
查看次数

使用cloud-init激活conda环境

我们正在尝试使用 userdata (我理解是基于 cloud-init 的)在 AWS EC2 实例上加载时运行批处理脚本。由于代码在 conda 环境中运行,我们尝试在运行 Python/Pandas 代码之前激活它。我们注意到 PATH 变量没有正确设置。(即使在制作映像之前已正确设置,并且在 SSH 进入实例后为所有用户正确设置)

我们尝试修改 shell 脚本中的路径,但没有任何效果。我们运行了以下代码:

#!/bin/bash
export=/opt/conda/bin:$PATH
which python
which conda
conda activate etl
Run Code Online (Sandbox Code Playgroud)

我们在运行之前和之后检查了 $PATH export=/opt/conda/bin(没有变化)。 which python返回错误的Python,并且which conda返回未找到。

之前和之后的 $PATH 是: /sbin:/usr/sbin:/bin:/usr/bin

python amazon-ec2 amazon-web-services cloud-init conda

5
推荐指数
1
解决办法
1632
查看次数

Azure虚拟机上使用cloud-init挂载数据盘失败

这是一个与之前的SO问题类似的问题,我从中改编了我的代码How can i use cloud-init to load a datadisk on an ubuntu VM in azure

使用通过 Terraform 传递的云配置文件:

#cloud-config
disk_setup:
  /dev/disk/azure/scsi1/lun0:
    table_type: gpt
    layout: true
    overwrite: false

fs_setup:
  - device: /dev/disk/azure/scsi1/lun0
    partition: 1
    filesystem: ext4

mounts:
  - [
      "/dev/disk/azure/scsi1/lun0-part1",
      "/opt/data",
      auto,
      "defaults,noexec,nofail",
    ]
Run Code Online (Sandbox Code Playgroud)
data "template_file" "cloudconfig" {
  template = file("${path.module}/cloud-init.tpl")
}

data "template_cloudinit_config" "config" {
  gzip          = true
  base64_encode = true

  part {
    content_type = "text/cloud-config"
    content      = "${data.template_file.cloudconfig.rendered}"
  }
}

module "nexus_test_vm" {
  #unnecessary details ommitted - 1 …
Run Code Online (Sandbox Code Playgroud)

linux ubuntu azure cloud-init azure-virtual-machine

5
推荐指数
1
解决办法
5909
查看次数

如何在出现第一个错误时停止 Cloud-init

当我使用 Cloud-init 启动 Linux 服务器时,我有一些脚本,/etc/cloud/cloud.cfg.d/它们按相反的字母顺序运行

# ll /etc/cloud/cloud.cfg.d/
total 28
-rw-r--r-- 1 root root  173 Dec 10 12:38 00-cloudinit-lifecycle-hook.cfg
-rw-r--r-- 1 root root 2120 Jun  1  2021 05_logging.cfg
-rw-r--r-- 1 root root  590 Oct 26 17:55 10_aws_yumvars.cfg
-rw-r--r-- 1 root root   29 Dec  1 18:22 20_amazonlinux_repo_https.cfg
-rw-r--r-- 1 root root  586 Dec 10 12:38 50-cloudinit-tomcat.cfg
-rw-r--r-- 1 root root  585 Dec 10 12:40 60-cloudinit-newrelic.cfg
Run Code Online (Sandbox Code Playgroud)

最后执行的是00-cloudinit-lifecycle-hook.cfg,我使用 .txt 文件完成 Auto Scaling 组的生命周期CONTINUE。如果 ASG 在给定超时后未收到此信号,则它会失败。

问题是,即使出现错误50-cloudinit-tomcat.cfg …

provisioning configuration-management cloud-init

5
推荐指数
0
解决办法
1004
查看次数