출처: http://luna1x.wordpress.com/tag/knife/

Chef 서버가 설치된 머신의 IP가 변경 되었을때 같이 변경해주어야 하는것

AWS에서 학습용으로 CentOS에 Chef서버를 설치한 후, 유지비가 아쉬어서 인스턴스를 꺼두었다가 다시 공부하기 위해 켰습니다. Chef서버가 설치된 인스턴스의 IP는 기존과 달라졌고, 기존에 잘 작동하던 Chef의 knife명령어가 작동을 하지 않게 되었습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@ip-172-31-21-96 chef-repo]# knife client list
ERROR: Server returned error for https://54.238.235.209/clients, retrying 1/5 in 3s
ERROR: Server returned error for https://54.238.235.209/clients, retrying 2/5 in 7s
ERROR: Server returned error for https://54.238.235.209/clients, retrying 3/5 in 11s
ERROR: Server returned error for https://54.238.235.209/clients, retrying 4/5 in 19s
ERROR: Server returned error for https://54.238.235.209/clients, retrying 5/5 in 63s
ERROR: bad gateway
Response: <html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.2.3</center>
</body>
</html>

몇시간의 삽질끝에 위 에러는 knife.rb를 수정하면서 해결했습니다.

  • $vi /root/chef-repo/.chef/knife.rb
  • chef_server_url  항목을 변경된 IP로 수정

그 후 테스트로 knife ec2 server create를 해보니 cookbook syncing 하는 단계에서 문제가 있내요.

1
2
3
4
5
6
7
8
9
10
11
12
ec2-54-238-153-102.ap-northeast-1.compute.amazonaws.com Synchronizing Cookbooks:
ec2-54-238-153-102.ap-northeast-1.compute.amazonaws.com
ec2-54-238-153-102.ap-northeast-1.compute.amazonaws.com ================================================================================
ec2-54-238-153-102.ap-northeast-1.compute.amazonaws.com Error Syncing Cookbooks:
ec2-54-238-153-102.ap-northeast-1.compute.amazonaws.com ================================================================================
ec2-54-238-153-102.ap-northeast-1.compute.amazonaws.com
ec2-54-238-153-102.ap-northeast-1.compute.amazonaws.com
ec2-54-238-153-102.ap-northeast-1.compute.amazonaws.com Networking Error:
ec2-54-238-153-102.ap-northeast-1.compute.amazonaws.com -----------------
ec2-54-238-153-102.ap-northeast-1.compute.amazonaws.com
ec2-54-238-153-102.ap-northeast-1.compute.amazonaws.com Your chef_server_url may be misconfigured, or the network could be down.

결국 또 몇시간의 삽질끝에 chef-pedant와 erchef의 설정을 수정해서 해결했습니다.

  • $vi /var/opt/chef-server/chef-pedant/etc/pedant_config.rb
  • chef_server 항목을 변경된 IP로 수정
  • $vi /var/opt/chef-server/erchef/etc/app.config
  • {s3_url, 항목을 변경된 IP로 수정
  • $chef-server-ctl restart

결론은 Chef서버 IP가 바뀌면 이것저것 귀찮게 수정해줘야 하는게 있으니 되도록 Chef서버 IP는 바꾸지 맙시다. ㅜㅜ

————————————————내용추가————————————————

결론을 위와 같이 내리려다가 연습용 인스턴스를 계속 켜두기에는 돈이 아까워서, 서버가 실행될때 현재IP로 위 내용을 수정하는 스크립트를 만들었습니다.


결론을 위와 같이 내리려다가 연습용 인스턴스를 계속 켜두기에는 돈이 아까워서, 서버가 실행될때 현재IP로 위 내용을 수정하는 스크립트를 만들었습니다.

startup.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/sh
 
knife_replacefrom="chef_server_url.*"
knife_replaceto="chef_server_url ""\'https:\/\/"`hostname -f`":443\'"
sed -i "s/$knife_replacefrom/$knife_replaceto/g" /root/chef-repo/.chef/knife.rb
 
pedant_replacefrom="chef_server.*"
pedant_replaceto="chef_server ""\"https:\/\/"`hostname -f`"\""
sed -i "s/$pedant_replacefrom/$pedant_replaceto/g" /var/opt/chef-server/chef-pedant/etc/pedant_config.rb
 
erchef_replacefrom="{s3_url,.*"
erchef_replaceto="{s3_url, ""\"https:\/\/"`hostname -f`"\"},"
sed -i "s/$erchef_replacefrom/$erchef_replaceto/g" /var/opt/chef-server/erchef/etc/app.config
 
/opt/chef-server/bin/chef-server-ctl restart

startup.sh를 실행하도록 /etc/rc.local을 수정해주세요.

ps : AWS에서 Chef 서버는 최소 m1.small이상에서 돌려 주세요. t1.micro는 사양 문제로 알수없는 오류가 많이 납니다.


'나만의 Cloud' 카테고리의 다른 글

[chef] chef 참고자료  (0) 2014.04.28
[git] git란?  (0) 2014.04.23
[chef] knife를 이용한 ssh 명령어 내리기  (0) 2014.02.04
[Razor] puppetlabs razor provisioning  (0) 2013.12.23
[펌]CloudStack 시스템 VM  (0) 2013.10.24
Posted by 뭉탁거림
,