クラウドフォーメーションを使用して環境をセットアップするとき、VagrantボックスとAWSでプレイブックを実行する必要があります。
Vagrantファイルではansible-localを使用し、すべてが正常に動作します
name: Setup Unified Catalog Webserver
hosts: 127.0.0.1
connection: local
become: yes
become_user: root
roles: generic
しかし、AWSでインスタンスを作成すると、ansibleプレイブックがエラーで失敗します。Sudo: sorry, you must have a tty to run Sudo
これは、ルートとして実行され、ttyがないために発生します。しかし、/etc/sudoers
を許可するように!requiretty
を変更せずに修正する方法はわかりません
Ansible.cfgまたはクラウドフォーメーションテンプレートで設定できるフラグはありますか?
"#!/bin/bash\n", "\n", "
echo 'Installing Git'\n","
yum --nogpgcheck -y install git ansible htop nano wget\n",
"wget https://s3.eu-central-1.amazonaws.com/XXX -O /root/.ssh/id_rsa\n",
"chmod 600 /root/.ssh/id_rsa\n",
"ssh-keyscan 172.31.7.235 >> /root/.ssh/known_hosts\n",
"git clone [email protected]:something/repo.git /root/repo\n",
"ansible-playbook /root/env/ansible/test.yml\n
私は自分のために次の解決策を見つけました:
1。 _/etc/sudoers
_のrequirettyをsed
runプレイブックで変更し、元に戻します。
_ "#!/bin/bash\n", "\n", "
echo 'Installing Git'\n","
yum --nogpgcheck -y install git ansible htop nano wget\n",
"wget https://s3.eu-central-1.amazonaws.com/xx/ansible -O /root/.ssh/id_rsa\n",
"chmod 600 /root/.ssh/id_rsa\n",
"ssh-keyscan 172.31.9.231 >> /root/.ssh/known_hosts\n",
"git clone [email protected]:somerepo/dev.git /root/dev\n",
"sed -i 's/Defaults requiretty/Defaults !requiretty/g' /etc/sudoers\n",
"\n",
"ansible-playbook /root/dev/env/ansible/uk.yml\n",
"\n",
"sed -i 's/Defaults !requiretty/Defaults requiretty/g' /etc/sudoers\n"
_
または2. ansibleプレイブックで変数を指定します。
_ - name: Setup
hosts: 127.0.0.1
connection: local
Sudo: {{ require_Sudo }}
roles:
- generic
_
AWSクラウド形成テンプレートで実行すると、
_ "ansible-playbook -e require_Sudo=False /root/dev/env/ansible/uk.yml\n"
_
そしてansible.cfgのVagrantの場合、それを指定できます
_ require_Sudo=True
_
また、CFテンプレートでは、実行中のユーザーとパス変数を特定する場合があります
ansible-playbook -e$(id -u |egrep '^0$' > /dev/null && require_Sudo=False || require_Sudo=True; echo "require_Sudo=$require_Sudo") /apps/ansible/uk.yml
transport = paramiko
でansible.cfg
構成を設定することで、これを修正できました。