Task to input fields into a interactive database script.

14 views
Skip to first unread message

jonin

unread,
Aug 24, 2020, 12:30:44 PM8/24/20
to Ansible Development
Hi, 

I am looking to automate this task within ansible and have no idea really how to do this.

I run the set up script manually on the host(s) like this:

I call the "setup" script below with npm run options:

npm run setup

The script then prompts for my user input to provide the following details:

  • Postgresql Superuser (for database creation) [default: postgres]:postgres
  • New Database Username (for readonly access) [default: postcodesio]:postcodesio
  • Password for new user [default: secret]:secret
  • Postgresql Host [default: localhost]:localhost
  • Database Name [default: postcodesiodb]:postcodesiodb
  • Postgresql Port: [default: 5432]:5432
Once these have been provided the script completes. Pleas help in advising how I can go about automating this in ansible.

Thanks

Karol Czeryna

unread,
Aug 24, 2020, 12:34:53 PM8/24/20
to jonin, Ansible Development
Hi,

I think you can use https://docs.ansible.com/ansible/latest/modules/expect_module.html

Best,
Karol
> --
> You received this message because you are subscribed to the Google Groups "Ansible Development" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to ansible-deve...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-devel/07433108-d97b-40e6-b86d-be046df06346n%40googlegroups.com.

Sebastian Collins

unread,
Aug 25, 2020, 5:52:44 PM8/25/20
to Karol Czeryna, Ansible Development
Thanks Karol,

I've given that a go. Initially wasn't working because I didn't have the pexpect module installed but I think I have that sorted with the following dependencies installed now: epel, pip and pexpect > version 3.3.

I have tried running this task but it just hangs for the entire timeout duration I have set.

  - nameSetup postcodesiodb
      expect:
        echoyes
        chdir"/apps/was/postcodes.io"
        commandnpm run setup
        timeout"10"
        responses:
          Question
            - Postgresql Superuser (for database creation) [default':' postgres]"postgres"
            - New Database Username (for readonly access) [default':' postcodesio]"postcodesio"
            - Password for new user [default':' secret]"secret"
            - Postgresql Host [default':' localhost]"localhost"
            - Database Name [default':' postcodesiodb]"postcodesiodb"
            - Postgresql Port [default':' 5432]"5432" 
      tags:
        - setup
        - install  
 
I have also tried with no space after the final colon but that then changes the font to all orange which doesn't seem right. Regardless, i tried it but the error was still exactly the same as below:

  
Fatal: [hostname]: FAILED! => {"changed": true, "cmd": "npm run setup", "delta": "0:02:00.145566", "end": "2020-08-25 21:33:22.107526", "msg": "command exceeded timeout", "rc": null, "start": "2020-08-25 21:31:21.961960",
...
 "Postgresql Superuser (for database creation) [default: postgres]:"]}

This is the only error logging I have but it's failed at the first input I am attempting to populate here the postgres Super user. Any ideas how I need to pass in these answers and or variables if I don't want to hard code? Currently it looks like it is picking up a corrupt / blank value as shown by those chatacters in the green section below.
"Postgresql Superuser (for database creation) [default: postgres]:"]}

The wording / syntax of the questions when the script is called is exactly like this:
Postgresql Superuser (for database creation) [default: postgres]:

Any ideas much appreciated.

Regards,

S


jonin

unread,
Aug 26, 2020, 12:20:41 PM8/26/20
to Ansible Development
Is it just a question of how I frame my inputs or am I missing the point here completely?

I've tried the likes of below but still the same error

 - name: Setup postcodesiodb
      expect:
        echo: yes
        chdir: "/apps/was/postcodes.io"
        command: npm run setup
        timeout: "10"
        responses:
          Question: 
            - '[ postgres ]'
            - '[ postcodesio ]'
            - '[ secret ]'
            - '[ localhost ]'
            - '[ postcodesiodb ]'
            - '[ 5432 ]'
      tags:
        - setup
        - install
        - test   


Error:  "Postgresql Superuser (for database creation) [default: postgres]:"]}

I am struggling to find any other working solutions for ansible to manage an interactive script such as this so any help much appreciated.

Reply all
Reply to author
Forward
0 new messages