특히 각종 설치 작업 중에 수행해야만 하는 대화형 작업들이 있습니다. 이를 CHEF에서 자동화하기 위한 방법을 고민하였고, OS의 expect 명령어를 이용하여 구현하였습니다.

CHEF 자체 기능을 이용하고 싶었는데 아직 찾지 못했네요.

아래 예는 JBoss의 add-user.sh이라는 대화형 스크립트 수행을 CHEF로 자동화한 것입니다.

 

< 화면 >

# ./add-user.sh
 
What type of user do you wish to add?
 a) Management User (mgmt-users.properties)
 b) Application User (application-users.properties)
(a): a
 
Enter the details of the new user to add.
Realm (ManagementRealm) : [엔터]
Username : jbossadm
Password : admin
Re-enter Password : admin
About to add user 'jbossadm' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'jbossadm' to file '/jboss/6.1.0/standalone/configuration/mgmt-users.properties'
Added user 'jbossadm' to file '/jboss/6.1.0/domain/configuration/mgmt-users.properties'
Is this new user going to be used for one AS process to connect to another AS process?
e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.
yes/no? yes

 

< recipe >

  bash "add-user.sh" do
    user "#{node[:JBOSS][:USER][:NAME]}"
    cwd "#{inst_home}"
    code << -EOH
    /usr/bin/expect -c 'spawn ./add-user.sh
    expect "(a): "
    send "a\n"
    expect "Realm (ManagementRealm) : "
    send "\n"
    expect "Username : "
    send "jbossadm\n"
    expect "Password : "
    send "admin\n"
    expect "Re-enter Password : "
    send "admin\n"
    expect "Is this correct yes/no? "
    send "yes\n"
    expect "yes/no? "
    send "yes\n"
    expect eof'
    EOH
  end

 

사실 CHEF 주제로 이야기를 했지만, 그냥 OS에서도 이용 가능하지요.