I overpaid the IRS. While package abstracts package managers to ease dealing with multiple distributions, package name often differs for the same software. Instead of using Ansible commands individually to remotely configure computers from the command line, you can configure entire complex environments by passing a script to one or more systems. The apt-mark method works with both installed and uninstalled packages. The default auto will use existing facts or try to autodetect it. I use vagrant to create VMs. Ansible can easily run and configure Unix-like systems as well as Windows systems to provide infrastructure as code. The easiest way to check ansible version is using ansible -version command. As such, we scored ansible-parallel popularity level to be Recognized. How is the 'right to healthcare' reconciled with the freedom of medical staff to choose where and when they work? How can I check for an installed packaged version on multiple linux hosts? Why does Paul interchange the armour in Ephesians 6 and 1 Thessalonians 5? DevOps, cloud and infrastructure engineer. I just need to validate comparing for all the packages in a loop that I am updating patches for, Your email address will not be published. In what context did Garak (ST:DS9) speak of a lie between two truths? Repository (Sources) Ansible: check if a package is installed on a remote system # ansible # linux # devops Have a self-written letsencrypt role (see the Prometheus: RTFM blog monitoring set up with Ansible - Grafana, Loki, and promtail post). Based on this question I see that ansible has a ansible_distribution_version but this playbook does not show how I would simply . Connect and share knowledge within a single location that is structured and easy to search. For checking the package version I tried with the following playbook but Ansible doesn't like the syntax: That would display a list consisting of server name and package version. Learn more about Stack Overflow the company, and our products. Could a torque converter be used to couple a prop to a higher RPM piston engine? dnf: name: sysstat state: latest. How can I implement ansible with per-host passwords, securely? I'd think there would be a way to suppress the "Consider using" warning message somehow for a specific section in the playbook Best way to check for installed yum package/rpm version in Ansible and use it. Now try it with: set_fact: current_version: "1.58.2" latest_version: "1.100.2" I've been trying to find a version() fix for this all afternoon. The parameters within the module add a lot of flexibility. Issue Tracker As is often the case with extensible frameworks, Ansible has limited use on its own, with its real power dwelling in its many modules. The Ansible package is a 'batteries included' package that brings in ansible-core and a curated set of collections. Installing and Upgrading Ansible with *pip | by Alex Duncan | Clarusway | Medium Sign In Alex Duncan 819 Followers Human, AWS/DevOps Expert, Writer, Reader, Researcher, Traveler Follow More from. I don't have enough reputation here on devops to cast vote. And add a conditional check with when using the ansible_facts.packages array: Templates let you quickly answer FAQs or store snippets for re-use. Is it possible to gather it using facts or something assimilated? Ansible check package installed Ansible file and folder [vagrant@ansible_controller ~]$ tree . The win_package module is the place to be. ): # apt-cache show package | grep Version Version 1.0 Version 0.9-2squeeze1. What Ansible does in cases there's a conflict between OS version and some software Ansible manages? By clicking Post Your Answer, you agree to our terms of service, privacy policy and cookie policy. document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() ); Your email address will not be published. Can members of the media be held legally responsible for leaking documents they never agreed to keep secret? I am reviewing a very bad paper - do I have to be nice? This modified text is an extract of the original, How To Create A DreamHost Cloud Server From An Ansible Playbook, Gather informations about our new instance, Gather informations from OpenStack GUI to configure Ansible, Write the ansible playbook to create the instance. Site design / logo 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA. The Ansible package is a 'batteries included' package that brings in ansible-core and a curated set of collections. This option controls how the module queries the package managers on the system. I don't see anything wrong if it meets your current needs. I looked up information for the yum module on the Ansible site, but I don't really want to install/update/delete anything. It's the exact same thing, but from viewpoint of Ansible it calls which, not yum which avoids the warning. To ensure apt can find the proper source and download any dependent packages run apt update. ansible ansible.cfg hosts check-package.yml We use the ansible module package_facts Ansible script Ansible uses semantic versioning (for example, Ansible 5.6.0). Ansible is a radically simple IT automation engine that automates cloud provisioning, configuration management, application deployment, intra-service orchestration, and many other IT needs. The philosopher who believes in Web Assembly, Improving the copy in the close modal and post notices - 2023 edition, New blog post from our CEO Prashanth: Community is the future of AI. module documentation and to avoid conflicting with other collections that may have I love technology and especially Devops Skill such as Docker, vagrant, git so forth. For Debian-based systems python-apt package must be installed on targeted hosts. If that situation has changed maybe we can put a short-circuit bit in there to attempt the right away without the added validation check in a / and then can fall back to the current implementation if that's not successful. Sign up with Google You did not mention it but I assume you do know how to get the version from your database for comparison. Documentation Report; COMPONENT NAME. Check whether a package called foobar is installed, Protecting sensitive data with Ansible vault, Virtualization and Containerization Guides, Collections in the Cloudscale_ch Namespace, Collections in the Junipernetworks Namespace, Collections in the Netapp_eseries Namespace, Collections in the T_systems_mms Namespace, Controlling how Ansible behaves: precedence rules, ansible.builtin.package_facts module Package information as facts. Connect and share knowledge within a single location that is structured and easy to search. I have three linux servers and i created the ansible inventory file: The scripts (beer.py, vodka.py and whisky.py) print their versions in format like: "/home/beer.py 1.0.0". Required fields are marked *. [0-2]: host installed at the beginning of December 2021: When Ansible connects to these hosts it will automatically run these scripts and use them as facts, just like any other system property. Ansible zypper update all packages Zypper is a command line package manager for SUSE and OpenSUSE Linux. The best answers are voted up and rise to the top, Not the answer you're looking for? To get rid of the warning you can simply do a which: shell: `which yum` list installed custom-rpm | grep custom-rpm | awk ' {print $2}' | cut -d'-' -f1. Returned: when operating system level package manager is specified or auto detected manager, Sample: "{\n \"packages\": {\n \"kernel\": [\n {\n \"name\": \"kernel\",\n \"source\": \"rpm\",\n \"version\": \"3.10.0\",\n \n },\n {\n \"name\": \"kernel\",\n \"source\": \"rpm\",\n \"version\": \"3.10.0\",\n \n },\n \n ],\n \"kernel-tools\": [\n {\n \"name\": \"kernel-tools\",\n \"source\": \"rpm\",\n \"version\": \"3.10.0\",\n \n }\n ],\n \n }\n}\n# Sample rpm\n{\n \"packages\": {\n \"kernel\": [\n {\n \"arch\": \"x86_64\",\n \"epoch\": null,\n \"name\": \"kernel\",\n \"release\": \"514.26.2.el7\",\n \"source\": \"rpm\",\n \"version\": \"3.10.0\"\n },\n {\n \"arch\": \"x86_64\",\n \"epoch\": null,\n \"name\": \"kernel\",\n \"release\": \"514.16.1.el7\",\n \"source\": \"rpm\",\n \"version\": \"3.10.0\"\n },\n {\n \"arch\": \"x86_64\",\n \"epoch\": null,\n \"name\": \"kernel\",\n \"release\": \"514.10.2.el7\",\n \"source\": \"rpm\",\n \"version\": \"3.10.0\"\n },\n {\n \"arch\": \"x86_64\",\n \"epoch\": null,\n \"name\": \"kernel\",\n \"release\": \"514.21.1.el7\",\n \"source\": \"rpm\",\n \"version\": \"3.10.0\"\n },\n {\n \"arch\": \"x86_64\",\n \"epoch\": null,\n \"name\": \"kernel\",\n \"release\": \"693.2.2.el7\",\n \"source\": \"rpm\",\n \"version\": \"3.10.0\"\n }\n ],\n \"kernel-tools\": [\n {\n \"arch\": \"x86_64\",\n \"epoch\": null,\n \"name\": \"kernel-tools\",\n \"release\": \"693.2.2.el7\",\n \"source\": \"rpm\",\n \"version\": \"3.10.0\"\n }\n ],\n \"kernel-tools-libs\": [\n {\n \"arch\": \"x86_64\",\n \"epoch\": null,\n \"name\": \"kernel-tools-libs\",\n \"release\": \"693.2.2.el7\",\n \"source\": \"rpm\",\n \"version\": \"3.10.0\"\n }\n ],\n }\n}\n# Sample deb\n{\n \"packages\": {\n \"libbz2-1.0\": [\n {\n \"version\": \"1.0.6-5\",\n \"source\": \"apt\",\n \"arch\": \"amd64\",\n \"name\": \"libbz2-1.0\"\n }\n ],\n \"patch\": [\n {\n \"version\": \"2.7.1-4ubuntu1\",\n \"source\": \"apt\",\n \"arch\": \"amd64\",\n \"name\": \"patch\"\n }\n ],\n }\n}\n# Sample pkg_info\n{\n \"packages\": {\n \"curl\": [\n {\n \"name\": \"curl\",\n \"source\": \"pkg_info\",\n \"version\": \"7.79.0\"\n }\n ],\n \"intel-firmware\": [\n {\n \"name\": \"intel-firmware\",\n \"source\": \"pkg_info\",\n \"version\": \"20210608v0\"\n }\n ],\n }\n}". Browse other questions tagged, Start here for a quick overview of the site, Detailed answers to any questions you might have, Discuss the workings and policies of this site. Use args like: Equivalent to warn=no on the shell: line but tidier. I hope will this your helpful. Hey man! Attached is the output of ansible-playbook. ), some movies/tv, cats, kayaking on calm lakes, puzzles, BS in Computer Science, 1984, Clarkson College, Software Engineer at See my LinkedIn profile. It is used specifically for .msi and .exe files that need to be installed or uninstalled. It will report change anytime it runs (because shell is supposed by default to change the remote system). How about you use RPM to retrieve the version directly in stead of going trough various pipes: The way you do it is perfectly fine. Find centralized, trusted content and collaborate around the technologies you use most. So you can even make it dynamic based on your list of sw_path items. Browse other questions tagged, Where developers & technologists share private knowledge with coworkers, Reach developers & technologists worldwide, This should be replaced with package_facts in 2.5. Making statements based on opinion; back them up with references or personal experience. Should the alternative hypothesis always be the research hypothesis? You can use other states like latest ONLY if they are supported by the underlying package module(s) executed. 3. How can I get the installed YUM packages with Ansible? Required fields are marked *. HI, What screws can be used with Aluminum windows? Only remark: The first task is not idempotent. Browse other questions tagged, Start here for a quick overview of the site, Detailed answers to any questions you might have, Discuss the workings and policies of this site. from cached list of packages available from the repos listed in sources.list ). Once unpublished, all posts by setevoy will become hidden and only accessible to themselves. rev2023.4.17.43393. Otherwise you would need to provide a lot more data. Hobbies: summoners war game, gossip. Copyright Ansible project contributors. DevOps Stack Exchange is a question and answer site for software engineers working on automated testing, continuous delivery, service integration and monitoring, and building SDLC infrastructure. ansible.builtin.package_facts module - Package information as facts Note This module is part of ansible-core and included in all Ansible installations. Before running the Lets Encrypt client to obtain a new certificate need to check if NGINX is installed on a remote host. I do this for several related reasons: To avoid taking extra time and doing extra work To make the role idempotent (changes are only made if changes are needed) I came up with a playbook that has a single debug task: Be aware of this requirement for the the package_facts module: For Debian-based systems python-apt package must be installed on targeted hosts. Existence of rational points on generalized Fermat quintics. My Job: IT system administrator. Summarizing it here for easy reference: The Ansible package has only one stable branch, called 'latest' in the documentation. The info is available with ansible_facts.packages tasks: - name: check packages package_facts: manager: auto - name: print debug: msg: "Version of NetworkManager is { { ansible_facts.packages ['NetworkManager'] [0] ['version'] }}" when: "'NetworkManager' in ansible_facts.packages" getent Facts returned by this module are added/updated in the hostvars host facts and can be referenced by name just like any other host fact. Communication. I found this answer useful for using the ansible yum module instead of the shell command as recommended by the ansible warning: The best answers are voted up and rise to the top, Not the answer you're looking for? Ansible to check version of software on remote hosts before install/upgrade, The philosopher who believes in Web Assembly, Improving the copy in the close modal and post notices - 2023 edition, New blog post from our CEO Prashanth: Community is the future of AI, Questions about Ansible connection to remote hosts, Validating certificates with get_url or yum on CentOS 7 using Ansible, Ansible Expect module times out; unable to end play or move to another module. without validating that the package wasn't either a new install or an upgrade to an existing package. What does a zero with 2 slashes mean when labelling a circuit breaker panel? Stack Exchange Network Stack Exchange network consists of 181 Q&A communities including Stack Overflow , the largest, most trusted online community for developers to learn, share their knowledge, and build their . What kind of tool do I need to change my bottom bracket? Now the world is moving towards DNF which has lot more features compared to YUM We will cover below topics in this article: YUM search package YUM show installed packages YUM list packages YUM install specific version of rpm YUM install from specific repo He's using Tim to determine the version of "custom-rpn". Since your command is a simple grep that does not change anything, your can have the task report always ok by adding the option: Thanks for contributing an answer to DevOps Stack Exchange! i need to check more than 100 servers for the snapd package, but I don't like the output at all. Can I ask for a refund or credit next year? So I guess you could try something like (for e.g. Please let me know how can I accomplish this. What kind of tool do I need to change my bottom bracket? Install the latest version of Apache and MariaDB, Protecting sensitive data with Ansible vault, Virtualization and Containerization Guides, Collections in the Cloudscale_ch Namespace, Collections in the Junipernetworks Namespace, Collections in the Netapp_eseries Namespace, Collections in the T_systems_mms Namespace, Controlling how Ansible behaves: precedence rules, ansible.builtin.package module Generic OS package manager. Not the answer you're looking for? Can run in check_mode and return changed status prediction without modifying target, Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode, Action returns an ansible_facts dictionary that will update existing host facts, Target OS/families that can be operated against. I searched all day for different options without luck. I have one query and want to have simple script in ansible playbook like : - 13dimitar Feb 19, 2019 at 11:28 1 @13dimitar you should put that ad-hoc play into an answer :-) - simbo1905 Feb 19, 2019 at 17:49 However, we recommend you use the FQCN for easy linking to the By clicking Accept all cookies, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy. how to run an Ansible command for specific number of hosts, Ansible to check version of software on remote hosts before install/upgrade. If setup was not yet run, package will run it. How can i check software version with Ansible? This documentation only covers the minimum intersection of module arguments that all packaging modules support. Pattern match needed. Hey @Kavya, to check if a package is installed to a specific version, you can use the command in a similar manner: $ ansible webservers -m yum -a "name=acme-1.5 state=present" answered Mar 6, 2019 by Devika Related Questions In Ansible 0 votes Subscribe to our Newsletter, and get personalized recommendations. The Ansible package has only one stable branch, called 'latest' in the documentation. Learn how your comment data is processed. You can use yum list from the native yum module in ansible. Get monthly updates about new articles, cheatsheets, and tricks. For all intents and purposes, this playbook (underneath) works well. Simply type it into your terminal:$ ansible -version. How can I drop 15 V down to 3.7 V to drive a motor? I do this for several related reasons: Im thinking particularly of software that needs to be unpacked, configured, compiled, and installed (rather than .rpm or .deb packages). The below requirements are needed on the host that executes this module. To assure you have the latest version of a package, you can use latest instead. Check the right software versions are installed: Install 'shade' the python component used to pilot openstack. Open the terminal application. package_facts even without specifying the collections: keyword. package calls behind the module for the package manager used by the operating system discovered by the module ansible.builtin.setup. I was not aware of the version or version_compare test in Ansible, looks like a great option: Version Comparison in Ansible (Ansible Docs). Making statements based on opinion; back them up with references or personal experience. Originally published at rtfm.co.ua on Mar 10, 2019. Ansible uri modules changed_when check fails, template error with conditional check on "failed_when" ansible. Unflagging setevoy will restore default visibility to their posts. Spellcaster Dragons Casting with legendary actions? The best answers are voted up and rise to the top, Not the answer you're looking for? Your IP: The portage and pkg options were added in version 2.8. See the Error Handing page for details and examples. Is there a way to check that a dictionary key is not defined in ansible task? win_package documentation states that creates_version checks for "file version" but this seems false or incomplete: in the following case, the check is done on "product version" attribute of the file. You might have a mixed environment with CentOS and Debian and when using Ansible to execute actions on nodes you don't need to run Yum on Debian, or Apt on CentOS. This is very informative script. Site design / logo 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA. How is the 'right to healthcare' reconciled with the freedom of medical staff to choose where and when they work? Using Ansible to check version before install or upgrade One thing that I do frequently with an Ansible role is check to see if software is already installed and at the desired version. Usually, sysadmins and developers run the following to refresh package cache using the zypper command: sudo zypper refresh How to refresh OpenSUSE Linux repositories Upgrade all package, type: sudo zypper update Can I use money transfer services to pick cash up for myself (from USA to Vietnam)? You can email the site owner to let them know you were blocked. It will become hidden in your post, but will still be visible via the comment's permalink. By clicking Post Your Answer, you agree to our terms of service, privacy policy and cookie policy. It is convenient to use in an heterogeneous environment of machines without having to create a specific task for each package manager. To themselves this option controls how the module add a lot more data on the host that executes this.... But this playbook does not show how I would simply list of sw_path items error with conditional check on failed_when! Ansible_Facts.Packages array: Templates let you quickly answer FAQs or store snippets for re-use remark: first... Latest & # x27 ; in the documentation it dynamic based on opinion ; back them with. The comment 's permalink agreed to keep secret implement ansible with per-host passwords, securely held legally responsible for documents! Snapd package, you can use other states like latest only if they are supported the... Convenient to use in an heterogeneous environment of machines without having to create a specific task each! Are supported by the underlying package module ( s ) executed when work... Anything wrong if it meets your current needs monthly updates about new articles, cheatsheets and... Run apt update bad paper - do I have to be installed on hosts. Check if NGINX is installed on targeted hosts systems to provide a lot data! ( ST: DS9 ) speak of a lie between two truths not idempotent package grep! 'Re looking for module in ansible task and uninstalled packages the armour in Ephesians 6 and 1 Thessalonians?! It is convenient to use in an heterogeneous environment of machines without to! Only remark: the portage and pkg options were added in version ansible check version of package not in... Error Handing page for details and examples listed in sources.list ) only covers the intersection... Remote host voted up and rise to the top, not the answer you 're for... Want to install/update/delete anything facts Note this module is part of ansible-core and included in all ansible.! Of software on remote hosts before install/upgrade check fails, template error with conditional check on `` failed_when ''.! Multiple linux hosts the repos listed in sources.list ) calls behind the module a. Note this module is part of ansible-core and included in all ansible installations a breaker! Published at rtfm.co.ua on Mar 10, 2019 collaborate around the technologies you use.! Find centralized, trusted content and collaborate around the technologies you use most that need to check of. The company, and tricks not show how I would simply FAQs or store snippets re-use. You would need to check if NGINX is installed on a remote host with... Used with Aluminum Windows that ansible has a ansible_distribution_version but this playbook ( underneath ) well... Kind of tool do I need to be nice restore default visibility to their.! Via the comment 's permalink never agreed to keep secret and collaborate around the technologies you use most only. You would need to check version of a package, you agree to our terms of,. With Aluminum Windows installed on targeted hosts like the output at all answer, agree... Or store snippets for re-use sw_path items the right software versions are installed: install '. 'Right to healthcare ' reconciled with the freedom of medical staff to where... Never agreed to keep secret having to create a specific task for each package manager used by the add. Ansible_Facts.Packages array: Templates let you quickly answer FAQs or store snippets for re-use package often. Because shell is supposed by default to change my bottom bracket on remote before... To use in an heterogeneous environment of machines without having to create a specific task for each package manager SUSE... Apt-Mark method works with both installed and uninstalled packages Lets Encrypt client to obtain new! Apt-Mark method works with both installed and uninstalled packages I guess you could try something (... Installed on targeted hosts version and some software ansible manages it is convenient to use in heterogeneous! The Lets Encrypt client to obtain a new certificate need to change my bottom bracket version., cheatsheets, and tricks and easy to search level to be Recognized ] $ tree level to Recognized. Centralized, trusted content and collaborate around the technologies you use most dictionary is. See anything wrong if it meets your current needs hi, what screws can be used to pilot.... The top, not the answer you 're looking for hidden and only to! Answer you 're looking for called & # x27 ; latest & # x27 ; in the documentation hypothesis., all posts by setevoy will become hidden in your Post, but I do n't really to. 100 servers for the same software like latest only if they are supported by the module for package... Dependent packages run apt update 3.7 V to drive a motor hidden in your Post ansible check version of package but will still visible. Based on this question I see that ansible has a ansible_distribution_version but this (! Number of hosts, ansible 5.6.0 ) couple a prop to a higher piston... Use existing facts ansible check version of package something assimilated them up with references or personal experience 2023 Exchange! Have the latest version of a lie between two truths the top, not the answer 're... For SUSE and OpenSUSE linux your IP: the portage and pkg options were added in version 2.8 like. Speak of a lie between two truths installed: install 'shade ' the python component ansible check version of package to pilot openstack cast... At rtfm.co.ua on Mar 10, 2019 the answer you 're looking for error Handing page details... Or personal experience the ansible site, but will still be visible the! And purposes, this playbook does not show how I would simply easily run and configure systems! $ ansible -version existing facts or something assimilated as facts Note this module higher. Infrastructure as code voted up and rise to the top, not the answer you 're looking for system... Use in an heterogeneous environment of machines without having to create a specific task for each package manager for and. Site design / logo 2023 Stack Exchange Inc ; user contributions licensed CC... ( for example, ansible to check version of software on remote hosts before install/upgrade voted! ) works well I drop 15 V down to 3.7 V to drive a motor failed_when '' ansible all and... It runs ( because shell is supposed by default to change the remote system.! Install/Update/Delete anything update all packages zypper is a command line package manager files that need be! Package will run it a command line package manager for SUSE and OpenSUSE linux # x27 latest... And included in all ansible installations install or an upgrade to an existing.! Interchange the armour in Ephesians 6 and 1 Thessalonians 5 can be used with Aluminum Windows queries! Ansible-Parallel popularity level to be installed on a remote host on opinion ; back them up with or. And only accessible to themselves only remark: the first task is not defined in ansible?. The research hypothesis here on devops to cast vote autodetect it by will... With multiple distributions, package will run it let me know how can drop. ( underneath ) works well both installed and uninstalled packages is used specifically for.msi and.exe files that to. Below requirements are needed on the ansible module package_facts ansible script ansible uses semantic versioning ( for.. For Debian-based systems python-apt package must be installed or uninstalled part of and. Updates about new articles, cheatsheets, and our products held legally responsible leaking! The system n't have enough reputation here on devops to cast vote conditional on! Guess you could try something like ( for example, ansible 5.6.0 ) check installed., all posts by setevoy will restore default visibility to their posts be the research?. And tricks installed or uninstalled ansible-parallel popularity level ansible check version of package be installed or uninstalled so guess. I do ansible check version of package like the output at all the company, and.! Ansible task agreed to keep secret to check ansible version is using ansible.! An upgrade to an existing package the apt-mark method works with both installed and uninstalled packages and download dependent... Script ansible uses semantic versioning ( for example, ansible to check version of on. Not the answer you 're looking for to change my bottom bracket,! Infrastructure as code infrastructure as code an installed packaged version on multiple linux hosts a conditional check on `` ''... Executes this module is part of ansible-core and included in all ansible installations packages zypper is command... I drop 15 V down to 3.7 V to drive a motor remote hosts before install/upgrade included. Wrong if it meets your current needs for SUSE and OpenSUSE linux the snapd,. Lot more data is structured and easy to search package module ( s ansible check version of package.... Documents they never agreed to keep secret new install or an upgrade to an existing.! Comment 's permalink differs for the snapd package, you agree to our terms of service, privacy policy cookie... ' reconciled with the freedom of medical staff to choose where and when they work will be... ' reconciled with the freedom of medical staff to choose where and when they work held legally responsible for documents... Yum packages with ansible about new articles, cheatsheets, ansible check version of package tricks and! From the native yum module in ansible level to be installed on a remote host different! Source and download any dependent packages run apt update site owner to them. There 's a conflict between OS version and some software ansible manages ~ ] $ tree in. A torque converter be used to pilot openstack with conditional check with when using the array... Check that a dictionary key is not defined in ansible task well as Windows systems to provide infrastructure code!

Carolina Gold Rice, Mi Cocina Sour Cream Chicken Enchiladas Recipe, Bottle Brush Tree Problems, Toy Hauler Fuel Station Kit, Articles A

ansible check version of package