当前位置: 首页 > 知识库问答 >
问题:

使用Terraform运行脚本

林铭
2023-03-14

出于学习目的,我正在尝试在GCP上安装和设置我自己的Kubernetes集群。

我想在GCP上为我的实例提供一个引导脚本。

这是我的google\u compute\u实例config

json prettyprint-override">resource "google_compute_instance" "default" {
    name = var.vm_name
    machine_type = "f1-micro"
    zone = "europe-west1-b"

    boot_disk {
        initialize_params {
            image = "debian-cloud/debian-9"
        }
    }

    network_interface {
        network = var.network
        access_config {
            // Include this section to give the VM an external IP address
        }
    }

    provisioner "remote-exec" {
        script = var.script_path
        connection {
            type        = "ssh"
            host        = var.ip_address
            user        = "root"
        }
    }

    tags = ["node"]
}

我在应用terraform时遇到了这个问题

错误:无法打开脚本“sudo apt get update”

sudo apt-get安装
apt-transverage-https
ca-证书
curl
gnupg-Agent
software-Properties tions-公共
zsh
vim

curl-fsSLhttps://download.docker.com/linux/debian/gpg| sudo apt key add-sudo add apt repository \“deb[arch=amd64]https://download.docker.com/linux/debian\$(lsb_release-cs)\
稳定的“sudo-apt-get-update”

卷曲-shttps://packages.cloud.google.com/apt/doc/apt-key.gpg| sudo apt按键添加-cat

sudo apt-get安装
apt-transverage-https
ca-证书
curl
gnupg-Agent
software-Properties tions-公共
zsh
vim

curl-fsSLhttps://download.docker.com/linux/debian/gpg| sudo apt key add-sudo add apt repository \“deb[arch=amd64]https://download.docker.com/linux/debian\$(lsb_release-cs)\
稳定的“sudo-apt-get-update”

卷曲-shttps://packages.cloud.google.com/apt/doc/apt-key.gpg| sudo apt按键添加-cat

我所有的实例都是在云上创建的,它似乎找到了引导脚本,但它显示了这个错误。

我错过了什么?有更好的方法吗?

下面是脚本:

#bin/bash

sudo apt-get update

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common \
    zsh \
    vim

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

共有2个答案

壤驷雅达
2023-03-14

对于那些感兴趣的人,我找到了一个更简单的解决方案,不使用ssh,而是使用创建资源时可用的google元数据。

metadata\u startup\u script=file(“./scripts/bootstrap.sh”)

json prettyprint-override">resource "google_compute_instance" "default" {
    name = var.vm_name
    machine_type = "e2-standard-2"
    zone = "europe-west1-b"

    boot_disk {
        initialize_params {
            image = "debian-cloud/debian-9"
        }
    }

    network_interface {
        network = var.network
        access_config {
            // Include this section to give the VM an external IP address
        }
    }

    metadata_startup_script = file("./scripts/bootstrap.sh")

    tags = ["node"]
}
薛承基
2023-03-14

您应该在远程执行连接块中提供私钥参数。

private_key - The contents of an SSH key to use for the connection. These can be loaded from a file on disk using the file function. This takes preference over the password if provided.

示例块可以是这样的:

  provisioner "remote-exec" {
        script = var.script_path
        connection {
            host     = var.ip_address
            type     = "ssh"      
            user     = "root"
            private_key = fileexists("/temp/private_key") ? file("/temp/private_key") : file("C:/private_key")             
        }
  }
 类似资料:
  • 问题内容: 我已经准备好具有功能流程的Selenium自动化脚本,现在我想将这些脚本与JMeter集成以进行负载测试。 那可能吗? 如果是这样,如何将两者融合? 我的首要目标是使用硒运行自动化脚本,而不是在jmeter中运行这些脚本以进行负载或性能测试。 问题答案: JUnit请求采样器 如果您想重用已经自动化的(Java)Selenium场景,而不是为WebDriver Sampler重写JS脚

  • 问题内容: 我想尝试使用npm为Web应用程序运行各种构建任务。我知道我可以这样添加一个字段来做到这一点: 当您使用带有许多选项的更复杂的命令时,这变得很笨拙。是否有可能将这些命令移至bash脚本或类似的东西?就像是: 在文件中的哪里执行命令? 阅读这篇文章似乎是这样,但是我不清楚我应该在哪里放置文件或者丢失了什么。 问题答案: 完全有可能… 另外,请确保在bash文件的顶部放置一个哈希爆炸 还请

  • 问题内容: 我想从C调用Python脚本,并传递脚本中所需的一些参数。 我要使用的脚本是mrsync或多播远程同步。我通过调用以下命令从命令行进行了工作: -m是包含目标ip地址的列表。-s是包含要同步的文件的目录。-t是目标计算机上将放置文件的目录。 到目前为止,通过使用以下C程序,我设法运行了没有参数的Python脚本: 这很好。但是,我找不到如何将这些参数传递给方法的方法。 问题答案: 似乎

  • 问题内容: 我有一个想要添加到cron的python脚本。 脚本具有+ x权限。 如何将其添加到crontab?(例如,我希望它每分钟运行一次)。 重要提示:当我(使用外壳)导航到脚本的文件夹时,无法使用“ ./script_name.py”运行它;它不起作用。但是,当我使用“ Python script_name.py”运行它时,一切正常。 问题答案: 从您应该运行该脚本和脚本符合下列条件: 可

  • 问题内容: 我想在我的node.js服务器上运行shell脚本,但是什么也没发生… 另一个childProcess可以完美地工作,但是上面的过程不能。 如果我在终端中运行脚本,那么它将起作用。有任何想法吗?(设置了chmod + x) 问题答案: exec函数回调函数已将错误,stdout和stderr参数传递给它。查看它们是否可以通过将它们吐到控制台来帮助您诊断问题:

  • 问题内容: 我正在尝试运行Python工作。我创建了以下文件夹: C:\ Users \ herod \ jenkins_ws \ workspace \ window_testing 并添加了脚本“ testing.py”。 该脚本非常简单: 但是从Jenkins运行它时出现以下错误(如果我从命令行运行它会起作用): 我究竟做错了什么 ? 这是我尝试过的: 在构建部分的作业配置中,我选择“执行p