Commit Graph
81 Commits
Author SHA1 Message Date
Elijah DeLee 7cbe112e4e possible work around for 500 on /api/v2/metrics (#12376)
we've observed this in development and some users have reported experiencing 500's on /api/v2/metrics because of a key error here where a metric is missing from a certain instance
2022-06-16 13:15:25 -04:00
Elijah DeLee 689a216726 move static methods used by task manager (#12050)
* move static methods used by task manager

These static methods were being used to act on Instance-like objects
that were SimpleNamespace objects with the necessary attributes.

This change introduces dedicated classes to replace the SimpleNamespace
objects and moves the formerlly staticmethods to a place where they are
more relevant instead of tacked onto models to which they were only
loosly related.

Accept in-memory data structure in init methods for tests

* initialize remaining capacity AFTER we built map of instances
2022-04-21 13:05:06 -04:00
Elijah DeLee e24fc43a45 Revert "Only fetch fields we need in task manager"
This reverts commit 868e811b3f.

Turns out this does not play well with polymorphic models.

Will try again with .defer()
2022-04-14 11:55:33 -04:00
Elijah DeLee 868e811b3f Only fetch fields we need in task manager
By using .only we select fewer columns, avoiding potentially large
fields that we never reference.

Also, small tweak to eliminate what was a duplicate dictionary of
hostname:instance, because we don't need build and carry two copies of
the same data.
2022-04-13 17:24:33 -04:00
Elijah DeLee 2e9974133a calculate remaining capacity in static method
this is to avoid additional queries when we allready have all
the active jobs fetched in the task manager
2022-04-13 11:56:07 -04:00
Elijah DeLee 4328b4cb67 drop call that queries all running and waiting jobs
this is to fix one more place in the task manager where we end up
querying all running and waiting jobs.

Partial fix for https://github.com/ansible/awx/issues/11671
2022-04-12 10:31:47 -04:00
Elijah DeLee 202dc00f4c cast bool to str for runner env
It appears this was causing a fatal error for runner
2022-04-01 13:37:36 -04:00
Elijah DeLee 4bd6c2a804 set max dispatch workers to same as max forks
Right now, without this, we end up with a different number for max_workers than max_forks. For example, on a control node with 16 Gi of RAM,
  max_mem_capacity  w/ 100 MB/fork = (16*1024)/100 --> 164
  max_workers = 5 * 16 --> 80

This means we would allow that control node to control up to 164 jobs, but all jobs after the 80th job will be stuck in `waiting` waiting for a dispatch worker to free up to run the job.
2022-02-24 10:53:54 -05:00
Elijah DeLee 38f50f014b fix missing job lifecycle messages (#11801)
we were missing these messages for control type jobs that call start_task earlier than other types of jobs
2022-02-23 13:56:25 -05:00
Elijah DeLee 799968460d Fixup conversion of memory and cpu settings to support k8s resource request format (#11725)
fix memory and cpu settings to suport k8s resource request format

* fix conversion of memory setting to bytes

This setting has not been getting set by default, and needed some fixing
up to be compatible with setting the memory in the same way as we set it
in the operator, as well as with other changes from last year which
assume that ansible runner is returning memory in bytes.

This way we can start setting this setting in the operator, and get a
more accurate reflection of how much memory is available to the control
pod in k8s.

On platforms where services are all sharing memory, we deduct a
penalty from the memory available. On k8s we don't need to do this
because the web, redis, and task containers each have memory
allocated to them.

* Support CPU setting expressed in units used by k8s

This setting has not been getting set by default, and needed some fixing
up to be compatible with setting the CPU resource request/limits in the
same way as we set it in the resource requests/limits.

This way we can start setting this setting in the
operator, and get a more accurate reflection of how much cpu is
available to the control pod in k8s.

Because cpu on k8s can be partial cores, migrate cpu field to decimal.

k8s does not allow granularity of less than 100m (equivalent to 0.1 cores), so only
store up to 1 decimal place.

fix analytics to deal with decimal cpu

need to use DjangoJSONEncoder when Decimal fields in data passed to
json.dumps
2022-02-15 14:08:24 -05:00
Elijah DeLee 921b2bfb28 drop unused logic in task manager
There is no current need or use to keep a seperate dependency graph for
each instance group. In the interest of making it clearer what the
current code does, eliminate this superfluous complication.

We are no longer ever referencing any accounting of instance group
capacity, instead we only look
at capacity on intances.
2022-02-14 16:15:03 -05:00
Elijah DeLee dd6cf19c39 update steps for using custom operator
Updating this to use the new make commands in the operator repo
2022-02-14 11:01:30 -05:00
604cbc1737 Consume control capacity (#11665)
* Select control node before start task

Consume capacity on control nodes for controlling tasks and consider
remainging capacity on control nodes before selecting them.

This depends on the requirement that control and hybrid nodes should all
be in the instance group named 'controlplane'. Many tests do not satisfy that
requirement. I'll update the tests in another commit.

* update tests to use controlplane

We don't start any tasks if we don't have a controlplane instance group

Due to updates to fixtures, update tests to set node type and capacity
explicitly so they get expected result.

* Fixes for accounting of control capacity consumed

Update method is used to account for currently consumed capacity for
instance groups in the in-memory capacity tracking data structure we initialize in
after_lock_init and then update via calculate_capacity_consumed (both in
task_manager.py)

Also update fit_task_to_instance to consider control impact on instances

Trust that these functions do the right thing looking for a
node with capacity, and cut out redundant check for the whole group's
capacity per Alan's reccomendation.

* Refactor now redundant code

Deal with control type tasks before we loop over the preferred instance
groups, which cuts out the need for some redundant logic.

Also, fix a bug where I was missing assigning the execution node in one case!

* set job explanation on tasks that need capacity

move the job explanation for jobs that need capacity to a function
so we can re-use it in the three places we need it.

* project updates always run on the controlplane

Instance group ordering makes no sense on project updates because they
always need to run on the control plane.

Also, since hybrid nodes should always run the control processes for the
jobs running on them as execution nodes, account for this when looking for a
execution node.

* fix misleading message

the variables and wording were both misleading, fix to be more accurate
description in the two different cases where this log may be emitted.

* use settings correctly

use settings.DEFAULT_CONTROL_PLANE_QUEUE_NAME instead of a hardcoded
name
cache the controlplane_ig object during the after lock init to avoid
an uneccesary query
eliminate mistakenly duplicated AWX_CONTROL_PLANE_TASK_IMPACT and use
only AWX_CONTROL_NODE_TASK_IMPACT

* add test for control capacity consumption

add test to verify that when there are 2 jobs and only capacity for one
that one will move into waiting and the other stays in pending

* add test for hybrid node capacity consumption

assert that the hybrid node is used for both control and execution and
capacity is deducted correctly

* add test for task.capacity_type = control

Test that control type tasks have the right capacity consumed and
get assigned to the right instance group

Also fix lint in the tests

* jobs_running not accurate for control nodes

We can either NOT use "idle instances" for control nodes, or we need
to update the jobs_running property on the Instance model to count
jobs where the node is the controller_node.

I didn't do that because it may be an expensive query, and it would be
hard to make it match with jobs_running on the InstanceGroup which
filters on tasks assigned to the instance group.

This change chooses to stop considering "idle" control nodes an option,
since we can't acurrately identify them.

The way things are without any change, is we are continuing to over consume capacity on control nodes
because this method sees all control nodes as "idle" at the beginning
of the task manager run, and then only counts jobs started in that run
in the in-memory tracking. So jobs which last over a number of task
manager runs build up consuming capacity, which is accurately reported
via Instance.consumed_capacity

* Reduce default task impact for control nodes

This is something we can experiment with as far as what users
want at install time, but start with just 1 for now.

* update capacity docs

Describe usage of the new setting and the concept of control impact.

Co-authored-by: Alan Rominger <arominge@redhat.com>
Co-authored-by: Rebeccah <rhunter@redhat.com>
2022-02-14 10:13:22 -05:00
Elijah DeLee 3b2fe39a0a update another part of minikube dev env docs
vars in ansible/instantiate-awx-deployment.yml in awx-operator repo appear to have been updated, because when we used the `tower_...` vars, they did not apply
2022-01-27 23:31:20 -05:00
Elijah DeLee 598c8a1c4d Update minikube docs
Replace reference to a non-existent playbook with current directions from awx-operator
Also add some tips about how to interact with the deployment
2022-01-27 08:37:14 -05:00
Elijah DeLee faba64890e Merge pull request #11559 from kdelee/pending_container_group_jobs_take2
Add resource requests to default podspec
2022-01-20 09:54:20 -05:00
Elijah DeLee 987924cbda Add resource requests to default podspec
Extend the timeout, assuming that we want to let the kubernetes scheduler
start containers when it wants to start them. This allows us to make
resource requests knowing that when some jobs queue up waiting for
resources, they will not get reaped in as short of a
timeout.
2022-01-18 13:34:39 -05:00
Elijah DeLee 5fdfd4114a Merge pull request #11395 from kdelee/override_default_container_group_pod_spec
Allow setting default execution group pod spec
2021-12-15 13:57:47 -05:00
Elijah DeLee e10030b73d Allow setting default execution group pod spec
This will allow us to control the default container group created via settings, meaning
we could set this in the operator and the default container group would get created with it applied.

We need this for https://github.com/ansible/awx-operator/issues/242

Deepmerge the default podspec and the override

With out this, providing the `spec` for the podspec would override everything
contained, which ends up including the container used, which is not desired

Also, use the same deepmerge function def, as the code seems to be copypasted from
the utils
2021-12-10 15:02:45 -05:00
Elijah DeLee 18eaa9bb92 Merge pull request #11166 from ansible/receptorctl-status-sosreport
get receptorctl status for sosreport
2021-10-04 16:13:37 -04:00
Elijah DeLee d3289dc688 fix typo in comment in tools/sosreport/controller.py 2021-10-04 09:45:11 -04:00
Elijah DeLee 6d850e031a Merge pull request #11175 from ansible/receptor-sos
don't collect keys with sosreport
2021-09-30 10:09:16 -04:00
Elijah DeLee 54b3e2f285 don't collect keys with sosreport 2021-09-30 08:58:16 -04:00
Elijah DeLee 3a40d5e243 get receptorctl status for sosreport
I presume the logs also get collected from journalctl but I'm not sure
2021-09-29 11:24:49 -04:00
Elijah DeLee 19ccfcff9a Merge pull request #10988 from ansible/more-receptor-sos
List dir where receptor socket should be
2021-09-08 10:43:48 -04:00
Elijah DeLee 169c0f6642 Merge pull request #11022 from kdelee/try-localhost
Set python to ansible_playbook_python on hosts
2021-09-03 15:48:33 -04:00
Elijah DeLee 054569da70 emulate workaround present in demo inventory
see https://github.com/ansible/awx/commit/9d000a76dee370690562b34e17c6b157035e53cf

This change works around the fact that the presumed correct python3 for rhel8 (which the EE is based on)
is not the python3 that ansible-playbook is using, and is not where the python dependencies are installed.
2021-09-03 15:21:34 -04:00
Elijah DeLee 4a6ab622df Update inventory.py 2021-09-03 15:20:10 -04:00
Elijah DeLee ac40449d6e List dir where receptor socket should be
This is for adding more info to the sos report
2021-08-31 12:52:34 -04:00
Elijah DeLee f6d14564a2 Capture /etc/receptor in sos report
this will help with debugging so we can know what receptor's configuration was
at the time the sos report was collected
2021-08-30 17:04:35 -04:00
Elijah DeLee 86600531e2 Fix name of default awx ee
we are now tracking the latest tag
2021-08-11 22:06:56 -04:00
Elijah DeLee 9b2d2a1856 Use awx-ee:latest to get latest receptor and runner
We are updating the requirements to get the latest receptor and runner in the task container,
we should also have the latest in the EE
2021-08-11 11:36:42 -04:00
Elijah DeLee b431067aa8 also update control plane ee 2021-07-15 11:30:21 -04:00
Elijah DeLee 718b3bab4a Update defaults.py 2021-07-15 11:27:55 -04:00
Elijah DeLee b8239c1b84 bump receptor to 1.0.0 GA 2021-07-13 11:47:02 -04:00
Elijah DeLee 11e416995a accept old env vars
this broke our build of the cli docs
2021-06-22 10:49:39 -04:00
Elijah DeLee ea5bd45d03 log perf of requests at debug level 2021-06-22 10:31:15 -04:00
Elijah DeLee f0bcfc6024 add EE information to assert_status
This should help debugging to know what the EE was when an unexpected
status was found.
2021-06-16 15:37:24 -04:00
Elijah DeLee d946103961 log perf of requests at debug level 2021-06-16 15:37:24 -04:00
Elijah DeLee f2dac36dd1 Remove the cred too if not passed
NOW....should be idempotent and remove the the cred if it is not passed
2021-06-08 15:52:53 -04:00
Elijah DeLee e2b0a4f7a7 Make changed result accurate for credentials 2021-06-07 17:16:14 -04:00
Elijah DeLee 326184da0f fixup changed behavior for EEso its accurate 2021-06-07 16:50:53 -04:00
Elijah DeLee 2ce276455a Break out control plane EE as its own thing 2021-06-07 15:39:20 -04:00
Elijah DeLee e740cfcb52 revert change to serializer and use get_or_create
still need to fix up the handling of the verify-ssl bool, since
it is not being respected
2021-06-02 16:16:36 -04:00
Elijah DeLee 7818b2008f Allow modifications of managed_by_tower creds
Sysadmins may need to modify managed_by_tower credentials, the
only known case of which is a default container registry credential
for use by the default execution environments, which are also managed_by_tower
and allow modifications.
2021-06-02 13:05:02 -04:00
Elijah DeLee 043aff6a8c Create default EE in seperate awx-managment cmd
Create EE at a seperate time and also attach a registry credential if
auth information provided

This command can be run multiple times on the same instance and should be
idempotent.
2021-06-02 12:23:01 -04:00
Elijah DeLee 5d838b8980 Force fully qualified image names
If we try and pull an unqualified image name, jobs hang on a podman
prompt.
2021-05-27 10:59:25 -04:00
Elijah DeLee 75de8a30f6 clarify format of date for host_metric 2021-05-26 17:31:11 -04:00
Elijah DeLee b74990c480 allow singular execution_environment for cli
this makes "execution_environments" or "execution_environment" work
which is helpful
2021-05-25 11:28:47 -04:00
Elijah DeLee 058189dfcf tweak message about image pull option 2021-05-24 17:20:53 -04:00
Elijah DeLee 3562be8317 refactor payload construction for awxkit
This fixes container_group creation to allow passing
"is_container_group" and "credential" to the "create" method
on instance groups, and refactors other page objects
to use a common utility function to eliminate copy-pasted code
2021-03-17 10:40:00 -04:00
Elijah DeLee 88a91cfeba pin websocket-client lib
They've made breaking changes that is going to take
some deeper investigation to update awxkit to use

This is only used for development purposes, and should
have not impact on the "awx" cli entry point
2021-03-04 11:09:32 -05:00
Elijah DeLee 05dded397d make sure we use built in credential type
this way we can pass kind="registry" to akit creat method and
we get the correct built in type
2021-03-03 18:52:55 -05:00
Elijah DeLee 0e6c14e707 create performance logger to log api response time
this middleware allready existed, and we were trying to log this
data but it was not working.

Hope is these logs will be able to be shipped via external logging
and we could use kibana to track response time of different endpoints
2021-02-18 18:39:12 -05:00
Elijah DeLee a157a3598f silent_delete also needs to handle Confict 2021-01-08 10:55:55 -05:00
Elijah DeLee 908291dd3c When deleting a job sometimes we get this error
For the silent delete method, we should let this one slide
because it is an expected error that may occur if there are still
events processing.
2021-01-07 15:37:57 -05:00
Elijah DeLee 7c7d15a8be Need log level info to show up with new settings 2020-09-21 11:22:43 -04:00
Elijah DeLee d8e4ac773b Print one tarball per line
Printing out a python like list is hard to process for tests
Better to print out one tarball per line
2020-09-14 17:00:31 -04:00
Elijah DeLee a83a9c9723 remove dep on python-memcached 2020-06-10 11:18:48 -04:00
Elijah DeLee 6777b82d8e remove reference to memcached in k8s inv
we don't have memcached container anymore
2020-06-10 11:08:49 -04:00
Elijah DeLee efa5a95cf1 fix flake8 2020-05-28 13:00:37 -04:00
Elijah DeLee 90ca2fd59b be a bit more respectful of event request
minimum events made now is 10,000, used to be 10,000*number of cores.

could dig deeper but this is better for debugging changes to script
2020-05-27 19:34:12 -04:00
Elijah DeLee 5d5edf6535 create timestamp outside loop
this may be expensive
2020-05-27 18:43:26 -04:00
Elijah DeLee a599afa81c Also apply time delta to job
This way they all happened on the same day
2020-05-27 18:29:11 -04:00
Elijah DeLee 1835787772 add option to set hour delta on firehose 2020-05-27 17:56:07 -04:00
Elijah DeLee 00060c9572 make time delta for firehose events configurable
This was hardcoded to back in january, which make it of limited use testing
automation analytics behavior when there are many events, we need it to be sometime in the past two months.

Will take another pass to do the hours delta
2020-05-27 17:47:38 -04:00
Elijah DeLee 3ded30411f Merge pull request #4341 from kdelee/backport_host_summary_optimization_3.7.1
Backport host summary optimization 3.7.1
2020-05-21 13:37:16 -04:00
Elijah DeLee 8e07269738 make awxkit pass through identifier for wfjtn
We need this to be able to create workflow job template nodes with identifier
2020-04-06 11:26:56 -04:00
Elijah DeLee 2a77b8b4b9 Fix overzealous cleanup in awxkit
Introduced this problem with 1e796076f5
2020-01-22 10:23:40 -05:00
Elijah DeLee 1e796076f5 Scan jobs have been removed, clean up old refs
see https://github.com/ansible/awx/issues/5603
2020-01-21 12:11:53 -05:00
Elijah DeLee d82180605c Raise a more informative error when timeout
Right now we are often left with very little info if we do get a timeout on something that HasStatus.

Take advantage of the assert_status function that is also available on items using the HasStatus mixin to show
more info.
2020-01-08 12:47:17 -05:00
Elijah DeLee d4c8167b1b add arguments to awxkit for webhooks on jt or wfjt 2019-09-30 13:32:22 -04:00
Elijah DeLee eba69142f1 add subscriptions endpoint to awxkit 2019-09-13 12:14:33 -04:00
Elijah DeLeeand bdf4defdbe Add approval node logic to awxkit
Co-authored-by: <Apurva bakshiapurva93@gmail.com>
2019-08-27 15:36:29 -04:00
Elijah DeLee 8efa0fc397 Remove this dependency that we don't need 2019-08-15 11:26:02 -04:00
Elijah DeLee e5ad2e44fb swap file order so diff of schema makes more sense
This way we will get +'s next to new content :)
2018-12-20 15:05:01 -05:00
Elijah DeLee ca84d312ce Rename schema job to be more clear about its purpose
The make target fails when it detects schema changes, not when schema is invalid.

Also update CONTRIBUTING.md to include information about zuul jobs.
2018-11-20 07:42:10 -06:00
Elijah DeLee 4ae1fdef05 Ignore differences in whitespace for schema validation 2018-11-16 09:47:33 -05:00
Elijah DeLee 949cf53b89 Use r in front of regex string to make flake8 happy
This means we should not escape the \ character in the same way
2018-11-15 17:29:27 -05:00
Elijah DeLee a68e22b114 Add tox target to detect schema changes
Fetches reference schema from public bucket
Still need define method for updating reference schema on merge.
2018-11-15 16:25:13 -05:00
Elijah DeLee d70cd113e1 Reduce duplicated logic for genschema target 2018-11-15 15:29:35 -05:00