How to pass variables to scripts?

QuestionsQuestions8 SkillsAnsible Script ModuleSep, 19 2024
01.7k

Passing Variables to Scripts in Ansible

In Ansible, you can pass variables to scripts in various ways, allowing you to dynamically customize the script's behavior and input data. Here are a few common approaches:

Using Ansible Variables

One of the most straightforward ways to pass variables to a script is by leveraging Ansible's built-in variables. You can define variables in your Ansible playbook or inventory, and then reference them in your script using the appropriate syntax.

Here's an example:

# Playbook
- hosts: all
  vars:
    message: "Hello, Ansible!"
  tasks:
    - name: Run a script with a variable
      script: my_script.sh
      args:
        executable: /bin/bash
        chdir: /path/to/script/directory
        creates: /path/to/output/file.txt
        stdin: "{{ message }}"

In the above example, the message variable is defined in the playbook and then passed to the my_script.sh script using the stdin argument.

Inside the script, you can access the variable using the appropriate shell syntax, such as $1 or ${1}.

# my_script.sh
#!/bin/bash
echo "Received message: $1"

This approach is useful when you need to pass a single value or a small set of variables to your script.

Using Ansible Facts

Ansible also provides access to a wide range of system information through "facts." These facts can be used as variables in your playbooks and scripts. For example, you can use the ansible_hostname fact to get the hostname of the target system.

# Playbook
- hosts: all
  tasks:
    - name: Run a script with a fact
      script: my_script.sh
      args:
        executable: /bin/bash
        chdir: /path/to/script/directory
        creates: /path/to/output/file.txt
        stdin: "{{ ansible_hostname }}"

In the script, you can access the fact using the same syntax as with regular variables:

# my_script.sh
#!/bin/bash
echo "Running on host: $1"

Using Extra Variables

Ansible also allows you to pass extra variables directly from the command line when running a playbook. This is useful when you need to provide dynamic input or override variables defined in the playbook.

ansible-playbook my_playbook.yml -e "message='Hello, world!'"

In the playbook, you can then use the message variable in your script task:

# Playbook
- hosts: all
  tasks:
    - name: Run a script with an extra variable
      script: my_script.sh
      args:
        executable: /bin/bash
        chdir: /path/to/script/directory
        creates: /path/to/output/file.txt
        stdin: "{{ message }}"

And in the script:

# my_script.sh
#!/bin/bash
echo "Received message: $1"

This approach is handy when you need to pass dynamic or user-provided input to your scripts.

Using Registered Variables

Another way to pass variables to scripts is by using registered variables. Ansible allows you to capture the output of a task and store it in a variable, which can then be used in subsequent tasks, including script executions.

# Playbook
- hosts: all
  tasks:
    - name: Run a command and capture the output
      command: hostname
      register: host_info

    - name: Run a script with a registered variable
      script: my_script.sh
      args:
        executable: /bin/bash
        chdir: /path/to/script/directory
        creates: /path/to/output/file.txt
        stdin: "{{ host_info.stdout }}"

In the script, you can access the registered variable's value using the stdout attribute:

# my_script.sh
#!/bin/bash
echo "Host name: $1"

This approach is useful when you need to pass the output of one Ansible task as input to a script.

Using Mermaid Diagrams

Here's a Mermaid diagram that illustrates the different ways to pass variables to scripts in Ansible:

graph TD A[Ansible Playbook] --> B(Ansible Variables) A --> C(Ansible Facts) A --> D(Extra Variables) A --> E(Registered Variables) B --> F[Script] C --> F D --> F E --> F

This diagram shows that Ansible variables, facts, extra variables, and registered variables can all be used to pass data to scripts executed within an Ansible playbook.

By leveraging these different methods, you can effectively pass the necessary information to your scripts, allowing them to dynamically adapt to the specific context and requirements of your Ansible-managed infrastructure.

0 Comments

no data
Be the first to share your comment!