Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -244,3 +244,75 @@ Add a task and look at the POST parameters. You don't have to specify all of the
myproj_plan_keys = filter(lambda s: re.match(project,s) != None, plan_keys)
print 'PLAN KEYS IN PROJECT %s = %s' % (project, myproj_plan_keys)



#######################################################
#### Create Connection Either use username and password

logging.basicConfig(level=logging.DEBUG)
host='http://localhost:6990'
user_name='admin'
user_pwd='admin'
conn = authenticate(host, user_name, user_pwd)



#### enable/disable plans and jobs
plan_id = 'SWRD-CM'
disable_plan(conn, plan_id)
enable_plan(conn, plan_id)

job_id = 'SWRD-CM-JOB2'
disable_job(conn, job_id)
enable_job(conn, job_id)


#### add a new job to each plan
plan_id = 'SWRD-CM'
job_name = 'job6'
job_description = 'job6_description'
res = add_one_job(conn, plan_id, job_name, job_description)


#### Modify environment variables for each job
job_id = 'SWRD-CM-JOB4'
task_id = 2
environment_variables = "JAVA_OPTS=\"-Xmx256m -Xms128m\""
res = update_environment_variables(conn, job_id, task_id, environment_variables)



#### Add a repository to each job
job_id = 'SWRD-CM-JOB01'
task_id = 1
repository_id = "2343563"
checkout_dir = "community/poky12"
res = add_repository(conn, job_id, task_id, repository_id, checkout_dir)



#### Modify permissions on each job
plan_id = 'SWRD-CM'
#usertype, username, permissiontype, value
change_plan_permission(conn, plan_id, ('user', 'username', 'clone', False))


#### Add a task about "script" type
job_id = "DNSWRD-CIM-JOB5"
task_description = "1234"
is_task_disabled = False
is_run_with_power_shell = True
script_location = "INLINE"
script = "pwd"
argument = ""
environment_variables = ""
working_sub_directory = ""
add_job_task_script(conn, job_id, is_task_disabled, is_run_with_power_shell, task_description, script_location, script,
argument, environment_variables, working_sub_directory)


#### Add agents to each job
job_id="DNSWRD-CIM-JOB11"
req_key="agent.name"
req_value="agent"
res=add_job_requirement(conn, job_id, req_key, req_value)
176 changes: 117 additions & 59 deletions lib/bamboo/jobs.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,63 +3,121 @@

from collections import OrderedDict


def get_jobs(conn, plan_id, sort_by_title=False):
params = {
"buildKey": plan_id
}
res = requests.get_ui_return_html(
conn,
conn.baseurl+'/chain/admin/config/editChainDetails.action',
params)

root = res #.getroot()

jobs = OrderedDict()

li_jobkeys = root.findall('.//li[@data-job-key]')
for li in li_jobkeys:
key = li.attrib['data-job-key']
edit_link = li.find('.//a').attrib['href']
del_link = None
title = li.find('.//a').text
description = None
try:
description = li.attrib['title']
except:
pass

if sort_by_title:
jobs[title] = (key, description, edit_link, del_link,)
else:
jobs[key] = (title, description, edit_link, del_link,)

return jobs

def disable_job(conn, job_id, job_title):
params = {
"buildKey": job_id,
"buildName": job_title,
"checkBoxFields": "enabled",
"save": "Save"
}
res = requests.get_ui_return_html(
conn,
conn.baseurl+'/build/admin/edit/updateBuildDetails.action',
params)

return res

def enable_job(conn, job_id, job_title):
params = {
"buildKey": job_id,
"buildName": job_title,
"checkBoxFields": "enabled",
"enabled": "true",
"save": "Save"
}
res = requests.get_ui_return_html(
conn,
conn.baseurl+'/build/admin/edit/updateBuildDetails.action',
params)

return res;
params = {
"buildKey": plan_id
}
res = requests.get_ui_return_html(
conn,
conn.baseurl + '/chain/admin/config/editChainDetails.action',
params)

root = res # .getroot()

jobs = OrderedDict()

li_jobkeys = root.findall('.//li[@data-job-key]')
for li in li_jobkeys:
key = li.attrib['data-job-key']
edit_link = li.find('.//a').attrib['href']
del_link = None
title = li.find('.//a').text
description = None
try:
description = li.attrib['title']
except:
pass

if sort_by_title:
jobs[title] = (key, description, edit_link, del_link,)
else:
jobs[key] = (title, description, edit_link, del_link,)

return jobs


def get_job_params(conn, job_id):
params = {
"buildKey": job_id
}

res = requests.get_ui_return_html(
conn,
conn.baseurl + '/build/admin/edit/editBuildDetails.action',
params)
html_root = res
job_params = OrderedDict()
form = html_root.find('.//form[@id="updateBuildDetails"]')
li_inputs = form.findall('.//input')
for input in li_inputs:
name = input.attrib.get('name')
type = input.attrib.get('type')
if type == "checkbox":
is_checked = input.attrib.get('checked')
if is_checked and is_checked == "checked":
value = "true"
else:
value = "false"
else:
value = input.attrib.get('value')
job_params[name] = value

return job_params


def disable_job(conn, job_id):
job_params = get_job_params(conn, job_id)
params = {
"buildKey": job_params.get('buildKey'),
"buildName": job_params.get('buildName'),
'buildDescription': job_params.get('buildDescription'),
"checkBoxFields": "enabled",
"save": "Save"
}

res = requests.get_ui_return_html(
conn,
conn.baseurl + '/build/admin/edit/updateBuildDetails.action',
params)

return res


def enable_job(conn, job_id):
job_params = get_job_params(conn, job_id)
params = {
"buildKey": job_params.get('buildKey'),
"buildName": job_params.get('buildName'),
'buildDescription': job_params.get('buildDescription'),
"checkBoxFields": "enabled",
"enabled": "true",
"save": "Save"
}
res = requests.get_ui_return_html(
conn,
conn.baseurl + '/build/admin/edit/updateBuildDetails.action',
params)

return res


def add_one_job(conn, plan_id, job_name, job_description, is_enabled=True, job_key=None):
params = {
"bamboo.successReturnMode": "json",
"buildKey": plan_id,
"buildName": job_name,
"subBuildKey": job_key.upper() if job_key else job_name.upper(),
"buildDescription": job_description,
"existingStage": "Default Stage",
"checkBoxFields": "tmp.createAsEnabled",
"tmp.createAsEnabled": "true" if is_enabled else "false",
"save": "Create job"
}

res = requests.post_ui_return_json(
conn,
conn.baseurl + '/chain/admin/createJob.action',
params)

return res
13 changes: 8 additions & 5 deletions lib/bamboo/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ def _check_permission(html_root, usertype, username, permission):
username = 'ROLE_USER'
elif username == 'Anonymous Users':
username = 'ROLE_ANONYMOUS'
permission_input_field_name = 'bambooPermission_'+usertype+'_'+username+'_'+permission.upper()
permission_cell_name = permission_input_field_name+'_cell'
permission_xpath = './/td[@id="'+permission_cell_name+'"]/input[@name="'+permission_input_field_name+'"]'
permission_input_field_name = 'bambooPermission_'+usertype+'_'+username+'_'+permission.upper()#bambooPermission_user_B19537_READ
#permission_cell_name = permission_input_field_name+'_cell'
permission_xpath = './/input[@name="'+permission_input_field_name+'"]'
logging.debug('xpath to search for permission checkbox = %s' % permission_xpath)
el = html_root.find(permission_xpath)
if el == None:
Expand Down Expand Up @@ -69,16 +69,19 @@ def get_plan_permissions(conn, plan_id):


def mod_plan_permissions(conn, plan_id, permission_params):

params = {
"bamboo.successReturnMode": "json",
"buildKey": plan_id,
"newGroup": None,
"newUser": None,
"principalType": "User",
"save": "Save",
"selectFields": "principalType"
"selectFields": "principalType",

}
params.update(permission_params)
res = requests.post_ui_return_html(
res = requests.post_ui_return_json(
conn,
conn.baseurl+'/chain/admin/config/updateChainPermissions.action',
params)
Expand Down
Loading