{"id":22306205,"url":"https://github.com/haxsaw/actuator","last_synced_at":"2025-03-26T01:13:21.918Z","repository":{"id":20550130,"uuid":"23829913","full_name":"haxsaw/actuator","owner":"haxsaw","description":"Declarative Python front end for AWS, Azure, and OpenStack. Model infra, config, and execution, then orchestrate system startup.","archived":false,"fork":false,"pushed_at":"2021-06-16T14:24:22.000Z","size":1803,"stargazers_count":1,"open_issues_count":16,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-30T21:43:23.447Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/haxsaw.png","metadata":{"files":{"readme":"README","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-09-09T10:59:06.000Z","updated_at":"2022-01-29T21:50:44.000Z","dependencies_parsed_at":"2022-09-06T11:11:47.619Z","dependency_job_id":null,"html_url":"https://github.com/haxsaw/actuator","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haxsaw%2Factuator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haxsaw%2Factuator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haxsaw%2Factuator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haxsaw%2Factuator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haxsaw","download_url":"https://codeload.github.com/haxsaw/actuator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245568567,"owners_count":20636803,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-03T19:14:57.776Z","updated_at":"2025-03-26T01:13:21.887Z","avatar_url":"https://github.com/haxsaw.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Actuator\n========\n\nActuator allows you to use Python to declaratively describe system\ninfra, configuration, and execution requirements, and then provision\nthem in the cloud.\n\n1.  Intro  \n2.  Installing  \n3.  Basic  \n4.  IDE install  \n5.  Requirements  \n6.  Python version  \n7.  Core packages  \n8.  Tutorial  \n9.  Documentation  \n10. Hadoop Example  \n11. Roadmap (yet to come)  \n12. Contact  \n13. Acknowledgements\n\nIntro\n-----\n\nCurrent status\n\n-   12 Feb 2015: Actuator can provision a limited set of items against\n    Openstack clouds. It can create instances, networks, subnets,\n    routers (plus router gateways and interfaces), and floating IPs. Not\n    all options available via the Python Openstack client libraries are\n    supported for each provisionable. Namespace models can drive the\n    variable aspects of infra models successfully, and acquire\n    information from the infra model such as IPs of a provisioned\n    server. These can then be accessed by the configuration model, which\n    has support of a small set of Ansible modules (specifically, ping,\n    command, shell, script, and copy file), as well as a task that can\n    process a template file through the namespace before it gets copied\n    to a remote machine. Environment variables are populated from the\n    namespace model for each configuration activity run on a remote\n    system. Due to the direct dependency on Ansible, Actuator must\n    itself run on a *nix box. A number of features over the Oct status\n    have been added to make the environment more expressive.\n\nActuator seeks to provide an end-to-end set of tools for spinning up\nsystems in the cloud, from provisioning the infra, defining the names\nthat govern operation, configuring the infra for the software that is to\nbe run, and then executing that system's code on the configured infra.\n\nIt does this by providing facilities that allow a system to be described\nas a collection of models in a declarative fashion directly in Python\ncode, in a manner similar to various declarative systems for ORMs\n(Elixir being a prime example). Being in Python, these models:\n\n-   can be very flexible and dynamic in their composition  \n-   can be integrated with other Python packages  \n-   can be authored and browsed in existing IDEs  \n-   can be debugged with standard tools  \n-   can be used in a variety of ways  \n-   and can be factored into multiple modules of reusable sets of\n    declarative components\n\nAnd while each model provides capabilties on their own, they can be\ninter-related to not only exchange information, but to allow instances\nof a model to tailor the content of other models.\n\nActuator uses a Python class as the basis for defining a model, and the\nclass serves as a logical description of the item being modeled; for\ninstance a collection of infrastructure components for a system. These\nmodel classes can have both static and dynamic aspects, and can\nthemselves be easily created within a factory function to make the\nclasses' content highly variable.\n\nActuator models can be related to each other so that their structure and\ndata can inform and sometimes drive the content of other models.\n\nInstalling\n----------\n\nBasic\n\nThe best way to try Actuator out is to create a virtual Python\nenvironment with virtualenv and then use pip to install Actuator into it\n(virtualenv will take care of installing pip for you). After you fetch\nvirtualenv and install it into your global Python 2.7, you can create an\n\"Actuator test\" (at) environment under your home directory with the\nfollowing command:\n\n    ~/tmp$ virtualenv --no-site-packages ~/at\n\nYou then need to activate the environment to work in it; do that with\nthe following shell command:\n\n    ~/tmp$ source ~/at/bin/activate\n\nThis will change your shell command prompt to now be prepended with the\nname of your virtual environment, in this case '(at)'. Clone the\nActuator project and cd into the project root (where the setup.py file\nis). There, run the following pip command to install Actuator into your\nvirtual environment:\n\n    (at)~/tmp/actuator/$ pip install .\n\nNow, while in your virtual environment, you can start Python and import\nActuator:\n\n    (at)~/tmp/actuator$ python\n    Python 2.7.6 (default, Mar 22 2014, 22:59:56) \n    [GCC 4.8.2] on linux2\n    Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n    \u003e\u003e\u003e from actuator import *\n    \u003e\u003e\u003e \n\nWhen you're done playing around with Actuator, remember to deactivate\nyour virtual env:\n\n    (at)~/tmp/actuator$ deactivate\n    ~/tmp/actuator$\n\nIDE install\n\nTo get the full value of Actuator, you'll want to use it from an IDE.\nOnce you have a virtual environment set up, most IDEs provide a way add\nadditional Python interpreters to choose from when you start a project.\nYou can add the interpreter from the virtual environment created above,\nand the IDE will then know all about Actuator.\n\nThe details vary from IDE to IDE, but there's lots of help on the web\nfor this process. For instance, here are directions for adding\ninterpreters to Eclipse using the PyDev plugin:\n\nhttp://pydev.org/manual_101_interpreter.html\n\nRequirements\n------------\n\nPython version\n\nActuator has been developed against Python 2.7. Support for 3.x will\ncome later.\n\nCore packages\n\nActuator requires the following packages:\n\n-   networkx, 1.9 minimum  \n-   ipaddress, 1.0.4 minimum  \n-   fake_factory (to support running tests), 0.4.2 minimum  \n-   ansible, 1.7.2 minimum. Currently required for configuration tasks,\n    but other config systems will be supported in the future  \n-   subprocess32, 3.2.6 minimum. MUST BE IMPORTED BEFORE ANY ANSIBLE\n    MODULES  \n-   python_novaclient, 2.18.1 minimum (for Openstack)  \n-   python_neutronclient, 2.3.7 minimum (for Openstack)  \n-   nose, 1.3.4 minimum, for testing  \n-   coverage, 3.7.1 minimum, for testing  \n-   epydoc, 3.0.1 minimum, documentation generation\n\nTutorial\n--------\n\nYou can find a discussion of the basic concepts and an overview of the\nuse of Actuator here.\n\nDocumentation\n-------------\n\nCurrently, the only supplemental documentation are the epydoc-generated\ndocs, the source html of which can be found  \nhere. The root document is index.html.\n\nHadoop Example\n--------------\n\nA more significant example of Actuator's use can be found in the\nexamples directory. It is a set of models that describe setting up a\nHadoop cluster with an arbitrary number of slave nodes. You can see the\nreadme and associated example files  \nhere.\n\nContact\n-------\n\nYou can write to me with questions at actuaor@pobox.com.\n\nAcknowledgements\n----------------\n\nThe following projects and people have provided inspiration, ideas, or\napproaches that are used in Actuator.\n\n-   Elixir: Actuator's declarative style has been informed by Elixir's\n    declarative ORM approach. Additionally, Actuator uses a similar\n    mechanism to Elixir's for its \"with_\" functions that provide\n    modifications to a modeling class (such as with_variables() and\n    with_components()).  \n-   Celery: Actuator has re-used some of Celery's notation for\n    describing dependencies between tasks and other entities.  \n-   John Nolan, who provided a sounding board for ideas and spent time\n    pairing on an initial implementation.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaxsaw%2Factuator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaxsaw%2Factuator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaxsaw%2Factuator/lists"}