Skip to content

Commit 05e5da7

Browse files
committed
update
1 parent 1ed1e7b commit 05e5da7

10 files changed

+244
-13
lines changed

NAMESPACE

+3
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,11 @@ export(s3_list_objects)
4444
export(s3_put_object_acl)
4545
export(s3_upload_file)
4646
export(security_group_create)
47+
export(security_group_data)
4748
export(security_group_delete)
49+
export(security_group_envoke)
4850
export(security_group_list)
51+
export(security_group_revoke)
4952
export(sns_send_message)
5053
export(spark_master)
5154
export(spark_slave)

R/api.R

+8
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ api_instance_start <- function(user_token = user_token,
5555
key_name = NULL,
5656
image_id = 'ami-0fc20dd1da406780b',
5757
security_group_id = 'sg-0221bdbcdc66ac93c',
58+
security_group_name = NA,
5859
instance_storage = 50,
5960
to_json = TRUE) {
6061

@@ -81,6 +82,13 @@ api_instance_start <- function(user_token = user_token,
8182
sep = "\n")
8283
}
8384

85+
if(!is.na(security_group_name)) {
86+
security_group_id = filter(security_group_list(), group_name == security_group_name)$group_id
87+
if(length(security_group_id) == 0) {
88+
stop('Incorrect security group name given.')
89+
}
90+
}
91+
8492
resp <-
8593
ec2_instance_create(ImageId = image_id,
8694
InstanceType = instance_type,

R/security_group_create.R

+109-11
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
#' @importFrom dplyr filter
44
#' @importFrom dplyr pull
55
#' @param group_name Name of security group
6+
#' @param description
67
#' @export security_group_create
7-
security_group_create <- function(group_name = NA) {
8+
security_group_create <- function(group_name = NA, description = 'Add a description') {
89

910
resource <- resource_ec2()
1011
client <- client_ec2()
@@ -17,22 +18,119 @@ security_group_create <- function(group_name = NA) {
1718
GroupName=group_name,
1819
Description='for automated server'
1920
)
20-
21-
create_security$authorize_ingress(
22-
IpProtocol = "tcp",
23-
CidrIp = "0.0.0.0/0",
24-
FromPort = 0L,
25-
ToPort = 65535L
26-
)
21+
} else {
22+
security_group_id = security_group_df %>%
23+
filter(group_name == group_name) %>%
24+
pull(group_id)
25+
}
2726

2827
security_group_id <-
2928
create_security$id
3029

30+
security_group_id
31+
}
32+
33+
34+
#' security_group_create
35+
#' @importFrom purrr keep
36+
#' @importFrom dplyr filter
37+
#' @importFrom dplyr pull
38+
#' @param group_name Name of security group
39+
#' @param ports Name of security group
40+
#' @export security_group_revoke
41+
security_group_revoke <- function(sg_name = NA, ports = NULL, ips = NULL) {
42+
43+
resource <- resource_ec2()
44+
client <- client_ec2()
45+
46+
security_group_df <- security_group_list()
47+
security_group_id <- security_group_df %>%
48+
filter(group_name == sg_name) %>%
49+
pull(group_id)
50+
51+
52+
if(is.null(ips)) {
53+
54+
walk(
55+
ports,
56+
~ client$revoke_security_group_ingress(
57+
GroupName=sg_name,
58+
IpProtocol = "tcp",
59+
CidrIp = "0.0.0.0/0",
60+
FromPort = as.integer(.),
61+
ToPort = as.integer(.)
62+
)
63+
)
64+
} else {
65+
66+
grid <- expand.grid(ports, ips) %>% mutate(id = row_number())
67+
colnames(grid) = c('port', 'ip', 'id')
68+
grid %>%
69+
split(.$id) %>%
70+
walk(
71+
function(x) {
72+
client$revoke_security_group_ingress(
73+
GroupName=sg_name,
74+
IpProtocol = "tcp",
75+
CidrIp = paste0(x$ip, "/32"),
76+
FromPort = as.integer(x$port),
77+
ToPort = as.integer(x$port)
78+
79+
)}
80+
)
81+
}
82+
83+
security_group_id
84+
}
85+
86+
87+
#' security_group_create
88+
#' @importFrom purrr keep
89+
#' @importFrom dplyr filter
90+
#' @importFrom dplyr pull
91+
#' @param sg_name Name of security group
92+
#' @param ports Name of security group
93+
#' @export security_group_envoke
94+
security_group_envoke <- function(sg_name = NA, ports = NULL, ips = NULL) {
95+
96+
resource <- resource_ec2()
97+
client <- client_ec2()
98+
99+
security_group_df <- security_group_list()
100+
security_group_id <- security_group_df %>%
101+
filter(group_name == sg_name) %>%
102+
pull(group_id)
103+
104+
message('Revoking')
105+
106+
security_group_revoke(sg_name, ports, ips)
107+
108+
if(is.null(ips)) {
109+
walk(
110+
ports,
111+
~ client$authorize_security_group_ingress(
112+
GroupName=sg_name,
113+
IpProtocol = "tcp",
114+
CidrIp = "0.0.0.0/0",
115+
FromPort = as.integer(.),
116+
ToPort = as.integer(.)
117+
)
118+
)
31119
} else {
32-
security_group_id = security_group_df %>%
33-
filter(group_name == group_name) %>%
34-
pull(group_id)
120+
grid <- expand.grid(ports, ips) %>% mutate(id = row_number())
121+
colnames(grid) = c('port', 'ip', 'id')
122+
grid %>%
123+
split(.$id) %>%
124+
walk(
125+
~ client$authorize_security_group_ingress(
126+
GroupName=sg_name,
127+
IpProtocol = "tcp",
128+
CidrIp = paste0(.$ip, "/32"),
129+
FromPort = as.integer(.$port),
130+
ToPort = as.integer(.$port)
131+
))
35132
}
36133

37134
security_group_id
38135
}
136+

R/security_group_list.R

+62
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,65 @@ security_group_list <- function() {
1717

1818
security_group_list
1919
}
20+
21+
#' security_group_list
22+
#' @importFrom purrr map_df
23+
#' @importFrom tibble tibble
24+
#' @export security_group_data
25+
security_group_data <- function() {
26+
resource <- resource_ec2()
27+
client <- client_ec2()
28+
29+
30+
response <- client$describe_security_groups()
31+
response <- response$SecurityGroups
32+
response <-
33+
response %>%
34+
map(
35+
function(sg) {
36+
dfs <-
37+
sg$IpPermissions %>%
38+
map(
39+
function(sg_id) {
40+
if(is.null(unlist(sg_id$IpRanges))) {
41+
return('')
42+
} else {
43+
44+
sg_tibble <- tibble(ip_ranges = unlist(sg_id$IpRanges))
45+
46+
if(is.null(sg_id$FromPort) & is.null(sg_id$ToPort)) {
47+
sg_tibble$from_port = 'Anywhere'
48+
sg_tibble$to_port = 'Anywhere'
49+
} else {
50+
sg_tibble$from_port = sg_id$FromPort
51+
sg_tibble$to_port = sg_id$ToPort
52+
}
53+
54+
sg_tibble %>%
55+
mutate_all(as.character)
56+
57+
}
58+
}
59+
) %>%
60+
keep(is.data.frame)
61+
62+
if(length(dfs) > 0) {
63+
dfs <- bind_rows(dfs)
64+
dfs$group_name = sg$GroupName
65+
dfs$group_id = sg$GroupId
66+
}
67+
68+
dfs
69+
}
70+
)
71+
72+
response <-
73+
response %>%
74+
keep(
75+
~ length(.) > 0
76+
) %>%
77+
bind_rows
78+
79+
response
80+
}
81+

man/security_group_create.Rd

+3-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/security_group_data.Rd

+11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/security_group_envoke.Rd

+16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/security_group_revoke.Rd

+16
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ndexr/api/plumber.R

+5-1
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ function(req, res,
115115
image_id = 'ami-0fc20dd1da406780b',
116116
security_group_id = 'sg-0221bdbcdc66ac93c',
117117
instance_storage = 50,
118+
security_group_name = 'testr',
118119
to_json = TRUE) {
119120

120121
message(glue('Within create_instance {Sys.time()}'))
@@ -128,8 +129,10 @@ function(req, res,
128129
args = list(
129130
instance_type = instance_type,
130131
key_name = key_name,
132+
image_id = image_id,
133+
security_group_id = security_group_id,
131134
instance_storage = instance_storage,
132-
image_id = image_id
135+
security_group_name = security_group_name
133136
),
134137
runtime = 0
135138
)
@@ -153,6 +156,7 @@ function(req, res,
153156
instance_type = instance_type,
154157
key_name = key_name,
155158
instance_storage = instance_storage,
159+
security_group_name = security_group_name,
156160
image_id = image_id
157161
)
158162
timer <- toc(quiet = T)

ndexr/startup.sh

+11
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,17 @@ sudo apt-get install libxml2-dev -y
3232

3333
sudo apt-get install gdebi-core -y
3434

35+
sudo apt-get install nodejs -y
36+
sudo apt-get install npm -y
37+
38+
echo 'ssh-keygen -t rsa -b 4096' >> run_to_create_keygen
39+
echo 'cat .ssh/id_rsa.pub' >> run_to_create_keygen
40+
41+
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
42+
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
43+
sudo apt update
44+
sudo apt install yarn
45+
3546
# Install RSTUDIO SERVER
3647
wget https://download2.rstudio.org/server/trusty/amd64/rstudio-server-1.2.5033-amd64.deb
3748
yes | sudo gdebi rstudio-server-1.2.5033-amd64.deb

0 commit comments

Comments
 (0)