๋ ์์ธํ๊ณ ์ฃผ์๋ ํ์ฉํ๋ YAML(๋๋ HCL )์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. (https://github.com/mitchellh/packer/issues/283 ์ฐธ์กฐ)
JSON์ด ๊ตฌ์ฑ ํ์์ด์ด์ผ ํ๋ ๊ฒฝ์ฐ ์ฃผ์๊ณผ ๊ฐ์ ํค/๊ฐ์ ํ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค(์ด๋ฆ ์์ ์ฃผ์๊ณผ ๊ฐ์ ๊ธ๋ฆฌํ๊ฐ ๋ถ๋ ๊ฒฝ์ฐ). ์๋ฅผ ๋ค์ด:
{
"builders": [
...
],
"provisioners": [
{
"#TODO": "turn this into a puppet manifest",
"type": "shell",
"script": "setup.sh"
},
{
"type": "shell",
"execute_command": "sudo -E /bin/bash '{{ .Path }}'",
"#": "Run as sudo and remove all the things we don't need",
"inline": ["DEBIAN_FRONTEND=noninteractive apt-get -y clean autoremove"]
}
]
}
cc @pandacalculus
HCL์ด ๊ณง ์ถ์๋ฉ๋๋ค :์ค๋ง์ผ:
@delitescere ์ด ๋ฌธ์ ๋ #283์ ์ค๋ณต์ด ์๋๋๊น? ๋๋ ๋น์ ์ด ์ด๊ธฐ ๊ฒ์๋ฌผ์์ ๊ทธ๊ฒ์ ์ฐ๊ฒฐ๋์ด ์๋ค๋ ๊ฒ์ ์์์ง ๋ง ๋ ๋ฌธ์ ์ ์ฐจ์ด์ ์ด ๋ฌด์์ธ์ง ๋ช ํํ์ง ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ ์ ์๋ ํค๋ ํ์ฌ์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค. ์ด๊ฒ์ ๋ฌด์๋๋ "์ฃผ์๊ณผ ๊ฐ์" ํค๋ฅผ ์ ์ํฉ๋๋ค. ์ฃผ์ ์ํ๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ ค์ง ์์ฒด ๋ซ๊ธฐ ์ฃผ์ ์ ๋์ฌ๋ก ํ์๋ฉ๋๋ค(์ฆ: #
, //
, ;
).
๋นํ์ค JSON, JSON5, YAML ๋๋ HCL์์ ์ฃผ์์ ์ง์ํ๊ธฐ ์ํด ๋ ํฐ ์ฝ๋ ๋ณ๊ฒฝ์ ๊ฐ์ํ ๋ ๋์ฒด ์ ์์ด์์ต๋๋ค.
HCL ์ง์์ผ๋ก์ ์ด๋์ ๋ํ @sethvargo ์ ์๊ฒฌ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
@sethvargo
HCL์ด ๊ณง ์ถ์๋ฉ๋๋ค :์ค๋ง์ผ:
๋ฒ๊ฑฐ๋กญ๊ฒ ํด์ ์ฃ์กํฉ๋๋ค. ์ด์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
์์ง ์ค๊ณ ์์ด์ :์ค๋ง์ผ:
์์ง HCL ์์ฑ์๊ฐ ์๊ณ ๋ค์ ๋ช ๊ฐ์ง ๋ฒ์ ์ ๋ํ ์ต์
์ผ๋ก packer fix
๋ฅผ ์ ์งํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ์ด ์์
์ ์กฐ๊ธ ์ฐ๊ธฐํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๋๋ HCL ์ฟจ์์ด๋๋ฅผ ๋ง์ จ๋ค. :+1:
์ด์ https://github.com/hashicorp/hcl์ด ์กด์ฌํ๋ฏ๋ก json์ ๋ํ ๋์์ ์ป์ ์ ์์ต๋๊น? :)
@jevoneearth ๊ฝค ์ค๋ง์ผ:. HCL์ ์์ง ์ค๊ณ ์์ต๋๋ค!
์์ง ์ถ์ ์ค์ด๋ฏ๋ก ์์ฒญ ํฌํจ ํ์ผ์ ์ ๊ณตํ๊ธฐ์ ์ข์ ์๊ธฐ์ ๋๊น? https://github.com/mkheironimus/packergen ์ฐธ์กฐ
@jevoneearth๋ hcl์ ์ถ๊ฐํ ๋๊น์ง ๋์์ ์ ์ํฉ๋๋ค.
์์ง ๊ณง ์จ๋ค?
@mitchellh @sethvargo ๋ ๊ทํ๊ฐ ์ธ๊ธํ HCL ์์ฑ์์ ๋๋ค. https://github.com/hashicorp/hcl/tree/master/hcl/printer
YAML์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ์ค์ ๋ก HCL์ ๊ด์ฌ์ด ์์ต๋๋ค.
ํจ์ปค๋ฅผ bash ํจ์๋ก ๋ํํ๊ณ yaml
๋ฅผ json
๋ก ๋ณํํ๋ ๊ฒ์ ๊ฐ๋จํฉ๋๋ค.
์์ํ๋ ค๋ฉด:
ruby -r json -r yaml -e "yaml = YAML.load(File.read(\"$1\")); print yaml.to_json"
(๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐ๋)
ruby -r json -r yaml -e "json = JSON.parse(File.read(\"$1\")); print YAML::dump(json)"
๋๋ ์ด๋ฏธ ๊ทธ๊ฒ์ ๋ง๋ค์๋ค. ํ์ง ์์๋ ์ข์ต๋๋ค. ์ด๊ฒ์ด HCL์ ์ํด ์ด ํฐ์ผ์ด ์กด์ฌํ๋ ์ด์ ์ ๋๋ค.
2017๋ 1์ 16์ผ ์คํ 12์ 31๋ถ์ Rickard von Essen [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
ํจ์ปค๋ฅผ bash ํจ์๋ก ๋ํํ๊ณ yaml์ json์ผ๋ก ๋ณํํ๋ ๊ฒ์ ์ผ์ข ์ ์ฌ์ํ ์ผ์ ๋๋ค.
์์ํ๋ ค๋ฉด:
ruby -r json -r yaml -e "yaml = YAML.load(File.read(\"$1\")); ์ธ์ yaml.to_json"
(๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐ๋)ruby -r json -r yaml -e "json = JSON.parse(File.read(\"$1\")); ์ธ์ YAML::dump(json)"
โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ๋ณด๊ฑฐ๋ ์ค๋ ๋๋ฅผ ์์๊ฑฐํ์ธ์.
HashiCorp๋ ์ค์ค๋ก์ ๋ํ ์ฝ๊ฐ์ ๋ฏฟ์์ ๋ณด์ฌ์ฃผ๊ณ ๊ฐ๋ฅํ ๋ชจ๋ ๊ณณ์์ HCL์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. HCL์ด ์ข์ ์์ด๋์ด์ด๊ณ ํจ๊ป ์คํํด์ผ ํ๊ฑฐ๋ HCL์ด ์ค์์ด๊ณ Terraform์ด ์ฌ์์ ๋๋ค. ๋ถ๋ช ํ ํ์๋ ์ฌ์ค์ด ์๋๋๋ค. ๋ฐ๋ผ์ ์๋ก์ด ํ๊ฐ์/์ฑํ์๋ก์ ์ด ๋ ์ ํ์ด "์๋ก ๋ํํ์ง ์๋ ๋ ์ ๋ณด ๊ธฐ๊ด"์ฒ๋ผ ๋๊ปด์ง๋ ๊ฒ์ด ์ฐ๋ ค์ ์์ธ์ด๋ผ๊ณ ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
@sethvargo์ ํจ๊ป ํด์. ๋ค์ด์ด์ธํ ์ธ์ฅ์ ์ฐ๊ณ "HCL์ด ์จ๋ค"๋ผ๊ณ ์ ์ธํฉ์๋ค. (๊ทธ ๋ฟ๋ง ์๋๋ผ ๊ทธ๊ฒ์ ์คํํ์ญ์์ค.)
๊ตฌ๋ฃ์ฃผ๊ฑฑ ์ฃผ์์ JSON์ผ๋ก ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค. ํด๊ฒฐ์ฑ ์ Douglas Crockford๊ฐ ์ ๊ณตํ์ผ๋ฉฐ Nicholas Chammas๊ฐ The Notorious Two Eight Three https://github.com/mitchellh/packer/issues/283#issuecomment -60039068์์ ์์ํ์ต๋๋ค.
Ruby ๊ด๋ถ๋ YAML์ ์ข์ํ๊ณ ์ฒ์๋ถํฐ YAML ์ฌ์ฉ์ ๋ํ ์๋ฃจ์
์ ์ ๊ณตํ์ต๋๋ค. ์ด๊ฒ์ ๋ฉ์ง๊ณ 2 ๊ฐ์ ๋๊ธ ์ผ ์ ๋ฆฌ ์นด๋ ํฐ ์์ผ์ ์ํด ์์ ๋ https://github.com/mitchellh/packer/issues/1768#issuecomment -272921740 (๋ด๊ฐ ์ฌ์ฉ ์ ํธํ๋ ๊ฑฐ๋ผ๊ณ ํ์ง๋ง ARGF.read
๋๋ ์๋์ฒ๋ผ)
HashiCorp๊ฐ ํ์ํ ๋งํผ์ ์ ํ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ด ๋ง์์ ๋ญ๋๋ค. ์ด๊ฒ์ ์ ๋์ค ์ฒ ํ๊ณผ ์ ๋ง์ต๋๋ค(Peter H. Salus๊ฐ A Quarter-Century of Unix(1994)์์ ์์ฝ):
$ cat > example.json <<'EOF'
// from: https://www.packer.io/intro/getting-started/vagrant.html
{
// can't we take this out?
"variables": {
"aws_access_key": "", // why is this blank?
"aws_secret_key": "" // ditto
},
"builders": [{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "us-west-2",
"source_ami": "ami-b7a114d7",
"instance_type": "t2.micro",
"ssh_username": "ubuntu",
"ami_name": "packer-example {{timestamp}}",
"tags": {
"created_by": "Packer.io/example"
}
}],
"provisioners": [{
"type": "shell",
"inline": [
"sleep 30",
"sudo apt-get update",
"sudo apt-get install -y redis-server"
]
}],
"post-processors": ["vagrant"]
}
EOF
$ packer validate <(jsmin < example.json)
Template validated successfully.
$ cat > example.yaml <<'EOF'
---
# from: https://www.packer.io/intro/getting-started/vagrant.html
# can't we take this out?
variables:
aws_access_key: '' # why is this blank?
aws_secret_key: '' # ditto
builders:
- type: amazon-ebs
access_key: '{{user `aws_access_key`}}'
secret_key: '{{user `aws_secret_key`}}'
region: us-west-2
source_ami: ami-b7a114d7
instance_type: t2.micro
ssh_username: ubuntu
ami_name: packer-example {{timestamp}}
tags:
created_by: Packer.io/example
provisioners:
- type: shell
inline:
- sleep 30
- sudo apt-get update
- sudo apt-get install -y redis-server
post-processors:
- vagrant
EOF
$ packer validate <(ruby -r json -r yaml -e "print YAML.load(ARGF.read).to_json" < example.yaml)
Template validated successfully.
์ ํ๋ ํ ์คํธ๋ฅผ ์ํด yaml ํ ํ๋ฆฟ์ ๋ํ ์์ ํ๋ณด๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค.
ํ์คํ ์ฐ๋ฆฌ๊ฐ ์กฐ์ฌํ ๊ณํ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ์ ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ 1.0์ ๋ชฉํ๋ก ํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ซ์ ๊ฒ์ ๋๋ค. 1.0์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฉ์ผ๋ง ๋ฆฌ์คํธ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
๋ฌธ์ ๋ฅผ ๋ค์ ์ด ์๊ฐ์ ๋๋ค. ํ์คํ HCL์ Packer์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์ธ์ด์ฌ์ผ ํฉ๋๋ค.
์ถ์ : ์ฌ์ ํ ๊ฑฐ์ ๋ชจ๋ ๋ฌธ์ ๊ฐ ์ข ๋ฃ๋ ์ด์ ๋ฅผ ์์ง ๋ชปํฉ๋๋ค. ๋ฌธ์ ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๋ก์ ํธ, ์ด์ ํ ๋ฐ ํ๊ทธ๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ํ ๊ณํ์ ๋๋ค. ๋๋์ ์ธ ์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ ์ํํ ์ ์๋๋ก ํ๊ณ ์ถ์ต๋๋ค. ๋ค์ ๋จ๊ณ๋ ๋ณ๋์ ๋ฌธ์ ๊ฐ ๋ RFC ํ๋ก์ธ์ค๋ฅผ ์งํํ๋ ๊ฒ์ ๋๋ค.
JSON5, YAML ๋ฐ HCL์ ํ์ํฉ๋๋ค. ์์ํ JSON์ ๊ณ ํต์ค๋ฝ์ต๋๋ค.
@darkn3rd ์ฐ๋ฆฌ Joyent๊ฐ master
๋ฅผ ์ถ์ ํ๋ JSON5 ๋ถ๊ธฐ ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋น์ ์ ๊ณ ํต์ ๋๋ผ๋ฉฐ ์ถฉ๋ถํ ๊ณ ํต์ค๋ฝ์ต๋๋ค. ์๋ํ๋ฉด ํ์ฌ ์ํฉ์ ์ค์ ๋ก ์ค์ ์๋์ ํจ์ปค ํ
ํ๋ฆฟ์ ์ฌ์ฉํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ์ฌ๋์ด https: //github.com/joyent/packer/tree/f-json5
/me๋ ์ด๋ฒ ์ฃผ์ ๋ถ๊ธฐ๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฅผ ์์ฑํฉ๋๋ค.
์ฐ๋ฆฌ๋ "๊ณง ์ถ์๋ " 3๋ ์ ๊ฐ๊น์ต๋๋ค... ์ ๋ ํจ์ปค ์ด๋ณด์์ด๊ณ HCL์ ์ง์ํ์ง ์๋๋ค๋ ์ฌ์ค์ ๋๋์ต๋๋ค. ๊ทธ๊ฒ์ ํ ์คํธํ๊ธฐ ์ํด ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค.
๋๋ ๋ฐฉ๊ธ ๋ด ์น๊ตฌ์๊ฒ "ํค์ด lat's ๊ทธ ๋์ฐํ json์ HCL๋ก ๋ง์ด๊ทธ๋ ์ด์ ํฉ๋๋ค. ์ด๊ฒ์ hashcorp ๋๊ตฌ์ ๋๋ค, ๋ง์ฃ ?"๋ผ๊ณ ๋งํ์ต๋๋ค. ๋ด๊ฐ ์ผ๋ง๋ ์๋ชปํ๋์ง...
๊ด์ฌ ์๋ ๊ฒฝ์ฐ yacker
(Python ์ ํธ๋ฆฌํฐ)๋ Packer๋ฅผ YAML-to-JSON ์ธํฐํ๋ฆฌํฐ๋ก ๋ํํฉ๋๋ค. ๊ทธ๊ฒ์ ์๋ฌด๊ฒ๋ ์ง๊ตฌ ์ฐ์ฐ์กฐ๊ฐ์ด - ๊ทธ๋ฅ ํจ์ปค๋ก ์ ์ด๋ฅผ ์ ๋ฌํ๊ธฐ ์ ์ ์ผ์์ ์ผ๋ก JSON์ผ๋ก ๋ณํ ํ
ํ๋ฆฟ ๊ฒ์ YAML - ๋ํผ ๋ณ์ ํ์ผ์ ์ ๊ณตํฉ๋๋ค.
ํจ์ปคํ? ์ ์์ง๋ HCL์ ์ ๊ณตํ์ง ์์ต๋๊น? ์ ๋ ๊ฑฐ์ 1๋
์ ์ YAML ์ง์์ ์ํ ์์ ํจ์น๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ ์๋ํ๊ณ HCL์ด ์จ๋ค๋ ์ด์ ๋ก ๊ฑฐ๋ถํฉ๋๋ค. ํ์ง๋ง 1๋
์ด ์ง๋๋ ๋ณํ ๊ฒ์ ์์ต๋๋ค!
๋ญ๋ผ๊ณ ์?
์์ง ์ค๊ณ ์์ต๋๋ค :์ํฌ:
@vtolstov #7023 ์ฐธ์กฐ
HashiCorp์ ๋ด๋ถ ์ ํ ๋ด๋น์๋ HCL1์ ๋ฐ๋ก ๊ฑด๋๋ฐ๊ณ ๋์ HCL2๋ฅผ ๊ตฌํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ฃ์กํฉ๋๋ค. ์์ง ๊ตฌํ๋์ง ์์์ง๋ง ์ง๊ธ HCL2 ์ง์์ ์ํด ์ ๊ทน์ ์ผ๋ก ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
์ ๋ฐ์ดํธ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ํฌ๊ธฐํ์ง ์์์ต๋๋ค.
@SwampDragons ๊ฐ์ฌํฉ๋๋ค! ์ด ๋ฌธ์ ์ ๋ํด ์ ๊ทน์ ์ผ๋ก ์์ ์ค์ด๋ฏ๋ก ์ด ๋ฌธ์ ๋ฅผ ๋ค์ ์ด์ด์ผ ํฉ๋๊น?
์ข์ ์ง์ ; ๋ณํฉํ์ง ์๊ณ ์ฐ๊ฒฐ๋ PR์ ๋ซ์์ ๋ ์ค์๋ก ๋ซํ์ต๋๋ค.
ํจ์ปค๋ฅผ ํตํ HCL2 ์ง์์ ์ ๋ง ๊ธฐ์ฉ๋๋ค!
@SwampDragons HCL์ ๋ํ ์์์ด ์์ต๋๊น?
์ฐ๋ฆฌ๋ 1.5.0 ๋ฆด๋ฆฌ์ค์์ ๊ทธ๊ฒ์ ์ป์ ์ ์๊ธฐ๋ฅผ ๋ฐ๋ผ๊ณ ์์ต๋๋ค(๊ทธ๋ฌ๋ ์ฝ์ํ์ง๋ ์์ต๋๋ค). ํ์ ๋ธ๋์น์์ ์๋ํ๋ ํ๋กํ ํ์ ์ ๊ฐ์ง๊ณ ์์ง๋ง ์์ง ๋ค๋ฌ ๊ฑฐ๋ ๊ฐํ๋์ง ์์์ผ๋ฉฐ ์๋๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ ๋ช ๋
ํ์ ๋์์๊ณ ์ด๊ฒ์ด ์ฌ์ ํ ์ด๋ ค ์๋ค๋ ๊ฒ์ ๋๋์ต๋๋ค.
1.5๋ก ๋์ค๋ ๋คํ์
๋๋ค.
@SwampDragons 1.5.0(๋ฒ ํ ๋ฒ์ ํฌํจ)์ ์ฌ์ฉํ ์ ์๋ ๋๋ต์ ์ธ ์ผ์ ์ด ์์ต๋๊น?
๋ณ๊ฒฝ์ด ๋ณต์กํ ๊ฒฝ์ฐ(๊ทธ๋ฆฌ๊ณ ๊ทธ์ ๋ํ ๋งค์ฐ ์ข์ ์ด์ ๊ฐ ์์ ์ ์์) ์๋ฒฝํ๊ฒ ์ข์ ๋๊ตฌ๋ฅผ ๊ทธ๋๋ก ๋๊ณ ํต์ฌ ์ ์ ํ์์ ๋ณ๊ฒฝํ๋ ๋์ ๋ณํํ๋ _adapters_๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ๊ฐ๋ฐ ์ํ๊ณผ ๋น์ฉ์ด ํจ์ฌ ๋ฎ์ง ์์ต๋๊น? ํ์ X๋ฅผ JSON์ผ๋ก?
๊ทธ๋ฅ ์๊ฐ.
๋๋ ๋ฌธ์ ๋ฅผ ํ์ฐฎ๊ฒ ์ฌ๊ธฐ๊ณ ์ถ์ง ์์ผ๋ฉฐ ํต์ฌ ํ์์ ๋ณ๊ฒฝํด์ผ ํ๋ ์ ๋ง ์ค์ํ ์ด์ ๊ฐ ์์ ์ ์์ง๋ง ์ด์ ์์๋๋ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ๊ณ ๋ คํ ๋ ์ฌ์ฉ์๊ฐ ํ์ผ์ ํ๋ก์ ํธ๋ก ์ ์ํ๋ ๋ฐฉ๋ฒ์ ๊ดํ ๊ฒ์ด๋ผ๋ฉด yacker์ ๊ฐ์ _ ์ธ์ด ์ด๋ํฐ_๊ฐ ํ์ํฉ๋๊น?
@alanbchristie ๊ณต์ ํ๊ฒ @azr ์ด ์์ ์์ง ์๋ค๊ณ ๋งํ๋ฏ ์ด ์ธ๋ถ ์ฌํญ์ ๋ํด์๋ ๋งํ ์ ์์ต๋๋ค. ;) ๊ทธ๊ฐ ๋์์ค๋ฉด ๋๋ ๊ทธ๊ฐ ์ฌ๋ฌ๋ถ์ ์ํด ์ฝ๊ฐ์ ์งํ ์ํฉ ์ ๋ฐ์ดํธ๋ฅผ ์์ฑํ ์ ์๋์ง ๋ฌผ์ด๋ณผ ๊ฒ์ ๋๋ค.
@NickLarsenNZ ๋ด๊ฐ ์์ฌ์๊ฒ ๋ณด์ฌ์ฃผ๋ ๋ก๋๋งต์ ๋ฐ๋ฅด๋ฉด 10์์ด๋ 11
์ ๋ ํจ์ปค๋ฅผ ์ฒ์ ์ ํฉ๋๋ค... ํ์ง๋ง ์์งํ ๋งํด์, ์ด๊ฒ์ด 5-6๋ ๋์ ํด๊ฒฐ๋์ง ์์ ๋ฌธ์ ์๋ค๋ ์ฌ์ค์ ์๋นํ ๋๋ดํ ๋ฟ๋ง ์๋๋ผ ๋งค์ฐ ์ค๋ง์ค๋ฝ์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ ์ค์ jq
๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์์ ์ ๊ฑฐํ๋ฉด ์ ๊ฑฐํ jq๋ก ์์ฑ๋ ์ฃผ์ 1๊ฐ๋ง๋ค 99๊ฐ์ ์ฃผ์์ด ์์ฑ๋์ง ์์ ์ ์์ต๋๋ค.
๋๋ ํจ์ปค์ ์ํด ๊ตฌํ๋ json์ด ์ด ์์ ์ ์ ํฉํ์ง ์์ ๋ฐฉ๋ฒ์ ๋ฉฐ์น ๋์ ๊ณ์ํ ์ ์์ง๋ง ์ฃผ์์ ํ์ฉํ์ง ์๊ณ ์ฝ๋/๊ตฌ์ฑ ๋ณต์ ๋ฅผ ๊ถ์ฅํ๋ค๋ ์ฌ์ค(์ ํจ์ปค json์ ์์ฑํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๊น? ๊ตฌ์ฑ ์ฌ์ฌ์ฉ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์์ฌ ์ปดํ์ผ๋ฌ).
์์์ ์ค์ด๊ธฐ ์ํด ์ ๊น; @azr ์ด ๋์์๊ณ ๊ธฐํ๊ฐ ์์ ๋ ๋ฒ ํ ๋น๋ ์ ๊ณต์ ํฌํจํ์ฌ ์ด ๋ฌธ์ ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฌ๋ฌ๋ถ, ์๋ ํ์ธ์ ! ์ข์ ์์์ด ์์ด์ ๐ ๐
๋๋ ์ต๊ทผ์ HCL2๋ฅผ ์ฎ๊ธฐ๋ ๋ฐ ์๋นํ ์๊ฐ์ด ๊ฑธ๋ ธ๊ณ ์ฌ๊ธฐ์์ ๊ตฌํํ๋ PR์ ์ฐพ์ ์ ์์ต๋๋ค: #8423. ์ผ๋ถ ๋ฐ์ด๋๋ฆฌ๋ ์ฌ๊ธฐ ์์ ์ฐพ์ ์
์ฐ๋ฆฌ๋ ๋ฒ๊ทธ๋ฅผ ํผํ๊ธฐ ์ํด ๋ค์ํ ์ฌ๋ก๋ฅผ ํ
์คํธํ๊ธฐ ์ํด ์ต์ ์ ๋คํ๊ณ ์์ง๋ง ๋ง์ ๋น๋/ํ๋ก๋น์ ๋/ํ์ฒ๋ฆฌ์๊ฐ ์๊ณ ์ฐ๋ฆฌ๋ ์๊ท๋ชจ ํ์ด๋ฏ๋ก ํ
์คํธ์ ๋ํ ์ด๋ค ๋์๋ ํ์ํฉ๋๋ค! ์ด๊ฒ์ ์๋ํ๊ณ ๋ฒ๊ทธ๋ฅผ ์ฐพ์ผ๋ฉด; HCL ๋ฒ๊ทธ์์ ์๋ฆฌ๋ ์ ๋ฌธ์ ๋ฅผ ์ฌ์ญ์์ค.
Packer๋ฅผ ์ค์ ํ๋ ํ์ฌ(์ด์ ) ๋ฐฉ๋ฒ์ ๊ณ์ ์๋ํ ๊ฒ์ด๋ฉฐ ํ์ฌ ์ด์ ๋ฒ์ ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ ์ ๋๋ก ํ์ ์ด ์๊ธธ ๋๊น์ง ๋น๋ถ๊ฐ ๋ ๋ฒ์ ์ ์์ ํ ์ง์ํ ๊ณํ์ ๋๋ค.
์์ hcl ํ์ผ
build {
sources = [
"source.amazon-ebs.first",
]
provisioner "shell" {
inline = [
"sleep 5"
]
}
post-processor "shell-local" {
inline = [
"sleep 5"
]
}
}
source "amazon-ebs" "first" {
// access_key = "{{user `aws_access_key`}}"
// secret_key = "{{user `aws_secret_key`}}"
ami_name = "hcl2-test"
region = "us-east-1"
instance_type = "t2.micro"
kms_key_id = "c729958f-c6ba-44cd-ab39-35ab68ce0a6c"
encrypt_boot = true
source_ami_filter {
filters {
virtualization-type = "hvm"
name = "amzn-ami-hvm-????.??.?.????????-x86_64-gp2"
root-device-type = "ebs"
}
most_recent = true
owners = ["amazon"]
}
launch_block_device_mappings {
device_name = "/dev/xvda"
volume_size = 20
volume_type = "gp2"
delete_on_termination = "true"
}
launch_block_device_mappings {
device_name = "/dev/xvdf"
volume_size = 500
volume_type = "gp2"
delete_on_termination = true
encrypted = true
}
ami_regions = ["eu-central-1"]
run_tags {
Name = "packer-solr-something"
stack-name = "DevOps Tools"
}
communicator = "ssh"
ssh_pty = true
ssh_username = "ec2-user"
associate_public_ip_address = true
}
์ถ์ : ๋ฌธ์ ๋ฐ ๋ณ์ ์ฒ๋ฆฌ๊ฐ ์ ๊ณต๋ฉ๋๋ค!
์ด๊ฒ์ ์ข์ ์์์ ๋๋ค @azr , ๋น์ ๊ณผ ํ ๋๋ถ์ ๋๋ค.
WRT: JSON ์ง์ ์ค๋จ.
HCL/HCL2์ ๋ด์ฅ JSON ์ง์์ ํ์ฉํ๋ ค๋ ๊ฒ์ด ๋ง์ต๋๊น?
json2hcl ๋ณํ๊ธฐ๊ฐ ์์ต๋๊น? HCL๋ก ๋ณํํ๊ณ ์ถ์ Netflix OSS์์ ํจ์ปค ์คํฌ๋ฆฝํธ๋ฅผ ์ ๋ง๋ค์์ต๋๋ค.
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ ๋ ์ด ๋ณํ์ ํฅ๋ถํฉ๋๋ค!
@darkn3rd ์ฌ์ฉ์๊ฐ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ๋ฐ ํธ์ง ์์ ์ ๋๋ฌด ๋ง์ด ํ์ง ์๊ณ ๋ ๋น ๋ฅด๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํจ์ปค๋ณ ๋ณํ๊ธฐ๋ฅผ ์ํํ ๊ณํ์ ๋๋ค.
@mexisme HCL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ JSON์ ์์ ํ ์ดํดํ์ง๋ง ํ์์ด ์ฝ๊ฐ ๋ณ๊ฒฝ๋์ด ์ผ๋ถ ํธ์ง์ด ํ์ํฉ๋๋ค. ๋ณํ๊ธฐ๊ฐ ํ์ผ์ JSON(๋๋ ๋ฌด์ธ๊ฐ)์ผ๋ก ๋ณํํ๋๋ก ํ๋ ค๊ณ ํฉ๋๋ค.
โ ๏ธ ์ฒซ ๋ฒ์งธ ์์ ๊ฐ ๋ณ๊ฒฝ๋์ด ์ข ๋ ํ ๋ผํฌ๋ฐ์ฒ๋ผ ๋ณด์ ๋๋ค.
์์ hcl ํ์ผ
build {
sources = [
"source.amazon-ebs.first",
]
provisioner "shell" {
inline = [
"sleep 5"
]
}
post-processor "shell-local" {
inline = [
"sleep 5"
]
}
}
source "amazon-ebs" "first" {
// access_key = "{{user `aws_access_key`}}"
// secret_key = "{{user `aws_secret_key`}}"
ami_name = "hcl2-test"
region = "us-east-1"
instance_type = "t2.micro"
kms_key_id = "c729958f-c6ba-44cd-ab39-35ab68ce0a6c"
encrypt_boot = true
source_ami_filter {
filters {
virtualization-type = "hvm"
name = "amzn-ami-hvm-????.??.?.????????-x86_64-gp2"
root-device-type = "ebs"
}
most_recent = true
owners = ["amazon"]
}
launch_block_device_mappings {
device_name = "/dev/xvda"
volume_size = 20
volume_type = "gp2"
delete_on_termination = "true"
}
launch_block_device_mappings {
device_name = "/dev/xvdf"
volume_size = 500
volume_type = "gp2"
delete_on_termination = true
encrypted = true
}
ami_regions = ["eu-central-1"]
run_tags {
Name = "packer-solr-something"
stack-name = "DevOps Tools"
}
communicator = "ssh"
ssh_pty = true
ssh_username = "ec2-user"
associate_public_ip_address = true
}
์๋ก์ด ๋ฐ์ด๋๋ฆฌ๋ ์ฌ๊ธฐ ์์ ์ฐพ์ ์
์ด ๋ฌธ์ ๋ _30์ผ_ โณ ๋์ ํ์๋์์ผ๋ฏ๋ก ์ ๊ทธ๊ฒ ์ต๋๋ค. ์ด๋ฅผ ํตํด ์ ์ง ๊ด๋ฆฌ์๊ฐ ํ์ฑ ๋ฌธ์ ๋ฅผ ์ฐพ๊ณ ์ง์คํ ์ ์์ต๋๋ค.
์ด์ ์ ์ฌํ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ ์ถ๊ฐ ์กฐ์ฌ์ ํ์ํ ๋ชจ๋ ์ธ๋ถ ์ ๋ณด๋ฅผ ์บก์ฒํ ์ ์๋๋ก ์ ๋ฌธ์ ๋ฅผ ์ด๊ณ ๋ฌธ์ ํ ํ๋ฆฟ์ ์์ฑํ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฌ๋ฌ๋ถ, ์๋ ํ์ธ์ ! ์ข์ ์์์ด ์์ด์ ๐ ๐
๋๋ ์ต๊ทผ์ HCL2๋ฅผ ์ฎ๊ธฐ๋ ๋ฐ ์๋นํ ์๊ฐ์ด ๊ฑธ๋ ธ๊ณ ์ฌ๊ธฐ์์ ๊ตฌํํ๋ PR์ ์ฐพ์ ์ ์์ต๋๋ค: #8423. ์ผ๋ถ ๋ฐ์ด๋๋ฆฌ๋ ์ฌ๊ธฐ ์์ ์ฐพ์ ์
์ฐ๋ฆฌ๋ ๋ฒ๊ทธ๋ฅผ ํผํ๊ธฐ ์ํด ๋ค์ํ ์ฌ๋ก๋ฅผ ํ ์คํธํ๊ธฐ ์ํด ์ต์ ์ ๋คํ๊ณ ์์ง๋ง ๋ง์ ๋น๋/ํ๋ก๋น์ ๋/ํ์ฒ๋ฆฌ์๊ฐ ์๊ณ ์ฐ๋ฆฌ๋ ์๊ท๋ชจ ํ์ด๋ฏ๋ก ํ ์คํธ์ ๋ํ ์ด๋ค ๋์๋ ํ์ํฉ๋๋ค! ์ด๊ฒ์ ์๋ํ๊ณ ๋ฒ๊ทธ๋ฅผ ์ฐพ์ผ๋ฉด; HCL ๋ฒ๊ทธ์์ ์๋ฆฌ๋ ์ ๋ฌธ์ ๋ฅผ ์ฌ์ญ์์ค.
Packer๋ฅผ ์ค์ ํ๋ ํ์ฌ(์ด์ ) ๋ฐฉ๋ฒ์ ๊ณ์ ์๋ํ ๊ฒ์ด๋ฉฐ ํ์ฌ ์ด์ ๋ฒ์ ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ ์ ๋๋ก ํ์ ์ด ์๊ธธ ๋๊น์ง ๋น๋ถ๊ฐ ๋ ๋ฒ์ ์ ์์ ํ ์ง์ํ ๊ณํ์ ๋๋ค.
์์ hcl ํ์ผ
์ถ์ : ๋ฌธ์ ๋ฐ ๋ณ์ ์ฒ๋ฆฌ๊ฐ ์ ๊ณต๋ฉ๋๋ค!