file:
      path: /home/pvs/Build/data
      state: directory
      mode: 0755
    register: file_stat

Also notice that "register" aligns with "file" and not with the params of 
"file".

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

On Jan 18, 2023, at 1:54 PM, 'Rowe, Walter P. (Fed)' via Ansible Project 
<ansible-project@googlegroups.com> wrote:

Ansible checks before it makes changes.

You declare a configuration state. If the machine is in that state, Ansible 
makes no change.

Don't check if the package has been downloaded. Let Ansible worry about that.

It is fair to worry about whether the download folder exists. For that you only 
need to name the folder in the file task.

    file:
      path: /home/pvs/Build/data
      state: directory
      mode: 0755
    register: file_stat

Is /home/pvs/Build/data a local folder on the control host where you run 
Ansible, or on each remote machine?

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

On Jan 18, 2023, at 1:21 PM, Matthew Franco <francom...@gmail.com> wrote:


Thank you for the help.
sorry I had corrected the yum download portion (see below), but did not update 
here. the below solves the download only part.
I need to be able to download it to a directory as I am not always going to be 
online to access repositories. I will be online at one point to get the files, 
but in the future may not as I switch between builds. I just do not know how to 
structure the when statement for downloading only when the file is not there.



  - name: Download RPMs
    yum:
      name: "{{ rpms }}"
      state: present
      enablerepo: "*"
      download_dir: /home/pvs/Build/data/
      download_only: true
      when: file_stat.stat.exists == False
On Wednesday, January 18, 2023 at 1:10:39 PM UTC-5 walte...@nist.gov wrote:
Have you looked at the module docs? They show you what "results" is supposed to 
look like. If I may I'd like to suggest a slightly different approach. The 
Ansible philosophy is for each task to declare a state and let Ansible ensure 
the machine is in that state when it is done with the task.

Let's break your problem down into three states:


  1.  a local directory needs to exist
  2.  RPMs need to be in that local directory
  3.  RPMs in that local directory need to be installed

Given those three states you have three tasks:

  - name: make sure /home/pvs/Build/data exists

    file:
      path: /home/pvs/Build/data
      state: directory
      mode: 0755

The task above looks fine. It accomplishes state #1 in a single task.

  - name: Make sure RPMs are in /home/pvs/Build/data

    yum:
      name: "{{ item }}"
      state: present
      enablerepo: "*"
      dest: /home/pvs/Build/data/
    with_items: "{{ rpms }}"

The task above doesn't look great. I am not convinced it will download the 
packages to /home/pvs/Build/data. The yum module does not have a "dest" 
parameter. It has a download_dir parameter. The download_dir parameter is only 
effective when used in conjunction with download_only. The next question I have 
is why do you want these packages downloaded to an alternate local directory? 
Are they in a repo you have enabled? If so why download them vs simply 
installing them FROM THAT REPO? This would let you accomplish states 2 and 3 in 
a single step and eliminate state 1 entirely.

  - name: RPMs are installed from /home/pvs/Build/data

    yum:
      name: /home/pvs/Build/data/{{ item }} .x86_64.rpm
      state: present
      installroot: /home/pvs/Build/data
      enablerepo: "*"
      allowdowngrade: yes
    with_items: "{{ rpms }}"
    register: yum_result

Given what I wrote about task / state 2 it seems task 3 may be unnecessary.

Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123<tel:(202)%20355-4123>
On Jan 18, 2023, at 12:37 PM, Matthew Franco <franc...@gmail.com> wrote:


I added the following task verifying file exists, and show the results right 
below it, but I do not know how to reference the results using a "when: " for 
when the file does not exist. the results shows: " 'stat': {'charset': 
'binary', 'uid': 0, 'exists': True, "
but stat is never found from the error


  - name: check if file exists
    local_action: stat path="/home/pvs/Build/data/{{ item }}.x86_64.rpm"
    with_items: "{{ rpms }}"
    register: file_stat

  - name: Verifying if file exists
    debug: msg="File {{ item }} exist"
    with_items: "{{ file_stat.results }}"




PLAY [Download and install RPMs from a local directory] 
***********************************************************************************************************************************************************

TASK [Gathering Facts] 
********************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Create directory if it does not exist] 
**********************************************************************************************************************************************************************
ok: [localhost]

TASK [check if file exists] 
***************************************************************************************************************************************************************************************
ok: [localhost -> localhost] => (item=Common-1.0.0-37)
ok: [localhost -> localhost] => (item=Database-1.0.0-122)

TASK [Verifying if file exists] 
***********************************************************************************************************************************************************************************
ok: [localhost] => (item={'invocation': {'module_args': {'checksum_algorithm': 
'sha1', 'get_checksum': True, 'follow': False, 'path': 
'/home/pvs/Build/data/Common-1.0.0-37.x86_64.rpm', 'get_md5': False, 
'get_mime': True, 'get_attributes': True}}, 'stat': {'charset': 'binary', 
'uid': 0, 'exists': True, 'attr_flags': '', 'woth': False, 'isreg': True, 
'device_type': 0, 'mtime': 1585590258.0, 'block_size': 4096, 'inode': 5856469, 
'isgid': False, 'size': 205977384, 'executable': False, 'isuid': False, 
'readable': True, 'version': '385713817', 'pw_name': 'root', 'gid': 0, 'ischr': 
False, 'wusr': True, 'writeable': True, 'mimetype': 'application/x-rpm', 
'blocks': 402312, 'xoth': False, 'islnk': False, 'nlink': 1, 'issock': False, 
'rgrp': True, 'gr_name': 'root', 'path': 
'/home/pvs/Build/data/Common-1.0.0-37.x86_64.rpm', 'xusr': False, 'atime': 
1673993504.3784745, 'isdir': False, 'ctime': 1673993447.9204745, 'isblk': 
False, 'wgrp': False, 'checksum': '5738560f3137fb2f62dd9a179ed343daef01c24b', 
'dev': 64770, 'roth': True, 'isfifo': False, 'mode': '0644', 'xgrp': False, 
'rusr': True, 'attributes': []}, 'changed': False, 'failed': False, 'item': 
'Common-1.0.0-37', 'ansible_loop_var': 'item'}) => {
    "msg": "File {'invocation': {'module_args': {'checksum_algorithm': 'sha1', 
'get_checksum': True, 'follow': False, 'path': 
'/home/pvs/Build/data/Common-1.0.0-37.x86_64.rpm', 'get_md5': False, 
'get_mime': True, 'get_attributes': True}}, 'stat': {'charset': 'binary', 
'uid': 0, 'exists': True, 'attr_flags': '', 'woth': False, 'isreg': True, 
'device_type': 0, 'mtime': 1585590258.0, 'block_size': 4096, 'inode': 5856469, 
'isgid': False, 'size': 205977384, 'executable': False, 'isuid': False, 
'readable': True, 'version': '385713817', 'pw_name': 'root', 'gid': 0, 'ischr': 
False, 'wusr': True, 'writeable': True, 'mimetype': 'application/x-rpm', 
'blocks': 402312, 'xoth': False, 'islnk': False, 'nlink': 1, 'issock': False, 
'rgrp': True, 'gr_name': 'root', 'path': 
'/home/pvs/Build/data/Common-1.0.0-37.x86_64.rpm', 'xusr': False, 'atime': 
1673993504.3784745, 'isdir': False, 'ctime': 1673993447.9204745, 'isblk': 
False, 'wgrp': False, 'checksum': '5738560f3137fb2f62dd9a179ed343daef01c24b', 
'dev': 64770, 'roth': True, 'isfifo': False, 'mode': '0644', 'xgrp': False, 
'rusr': True, 'attributes': []}, 'changed': False, 'failed': False, 'item': 
'Common-1.0.0-37', 'ansible_loop_var': 'item'} exist"
}
ok: [localhost] => (item={'invocation': {'module_args': {'checksum_algorithm': 
'sha1', 'get_checksum': True, 'follow': False, 'path': 
'/home/pvs/Build/data/Database-1.0.0-122.x86_64.rpm', 'get_md5': False, 
'get_mime': True, 'get_attributes': True}}, 'stat': {'charset': 'binary', 
'uid': 0, 'exists': True, 'attr_flags': '', 'woth': False, 'isreg': True, 
'device_type': 0, 'mtime': 1612995841.0, 'block_size': 4096, 'inode': 1629, 
'isgid': False, 'size': 12408, 'executable': False, 'isuid': False, 'readable': 
True, 'version': '235891764', 'pw_name': 'root', 'gid': 0, 'ischr': False, 
'wusr': True, 'writeable': True, 'mimetype': 'application/x-rpm', 'blocks': 40, 
'xoth': False, 'islnk': False, 'nlink': 1, 'issock': False, 'rgrp': True, 
'gr_name': 'root', 'path': 
'/home/pvs/Build/data/Database-1.0.0-122.x86_64.rpm', 'xusr': False, 'atime': 
1674050294.847356, 'isdir': False, 'ctime': 1673994773.5614717, 'isblk': False, 
'wgrp': False, 'checksum': '56730380852174a19f81253383a540689399ea9b', 'dev': 
64770, 'roth': True, 'isfifo': False, 'mode': '0644', 'xgrp': False, 'rusr': 
True, 'attributes': []}, 'changed': False, 'failed': False, 'item': 
'Database-1.0.0-122', 'ansible_loop_var': 'item'}) => {
    "msg": "File {'invocation': {'module_args': {'checksum_algorithm': 'sha1', 
'get_checksum': True, 'follow': False, 'path': 
'/home/pvs/Build/data/Database-1.0.0-122.x86_64.rpm', 'get_md5': False, 
'get_mime': True, 'get_attributes': True}}, 'stat': {'charset': 'binary', 
'uid': 0, 'exists': True, 'attr_flags': '', 'woth': False, 'isreg': True, 
'device_type': 0, 'mtime': 1612995841.0, 'block_size': 4096, 'inode': 1629, 
'isgid': False, 'size': 12408, 'executable': False, 'isuid': False, 'readable': 
True, 'version': '235891764', 'pw_name': 'root', 'gid': 0, 'ischr': False, 
'wusr': True, 'writeable': True, 'mimetype': 'application/x-rpm', 'blocks': 40, 
'xoth': False, 'islnk': False, 'nlink': 1, 'issock': False, 'rgrp': True, 
'gr_name': 'root', 'path': 
'/home/pvs/Build/data/Database-1.0.0-122.x86_64.rpm', 'xusr': False, 'atime': 
1674050294.847356, 'isdir': False, 'ctime': 1673994773.5614717, 'isblk': False, 
'wgrp': False, 'checksum': '56730380852174a19f81253383a540689399ea9b', 'dev': 
64770, 'roth': True, 'isfifo': False, 'mode': '0644', 'xgrp': False, 'rusr': 
True, 'attributes': []}, 'changed': False, 'failed': False, 'item': 
'Database-1.0.0-122', 'ansible_loop_var': 'item'} exist"
}

TASK [Download RPMs] 
**********************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "The conditional check 'item.stat.exists 
== True' failed. The error was: error while evaluating conditional 
(item.stat.exists == True): 'ansible.utils.unsafe_proxy.AnsibleUnsafeText 
object' has no attribute 'stat'\n\nThe error appears to be in 
'/home/pvs/Build/playbooks/DownloadRPM.yml': line 31, column 5, but may\nbe 
elsewhere in the file depending on the exact syntax problem.\n\nThe offending 
line appears to be:\n\n\n  - name: Download RPMs\n    ^ here\n"}

PLAY RECAP 
********************************************************************************************************************************************************************************************************
localhost                  : ok=4    changed=0    unreachable=0    failed=1    
skipped=0    rescued=0    ignored=0




On Tuesday, January 17, 2023 at 1:26:27 PM UTC-5 walte...@nist.gov wrote:
Does your "register: file_stat" needs to be moved up to the file task?

Walter
--
Walter Rowe, Division Chief
Infrastructure Services, OISM
Mobile: 202.355.4123<tel:(202)%20355-4123>

On Jan 17, 2023, at 1:13 PM, Matthew Franco <franc...@gmail.com> wrote:

with what I am doing shouldn't file_stat get registered as part of the loop? 
What am I doing wrong?


I get the following error when trying to run my script below:

PLAY [Download and install RPMs from a local directory] ************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Create directory if it does not exist] ***********************************
ok: [localhost]

TASK [Download RPMs] ***********************************************************
fatal: [localhost]: FAILED! => {"msg": "The conditional check 
'file_stat.stat.exists == False' failed. The error was: error while evaluating 
conditional (file_stat.stat.exists == False): 'file_stat' is undefined\n\nThe 
error appears to be in '/home/pvs/Build/playbooks/DownloadRPM.yml': line 17, 
column 5, but may\nbe elsewhere in the file depending on the exact syntax 
problem.\n\nThe offending line appears to be:\n\n      mode: 0755\n  - name: 
Download RPMs\n    ^ here\n"}



My script:

---
- name: Download and install RPMs from a local directory
  hosts: all
  vars_files:
    - rpms.yml
  tasks:
  - name: Create directory if it does not exist
    file:
      path: /home/pvs/Build/data
      state: directory
      mode: 0755
  - name: Download RPMs
    yum:
      name: "{{ item }}"
      state: present
      enablerepo: "*"
      dest: /home/pvs/Build/data/
    with_items: "{{ rpms }}"
    when: file_stat.stat.exists == False
    register: file_stat
  - name: Install RPMs from local directory
    yum:
      name:  /home/pvs/Build/data/{{ item }} .x86_64.rpm
      state: present
      installroot: /home/pvs/Build/data
      enablerepo: "*"
      allowdowngrade: yes
    with_items: "{{ rpms }}"
    register: yum_result
  - name: check if package installation failed
    debug:
      msg: "RPM {{ 
item.name<https://gcc02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fitem.name%2F&data=05%7C01%7Cwalter.rowe%40nist.gov%7C883fbd670c6b4e9478f508daf9857374%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638096648812555226%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=fplQ6yREfShqu%2BC7c25vtjtvmkxDSzGT5QF6LjFJ6Xg%3D&reserved=0>
 }} failed with error {{ item.rc }}"
    with_items: "{{ yum_result.results }}"
    when: item.rc != 0




This Ansible script loads the list of RPMs to download from a separate file 
called "rpms.yml" using the vars_files directive. This file should be in the 
same directory as the playbook and should be in YAML format.
The file should contain a list of RPMs names like this:

rpms:
  - file1
  - file2
  - file3





Background on my script:
This Ansible script first uses the yum command to download the RPMs to a local 
directory, it will also check if the file already exists in the directory 
before downloading it, if it already exists it will skip the downloading task. 
Once all the files are downloaded, it will use the yum command again to install 
the RPMs from the local directory.
Please make sure to provide the correct path to the directory where you want to 
store the RPMs, and the correct file names in the rpms.yml file.


any help would be appreciated.
Thank you




--
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/5f4a4ebb-0b39-4faf-bb2d-b9e99b0a13cdn%40googlegroups.com<https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Fansible-project%2F5f4a4ebb-0b39-4faf-bb2d-b9e99b0a13cdn%2540googlegroups.com%3Futm_medium%3Demail%26utm_source%3Dfooter&data=05%7C01%7Cwalter.rowe%40nist.gov%7C883fbd670c6b4e9478f508daf9857374%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638096648812555226%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=iuN2CpZkhZ%2B%2BB1eQqqByK9nP7qfFUCBMDdpjs34cc2c%3D&reserved=0>.


--
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/c981cf50-4ab1-4922-b20a-e1ec4c7bd05fn%40googlegroups.com<https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Fansible-project%2Fc981cf50-4ab1-4922-b20a-e1ec4c7bd05fn%2540googlegroups.com%3Futm_medium%3Demail%26utm_source%3Dfooter&data=05%7C01%7Cwalter.rowe%40nist.gov%7C883fbd670c6b4e9478f508daf9857374%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638096648812555226%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=7nDDv2zysys9TDh%2FNT52UPFVHqLC4%2BpzbAVpOSvoOI4%3D&reserved=0>.


--
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<mailto:ansible-project+unsubscr...@googlegroups.com>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/e47aaf66-5e91-4fb0-8ee2-facd0529c238n%40googlegroups.com<https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Fansible-project%2Fe47aaf66-5e91-4fb0-8ee2-facd0529c238n%2540googlegroups.com%3Futm_medium%3Demail%26utm_source%3Dfooter&data=05%7C01%7Cwalter.rowe%40nist.gov%7C883fbd670c6b4e9478f508daf9857374%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638096648812555226%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=zpE%2B48f%2Fx0VCmZYXAjiMlfiGk%2F2s1KeRYZN6y8WjtVU%3D&reserved=0>.


--
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<mailto:ansible-project+unsubscr...@googlegroups.com>.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/1BF9CD10-85D5-413C-9DD6-3E12CA0DC3F4%40nist.gov<https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgroups.google.com%2Fd%2Fmsgid%2Fansible-project%2F1BF9CD10-85D5-413C-9DD6-3E12CA0DC3F4%2540nist.gov%3Futm_medium%3Demail%26utm_source%3Dfooter&data=05%7C01%7Cwalter.rowe%40nist.gov%7C883fbd670c6b4e9478f508daf9857374%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C0%7C638096648812555226%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=0ridbbontb97gjxACsGJzwE4DSKvf70vRJYcCIyVFQs%3D&reserved=0>.

-- 
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/B6A784F1-00C4-4F87-88CB-70430F112F22%40nist.gov.

Reply via email to