mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-22 04:40:22 -07:00
Adds bigip_asm_policy module (#32281)
This module can be used to import asm policies from file or existing template. Supported file types are xml, compact xml, and binary
This commit is contained in:
parent
47fb002c88
commit
2a5f6c28cf
4 changed files with 1807 additions and 0 deletions
|
@ -0,0 +1,197 @@
|
|||
{
|
||||
"plainTextProfileReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/plain-text-profiles?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"learningMode": "manual",
|
||||
"dataGuardReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/data-guard?ver=12.1.2"
|
||||
},
|
||||
"stagingSettings": {
|
||||
"signatureStaging": true,
|
||||
"placeSignaturesInStaging": false,
|
||||
"enforcementReadinessPeriod": 7
|
||||
},
|
||||
"createdDatetime": "2017-09-21T11:52:24Z",
|
||||
"geolocationEnforcementReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/geolocation-enforcement?ver=12.1.2"
|
||||
},
|
||||
"versionLastChange": "Allowed Response Code 503 [add]: Response Code was set to 503.",
|
||||
"name": "fake_policy",
|
||||
"caseInsensitive": false,
|
||||
"loginPageReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/login-pages?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"fullPath": "/Common/fake_policy",
|
||||
"description": "",
|
||||
"attributes": {
|
||||
"pathParameterHandling": "as-parameters",
|
||||
"triggerAsmIruleEvent": "disabled",
|
||||
"inspectHttpUploads": false,
|
||||
"maskCreditCardNumbersInRequest": true,
|
||||
"maximumHttpHeaderLength": "8192",
|
||||
"useDynamicSessionIdInUrl": false,
|
||||
"maximumCookieHeaderLength": "8192"
|
||||
},
|
||||
"partition": "Common",
|
||||
"webScrapingReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/web-scraping?ver=12.1.2"
|
||||
},
|
||||
"csrfProtectionReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/csrf-protection?ver=12.1.2"
|
||||
},
|
||||
"customXffHeaders": [],
|
||||
"kind": "tm:asm:policies:policystate",
|
||||
"virtualServers": [],
|
||||
"ipIntelligenceReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/ip-intelligence?ver=12.1.2"
|
||||
},
|
||||
"protocolIndependent": false,
|
||||
"sessionAwarenessSettingsReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/session-tracking?ver=12.1.2"
|
||||
},
|
||||
"signatureSetReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/signature-sets?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"parameterReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/parameters?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"allowedResponseCodes": [
|
||||
400,
|
||||
401,
|
||||
404,
|
||||
407,
|
||||
417,
|
||||
503
|
||||
],
|
||||
"applicationLanguage": "utf-8",
|
||||
"enforcementMode": "transparent",
|
||||
"loginEnforcementReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/login-enforcement?ver=12.1.2"
|
||||
},
|
||||
"navigationParameterReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/navigation-parameters?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"gwtProfileReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/gwt-profiles?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"whitelistIpReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/whitelist-ips?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"historyRevisionReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/history-revisions?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"policyBuilderReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/policy-builder?ver=12.1.2"
|
||||
},
|
||||
"responsePageReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/response-pages?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"vulnerabilityAssessmentReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/vulnerability-assessment?ver=12.1.2"
|
||||
},
|
||||
"blockingSettingReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/blocking-settings?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"cookieReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/cookies?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"hostNameReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/host-names?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"versionDeviceName": "ltm4restlab.lab.local",
|
||||
"selfLink": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw?ver=12.1.2",
|
||||
"signatureReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/signatures?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"filetypeReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/filetypes?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"id": "0EHlYeS5noAOZLY3YsJjEw",
|
||||
"manualVirtualServers": [],
|
||||
"modifierName": "admin",
|
||||
"versionDatetime": "2017-04-11T08:05:22Z",
|
||||
"subPath": "/Common",
|
||||
"sessionTrackingStatusReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/session-tracking-statuses?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"active": true,
|
||||
"auditLogReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/audit-logs?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"trustXff": false,
|
||||
"websocketUrlReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/websocket-urls?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"xmlProfileReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/xml-profiles?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"methodReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/methods?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"redirectionProtectionReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/redirection-protection?ver=12.1.2"
|
||||
},
|
||||
"vulnerabilityReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/vulnerabilities?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"creatorName": "SYSTEM",
|
||||
"urlReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/urls?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"headerReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/headers?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"xmlValidationFileReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/xml-validation-files?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"lastUpdateMicros": 1.506250903e+15,
|
||||
"jsonProfileReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/json-profiles?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"bruteForceAttackPreventionReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/brute-force-attack-preventions?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"extractionReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/extractions?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"characterSetReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/character-sets?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"isModified": false,
|
||||
"suggestionReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/suggestions?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"sensitiveParameterReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/sensitive-parameters?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"versionPolicyName": "/Common/fake_policy"
|
||||
}
|
|
@ -0,0 +1,197 @@
|
|||
{
|
||||
"plainTextProfileReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/plain-text-profiles?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"learningMode": "manual",
|
||||
"dataGuardReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/data-guard?ver=12.1.2"
|
||||
},
|
||||
"stagingSettings": {
|
||||
"signatureStaging": true,
|
||||
"placeSignaturesInStaging": false,
|
||||
"enforcementReadinessPeriod": 7
|
||||
},
|
||||
"createdDatetime": "2017-09-21T11:52:24Z",
|
||||
"geolocationEnforcementReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/geolocation-enforcement?ver=12.1.2"
|
||||
},
|
||||
"versionLastChange": "Allowed Response Code 503 [add]: Response Code was set to 503.",
|
||||
"name": "fake_policy",
|
||||
"caseInsensitive": false,
|
||||
"loginPageReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/login-pages?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"fullPath": "/Common/fake_policy",
|
||||
"description": "",
|
||||
"attributes": {
|
||||
"pathParameterHandling": "as-parameters",
|
||||
"triggerAsmIruleEvent": "disabled",
|
||||
"inspectHttpUploads": false,
|
||||
"maskCreditCardNumbersInRequest": true,
|
||||
"maximumHttpHeaderLength": "8192",
|
||||
"useDynamicSessionIdInUrl": false,
|
||||
"maximumCookieHeaderLength": "8192"
|
||||
},
|
||||
"partition": "Common",
|
||||
"webScrapingReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/web-scraping?ver=12.1.2"
|
||||
},
|
||||
"csrfProtectionReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/csrf-protection?ver=12.1.2"
|
||||
},
|
||||
"customXffHeaders": [],
|
||||
"kind": "tm:asm:policies:policystate",
|
||||
"virtualServers": [],
|
||||
"ipIntelligenceReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/ip-intelligence?ver=12.1.2"
|
||||
},
|
||||
"protocolIndependent": false,
|
||||
"sessionAwarenessSettingsReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/session-tracking?ver=12.1.2"
|
||||
},
|
||||
"signatureSetReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/signature-sets?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"parameterReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/parameters?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"allowedResponseCodes": [
|
||||
400,
|
||||
401,
|
||||
404,
|
||||
407,
|
||||
417,
|
||||
503
|
||||
],
|
||||
"applicationLanguage": "utf-8",
|
||||
"enforcementMode": "transparent",
|
||||
"loginEnforcementReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/login-enforcement?ver=12.1.2"
|
||||
},
|
||||
"navigationParameterReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/navigation-parameters?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"gwtProfileReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/gwt-profiles?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"whitelistIpReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/whitelist-ips?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"historyRevisionReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/history-revisions?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"policyBuilderReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/policy-builder?ver=12.1.2"
|
||||
},
|
||||
"responsePageReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/response-pages?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"vulnerabilityAssessmentReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/vulnerability-assessment?ver=12.1.2"
|
||||
},
|
||||
"blockingSettingReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/blocking-settings?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"cookieReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/cookies?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"hostNameReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/host-names?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"versionDeviceName": "ltm4restlab.lab.local",
|
||||
"selfLink": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw?ver=12.1.2",
|
||||
"signatureReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/signatures?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"filetypeReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/filetypes?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"id": "0EHlYeS5noAOZLY3YsJjEw",
|
||||
"manualVirtualServers": [],
|
||||
"modifierName": "",
|
||||
"versionDatetime": "2017-04-11T08:05:22Z",
|
||||
"subPath": "/Common",
|
||||
"sessionTrackingStatusReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/session-tracking-statuses?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"active": false,
|
||||
"auditLogReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/audit-logs?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"trustXff": false,
|
||||
"websocketUrlReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/websocket-urls?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"xmlProfileReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/xml-profiles?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"methodReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/methods?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"redirectionProtectionReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/redirection-protection?ver=12.1.2"
|
||||
},
|
||||
"vulnerabilityReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/vulnerabilities?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"creatorName": "SYSTEM",
|
||||
"urlReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/urls?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"headerReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/headers?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"xmlValidationFileReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/xml-validation-files?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"lastUpdateMicros": 0,
|
||||
"jsonProfileReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/json-profiles?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"bruteForceAttackPreventionReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/brute-force-attack-preventions?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"extractionReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/extractions?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"characterSetReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/character-sets?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"isModified": false,
|
||||
"suggestionReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/suggestions?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"sensitiveParameterReference": {
|
||||
"link": "https://localhost/mgmt/tm/asm/policies/0EHlYeS5noAOZLY3YsJjEw/sensitive-parameters?ver=12.1.2",
|
||||
"isSubCollection": true
|
||||
},
|
||||
"versionPolicyName": "/Common/fake_policy"
|
||||
}
|
600
test/units/modules/network/f5/test_bigip_asm_policy.py
Normal file
600
test/units/modules/network/f5/test_bigip_asm_policy.py
Normal file
|
@ -0,0 +1,600 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (c) 2017 F5 Networks Inc.
|
||||
# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import os
|
||||
import json
|
||||
import pytest
|
||||
import sys
|
||||
|
||||
from nose.plugins.skip import SkipTest
|
||||
if sys.version_info < (2, 7):
|
||||
raise SkipTest("F5 Ansible modules require Python >= 2.7")
|
||||
|
||||
from ansible.compat.tests import unittest
|
||||
from ansible.compat.tests.mock import patch, Mock, PropertyMock
|
||||
from ansible.module_utils import basic
|
||||
from ansible.module_utils._text import to_bytes
|
||||
from ansible.module_utils.f5_utils import AnsibleF5Client
|
||||
from ansible.module_utils.f5_utils import F5ModuleError
|
||||
|
||||
try:
|
||||
from library.bigip_asm_policy import V1Parameters
|
||||
from library.bigip_asm_policy import V2Parameters
|
||||
from library.bigip_asm_policy import ModuleManager
|
||||
from library.bigip_asm_policy import V1Manager
|
||||
from library.bigip_asm_policy import V2Manager
|
||||
from library.bigip_asm_policy import ArgumentSpec
|
||||
from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError
|
||||
except ImportError:
|
||||
try:
|
||||
from ansible.modules.network.f5.bigip_asm_policy import V1Parameters
|
||||
from ansible.modules.network.f5.bigip_asm_policy import V2Parameters
|
||||
from ansible.modules.network.f5.bigip_asm_policy import ModuleManager
|
||||
from ansible.modules.network.f5.bigip_asm_policy import V1Manager
|
||||
from ansible.modules.network.f5.bigip_asm_policy import V2Manager
|
||||
from ansible.modules.network.f5.bigip_asm_policy import ArgumentSpec
|
||||
from ansible.module_utils.f5_utils import iControlUnexpectedHTTPError
|
||||
except ImportError:
|
||||
raise SkipTest("F5 Ansible modules require the f5-sdk Python library")
|
||||
|
||||
fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures')
|
||||
fixture_data = {}
|
||||
|
||||
|
||||
def set_module_args(args):
|
||||
args = json.dumps({'ANSIBLE_MODULE_ARGS': args})
|
||||
basic._ANSIBLE_ARGS = to_bytes(args)
|
||||
|
||||
|
||||
def load_fixture(name):
|
||||
path = os.path.join(fixture_path, name)
|
||||
with open(path) as f:
|
||||
data = f.read()
|
||||
try:
|
||||
data = json.loads(data)
|
||||
except Exception:
|
||||
pass
|
||||
return data
|
||||
|
||||
|
||||
class TestParameters(unittest.TestCase):
|
||||
def test_module_parameters(self):
|
||||
args = dict(
|
||||
name='fake_policy',
|
||||
state='present',
|
||||
file='/var/fake/fake.xml'
|
||||
)
|
||||
|
||||
p = V1Parameters(args)
|
||||
assert p.name == 'fake_policy'
|
||||
assert p.state == 'present'
|
||||
assert p.file == '/var/fake/fake.xml'
|
||||
|
||||
def test_module_parameters_template(self):
|
||||
args = dict(
|
||||
name='fake_policy',
|
||||
state='present',
|
||||
template='LotusDomino 6.5 (http)'
|
||||
)
|
||||
|
||||
p = V1Parameters(args)
|
||||
assert p.name == 'fake_policy'
|
||||
assert p.state == 'present'
|
||||
assert p.template == 'POLICY_TEMPLATE_LOTUSDOMINO_6_5_HTTP'
|
||||
|
||||
|
||||
@patch('ansible.module_utils.f5_utils.AnsibleF5Client._get_mgmt_root',
|
||||
return_value=True)
|
||||
class TestManager(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.spec = ArgumentSpec()
|
||||
self.policy = os.path.join(fixture_path, 'fake_policy.xml')
|
||||
|
||||
def test_activate_import_from_file(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
file=self.policy,
|
||||
state='present',
|
||||
active='yes',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
current = V1Parameters(load_fixture('load_asm_policy_inactive.json'))
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=False)
|
||||
v1.import_to_device = Mock(return_value=True)
|
||||
v1.wait_for_task = Mock(side_effect=[True, True])
|
||||
v1.read_current_from_device = Mock(return_value=current)
|
||||
v1.apply_on_device = Mock(return_value=True)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
results = mm.exec_module()
|
||||
|
||||
assert results['changed'] is True
|
||||
assert results['name'] == 'fake_policy'
|
||||
assert results['file'] == self.policy
|
||||
assert results['active'] is True
|
||||
|
||||
def test_activate_import_from_template(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
template='OWA Exchange 2007 (https)',
|
||||
state='present',
|
||||
active='yes',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
current = V1Parameters(load_fixture('load_asm_policy_inactive.json'))
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=False)
|
||||
v1.import_to_device = Mock(return_value=True)
|
||||
v1.wait_for_task = Mock(side_effect=[True, True])
|
||||
v1.read_current_from_device = Mock(return_value=current)
|
||||
v1.apply_on_device = Mock(return_value=True)
|
||||
v1.create_from_template_on_device = Mock(return_value=True)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
results = mm.exec_module()
|
||||
|
||||
assert results['changed'] is True
|
||||
assert results['name'] == 'fake_policy'
|
||||
assert results['template'] == 'OWA Exchange 2007 (https)'
|
||||
assert results['active'] is True
|
||||
|
||||
def test_activate_create_by_name(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
state='present',
|
||||
active='yes',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
current = V1Parameters(load_fixture('load_asm_policy_inactive.json'))
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=False)
|
||||
v1.import_to_device = Mock(return_value=True)
|
||||
v1.wait_for_task = Mock(side_effect=[True, True])
|
||||
v1.create_on_device = Mock(return_value=True)
|
||||
v1.create_blank = Mock(return_value=True)
|
||||
v1.read_current_from_device = Mock(return_value=current)
|
||||
v1.apply_on_device = Mock(return_value=True)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
results = mm.exec_module()
|
||||
|
||||
assert results['changed'] is True
|
||||
assert results['name'] == 'fake_policy'
|
||||
assert results['active'] is True
|
||||
|
||||
def test_activate_policy_exists_inactive(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
state='present',
|
||||
active='yes',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
current = V1Parameters(load_fixture('load_asm_policy_inactive.json'))
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=True)
|
||||
v1.update_on_device = Mock(return_value=True)
|
||||
v1.wait_for_task = Mock(side_effect=[True, True])
|
||||
v1.read_current_from_device = Mock(return_value=current)
|
||||
v1.apply_on_device = Mock(return_value=True)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
results = mm.exec_module()
|
||||
|
||||
assert results['changed'] is True
|
||||
assert results['active'] is True
|
||||
|
||||
def test_activate_policy_exists_active(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
state='present',
|
||||
active='yes',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
current = V1Parameters(load_fixture('load_asm_policy_active.json'))
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=True)
|
||||
v1.read_current_from_device = Mock(return_value=current)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
results = mm.exec_module()
|
||||
|
||||
assert results['changed'] is False
|
||||
|
||||
def test_deactivate_policy_exists_active(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
state='present',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
active='no'
|
||||
))
|
||||
|
||||
current = V1Parameters(load_fixture('load_asm_policy_active.json'))
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=True)
|
||||
v1.read_current_from_device = Mock(return_value=current)
|
||||
v1.update_on_device = Mock(return_value=True)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
results = mm.exec_module()
|
||||
|
||||
assert results['changed'] is True
|
||||
assert results['active'] is False
|
||||
|
||||
def test_deactivate_policy_exists_inactive(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
state='present',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
active='no'
|
||||
))
|
||||
|
||||
current = V1Parameters(load_fixture('load_asm_policy_inactive.json'))
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=True)
|
||||
v1.read_current_from_device = Mock(return_value=current)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
results = mm.exec_module()
|
||||
|
||||
assert results['changed'] is False
|
||||
|
||||
def test_import_from_file(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
file=self.policy,
|
||||
state='present',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
current = V1Parameters(load_fixture('load_asm_policy_inactive.json'))
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=False)
|
||||
v1.import_to_device = Mock(return_value=True)
|
||||
v1.wait_for_task = Mock(side_effect=[True, True])
|
||||
v1.read_current_from_device = Mock(return_value=current)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
results = mm.exec_module()
|
||||
|
||||
assert results['changed'] is True
|
||||
assert results['name'] == 'fake_policy'
|
||||
assert results['file'] == self.policy
|
||||
assert results['active'] is False
|
||||
|
||||
def test_import_from_template(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
template='LotusDomino 6.5 (http)',
|
||||
state='present',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
current = V1Parameters(load_fixture('load_asm_policy_inactive.json'))
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=False)
|
||||
v1.create_from_template_on_device = Mock(return_value=True)
|
||||
v1.wait_for_task = Mock(side_effect=[True, True])
|
||||
v1.read_current_from_device = Mock(return_value=current)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
results = mm.exec_module()
|
||||
|
||||
assert results['changed'] is True
|
||||
assert results['name'] == 'fake_policy'
|
||||
assert results['template'] == 'LotusDomino 6.5 (http)'
|
||||
assert results['active'] is False
|
||||
|
||||
def test_create_by_name(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
state='present',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
current = V1Parameters(load_fixture('load_asm_policy_inactive.json'))
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=False)
|
||||
v1.import_to_device = Mock(return_value=True)
|
||||
v1.wait_for_task = Mock(side_effect=[True, True])
|
||||
v1.create_on_device = Mock(return_value=True)
|
||||
v1.create_blank = Mock(return_value=True)
|
||||
v1.read_current_from_device = Mock(return_value=current)
|
||||
v1.apply_on_device = Mock(return_value=True)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
results = mm.exec_module()
|
||||
|
||||
assert results['changed'] is True
|
||||
assert results['name'] == 'fake_policy'
|
||||
assert results['active'] is False
|
||||
|
||||
def test_delete_policy(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
state='absent',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(side_effect=[True, False])
|
||||
v1.remove_from_device = Mock(return_value=True)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
results = mm.exec_module()
|
||||
|
||||
assert results['changed'] is True
|
||||
|
||||
def test_policy_import_raises(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
file=self.policy,
|
||||
state='present',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
msg = 'Import policy task failed.'
|
||||
# Override methods to force specific logic in the module to happen
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=False)
|
||||
v1.import_to_device = Mock(return_value=True)
|
||||
v1.wait_for_task = Mock(return_value=False)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
with pytest.raises(F5ModuleError) as err:
|
||||
mm.exec_module()
|
||||
assert str(err.value) == msg
|
||||
|
||||
def test_activate_policy_raises(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
state='present',
|
||||
active='yes',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
current = V1Parameters(load_fixture('load_asm_policy_inactive.json'))
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
msg = 'Apply policy task failed.'
|
||||
# Override methods to force specific logic in the module to happen
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=True)
|
||||
v1.wait_for_task = Mock(return_value=False)
|
||||
v1.update_on_device = Mock(return_value=True)
|
||||
v1.read_current_from_device = Mock(return_value=current)
|
||||
v1.apply_on_device = Mock(return_value=True)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
with pytest.raises(F5ModuleError) as err:
|
||||
mm.exec_module()
|
||||
assert str(err.value) == msg
|
||||
|
||||
def test_create_policy_raises(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
state='present',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
|
||||
msg = 'Failed to create ASM policy: fake_policy'
|
||||
# Override methods to force specific logic in the module to happen
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(return_value=False)
|
||||
v1.create_on_device = Mock(return_value=False)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
with pytest.raises(F5ModuleError) as err:
|
||||
mm.exec_module()
|
||||
assert str(err.value) == msg
|
||||
|
||||
def test_delete_policy_raises(self, *args):
|
||||
set_module_args(dict(
|
||||
name='fake_policy',
|
||||
state='absent',
|
||||
server='localhost',
|
||||
password='password',
|
||||
user='admin',
|
||||
))
|
||||
|
||||
client = AnsibleF5Client(
|
||||
argument_spec=self.spec.argument_spec,
|
||||
supports_check_mode=self.spec.supports_check_mode,
|
||||
f5_product_name=self.spec.f5_product_name
|
||||
)
|
||||
msg = 'Failed to delete ASM policy: fake_policy'
|
||||
# Override methods to force specific logic in the module to happen
|
||||
v1 = V1Manager(client)
|
||||
v1.exists = Mock(side_effect=[True, True])
|
||||
v1.remove_from_device = Mock(return_value=True)
|
||||
|
||||
# Override methods to force specific logic in the module to happen
|
||||
mm = ModuleManager(client)
|
||||
mm.version_is_less_than_13 = Mock(return_value=False)
|
||||
mm.get_manager = Mock(return_value=v1)
|
||||
|
||||
with pytest.raises(F5ModuleError) as err:
|
||||
mm.exec_module()
|
||||
assert str(err.value) == msg
|
Loading…
Add table
Add a link
Reference in a new issue