我正在尝试让云配置脚本与我的 DigitalOcean Droplet 一起正常工作,但我在此期间正在本地 lxc 容器上进行测试。
我一直遇到的一个问题是,我永远无法让write_files指令对多个文件正常工作。它似乎以我无法理解的奇怪方式行事。
比如这个配置不正确,只输出了一个文件(.tarsnaprc)/tmp:
#cloud-config
users:
- name: julian
shell: /bin/bash
ssh_authorized_keys:
- ssh-rsa myrsakeygoeshere julian@hostname
write_files:
- path: /tmp/.tarsnaprc
permissions: "0644"
content: |
cachedir /home/julian/tarsnap-cache
keyfile /home/julian/tarsnap.key
nodump
print-stats
checkpoint-bytes 1G
owner: julian:julian
- path: /tmp/lxc
content: |
lxc.id_map = u 0 100000 65536
lxc.id_map = g 0 100000 65536
lxc.network.type = veth
lxc.network.link = lxcbr0
permissions: "0644"
Run Code Online (Sandbox Code Playgroud)
但是,如果我交换write_files数组中的两个项目,它会神奇地工作,并创建两个文件.tarsnaprc和lxc. 我做错了什么,我有语法错误吗?
从RHEL 7.1 AMI启动的实例似乎不会将 SSH 指纹写入系统日志(cloud-init 的输出中完全没有任何内容),因此我无法使用 AWS UI 或命令行上的“获取系统日志”菜单用于找出已启动服务器的 ssh 指纹的工具。在Centos 7上它默认工作。可能是 cloud-init 配置的问题还是其他原因?Cloud-init 成功运行,日志显示在/var/logSSH 后。
我试图在由 terraform 启动后获取 Ubuntu 云映像(特别是 ami-311a1a5b)来引导 docker。我有以下配置来执行此操作:
resource "aws_instance" "app" {
count = 1
ami = "${lookup(var.amis, var.region)}"
instance_type = "t2.micro"
subnet_id = "${aws_subnet.private.id}"
vpc_security_group_ids = ["${aws_security_group.default.id}"]
key_name = "${aws_key_pair.deployer.id}"
source_dest_check = false
# user_data = ${file("cloud-config/app.yml")}
user_data = "${template_file.cloud_config.rendered}"
depends_on = ["aws_instance.nat"]
tags = {
Name = "airpair-example-app-${count.index}"
}
root_block_device {
volume_type = "standard"
volume_size = 20
}
}
Run Code Online (Sandbox Code Playgroud)
实例启动后,docker没有安装,看来云配置没有应用。云配置如下:
# Cloud config for app servers
runcmd:
# Install docker
- curl -sSL https://get.docker.com | sudo sh
# Run …Run Code Online (Sandbox Code Playgroud) 我在新的云服务器 (Ubuntu 16.04) 上安装了 Python 3.6 而不是默认的 3.5 版本。重启服务器后,发现cloud-init启动时执行失败,syslog.
Sep 20 16:16:14 cloud-init[1310]: Traceback (most recent call last):
Sep 20 16:16:14 cloud-init[1310]: File "/usr/bin/cloud-init", line 9, in <module>
Sep 20 16:16:14 cloud-init[1310]: load_entry_point('cloud-init==0.7.9', 'console_scripts', 'cloud-init')()
Sep 20 16:16:14 cloud-init[1310]: File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 570, in load_entry_point
Sep 20 16:16:14 cloud-init[1310]: return get_distribution(dist).load_entry_point(group, name)
Sep 20 16:16:14 cloud-init[1310]: File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 2751, in load_entry_point
Sep 20 16:16:14 cloud-init[1310]: return ep.load()
Sep 20 16:16:14 cloud-init[1310]: File "/usr/local/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 2405, …Run Code Online (Sandbox Code Playgroud) 在我的Terraform AWS Docker Swarm 模块中,我使用 cloud-init 来初始化 EC2 实例。但是,Terraform 表示在 cloud-init 完成之前资源已准备就绪。有没有办法让它等待 cloud-init理想地完成而无需 SSH 连接或使用null资源检查端口是否启动。
如何使用 terraform 将 cloud-init 脚本发送到 gcp 实例?
关于这个主题的文档非常稀疏。
在使用Nova boot创建vm时,我正在为它提供一个用户数据脚本(cloud-init脚本).
我想知道的是,如何在云初始化脚本(或任何其他方式)中指定: - 安排一个cron作业每2小时运行一次
假设我想运行"du -s njain /"来每2小时查找一次目录的大小
我知道"runcmd"可以用来做一次..但我如何让它定期运行?du -s ../njain/
我试图通过云初始化将文件复制到 Windows EC2 实例,方法是传递用户数据,云初始化模板运行,它创建一个文件夹但不复制文件,您能帮助我理解我在代码中做错了什么吗?
此代码通过自动缩放组的启动配置传递
data template_cloudinit_config ebs_snapshot_scripts {
gzip = false
base64_encode = false
part {
content_type = "text/cloud-config"
content = <<EOF
<powershell>
$path = "C:\aws"
If(!(test-path $path))
{
New-Item -ItemType Directory -Force -Path $path
}
</powershell>
write_files:
- content: |
${file("${path.module}/../../../../scripts/aws-ebs-snapshot-ps/1-start-ebs-snapshot.ps1")}
path: C:\aws\1-start-ebs-snapshot.ps1
permissions: '0744'
- content: |
${file("${path.module}/../../../../scripts/aws-ebs-snapshot-ps/2-run-backup.cmd")}
path: C:\aws\2-run-backup.cmd
permissions: '0744'
- content: |
${file("${path.module}/../../../../scripts/aws-ebs-snapshot-ps/3-ebs-snapshot.ps1")}
path: C:\aws\3-ebs-snapshot.ps1
permissions: '0744'
EOF
}
}
Run Code Online (Sandbox Code Playgroud) amazon-web-services cloud-init terraform terraform-provider-aws
我正在考虑使用 Terraform 设置虚拟机基础设施,并使用 cloud-init 启动虚拟机。我正在尝试使用cloud-config内容类型作为第一部分和shellscript第二部分的多部分方法。
但是,在 上terraform apply,仅执行第一部分,而第二部分未运行(通过检查生成的 VM 是否已应用更改)。
相关配置部分如下。
data "template_cloudinit_config" "config" {
gzip = true
base64_encode = true
part {
filename = "init-cloud-config"
content_type = "text/cloud-config"
content = file("../modules/services/${var.service_name}/init.yaml")
}
part {
filename = "init-shellscript"
content_type = "text/x-shellscript"
content = templatefile("../modules/services/${var.service_name}/init.sh",
{ hostname = "${var.prefix}-${var.service_name}" }
)
}
}
Run Code Online (Sandbox Code Playgroud)
cloud-init init.yaml 内容如下
groups:
- dataops
users:
- default
- name: dataops
gecos: Data Operations
shell: /bin/bash
primary_group: dataops
sudo: ALL=(ALL) NOPASSWD:ALL …Run Code Online (Sandbox Code Playgroud) 我正在从事的一个开源项目包含需要 Linux 的组件,因此虚拟化通常是开发和测试新功能的最佳解决方案。我正在尝试为 Multipass 提供一个简单的 cloud-init 文件,该文件将通过从 Git 提取文件并自动在 VM 中设置它们来使用我们的代码配置 VM。然而,即使启动花费的额外时间似乎表明进程正在运行,但似乎没有文件实际保存到主目录中,即使对于更简单的情况也是如此,即
runcmd:
- [ cd, ~ ]
- [ touch test ]
- [ echo 'test' > test ]
Run Code Online (Sandbox Code Playgroud)
我只是错误配置了 cloud-init 还是我错过了一些重要的东西?
cloud-init ×10
terraform ×4
amazon-ec2 ×2
lxc ×1
multipass ×1
python ×1
python-3.x ×1
rhel ×1
rhel7 ×1
ubuntu ×1
ubuntu-cloud ×1
yaml ×1