katello foreman and modules for writing ansible · collection on ansible galaxy rpm on...
TRANSCRIPT
![Page 1: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/1.jpg)
WRITING ANSIBLEWRITING ANSIBLEMODULES FORMODULES FORFOREMAN ANDFOREMAN AND
KATELLOKATELLO
1
![Page 2: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/2.jpg)
$ WHOAMI$ WHOAMI
Evgeni Golov
Senior Software Engineer at Red Hat
ex-Consultant at Red Hat
Debian and Grml Developer
♥ FOSS ♥
♥ automation ♥
2
![Page 3: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/3.jpg)
WTF?!WTF?!15 minute version of 45 minute talkhow to best automate Foreman/Katellousing Ansiblespoiler: command: hammer is not theanswer!
3
![Page 4: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/4.jpg)
WHY NOT WHY NOT XX?!?! by Thomas
Krahn ( ) is probably the oldestWell maintainedSupports only Foreman
Upstream Ansible foreman and katellomodules
Deprecated since Ansible 2.8"one" module for everything
ansible-module-foreman
@Nosmoht
4
![Page 5: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/5.jpg)
FOREMAN ANSIBLEFOREMAN ANSIBLEMODULESMODULES
Started June 2017 as a repository to clean upupstream modulesOne module per Foreman entity or actionExtensive test-suiteAbstraction framework for common tasks(connect, search, create, update, delete)
5
![Page 6: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/6.jpg)
FOREMAN ANSIBLEFOREMAN ANSIBLEMODULESMODULES
Initially, we still used nailgunnailgun releases are Satellite versionspeci�cPlugins not in Satellite are not supportedDoesn't work without Katello installed
Recent switch to apypieConsumes the apidoc.json publishedby Foreman / apipie-rails
Migration quite easy thanks to the existingframework and tests
6
![Page 7: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/7.jpg)
FOREMAN ANSIBLEFOREMAN ANSIBLEMODULES - STATSMODULES - STATS43 🌟 on GitHub24 Contributors (8 Red Hat, 7 ATIX)8 new Contributors in 2019
7
![Page 8: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/8.jpg)
8
![Page 9: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/9.jpg)
9
![Page 10: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/10.jpg)
FOREMAN ANSIBLEFOREMAN ANSIBLEMODULES - OUTLOOKMODULES - OUTLOOK
Collection on Ansible GalaxyRPM on yum.theforeman.org
10
![Page 11: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/11.jpg)
LET'S WRITE ALET'S WRITE AMODULE!MODULE!
11
![Page 12: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/12.jpg)
UNDER THE HOODUNDER THE HOODMost modules manage objects/entities in
Foreman1. Find an existing entity2. Compare existing entity with the data
provided by the user3. Save the entity
We have a framework to support that
12
![Page 13: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/13.jpg)
First a wrapper around AnsibleModule:from ansible.module_utils.foreman_helper import ForemanEntityApypieAnsibleModule module = ForemanEntityApypieAnsibleModule( argument_spec=dict(name=dict(required=True)))
13
![Page 14: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/14.jpg)
Load user provided parameters and connect tothe API:
entity_dict = module.clean_params() module.connect()
14
![Page 15: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/15.jpg)
Find the entity and ensure it looks like the userwanted:
entity = module.find_resource_by_name('architectures', name=entity_dict['name'], failsafe=True) changed = module.ensure_resource_state('architectures', entity_dict, entity, name_map) module.exit_json(changed=changed)
15
![Page 16: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/16.jpg)
Translate Ansible params to Foreman APIparams:
name_map = { 'name': 'name' }
16
![Page 17: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/17.jpg)
from ansible.module_utils.foreman_helper import ForemanEntityApypieAnsibleModule name_map = { 'name': 'name' } module = ForemanEntityApypieAnsibleModule( argument_spec=dict(name=dict(required=True))) entity_dict = module.clean_params() module.connect() entity = module.find_resource_by_name('architectures', name=entity_dict['name'], failsafe=True) changed = module.ensure_resource_state('architectures', entity_dict, entity, name_map) module.exit_json(changed=changed)
17
![Page 18: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/18.jpg)
if not module.desired_absent: if 'operatingsystems' in entity_dict: entity_dict['operatingsystems'] = module.find_resources_by_title('operatingsystems', entity_dict['operatingsystems'], thin=True)
18
![Page 19: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/19.jpg)
if not module.desired_absent: if 'operatingsystems' in entity_dict: search_list = ["title~{}".format(title) for title in entity_dict['operatingsystems']] entity_dict['operatingsystems'] = module.find_resources('operatingsystems', search_list, thin=True)
19
![Page 20: KATELLO FOREMAN AND MODULES FOR WRITING ANSIBLE · Collection on Ansible Galaxy RPM on yum.theforeman.org 10. LET'S WRITE A MODULE! 11. U N D E R T H E H O O D Most modules manage](https://reader033.vdocument.in/reader033/viewer/2022052800/5f0fb7307e708231d44587bd/html5/thumbnails/20.jpg)
THANKS!THANKS!
die-welt.net
@zhenech
@evgeni
zhenech
20