Việc nối chuỗi trong Ansible cho phép bạn xây dựng các chuỗi động để sử dụng trong các tác vụ khác nhau, chẳng hạn như tạo tên file hoặc thư mục, tạo câu lệnh shell hoặc thực thi các module của Ansible. Khi bạn nối chuỗi trong Ansible, bạn có thể thêm bất kỳ ký tự hoặc giá trị nào vào chuỗi, bao gồm cả biến Ansible hoặc kết quả trả về từ các task Ansible trước đó. Việc nối chuỗi là một phần quan trọng trong việc xây dựng các playbook và role phức tạp trong Ansible.
Trong Ansible, để nối các chuỗi với nhau, chúng ta có thể sử dụng module join
hoặc kết hợp các biến với dấu +
.
Ví dụ 1:
- hosts: localhost
vars:
server_name: "web"
domain_name: "example.com"
tasks:
- name: Sử dụng module join
debug:
msg: "{{ ['Server', server_name, 'in', domain_name] | join(' ') }}"
- name: Kết hợp biến với dấu +
debug:
msg: "Server " + server_name + " in " + domain_name
Kết quả sẽ hiển thị như sau:
TASK [Sử dụng module join] ******************************************
ok: [localhost] => {
"msg": "Server web in example.com"
}
TASK [Kết hợp biến với dấu +] ****************************************
ok: [localhost] => {
"msg": "Server web in example.com"
}
Ví dụ 2:
Ngoài sử dụng phương thức join
, bạn cũng có thể sử dụng mỗi toán tử +
để nối chuỗi trong Ansible. Ví dụ:
- name: Example of concatenating strings using +
debug:
var: "my_string" + "_" + "suffix"
Kết quả sẽ là chuỗi my_string_suffix
.
Ví dụ 3:
Bạn cũng có thể sử dụng filter format
để nối chuỗi trong Ansible. Ví dụ:
- name: Example of concatenating strings using format filter
debug:
msg: "{{ 'my_string_{}_{}'.format('suffix1', 'suffix2') }}"
Kết quả sẽ là chuỗi my_string_suffix1_suffix2
.
Ví dụ 4:
Bạn có thể sử dụng biểu thức Jinja2 để chèn biến “ansible_url” vào trong câu lệnh của bạn. Ví dụ:
- name: Print Zabbix system information
debug:
msg: "{{ { 'database_name': zabbix_dbname, 'database_username': 'root', 'database_password': zabbix_dbpasswd, 'url': 'http://' + ansible_url + '/zabbix' } }}"
Trong đó, biến “ansible_url” được chèn vào trong chuỗi “http://” và “/zabbix” bằng cách sử dụng biểu thức nối chuỗi “+”. Khi Ansible thực hiện task này ta sử dụng biến ansible_host
để lấy địa chỉ IP của remote host trong Ansible. (trong trường hợp này là “192.168.13.208”).
Sau khi thực hiện task này, đầu ra sẽ chứa một đối tượng JSON với các thông tin sau:
{
"database_name": "tên cơ sở dữ liệu Zabbix",
"database_username": "root",
"database_password": "mật khẩu cơ sở dữ liệu Zabbix",
"url": "http://192.168.13.208/zabbix"
}
Bạn có thể thay đổi chuỗi “http://” và “/zabbix” tùy theo nhu
Như vậy có nhiều cách để nối chuỗi, tuy nhiên, join
là phương thức phổ biến và được khuyến khích sử dụng trong Ansible.