Re: [ansible-project] How can I pass variables to command module's argv parameter in Ansible?

2023-03-02 Thread tariver 16
I've opened an issue at Ansible GitHub and got explained how argv parameter 
works.
https://github.com/ansible/ansible/issues/79967

Summary:
This happens because of how module and redis-cli utility work with 
arguments.
When passing arguments this modules delimits them with single quotation 
marks, so
- name: Create Redis cluster
  ansible.builtin.command:
argv:
  - /usr/bin/redis-cli
  - "--user {{ redis_admin_user }}"
  - "--pass {{ redis_admin_password }}"
  - "--cluster create {{ redis_cluster_members }}"
  - "--cluster-replicas {{ redis_cluster_replicas }}"
  - --cluster-yes

is passed as (mind the quotation marks)
/usr/bin/redis-cli '--user admin' '--pass mypass' '--cluster create 
10.226.2.194:6379 10.226.2.196:6379 10.226.2.195:6379' '--cluster-replicas 
1' '--cluster-yes'

If you enter this command directly into command line you'll get the same 
error - "Unrecognized option or bad number of args for: '--user admin'".

This is because, quoting redis-cli documentation 
(https://redis.io/docs/ui/cli/#string-quoting-and-escaping),
> When redis-cli parses a command, whitespace characters automatically 
delimit the arguments. 

So the correct way to pass this command will be (mind the quotation marks)
/usr/bin/redis-cli '--user' 'admin' '--pass' 'mypass' '--cluster' 'create ' 
'10.226.2.194:6379' '10.226.2.196:6379' '10.226.2.195:6379' 
'--cluster-replicas' '1' '--cluster-yes' 

So I did a workaround constructing the command as a variable in 
vars/main.yml and then passing it to the module (I'm going to post it on 
stackoverflow).
четверг, 9 февраля 2023 г. в 17:06:24 UTC+3, Rowe, Walter P. (Fed): 

> I had a problem similar to this once. Your redis command might be getting 
> your cluster members as a single string vs separate ip:port args.
>
>
> Walter
> --
> Walter Rowe, Division Chief
> Infrastructure Services, OISM
> Mobile: 202.355.4123 <(202)%20355-4123>
>
> On Feb 9, 2023, at 8:57 AM, tariver 16  wrote:
>
> Thank you for your reply
>
> Changed the shell script to the following:
>
> #!/bin/sh
> ansible-playbook /etc/ansible/playbook-redis.yml -vv \
> --extra-vars "redis_admin_user=admin redis_admin_password=mypass" \
> --extra-vars "redis_cluster_members='10.226.2.194:6379 10.226.2.196:6379 
> 10.226.2.195:6379'" \
> --extra-vars "redis_cluster_replicas=1"
>
> Got the same error "Unrecognized option or bad number of args for: 
> '--cluster create'"
> четверг, 9 февраля 2023 г. в 16:00:41 UTC+3, walte...@nist.gov: 
>
>> #!/bin/sh ansible-playbook /etc/ansible/playbook-redis.yml -vv \
>> --extra-vars*=*'redis_admin_user=admin redis_admin_password=mypass' \
>> --extra-vars*=*'redis_cluster_members="10.226.2.194:6379 
>> 
>>  10.226.2.196:6379 
>> 
>>  10.226.2.195:6379 
>> "
>>  
>> redis_cluster_replicas=1'
>>
>>
>> Leave off the = and use a space for --extra_vars. 
>>
>>   -e EXTRA_VARS, --extra-vars EXTRA_VARS
>> set additional variables as key=value or 
>> YAML/JSON, if filename prepend with @
>>
>> Walter
>> --
>> Walter Rowe, Division Chief
>> Infrastructure Services, OISM
>> Mobile: 202.355.4123 <(202)%20355-4123>
>>
>> On Feb 9, 2023, at 7:01 AM, tariver 16  wrote:
>>
>> Greeting!
>> Asked it on stackoverflow 
>> ,
>>  
>> but didn't get an answer, so I'm trying my luck here.
>>
>> A bit condensed version:
>> I'm 

Re: [ansible-project] How can I pass variables to command module's argv parameter in Ansible?

2023-02-09 Thread 'Rowe, Walter P. (Fed)' via Ansible Project
I had a problem similar to this once. Your redis command might be getting your 
cluster members as a single string vs separate ip:port args.

Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123

On Feb 9, 2023, at 8:57 AM, tariver 16  wrote:

Thank you for your reply

Changed the shell script to the following:

#!/bin/sh
ansible-playbook /etc/ansible/playbook-redis.yml -vv \
--extra-vars "redis_admin_user=admin redis_admin_password=mypass" \
--extra-vars "redis_cluster_members='10.226.2.194:6379 10.226.2.196:6379 
10.226.2.195:6379'" \
--extra-vars "redis_cluster_replicas=1"

Got the same error "Unrecognized option or bad number of args for: '--cluster 
create'"
четверг, 9 февраля 2023 г. в 16:00:41 UTC+3, 
walte...@nist.gov:
#!/bin/sh ansible-playbook /etc/ansible/playbook-redis.yml -vv \
--extra-vars='redis_admin_user=admin redis_admin_password=mypass' \
--extra-vars='redis_cluster_members="10.226.2.194:6379
 
10.226.2.196:6379
 
10.226.2.195:6379"
 redis_cluster_replicas=1'

Leave off the = and use a space for --extra_vars.

  -e EXTRA_VARS, --extra-vars EXTRA_VARS
set additional variables as key=value or YAML/JSON, if 
filename prepend with @

Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123

On Feb 9, 2023, at 7:01 AM, tariver 16  wrote:

Greeting!
Asked it on 
stackoverflow,
 but didn't get an answer, so I'm trying my luck here.

A bit condensed version:
I'm trying to write a role that creates a Redis cluster. At some point I must 
execute redis-cli binary with some parameters:

/usr/bin/redis-cli --user admin --pass mypass --cluster create 
10.226.2.194:6379
 
10.226.2.196:6379
 
10.226.2.195:6379
 --cluster-replicas 1 --cluster-yes

I pass all the required parameters as extra variables when I call the playbook 
with a shell script:

#!/bin/sh ansible-playbook /etc/ansible/playbook-redis.yml -vv \
--extra-vars='redis_admin_user=admin redis_admin_password=mypass' \

Re: [ansible-project] How can I pass variables to command module's argv parameter in Ansible?

2023-02-09 Thread tariver 16
Thank you for your reply

Changed the shell script to the following:

#!/bin/sh
ansible-playbook /etc/ansible/playbook-redis.yml -vv \
--extra-vars "redis_admin_user=admin redis_admin_password=mypass" \
--extra-vars "redis_cluster_members='10.226.2.194:6379 10.226.2.196:6379 
10.226.2.195:6379'" \
--extra-vars "redis_cluster_replicas=1"

Got the same error "Unrecognized option or bad number of args for: 
'--cluster create'"
четверг, 9 февраля 2023 г. в 16:00:41 UTC+3, walte...@nist.gov: 

> #!/bin/sh ansible-playbook /etc/ansible/playbook-redis.yml -vv \
> --extra-vars*=*'redis_admin_user=admin redis_admin_password=mypass' \
> --extra-vars*=*'redis_cluster_members="10.226.2.194:6379 10.226.2.196:6379 
> 10.226.2.195:6379" redis_cluster_replicas=1'
>
>
> Leave off the = and use a space for --extra_vars. 
>
>   -e EXTRA_VARS, --extra-vars EXTRA_VARS
>
> set additional variables as key=value or 
> YAML/JSON, if filename prepend with @
>
> Walter
> --
> Walter Rowe, Division Chief
> Infrastructure Services, OISM
> Mobile: 202.355.4123 <(202)%20355-4123>
>
> On Feb 9, 2023, at 7:01 AM, tariver 16  wrote:
>
> Greeting!
> Asked it on stackoverflow 
> ,
>  
> but didn't get an answer, so I'm trying my luck here.
>
> A bit condensed version:
> I'm trying to write a role that creates a Redis cluster. At some point I 
> must execute redis-cli binary with some parameters:
>
> /usr/bin/redis-cli --user admin --pass mypass --cluster create 
> 10.226.2.194:6379 10.226.2.196:6379 10.226.2.195:6379 --cluster-replicas 
> 1 --cluster-yes 
>
> I pass all the required parameters as extra variables when I call the 
> playbook with a shell script:
>
> #!/bin/sh ansible-playbook /etc/ansible/playbook-redis.yml -vv \
> --extra-vars='redis_admin_user=admin redis_admin_password=mypass' \
> --extra-vars='redis_cluster_members="10.226.2.194:6379 10.226.2.196:6379 
> 10.226.2.195:6379" redis_cluster_replicas=1'
>
> At first I tried the following:
>
> - name: Create Redis cluster
>   ansible.builtin.command:
> argv:
>   - /usr/bin/redis-cli
>   - "--user {{ redis_admin_user }}"
>   - "--pass {{ redis_admin_password }}"
>   - "--cluster create {{ redis_cluster_members }}"
>   - "--cluster-replicas {{ redis_cluster_replicas }}"
>   - --cluster-yes
>
> And got error "Unrecognized option or bad number of args for: '--user 
> admin'" which is a redis-cli error.
>
> After some experimenting I found out that if I pass the variables in a 
> separate line some of them work. So this task works and returns info about 
> server.
>
> - name: Get server info
>   ansible.builtin.command:
> argv:
>   - /usr/bin/redis-cli
>   - --user
>   - "{{ redis_admin_user }}"
>   - --pass
>   - "{{ redis_admin_password }}"
>   - info 
>
> So the username and password are recognized be redis-cli, but, 
> unfortunately not the "redis_cluster_members". The following task:
>
> - name: Create Redis cluster
>   ansible.builtin.command:
> argv:
>   - /usr/bin/redis-cli
>   - --user
>   - "{{ redis_admin_user }}"
>   - --pass
>   - "{{ redis_admin_password }}"
>   - --cluster create
>   - "{{ redis_cluster_members }}"
>   - --cluster-replicas
>   - "{{ redis_cluster_replicas }}"
>   - --cluster-yes 
>
> returns error "Unrecognized option or bad number of args for: '--cluster 
> create'"
>
> I wonder if I'm missing some syntax error or misread the documentation and 
> trying to use argv not the way it's supposed to be used?
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to ansible-proje...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/ansible-project/18d93d65-bd16-45d1-a813-9be828ffed68n%40googlegroups.com
>  
> 
> .
>
>
>

-- 
You received this message because you are subscribed to the 

Re: [ansible-project] How can I pass variables to command module's argv parameter in Ansible?

2023-02-09 Thread 'Rowe, Walter P. (Fed)' via Ansible Project
#!/bin/sh ansible-playbook /etc/ansible/playbook-redis.yml -vv \
--extra-vars='redis_admin_user=admin redis_admin_password=mypass' \
--extra-vars='redis_cluster_members="10.226.2.194:6379 10.226.2.196:6379 
10.226.2.195:6379" redis_cluster_replicas=1'

Leave off the = and use a space for --extra_vars.


  -e EXTRA_VARS, --extra-vars EXTRA_VARS

set additional variables as key=value or YAML/JSON, if 
filename prepend with @

Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123

On Feb 9, 2023, at 7:01 AM, tariver 16  wrote:

Greeting!
Asked it on 
stackoverflow,
 but didn't get an answer, so I'm trying my luck here.

A bit condensed version:
I'm trying to write a role that creates a Redis cluster. At some point I must 
execute redis-cli binary with some parameters:

/usr/bin/redis-cli --user admin --pass mypass --cluster create 
10.226.2.194:6379 10.226.2.196:6379 10.226.2.195:6379 --cluster-replicas 1 
--cluster-yes

I pass all the required parameters as extra variables when I call the playbook 
with a shell script:

#!/bin/sh ansible-playbook /etc/ansible/playbook-redis.yml -vv \
--extra-vars='redis_admin_user=admin redis_admin_password=mypass' \
--extra-vars='redis_cluster_members="10.226.2.194:6379 10.226.2.196:6379 
10.226.2.195:6379" redis_cluster_replicas=1'

At first I tried the following:

- name: Create Redis cluster
  ansible.builtin.command:
argv:
  - /usr/bin/redis-cli
  - "--user {{ redis_admin_user }}"
  - "--pass {{ redis_admin_password }}"
  - "--cluster create {{ redis_cluster_members }}"
  - "--cluster-replicas {{ redis_cluster_replicas }}"
  - --cluster-yes

And got error "Unrecognized option or bad number of args for: '--user admin'" 
which is a redis-cli error.

After some experimenting I found out that if I pass the variables in a separate 
line some of them work. So this task works and returns info about server.

- name: Get server info
  ansible.builtin.command:
argv:
  - /usr/bin/redis-cli
  - --user
  - "{{ redis_admin_user }}"
  - --pass
  - "{{ redis_admin_password }}"
  - info

So the username and password are recognized be redis-cli, but, unfortunately 
not the "redis_cluster_members". The following task:

- name: Create Redis cluster
  ansible.builtin.command:
argv:
  - /usr/bin/redis-cli
  - --user
  - "{{ redis_admin_user }}"
  - --pass
  - "{{ redis_admin_password }}"
  - --cluster create
  - "{{ redis_cluster_members }}"
  - --cluster-replicas
  - "{{ redis_cluster_replicas }}"
  - --cluster-yes

returns error "Unrecognized option or bad number of args for: '--cluster 
create'"

I wonder if I'm missing some syntax error or misread the documentation and 
trying to use argv not the way it's supposed to be used?

--
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to 
ansible-project+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/18d93d65-bd16-45d1-a813-9be828ffed68n%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/91673BEE-1CF8-40AB-83DB-DD140DE43C4B%40nist.gov.