2017-03-24 2 views
2

AWS에서 Terraform을 사용하여 Docker Swarm 클러스터를 구축하려고합니다. Swarm 관리자가 성공적으로 시작되었지만 관리자 (관리자 뒤에 생성 됨)에 조인 키를 전달하는 최선의 방법을 찾으려고합니다.Terraform이 remote_exec 명령에서 변수를 설정할 수 있습니까?

Terraform 변수로 설정할 수있는 docker swarm join-token worker -q 명령을 실행하고 싶습니다. 그렇게하면 worker는 다음과 같은 remote_exec 명령을 가질 수 있습니다. docker swarm join ${var.swarm_token} ${aws_instance.swarm-manager.private_ip}

어떻게하면됩니까?

내 설정은 다음과 같습니다 :

resource "aws_instance" "swarm-manager" { 
    ami = "${var.manager_ami}" 
    instance_type = "${var.manager_instance}" 
    tags = { 
    Name = "swarm-manager${count.index + 1}" 
    } 

    provisioner "remote-exec" { 
    inline = [ 
     "sleep 30", 
     "docker swarm init --advertise-addr ${aws_instance.swarm-manager.private_ip}" 
     "docker swarm join-token worker -q" // This is the value I want to store as a variable/output/etc 
    ] 
    } 
} 

감사

답변

5

당신은 당신의 원격 프로비저닝 스크립트 보충에 external data source를 사용할 수 있습니다.

이렇게하면 득시글 득시글하다 매니저가 껍질을 벗기고 토큰을 얻을 수 있습니다.

N 명의 득시글 관리자가있는 경우 관리자를 만든 후에 한 번에 모두해야합니다. 외부 데이터 소스는 일반 문자열 맵을 반환하므로 각 노드에 대해 올바른 결과를 선택하는 데 필요한 키를 사용하거나 전체 집합을 구분 된 문자열로 반환하고 element()split()을 사용하여 올바른 항목을 가져옵니다.



resource "aws_instance" "swarm_manager" { 
    ami = "${var.manager_ami}" 
    instance_type = "${var.manager_instance}" 
    tags = { 
    Name = "swarm-manager${count.index + 1}" 
    } 
    provisioner "remote-exec" { 
    inline = [ 
     "sleep 30", 
     "docker swarm init --advertise-addr ${aws_instance.swarm-manager.private_ip}" 
    ] 
    } 
} 

data "external" "swarm_token" { 
    program = ["bash", "${path.module}/get_swarm_tokens.sh"] 
    query = { 
    swarms = ["${aws_instance.swarm_manager.*.private_ip}"] 
    } 
} 

resource "aws_instance" "swarm_node" { 
    count = "${var.swarm_size}" 
    ami = "${var.node_ami}" 
    tags = { 
    Name = "swarm-node-${count.index}" 
    } 
    provisioner "remote-exec" { 
    inline = [ 
     "# Enrol me in the right swarm, distributed over swarms available", 
     "./enrol.sh ${element(split("|", data.swarm_token.result.tokens), count.index)}" 
    ] 
    } 
} 
+0

그래, 나는 모든 것을 피하기를 바랐다. Ho hum. Anabilities를 사용하면 스크립트보다 프로비저닝을 더 잘 수행 할 수 있다고 생각합니다. – RiggerTheGeek

+0

여기에있는 Vagrant/Docker/Centos 이미지에서 통일 된 프로비저닝을 시도했습니다. 격렬한 작은 차이점이 많습니다. – Adrian

관련 문제