Ansible — Получить значение пары ключей из файла на удаленном компьютере и заполнить переменную

#file #dictionary #ansible #cat

#файл #словарь #ansible #cat

Вопрос:

Попытка извлечь значение пары ключей из файла .yaml и заполнить его в переменную:

/etc/puppetlabs/puppet/csr_attributes.yaml

Пример файла:

 extension_requests:
  pp_service: 'private'
  pp_instance_id:  'blah'
  pp_image_name:  'RedHat 7.7 Base'
  pp_project:  'TBT'
  pp_application:  'xxxxx'
  pp_environment: 'dev'
  pp_role: 'base_stuff'
  pp_software_version: '2020-04-30'
  pp_provisioner: 'Ansible Tower'
  pp_datacenter: 'DC2'
  pp_zone: 'C6600_NPE_RS'
  pp_cloudplatform: 'esx'
  pp_apptier: 'dev'
  pp_securitypolicy: 'Stuff'
  1.3.6.1.4.1.34380.1.2.1:  ''
  1.3.6.1.4.1.34380.1.2.2:  '8'
  1.3.6.1.4.1.34380.1.2.3:  '77504'
  

Я могу сделать это через номер строки, но мне нужно, чтобы он был более динамичным, поскольку строки отличаются от сервера к серверу:

Текущий код отдельной строки:

 - name: cat file
  shell: cat /etc/puppetlabs/puppet/csr_attributes.yaml
  register: cat_content_file

- set_fact:
    pp_service: "pp_service: {{ cat_content_file.stdout_lines[2].split()[1] }}"
    pp_application: "pp_application: {{ cat_content_file.stdout_lines[6].split()[1] }}"

- debug:
    msg:
    - "{{ pp_service }}"
    - "{{ pp_application }}"
  

Я думаю, мне нужно преобразовать выходные данные в dict, но я полностью зациклен на том, как это сделать.
Любой совет был бы оценен.

Ответ №1:

Вы могли бы использовать комбинацию file и from_yaml:

   - set_fact:
      your_variable: "{{ lookup('file','/etc/puppetlabs/puppet/csr_attributes.yaml') | from_yaml }}"
  - debug: var=your_variable.extension_requests.pp_service