在这里,我尝试测试我的 bash 脚本,它提示了四次。
#!/bin/bash
date >/opt/prompt.txt
read -p "enter one: " one
echo $one
echo $one >>/opt/prompt.txt
read -p "enter two: " two
echo $two
echo $two >>/opt/prompt.txt
read -p "enter three: " three
echo $three
echo $three >>/opt/prompt.txt
read -p "enter password: " password
echo $password
echo $password >>/opt/prompt.txt
对于这个脚本,我编写了下面的代码,并且运行良好
- hosts: "{{ hosts }}"
tasks:
- name: Test Script
expect:
command: sc.sh
responses:
enter one: 'one'
enter two: 'two'
enter three: 'three'
enter password: 'pass'
echo: yes
但如果我做同样的事情mysql_secure_installation
命令它不工作
- hosts: "{{ hosts }}"
tasks:
- name: mysql_secure_installation Command Test
expect:
command: mysql_secure_installation
responses:
'Enter current password for root (enter for none):': "\n"
'Set root password? [Y/n]:': 'y'
'New password:': '123456'
'Re-enter new password:': '123456'
'Remove anonymous users? [Y/n]:': 'y'
'Disallow root login remotely? [Y/n]:': 'y'
'Remove test database and access to it? [Y/n]:': 'y'
'Reload privilege tables now? [Y/n]:': 'y'
echo: yes
它的引用在这里:
PLAY [S1] **********************************************************************
TASK [setup] *******************************************************************
ok: [S1]
TASK [mysql_secure_installation Command Test] **********************************
fatal: [S1]: FAILED! => {"changed": true, "cmd": "mysql_secure_installation", "delta": "0:00:30.139266", "end": "2016-07-15 15:36:32.549415", "failed": true, "rc": 1, "start": "2016-07-15 15:36:02.410149", "stdout": "\r\n\r\n\r\n\r\nNOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL\r\n SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!\r\n\r\n\r\nIn order to log into MySQL to secure it, we'll need the current\r\npassword for the root user. If you've just installed MySQL, and\r\nyou haven't set the root password yet, the password will be blank,\r\nso you should just press enter here.\r\n\r\nEnter current password for root (enter for none): ", "stdout_lines": ["", "", "", "", "NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL", " SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!", "", "", "In order to log into MySQL to secure it, we'll need the current", "password for the root user. If you've just installed MySQL, and", "you haven't set the root password yet, the password will be blank,", "so you should just press enter here.", "", "Enter current password for root (enter for none): "]}
NO MORE HOSTS LEFT *************************************************************
to retry, use: --limit @/home/jackson/AnsibleWorkSpace/AnsibleTest/example1.retry
PLAY RECAP *********************************************************************
S1 : ok=1 changed=0 unreachable=0 failed=1
我也尝试过空白''
代替"\n"
对于第一个答案,但它也不起作用。我也访问过 Ansibleexpect http://docs.ansible.com/ansible/expect_module.htmldoc,但它们仅显示非常简单的示例和解释。我还尝试对多个不同的响应进行正则表达式匹配,但它也不起作用。
请不要推荐我使用Ansible的mysql模块,因为我在这里的目的是学习这个模块以供将来使用。