Some additional info. With the above play, i get the following error:










*fatal: [dns1 -> localhost]: FAILED! => changed=true  cmd: 
/etc/ansible/playbooks/files/renew_le_domain.pl mydomain.com  delta: 
'0:00:00.019169'  end: '2024-03-06 17:22:01.951852'  msg: non-zero return 
code  rc: 25  start: '2024-03-06 17:22:01.932683'  stderr: done  
stderr_lines: <omitted>  stdout: ''  stdout_lines: <omitted>*

The command " /etc/ansible/playbooks/files/renew_le_domain.pl mydomain.com" 
appears correct (where " mydomain.com" is an argument that the Perl script 
expects). The script has to run on the command node, and must generate a 
file file on the command node. When I run "last" on dns1, it looks like the 
ansible user has tried to connect to it.

On Wednesday, March 6, 2024 at 3:33:00 PM UTC-5 Dimitri Yioulos wrote:

> Ah, I thought I was done with this. But,now, running the Perl script 
> failed. I guess the script module only works with bash scripts? So, that's 
> probably out. Among other things, I tried this, but it didn't work:
>
>   tasks:
>
>     - name: Run scripts to create Letsencrypt keys
>       local_action: ansible.builtin.shell /etc/ansible/playbooks/files/
> renew_le_domain.pl {{ domain }}
>
>     ~
>
> This is the last piece I need to make this work completely.
>
> On Wednesday, March 6, 2024 at 11:52:00 AM UTC-5 Dimitri Yioulos wrote:
>
>> Hey, Stuart. Yup, use of  set_fact was really the key (pardon the pun). 
>> Here's the playbook, which now works perfectly, if it might be useful to 
>> anyone else (the debug stuff in it can, of course, be removed):
>>
>>
>>
>>
>> *---- hosts: dns1,dns2  gather_facts: True*
>>
>>
>>
>>
>>
>>
>> *  become: yes  become_method: sudo  vars_prompt:*
>> *    - name: "domain"*
>>
>>
>>
>>
>> *      prompt: "Enter host domain name"      private: no*
>>
>>
>>
>>
>> *  vars:    serial_num: "{{ lookup('pipe', 'date +%Y%m%d%S') }}"    year: 
>> "{{ lookup('pipe', 'date +%Y) }}"    zonedir: 
>> '/var/named/chroot/var/named/'*
>>
>>
>> *    keys: "{{ lookup('file', '{{ domain }}-le.txt') }}"  tasks:*
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *    - name: Run scripts to create Letsencrypt keys      script: 
>> renew_le_domain.pl <http://renew_le_domain.pl>      delegate_to: localhost  
>>     tags:        - createkeys    - name: set fact      set_fact:        
>> extract_key1: "{{ keys.split('\n')[1] }}"        extract_key2: "{{ 
>> keys.split('\n')[2] }}"      tags:*
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *        - key    - name: Print le file      ansible.builtin.debug:      
>>    msg: "{{ item }}"      with_items:        - "{{ extract_key1 }}"        
>> - "{{ extract_key2 }}"      delegate_to: localhost      run_once: yes      
>> tags:        - key*
>>
>>
>>
>> *    - name: Create backup of zone file*
>> *      shell: cp /var/named/chroot/var/named/{{ domain }}.hosts 
>> /root/zonebackups/{{ domain }}.hosts.{{ ansible_date_time.iso8601 }}*
>>
>>
>>
>>
>>
>> *      tags:        - backup    - name: Remove old TXT entries*
>> *      become: yes*
>>
>>
>>
>>
>>
>>
>>
>> *      replace:        path: "{{ item }}"        regexp: 
>> '^_acme-challenge.*\n'        replace: ''        after: "Lets Encrypt 
>> Validation"        backup: yes*
>>
>> *      with_items: '{{ zonedir }}{{ domain }}.hosts'*
>>
>>
>>
>>
>> *      tags:        - remove    - name: Update serial number*
>> *      become: yes*
>>
>>
>>
>>
>>
>> *      replace:        dest: "{{ item }}"        regexp: 
>> '202[3-5][0-1][0-9][0-9][0-9][0-9][0-9]'        replace: '{{ serial_num }}'*
>> *      with_items: '{{ zonedir }}{{ domain }}.hosts'*
>>
>>
>>
>>
>>
>> *      tags:        - updsrl    - name: Add TXT entry 1 to zone file*
>> *      become: yes*
>>
>>
>>
>>
>> *      lineinfile:        dest: "{{ item }}"        insertafter: EOF*
>>
>> *        line: '_acme-challenge                                 TXT     
>> "{{ extract_key1 }}"'      with_items: '{{ zonedir }}{{ domain }}.hosts'*
>>
>>
>>
>>
>>
>>
>>
>> *      register: add_txt1    - name: Add TXT entry 2 to zone file      
>> lineinfile:        dest: "{{ item }}"        insertafter: EOF*
>>
>>
>> *        line: '_acme-challenge                                 TXT     
>> "{{ extract_key2 }}"'      with_items: '{{ zonedir }}{{ domain }}.hosts'*
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *      register: add_txt2    - name: Show add_txt      
>> ansible.builtin.debug:        var: add_txt1    - name: Show add_txt      
>> ansible.builtin.debug:        var: add_txt2    - name: reload named-chroot  
>>     service:        name: named-chroot        state: reloaded      tags:    
>>     - restart_named*
>> On Wednesday, March 6, 2024 at 11:02:09 AM UTC-5 Stuart Lowe wrote:
>>
>>> Probably dirty but something like reading out the file and setting facts 
>>> based on the line?
>>>
>>> - name: Read certificate file
>>>
>>>       shell: cat {{ certdir }}/{{ zonefile }}-le.txt
>>>
>>>       register: cert_content
>>>
>>>  
>>>
>>>     - name: Set cert variables from file
>>>
>>>       set_fact:
>>>
>>>         acmechallenge1: "{{ cert_content.stdout_lines[1] }}"
>>>
>>>         acmechallenge2: "{{ cert_content.stdout_lines[2] }}"
>>>
>>>  
>>>
>>> *From:* [email protected] <[email protected]> *On 
>>> Behalf Of *Dimitri Yioulos
>>> *Sent:* Wednesday, March 6, 2024 2:09 PM
>>> *To:* Ansible Project <[email protected]>
>>> *Subject:* [ansible-project] Parsing a local file to get variables
>>>
>>>  
>>>
>>> You don't often get email from [email protected]. Learn why this is 
>>> important <https://aka.ms/LearnAboutSenderIdentification>
>>>
>>>  
>>>
>>> *Caution:* This email originated from outside of the organisation. Do 
>>> not click links or open attachments unless you recognise the sender and 
>>> know the content is safe 
>>>
>>>  
>>>
>>> Good morning. Here's a bit of a challenge. I'm working on a playbook to 
>>> get certs from letsencrypt, then put those into zone files. Rather than use 
>>> the Ansible letsencrypt module, we've written a Perl script to get the 
>>> certs. For each domain that we get certs for, a separate file named 
>>> <domain>-le.txt is created in /etc/ansible/playbooks/files. It looks like 
>>> this:
>>>
>>> *mydomain.com <http://mydomain.com>* 
>>>
>>> *cert1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*
>>>
>>> *cert2yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy*
>>>
>>>  
>>>
>>> I need to extract the certs and put them into the domain's zone file. 
>>> This is what the playbook looks like right now, where we currently have to 
>>> paste in the certs, as can be seen from the two prompts. That's what I'm 
>>> trying to further automate:
>>>
>>>
>>>
>>>
>>> *--- - hosts: dns1,dns2   gather_facts: yes*
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> *  become: yes   become_method: sudo   vars_prompt:     - name: 
>>> "zonefile"       prompt: "Enter host domain name"       private: no     - 
>>> name: "acmechallenge1"       prompt: "Enter first DNS TXT record"       
>>> private: no     - name: "acmechallenge2"       prompt: "Enter second DNS 
>>> TXT record"       private: no   vars:     serial_num: "{{ lookup('pipe', 
>>> 'date +%Y%m%d%S') }}"     year: "{{ lookup('pipe', 'date +%Y) }}"     
>>> zonedir: '/var/named/chroot/var/named/'   tasks:*
>>>
>>>  
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> *    - name: Create backup of zone file       shell: cp 
>>> /var/named/chroot/var/named/{{ zonefile }}.hosts /root/zonebackups/{{ 
>>> zonefile }}.hosts.{{ ansible_date_time.iso8601 }}       tags:         - 
>>> backup     - name: Remove old TXT entries       replace:         path: "{{ 
>>> item }}"         regexp: '^_acme-challenge.*\n'         replace: ''         
>>> after: "Lets Encrypt Validation"         backup: yes       with_items: '{{ 
>>> zonedir }}{{ zonefile }}.hosts'       tags:         - remove     - name: 
>>> Update serial number       replace:         dest: "{{ item }}"         
>>> regexp: '202[3-5][0-1][0-9][0-9][0-9][0-9][0-9]'         replace: '{{ 
>>> serial_num }}'       with_items: '{{ zonedir }}{{ zonefile }}.hosts'       
>>> tags:         - updsrl     - name: Add TXT entry 1 to zone file       
>>> lineinfile:*
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> *        dest: "{{ item }}"         insertafter: EOF         line: 
>>> '_acme-challenge                                 TXT     "{{ acmechallenge1 
>>> }}"'       with_items: '{{ zonedir }}{{ zonefile }}.hosts'       register: 
>>> add_txt1     - name: Add TXT entry 2 to zone file       lineinfile:         
>>> dest: "{{ item }}"         insertafter: EOF         line: '_acme-challenge 
>>>                                 TXT     "{{ acmechallenge2 }}"'       
>>> with_items: '{{ zonedir }}{{ zonefile }}.hosts'       register: add_txt2   
>>>   - name: Show add_txt       ansible.builtin.debug:         var: add_txt1   
>>>   - name: Show add_txt       ansible.builtin.debug:         var: add_txt2   
>>>   - name: reload named-chroot       service:         name: named-chroot     
>>>     state: reloaded       tags:         - restart_named*
>>>
>>>  
>>>
>>> Getting this more fullu automated would be huge. Your help would be most 
>>> appreciated.
>>>
>>> -- 
>>> 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 [email protected].
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/ansible-project/54de77a5-70fc-4b99-b240-ead1e7b09246n%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/ansible-project/54de77a5-70fc-4b99-b240-ead1e7b09246n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> ---------------
>>>
>>> *Stuart Lowe* He/Him
>>> Zen Cloud Engineering - Team Leader
>>> *Zen Internet*
>>> Team: 01706 902009
>>> www.zen.co.uk 
>>>
>>> Proud to be a certified B Corporation
>>>
>>> This message is private and confidential. If you have received this 
>>> message in error, please notify us and remove it from your system.
>>>
>>> Zen Internet Limited may monitor email traffic data to manage billing, 
>>> to handle customer enquiries, and for the prevention and detection of 
>>> fraud. We may also monitor the content of emails sent to and/or from Zen 
>>> Internet Limited for the purposes of security, staff training and to 
>>> monitor the quality of service.
>>> Zen Internet Limited is registered in England and Wales, Sandbrook Park, 
>>> Sandbrook Way, Rochdale, OL11 1RY Company No. 03101568 VAT Reg No. 686 0495 
>>> 01 
>>>
>>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/5138e2c1-6878-4dfa-9be7-e155f8bb2260n%40googlegroups.com.

Reply via email to