SlideShare a Scribd company logo
MonkeyMan – a Perl5 framework for Apache CloudStack automation
What do we like in Apache CloudStack?
Manageability
• unified management portal;
• browser-compatible VNC-interface;
• powerful API.
Omnivorousness
• hypervisors: KVM, LXC, XEN, VMWare, Hyper-V;
• storages: any filesystems, including clustered filesystems that could be accessed by a shared-
mountpoint GlusterFS, Ceph, NFS, SMB, GFS2, OCFS2.
Security
• encrypted networking (IPSec, HTTPS);
• firewalls and load-balancers (internal VR, NetScaler, F5, FortiGate, pfSense and other beasts);
• open source ideology.
https://cloudstack.apache.org/
What else do we like in Apache CloudStack?
Reliablity
• clusterisation, live migration;
• high-availability, affinity groups;
• volume and VM snapshots.
Rapid deployment
• ISO-images and templates;
• OS preferences for the host;
• host and storage tags, which can be used in the service and storage offerings.
Flexible access policies
• domains, accounts, users;
• resouce limits;
• LDAP support.
https://cloudstack.apache.org/
MonkeyMan: the cloud manager
MonkeyMan - the automation framework
Implemented in Perl5 with Moose
All ACS objects are Perl objects
Flexible API vocabularies
XML and XPath
Pluggable and replaceable modules
http://monkeyman.tucha.ua/
MonkeyMan: Perl5 & Moose
# Use Moose and be happy :)
use Moose::Role;
has 'monkeyman' => (
is => 'ro',
isa => 'MonkeyMan',
reader => 'get_monkeyman',
writer => '_set_monkeyman',
predicate => '_has_monkeyman',
required => 1
);
Why use Moose?
Attributes
Accessors
Validation
Roles
Subclasses
Syntax extentions
Art by www.animalcrewshop.com
http://monkeyman.tucha.ua/
MonkeyMan: some of utilities
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan: a sample ACS query
my $api = $monkeyman->get_cloudstack('PRIMARY')->get_api;
my $virtualmachine = $api->perform_action(
type => 'VirtualMachine',
action => 'create',
requested => { 'element' => 'element' },
parameters => {
zoneid => 'f09fe8dd-3567-4ff6-ac3a-2f85dec2636d',
templateid => '8b53dc6a-084d-4b5a-8ac5-3f88301c6703',
serviceofferingid => '97d74503-d609-4edb-8633-748d400aad5e',
# ...skipped...
}
);
http://monkeyman.tucha.ua/
MonkeyMan: API vocabularies (composing a request)
package MonkeyMan::CloudStack::API::Element::VirtualMachine;
with 'MonkeyMan::CloudStack::API::Roles::Element';
# ...skipped...
our %vocabulary_tree = (
type => 'VirtualMachine', name => 'virtual machine', entity_node => 'virtualmachine',
actions => {
create => {
request => {
command => 'deployVirtualMachine',
async => 1, paged => 0,
parameters => {
zoneid => {
required => 1,
command_parameters => { 'zoneid' => '<%VALUE%>' },
},
templateid => {
required => 1,
command_parameters => { 'templateid' => '<%VALUE%>' },
},
serviceofferingid => {
required => 1,
command_parameters => { 'serviceofferingid' => '<%VALUE%>' },
}, # ...skipped...
}, # ...skipped...
}, # ...skipped...
}, # ...skipped...
},
);
http://monkeyman.tucha.ua/
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan: ACS vocabularies (parsing a response)
package MonkeyMan::CloudStack::API::Element::VirtualMachine;
with 'MonkeyMan::CloudStack::API::Roles::Element';
# ...skipped...
our %vocabulary_tree = (
type => 'VirtualMachine', name => 'virtual machine', entity_node => 'virtualmachine',
actions => {
create => {
response => {
response_node => 'queryasyncjobresultresponse',
results => {
element => {
return_as => [ qw( dom element id ) ],
queries => [ '/<%OUR_RESPONSE_NODE%>/jobresult/<%OUR_ENTITY_NODE%>' ],
required => 0,
multiple => 1
},
id => {
return_as => [ qw( value ) ],
queries => [ '/<%OUR_RESPONSE_NODE%>/jobresult/<%OUR_ENTITY_NODE%>/id' ],
required => 0,
multiple => 1
}, # ...skipped...
}, # ...skipped...
}, # ...skipped...
}, # ...skipped...
},
);
http://monkeyman.tucha.ua/
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan: logging and debugging
http://monkeyman.tucha.ua/
$logger->debugf(’The %s %s is %s‘,
$vm_object,
$vm_object->get_type(noun => 1),
$vm_object->qxp(’/status’)
);
MonkeyMan – a Perl5 framework for Apache CloudStack automation
MonkeyMan – a Perl5 framework for Apache CloudStack automation
Thanks for your interest!
http://monkeyman.tucha.ua/

More Related Content

What's hot (20)

PDF
MySQL High Availability Deep Dive
hastexo
 
PPTX
Designing High Availability for HashiCorp Vault in AWS
☁ Bryan Krausen
 
PPTX
Openstack glance
SHAMEEM F
 
PDF
Sails.js Model / ORM introduce
謝 宗穎
 
PDF
Neil Saunders (Beamly) - Securing your AWS Infrastructure with Hashicorp Vault
Outlyer
 
DOCX
Terraform bootstrap code_execute
rknaik76
 
PDF
Shield talk elasticsearch meetup Zurich 27.05.2015
em_mu
 
PDF
Cassandra and security
Ben Bromhead
 
PDF
A Introduction of Packer
Freyr Lin
 
PDF
Slides Cassandra
hamidd77
 
PPT
Node.js
Pravin Mishra
 
PPTX
Ansible
Vladimír Smitka
 
PPTX
N:1 Replication meets MHA
do_aki
 
PDF
JavaScript is the new black - Why Node.js is going to rock your world - Web 2...
Tom Croucher
 
PDF
MySQL NDB 8.0 clusters in your laptop with dbdeployer
Giuseppe Maxia
 
ODP
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Server
aaroncouch
 
PPTX
OpenStack Glance
Deepti Ramakrishna
 
PDF
Secret Management with Hashicorp’s Vault
AWS Germany
 
PPTX
MongoDB on Azure - Tips, Tricks and Examples
MongoDB
 
PDF
Test complex database systems in your laptop with dbdeployer
Giuseppe Maxia
 
MySQL High Availability Deep Dive
hastexo
 
Designing High Availability for HashiCorp Vault in AWS
☁ Bryan Krausen
 
Openstack glance
SHAMEEM F
 
Sails.js Model / ORM introduce
謝 宗穎
 
Neil Saunders (Beamly) - Securing your AWS Infrastructure with Hashicorp Vault
Outlyer
 
Terraform bootstrap code_execute
rknaik76
 
Shield talk elasticsearch meetup Zurich 27.05.2015
em_mu
 
Cassandra and security
Ben Bromhead
 
A Introduction of Packer
Freyr Lin
 
Slides Cassandra
hamidd77
 
Node.js
Pravin Mishra
 
N:1 Replication meets MHA
do_aki
 
JavaScript is the new black - Why Node.js is going to rock your world - Web 2...
Tom Croucher
 
MySQL NDB 8.0 clusters in your laptop with dbdeployer
Giuseppe Maxia
 
Forget MAMP and WAMP, Use Virtual Box to Have a Real Ubuntu Server
aaroncouch
 
OpenStack Glance
Deepti Ramakrishna
 
Secret Management with Hashicorp’s Vault
AWS Germany
 
MongoDB on Azure - Tips, Tricks and Examples
MongoDB
 
Test complex database systems in your laptop with dbdeployer
Giuseppe Maxia
 

Similar to MonkeyMan – a Perl5 framework for Apache CloudStack automation (20)

PPTX
Monkey man
ShapeBlue
 
PDF
Puppet and the HashiStack
Bram Vogelaar
 
PDF
Rohit yadav cloud stack internals
ShapeBlue
 
PPTX
How to add a new hypervisor to CloudStack - Lessons learned from Hyper-V effort
ShapeBlue
 
PDF
Infrastructure as code with Puppet and Apache CloudStack
ke4qqq
 
PDF
ApacheCloudStack
Puppet
 
PDF
Cloud APIs Overview Tucker
Infrastructure 2.0
 
ODP
Puppetpreso
ke4qqq
 
PDF
CloudStack Tooling Ecosystem – Kiran Chavala, ShapeBlue
ShapeBlue
 
ODP
CloudStack, jclouds and Whirr!
Andrew Bayer
 
PPTX
How to add a new hypervisor to CloudStack:Lessons learned from Hyper-V effort
Donal Lafferty
 
PDF
Test driven infrastructure
Skills Matter Talks
 
ODP
Developingapiplug insforcs-151112204727-lva1-app6891
NetApp
 
PDF
CloudOps CloudStack Days, Austin April 2015
CloudOps2005
 
PDF
Operating CloudStack: Sharing My Tool Box @ApacheCon NA'15
Remi Bergsma
 
PDF
Service Delivery Assembly Line with Vagrant, Packer, and Ansible
Isaac Christoffersen
 
PDF
2013 05-openstack-israel-heat
Alex Heneveld
 
PDF
What’s New and What’s Upcoming in Apache CloudStack, Giles Sirett, ShapeBlue
ShapeBlue
 
PPTX
Getting Started with Apache CloudStack
Joe Brockmeier
 
PPTX
Taking the open cloud to 11
Joe Brockmeier
 
Monkey man
ShapeBlue
 
Puppet and the HashiStack
Bram Vogelaar
 
Rohit yadav cloud stack internals
ShapeBlue
 
How to add a new hypervisor to CloudStack - Lessons learned from Hyper-V effort
ShapeBlue
 
Infrastructure as code with Puppet and Apache CloudStack
ke4qqq
 
ApacheCloudStack
Puppet
 
Cloud APIs Overview Tucker
Infrastructure 2.0
 
Puppetpreso
ke4qqq
 
CloudStack Tooling Ecosystem – Kiran Chavala, ShapeBlue
ShapeBlue
 
CloudStack, jclouds and Whirr!
Andrew Bayer
 
How to add a new hypervisor to CloudStack:Lessons learned from Hyper-V effort
Donal Lafferty
 
Test driven infrastructure
Skills Matter Talks
 
Developingapiplug insforcs-151112204727-lva1-app6891
NetApp
 
CloudOps CloudStack Days, Austin April 2015
CloudOps2005
 
Operating CloudStack: Sharing My Tool Box @ApacheCon NA'15
Remi Bergsma
 
Service Delivery Assembly Line with Vagrant, Packer, and Ansible
Isaac Christoffersen
 
2013 05-openstack-israel-heat
Alex Heneveld
 
What’s New and What’s Upcoming in Apache CloudStack, Giles Sirett, ShapeBlue
ShapeBlue
 
Getting Started with Apache CloudStack
Joe Brockmeier
 
Taking the open cloud to 11
Joe Brockmeier
 
Ad

More from Cloud IaaS Provider Tucha (20)

PPT
Вся правда об облаках, или Облачные мифы, давайте, до свидания!
Cloud IaaS Provider Tucha
 
PPTX
Безопасность в облаке: что она включает в себя и как её обеспечить?
Cloud IaaS Provider Tucha
 
PDF
Быль о частных облаках и зря потраченных ресурсах. Владимир мельник, СТО Tucha
Cloud IaaS Provider Tucha
 
PPTX
Публичный IaaS на базе ПО с открытым кодом
Cloud IaaS Provider Tucha
 
PPT
Облачный сервис - безопасен ли он для адвокатской деятельности?
Cloud IaaS Provider Tucha
 
PDF
Построение облачной СХД на базе ПО с открытым кодом (Ceph). Бюджетно и надёжно
Cloud IaaS Provider Tucha
 
PPT
Построение собственного вычислительного облака на базе программного обеспечен...
Cloud IaaS Provider Tucha
 
PPT
Безболезненная миграция высоконагруженных веб-приложений с хостинга на хостинг
Cloud IaaS Provider Tucha
 
PPT
Забег на скорость: насколько быстро можно реально перенести облачную инфрастр...
Cloud IaaS Provider Tucha
 
PPTX
Эволюция онлайн. Как из «скрипта-обезьянки» вырастить полноценного помощника
Cloud IaaS Provider Tucha
 
PPTX
Совмещение матриц. Можно ли из технаря сделать управленца и наоборот?
Cloud IaaS Provider Tucha
 
PPTX
Дрейф у суміжні області: де та як може додатково заробляти фрілансер.
Cloud IaaS Provider Tucha
 
PDF
Табор уходит в небо, или Переход в облачный офис как способ повысить эффектив...
Cloud IaaS Provider Tucha
 
PPTX
TuchaHost - хостинг серверов в облаке
Cloud IaaS Provider Tucha
 
PPTX
Вебинар "Как организовать мобильный офис незаметно от окружающих"
Cloud IaaS Provider Tucha
 
PPTX
Онлайн-сервис Yaware для учёта рабочего времени
Cloud IaaS Provider Tucha
 
PPTX
Эволюция лени, Владимир Мельник, Tucha
Cloud IaaS Provider Tucha
 
PPTX
Цена секунды, или Влияние скорости работы сервиса на его коммерческую эффекти...
Cloud IaaS Provider Tucha
 
PPTX
Сайт неваляшка, Владимир Мельник, Tucha
Cloud IaaS Provider Tucha
 
Вся правда об облаках, или Облачные мифы, давайте, до свидания!
Cloud IaaS Provider Tucha
 
Безопасность в облаке: что она включает в себя и как её обеспечить?
Cloud IaaS Provider Tucha
 
Быль о частных облаках и зря потраченных ресурсах. Владимир мельник, СТО Tucha
Cloud IaaS Provider Tucha
 
Публичный IaaS на базе ПО с открытым кодом
Cloud IaaS Provider Tucha
 
Облачный сервис - безопасен ли он для адвокатской деятельности?
Cloud IaaS Provider Tucha
 
Построение облачной СХД на базе ПО с открытым кодом (Ceph). Бюджетно и надёжно
Cloud IaaS Provider Tucha
 
Построение собственного вычислительного облака на базе программного обеспечен...
Cloud IaaS Provider Tucha
 
Безболезненная миграция высоконагруженных веб-приложений с хостинга на хостинг
Cloud IaaS Provider Tucha
 
Забег на скорость: насколько быстро можно реально перенести облачную инфрастр...
Cloud IaaS Provider Tucha
 
Эволюция онлайн. Как из «скрипта-обезьянки» вырастить полноценного помощника
Cloud IaaS Provider Tucha
 
Совмещение матриц. Можно ли из технаря сделать управленца и наоборот?
Cloud IaaS Provider Tucha
 
Дрейф у суміжні області: де та як може додатково заробляти фрілансер.
Cloud IaaS Provider Tucha
 
Табор уходит в небо, или Переход в облачный офис как способ повысить эффектив...
Cloud IaaS Provider Tucha
 
TuchaHost - хостинг серверов в облаке
Cloud IaaS Provider Tucha
 
Вебинар "Как организовать мобильный офис незаметно от окружающих"
Cloud IaaS Provider Tucha
 
Онлайн-сервис Yaware для учёта рабочего времени
Cloud IaaS Provider Tucha
 
Эволюция лени, Владимир Мельник, Tucha
Cloud IaaS Provider Tucha
 
Цена секунды, или Влияние скорости работы сервиса на его коммерческую эффекти...
Cloud IaaS Provider Tucha
 
Сайт неваляшка, Владимир Мельник, Tucha
Cloud IaaS Provider Tucha
 
Ad

Recently uploaded (20)

PPTX
Enabling the Digital Artisan – keynote at ICOCI 2025
Alan Dix
 
PDF
LLM Search Readiness Audit - Dentsu x SEO Square - June 2025.pdf
Nick Samuel
 
PPTX
𝙳𝚘𝚠𝚗𝚕𝚘𝚊𝚍—Wondershare Filmora Crack 14.0.7 + Key Download 2025
sebastian aliya
 
PPTX
Paycifi - Programmable Trust_Breakfast_PPTXT
FinTech Belgium
 
PPTX
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
PPTX
Smarter Governance with AI: What Every Board Needs to Know
OnBoard
 
PPTX
UserCon Belgium: Honey, VMware increased my bill
stijn40
 
PDF
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Priyanka Aash
 
PDF
From Chatbot to Destroyer of Endpoints - Can ChatGPT Automate EDR Bypasses (1...
Priyanka Aash
 
PPSX
Usergroup - OutSystems Architecture.ppsx
Kurt Vandevelde
 
PPTX
01_Approach Cyber- DORA Incident Management.pptx
FinTech Belgium
 
PDF
Plugging AI into everything: Model Context Protocol Simplified.pdf
Abati Adewale
 
PDF
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
Edge AI and Vision Alliance
 
PPTX
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Pitch ...
Michele Kryston
 
PDF
Python Conference Singapore - 19 Jun 2025
ninefyi
 
PDF
FME as an Orchestration Tool with Principles From Data Gravity
Safe Software
 
PPTX
reInforce 2025 Lightning Talk - Scott Francis.pptx
ScottFrancis51
 
PDF
The Growing Value and Application of FME & GenAI
Safe Software
 
PDF
Why aren't you using FME Flow's CPU Time?
Safe Software
 
PDF
Salesforce Summer '25 Release Frenchgathering.pptx.pdf
yosra Saidani
 
Enabling the Digital Artisan – keynote at ICOCI 2025
Alan Dix
 
LLM Search Readiness Audit - Dentsu x SEO Square - June 2025.pdf
Nick Samuel
 
𝙳𝚘𝚠𝚗𝚕𝚘𝚊𝚍—Wondershare Filmora Crack 14.0.7 + Key Download 2025
sebastian aliya
 
Paycifi - Programmable Trust_Breakfast_PPTXT
FinTech Belgium
 
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
Smarter Governance with AI: What Every Board Needs to Know
OnBoard
 
UserCon Belgium: Honey, VMware increased my bill
stijn40
 
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Priyanka Aash
 
From Chatbot to Destroyer of Endpoints - Can ChatGPT Automate EDR Bypasses (1...
Priyanka Aash
 
Usergroup - OutSystems Architecture.ppsx
Kurt Vandevelde
 
01_Approach Cyber- DORA Incident Management.pptx
FinTech Belgium
 
Plugging AI into everything: Model Context Protocol Simplified.pdf
Abati Adewale
 
“MPU+: A Transformative Solution for Next-Gen AI at the Edge,” a Presentation...
Edge AI and Vision Alliance
 
MARTSIA: A Tool for Confidential Data Exchange via Public Blockchain - Pitch ...
Michele Kryston
 
Python Conference Singapore - 19 Jun 2025
ninefyi
 
FME as an Orchestration Tool with Principles From Data Gravity
Safe Software
 
reInforce 2025 Lightning Talk - Scott Francis.pptx
ScottFrancis51
 
The Growing Value and Application of FME & GenAI
Safe Software
 
Why aren't you using FME Flow's CPU Time?
Safe Software
 
Salesforce Summer '25 Release Frenchgathering.pptx.pdf
yosra Saidani
 

MonkeyMan – a Perl5 framework for Apache CloudStack automation

  • 2. What do we like in Apache CloudStack? Manageability • unified management portal; • browser-compatible VNC-interface; • powerful API. Omnivorousness • hypervisors: KVM, LXC, XEN, VMWare, Hyper-V; • storages: any filesystems, including clustered filesystems that could be accessed by a shared- mountpoint GlusterFS, Ceph, NFS, SMB, GFS2, OCFS2. Security • encrypted networking (IPSec, HTTPS); • firewalls and load-balancers (internal VR, NetScaler, F5, FortiGate, pfSense and other beasts); • open source ideology. https://cloudstack.apache.org/
  • 3. What else do we like in Apache CloudStack? Reliablity • clusterisation, live migration; • high-availability, affinity groups; • volume and VM snapshots. Rapid deployment • ISO-images and templates; • OS preferences for the host; • host and storage tags, which can be used in the service and storage offerings. Flexible access policies • domains, accounts, users; • resouce limits; • LDAP support. https://cloudstack.apache.org/
  • 4. MonkeyMan: the cloud manager MonkeyMan - the automation framework Implemented in Perl5 with Moose All ACS objects are Perl objects Flexible API vocabularies XML and XPath Pluggable and replaceable modules http://monkeyman.tucha.ua/
  • 5. MonkeyMan: Perl5 & Moose # Use Moose and be happy :) use Moose::Role; has 'monkeyman' => ( is => 'ro', isa => 'MonkeyMan', reader => 'get_monkeyman', writer => '_set_monkeyman', predicate => '_has_monkeyman', required => 1 ); Why use Moose? Attributes Accessors Validation Roles Subclasses Syntax extentions Art by www.animalcrewshop.com http://monkeyman.tucha.ua/
  • 6. MonkeyMan: some of utilities
  • 9. MonkeyMan: a sample ACS query my $api = $monkeyman->get_cloudstack('PRIMARY')->get_api; my $virtualmachine = $api->perform_action( type => 'VirtualMachine', action => 'create', requested => { 'element' => 'element' }, parameters => { zoneid => 'f09fe8dd-3567-4ff6-ac3a-2f85dec2636d', templateid => '8b53dc6a-084d-4b5a-8ac5-3f88301c6703', serviceofferingid => '97d74503-d609-4edb-8633-748d400aad5e', # ...skipped... } ); http://monkeyman.tucha.ua/
  • 10. MonkeyMan: API vocabularies (composing a request) package MonkeyMan::CloudStack::API::Element::VirtualMachine; with 'MonkeyMan::CloudStack::API::Roles::Element'; # ...skipped... our %vocabulary_tree = ( type => 'VirtualMachine', name => 'virtual machine', entity_node => 'virtualmachine', actions => { create => { request => { command => 'deployVirtualMachine', async => 1, paged => 0, parameters => { zoneid => { required => 1, command_parameters => { 'zoneid' => '<%VALUE%>' }, }, templateid => { required => 1, command_parameters => { 'templateid' => '<%VALUE%>' }, }, serviceofferingid => { required => 1, command_parameters => { 'serviceofferingid' => '<%VALUE%>' }, }, # ...skipped... }, # ...skipped... }, # ...skipped... }, # ...skipped... }, ); http://monkeyman.tucha.ua/
  • 14. MonkeyMan: ACS vocabularies (parsing a response) package MonkeyMan::CloudStack::API::Element::VirtualMachine; with 'MonkeyMan::CloudStack::API::Roles::Element'; # ...skipped... our %vocabulary_tree = ( type => 'VirtualMachine', name => 'virtual machine', entity_node => 'virtualmachine', actions => { create => { response => { response_node => 'queryasyncjobresultresponse', results => { element => { return_as => [ qw( dom element id ) ], queries => [ '/<%OUR_RESPONSE_NODE%>/jobresult/<%OUR_ENTITY_NODE%>' ], required => 0, multiple => 1 }, id => { return_as => [ qw( value ) ], queries => [ '/<%OUR_RESPONSE_NODE%>/jobresult/<%OUR_ENTITY_NODE%>/id' ], required => 0, multiple => 1 }, # ...skipped... }, # ...skipped... }, # ...skipped... }, # ...skipped... }, ); http://monkeyman.tucha.ua/
  • 23. MonkeyMan: logging and debugging http://monkeyman.tucha.ua/ $logger->debugf(’The %s %s is %s‘, $vm_object, $vm_object->get_type(noun => 1), $vm_object->qxp(’/status’) );
  • 26. Thanks for your interest! http://monkeyman.tucha.ua/